Платформа 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.
Посоветуйте как сделать это максимально просто, пожалуйста.