реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите с архитектурой системы.
count_enable
сообщение Dec 4 2013, 09:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Платформа 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.

Посоветуйте как сделать это максимально просто, пожалуйста.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Dec 4 2013, 11:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Если диапазон значения входных слов действительно не велико (как Вы указали 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.


Go to the top of the page
 
+Quote Post
Maverick
сообщение Dec 4 2013, 11:54
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(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)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
count_enable
сообщение Dec 4 2013, 11:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



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

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

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

Сообщение отредактировал count_enable - Dec 4 2013, 12:00
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Dec 4 2013, 13:00
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!


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

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

Успехов! Rob.





Go to the top of the page
 
+Quote Post
count_enable
сообщение Dec 5 2013, 11:49
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Быстрый вопрос: пытаюсь сгенерировать систему с 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.

Сообщение отредактировал count_enable - Dec 5 2013, 11:59
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.03828 секунд с 7
ELECTRONIX ©2004-2016