Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с архитектурой системы.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
count_enable
Платформа Spartan 6 SLX45T. Есть 1Гбит DDR3.
Есть до 4 быстрых приёмопередатчиков (FTCR), выдающих до 2М 32-битных слов в секунду, и еще до 4 медленных приёмопередатчиков (STCR), генерирующих до 100К 32-битных слов в секунду. Каждое слово это адрес в линейном пространстве, т.е. интерфейс 1 выдает слова с диапазона 00000000..0000FFFF, второй слова в диапазоне 00010000..0001FFFF и так далее. Нужен роутинг, типа "Слово А с интерфейса 1 на интерфейс 3 как слово Б и интерфейс 5 как слово В". Таблица роутинга большая и динамическая. Планируется размещение ее в DDR3 и обновление этой таблицы "на лету" через USB и в перспективе через Gigabit Ethernet. Мне решение видится как роутер с интерфейсом AXI-Stream, подключенный через AXI-DMA и Microblaze для приёма данных с этернета и юсб и обновления таблицы (плюс некоторое дополнительное управление роутером, которое всегда будет нужно). Насколько сложен такой дизайн? C DMA и stream-интерфейсами не работал ни разу.
Как вариант рассматриваю еще 2 решения: полностью софтовый роутер, когда все приёмопередатчики подключены к Microblaze и он делает роутинг, но не знаю хватит ли скорости - данные должны лететь в реальном времени.
Или же делать двухпортовой враппер на DDR3 controller из CoreGenerator и подключать хардварный роутер и процессор к нему. В таком случае усложняется запись в память, уже нельзя просто задать массив в RAM и писать в него. К тому же мне кажется что низкоуровневая работа с DDR3 куда более сложна, чем использование EDK.

Посоветуйте как сделать это максимально просто, пожалуйста.
RobFPGA
Приветствую!

Если диапазон значения входных слов действительно не велико (как Вы указали 00000000..0000FFFF)
то самое простое решение это N прямых таблиц - в данном случае для каждого канала Ri * No * Woт
Ri -диапазон входных слов в канале i
No -число каналов куда надо роутить выход
Wo -разрядность слова выхода

Приходит слово в канал - вычитываете из памяти строку таблицы i в No слов - каждое слово - для соответствующего выходного канала.

При ваших параметрах - это всего будет 8 таблиц по 65К*8 слов = 16 MByte и ~10М запросов/сек -> ~320МByte/s скорости доступа на чтение. При доступной 128MByte памяти можно делать несколько таблиц обновлять их в фоне и атомарно переключать. Для чтения даже DMA не нужен будет - только простой AXI4 мастер.

А обновлять таблицы можно и нужно системой на Microblaze.

А вот если диапазон входных значений велик да если еще и не линеен - то тут придется лепить полноценный поиск по разреженной таблице с хешированием, разруливанием коллизий, блекджеком и шлюх... sm.gif

Успехов! Rob.


Maverick
Цитата(count_enable @ Dec 4 2013, 11:54) *
Платформа Spartan 6 SLX45T. Есть 1Гбит DDR3.
Есть до 4 быстрых приёмопередатчиков (FTCR), выдающих до 2М 32-битных слов в секунду, и еще до 4 медленных приёмопередатчиков (STCR), генерирующих до 100К 32-битных слов в секунду. Каждое слово это адрес в линейном пространстве, т.е. интерфейс 1 выдает слова с диапазона 00000000..0000FFFF, второй слова в диапазоне 00010000..0001FFFF и так далее. Нужен роутинг, типа "Слово А с интерфейса 1 на интерфейс 3 как слово Б и интерфейс 5 как слово В". Таблица роутинга большая и динамическая. Планируется размещение ее в DDR3 и обновление этой таблицы "на лету" через USB и в перспективе через Gigabit Ethernet. Мне решение видится как роутер с интерфейсом AXI-Stream, подключенный через AXI-DMA и Microblaze для приёма данных с этернета и юсб и обновления таблицы (плюс некоторое дополнительное управление роутером, которое всегда будет нужно). Насколько сложен такой дизайн? C DMA и stream-интерфейсами не работал ни разу.
Как вариант рассматриваю еще 2 решения: полностью софтовый роутер, когда все приёмопередатчики подключены к Microblaze и он делает роутинг, но не знаю хватит ли скорости - данные должны лететь в реальном времени.
Или же делать двухпортовой враппер на DDR3 controller из CoreGenerator и подключать хардварный роутер и процессор к нему. В таком случае усложняется запись в память, уже нельзя просто задать массив в RAM и писать в него. К тому же мне кажется что низкоуровневая работа с DDR3 куда более сложна, чем использование EDK.

Посоветуйте как сделать это максимально просто, пожалуйста.

если думать про софтовый роутинг, то может стоит подумать о применении ПЛИС со встроенным ARM9 (семейство ZYNQ)
count_enable
Нет, слава Богу CAM не будет - все диапазоны от..до и линейны.
Пожалуйста обьясните подробнее за "AXI4 мастер": я так понял что предлагаете подключить на одну AXI4 AXI external memory controller c DDR3 как слейв, Microblaze как мастер и роутер как мастер? А арбитраж шины сгенерируется автоматически?

И тоже вопрос как роутер будет иметь доступ к памяти, будет ли 32-битный Read Address шины эквивалентен адресу в ДДР3, или надо пересчитывать адреса? Роутер только читает данные из памяти, микроблейз пишет и читает.

На Zynq пока переходить не получится, очень много работающих устройств на спартанах 6, с которыми нужна совместимость.
RobFPGA
Приветствую!


AXI master это FSM который выдает запросы на шину. (недавно вот обсуждали http://electronix.ru/forum/index.php?showt...116819&hl=)
Да правильно поняли - в Spartan hard контроллер DDR и уже имеет внутри арбитр нескольких портов AXI
поэтому просто цепляете router к одному свободному порту. Причем этот порт можно сконфигурирован только на чтение.

Обычно со стороны AXI шины адреса в DDR одинаковы для всех портов. В роутере Вам естественно надо будет для каждого канала нормировать диапазон входных значений и прибавлять заданный адрес для начала соответствующей таблицы.

Успехов! Rob.





count_enable
Быстрый вопрос: пытаюсь сгенерировать систему с DDR3 (Micron MT41J64M16), но получаю ошибку "The required frequencies can not be generated from the given clock input. Please refer to "clock_generator_0.log" file for details". У меня есть на плате только кварц 32 МГц, от него и пляшу. Значит ли это что DCM не может сгенерировать нужные частоты с таким кварцем и надо его менять?

Дополнительный вопрос: есть ли в умеренной цене платы на Spartan 6 со следующими хар-ками: максимально возможное число вводов-выводов на 2.54мм линейках пинов, минимум 3х GTP c разъемом SATA, хотя бы 1Гб DDR2- DDR3.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.