Перейти к содержанию
    

Wiznet + ARM + ПЛИС. Как связать?

Доброго всем дня! Подскажите пожалуйста в следующем вопросе. Имеется стек протоколов на базе чипа Wiznet 3150, он связан с процессором LPC2214 в режиме Direct посредством использования интерфейса внешней шины с использованием 8 разрядной шины данных. Так же в системе имеется ПЛИС ( CoolRunerXPLA3 на 512 макроячеек) -она реализует протокол обмена с остальными устройствами в системе и имеет подключения к шине данных ПРОЦЕССОР - СТЕК. Общая идея такова - данные из компьютера гонятся в стек, реализующий функции сетевого интерфейса, по двум каналам - один управляющий - для процессора, предназначен для приема команд, отдаваемых хостом непосредственно LPC2214 и управляющих процессом приема\передачи данных по второму каналу, второй канал - данные, которые должны загонятся в ПЛИС, и которые ПЛИС гонит дальше по протоколу, который она реализует . Требуется данные загонять в ПЛИС с как можно большей скоростью. Поэтому вопрос следующий - каким образом можно связать стек и ПЛИС, чтобы добится максимального быстродействия? У меня следующие варианты :

 

1) Возможно ли организовать обмен так , чтобы плис ловила посылки данных , передаваемые от стека к процессору? Поцессор начинал бы прием данных с выставления флага на одном из выводов , плис по этому флагу ловила бы посылки от стека. В функции процессора входило бы управление стеком и обработка флагов от плис (. Вопрос в том, как засинхронизировать работу плис и контроллера со стеком, чтобы плис ловила требуемые посылки....Либо задержки считать, либо по числу тактов... Как в таком случае можно посчитать количество тактов, необходимое для определенного куска кода....( работаю в IAR 4.40, есть ли там , как KEIL счетчик тактов? )

 

2) Буферизовать данные со стека в памяти процессора , а затем передавать их из процессора в плис.

Во первых , получается большая временная задержка : считывание из стека - запись в ОЗУ процессора - считывание из ОЗУ процессора - ПЛИС. Плюс постоянное переключение между стеком и плис.

Во вторых, не хотелось бы тратить ОЗУ процессора на реализацию больших буферов.

В третьих - придется тратить ресурсы ПЛИС на реализацию интерфейся памяти, чтобы обмениваться данными с процессором.

 

3) Вариант №1 , но буферизировать данные не в памяти процессора, а во внешней ОЗУ...

Здесь есть ряд вопросов - возможно ли перекопировать данные из памяти стека в память внешнего ОЗУ напрямую ? Например используя memcpy :

 

void *memcpy(void *s1, const void *s2, size_t n)

{

char *su1 = (char *)s1; // адрес памяти стека

const char *su2 = (const char *)s2; // адрес памяти внешнего ОЗУ

 

for (; 0 < n; ++su1, ++su2, --n)

{

 

*su1 = *su2;

 

}

return (s1);

}

 

Заранее спасибо за ответы!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Варианты 2 и 3 не очень согласуются с поставленной задачей. Буферизация в данном случае сильно ограничит пропускную способность и при наличии внутренней памяти визнета бессмысленна. В варианте 1 можно перевести ПЛИС в режим подслушки - проц будет задатчиком обмена (чтения данных в никуда) а ПЛИС будет эти данные синхронно перехватывать. В ПЛИС пойдет сигнал разрешения перехвата. Реализация работы с указателями будет в проце потому как в 3150 придется делать честный циклический буфер, в 3100 была возможность сбрасывать указатели. Но в этом случае ПЛИС должна брабатывать данные быстрее чтения их процом - или придется вводить такты ожидания.

Можно еще реализовать подобие ДМА - проц передает в ПЛИС начало буфера и размер а дальше ждет сигнала завершения обмена - но в отладке этот способ сложнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...