Для реализации описанной идеологии очень хорошо пойдет следующий "эмулятор всего". Небольшая платка. С краевым разъемом. В термоусадке - чтобы было компактно, и ничего не могло коротнуть [мы для отладочных, и даже для мелкосерийных плат часто так далаем, купили специально агроменную термоусадку - довольно удобно, если на презентабельность забить].
На плате:
* FPGA потолще
* SRAM 10 нс статика, что-то типа 512к х 32 или даже 1м х 32
* 2 порта 1000BASE-T
* можно miniUSB для отладки
В ПЛИС выделяем один или несколько портов, с выделенным питанием, для связи с целевым объектом. Чтобы порты питать прямо от самой целевой платы, а саму отладочную плату лучше питать отдельно.
В ПЛИС делаем аппаратную реализацию того интерфейса, который заложен в целевой плате. Например, PPI, если мы хотим эмулировать BF, или вообще шину процессора - если мы эмулируем процессор вместе со всей его прошивкой.
Делаем все разумно - DDR шины эмулировать не будем и пр.
В ПЛИС поднимаем софткор, или несколько. Они:
* управляют работой аппаратного интерфейса
* отсылают данные по UDP на хост машину
* принимают данные по UDP от хост машинуы
* передают данные в целевую платформу
Софткоры в иделе вообще живут на встроенной блочной памяти, а внешняя память для буферизации.
Софткоры тут будут идеальны по причине того, что можно сделать сколь угодно тесную связь с аппаратной реализацией целевого интерфейса. Вплоть до кастомных команд, которые будут напрямую управлять интерфейсом. Тут FPGA рулит однозначно.
В качестве ОЗУ я бы поставил такого монстра CY7C1062DV33-10BGI 25-$32.25 digikey.com. Дока приложена.
Не потому, что мне денег девать некуда, а чтобы не париться с DDR контроллерами и иметь минимальную латентность памяти.
Ethernet - либо софткоры, либо отдельный чип типа
http://caxapa.ru/316023.html. Я бы взял один софткор, и один чип - для тренировки.
В качестве ПЛИС я влял бы Альтеру по нескольким причинам.
* для такой платы важны удобство и скорость разработки, а не цена чипов. Тут Альтера на коне.
* NIOS-II и, в особенности, его шина Avalon очень хорошо задокументированы, имеют кучу тулзов и примеров. Шинный коммутаторы делаются автоматом - а они тут весьма пригодятся.
* Cyclone-III есть в корпусах PQFP-240. Можно сделать !BGA дизайн - если это по какой-то причине важно.
Например, EP3C40F484C6 IC CYCLONE III FPGA 40K 484FBGA I/O 331 1-$129.70. Много пинов, много ресурсов на кристалле. Самая быстрая версия чипа (поэтому и такая дорогая).
Теперь почему 2 * Ethernet. 1000BASE-T передает дуплексно по всем 4-м парам одновременно. В принципе можно обойтись одним.
http://en.wikipedi …it_Ethernet#1000BASE-T
Но обычно у контроллера 1 порт, и по нему надо прокачивать 200 Мбайт\сек, что есть не совсем тривиальная задача. Возможно, будет быстрее, если
через один контроллер передавать, а через другой принимать. Так 100 Мбайт/сек дуплекса точно будет.
Кстати, возможно софткор Ethernet будет с этой точки зрения правильнее - у него-то можно сделать "несколько портов".
Linux даст round trip UDP для гигабитного Ethernet 50-70 мкс. В приложенных бумагах приведены результаты тестов для довольно древнего железа и древних версий ядра, но расписано все подробно.
Про Win придется забыть, там будет 10+, только мс :)
Хотя сейчас будет пост, как и это можно побороть :)