Об отладке прототипа SoC
Собственный опыт и эпохи отладки железа
ПозаВчера
Более 10ти лет назад когда FPGA были недостаточно большими для одновременного размещения там достаточно жирного IP (ЦОС) и CPU, мы разработали кастомный комбайн для РоС в реальном окружении:
в FPGA загружалась IP-core цифрового радиотракта, шина обёртывалась во враппер для трансляции по ETH UDP, на хосте крутилась программа (“единая” для SoC и для хоста), которая “замыкала” петли в радиотракте, обращения программы в адресные пространства были тоже обёрнуты во враппер и транслировались на UDP. Для отлова “сложных” ситуаций можно было подключиться к симулятору, для которого на TCL был написан интерфейс к тому же UDP (что, докучи, позволяло гонять симулятор и хост-программу на разных тачках).
Вчера
Затем, с выходом Vivado и новых семейств, Xilinx сделала макро JTAG-to-AXI, позволяющий из того же TCL читать и писать по AXI. TCL конечно для такого кейса не ахти какой выбор, да еще и работающий из под джававского шелла самого вивадо, но всё ж не надо забывать что конь дарённый (хотя знаю компанию, которая такое решение поставляет клиентам - стыд и скрам).
Сегодня
Вот теперь новый виток, с помощью этой опенсорс-приблуды можно гигантские потоки по USB3.0 гонять в/из AXI (используется FTDI FT601 SuperSpeed USB3.0 для проброса в AXI4 Master). Реальная производительность:
✅ AXI-4 burst reads @ 170MB/s
✅ AXI-4 burst writes @ 230MB/s
Еще бы туда прикрутить AXI-stream опционально чтобы дампы прям с data-path снимать при дебаге наживую, но думаю это вопрос времени.
Завтра
Следующий этап - это когда к чипу для дебага две дифференциальные пары будут подключаться: а остальное USB3.x будет внутри ПЛИС на базе MGT-трансиверов реализовываться - такой проект уже W.I.P в опенсорсе. Просто представьте: для дебага на космической скорости вы просто добавляете на РСВ компактный USB-C. Всё!