Совместная разработка Software + HDL: вроде все вытанцовывается. http://upload.caxapa.ru/Visio-cosimulating.pdf
http://upload.caxa …Visio-cosimulating.pdf - Картинки к тексту.
Давно меня мучает эта задача. Вроде что-то в голове прояснилось.
Нужно разработать FPGA сопроцессор для embedded системы. Дабы тяжелые DSP алгоритмы жили там, а все остальное - в контроллере.
С точки зрения проца, FPGA - это некий struct fpga_data, да прерывания.
Пишем чисто софтовый симулятор FPGA. На С. Главный FPGA_Main_Task, и подчиненные задачи для симуляции одновременно работающих блоков. Синхронизация всех FPGA процессов - средствами RTOS. При изменений данных в fpga_data FPGA_Main_Task и подчиненные задачи не отдают управление, пока не отработают все процессы внутри себя.
FPGA_Main_Task вызывает эмулятор прерывания для сигнализации процессам RTOS.
FPGA драйвер - это кучка макросов и функций. В реальности они будут что-то писать и читать по заданным адресам памяти. В симуляторе они будут вызывать точки входа FPGA_Main_Task.
На этом этапе хорошо продумывается структура FPGA, какими данными обмениваются блоки внутри и пр. Также продумывается разбиение между софтом и хардом.
Одноврменно пишется test suite для нашей FPGA.
После завершения этого этапа С код выступает в качестве ТЗ для написания HDL кода. Конечно, есть всякие там автоматические трансляторы C->HDL, но я в них как-то не верю.
Запускаем код на симуляторе (ModelSim, например), и каким-либо образом вытаскиваем "наружу" интерефейс из симулятора (Sockets посредством TCL, VHDL File IO через memory mapped files, еще как-нибудь - что-то да найдется. Я знаю про Verilog PLI, просто хочется все сделать максимально простыми средствами, в рамках Xilinx Webpack, например). Посредством этого интерефейса подключаем HDL код к нашему софту, прогоняем test suite и целевое приложение.
Симулятор - это хорошо, но железо - лучше :). Запускаем HDL код на реальной железяке, с которой взаимодействуем посредством какого-нибудь канала связи. Пусть у нас не будет реальной скорости, но логику отработаем точно.
Далее тесты целиком на готовой системе.
Что мы имеем в итоге:
1. В начала разработки у нас только native host compiler со всем тулчейном и нифига более. Все предельно просто и ничего не мешается.
2. Хорош продумываем структуру FPGA. Для этого вначале вообще все симулим в Matlab (тут срабатывает та же самая симуляция, которая была описана выше), затем делаем то же самое на C. Хооршо продумываем разделение между железом и софтом.
3. Пишем test suite одновременно с разработкой модели FPGA.
4. После завершения разработки C кода он отдается HDL человеку для написания HDL кода. При этом человек имеет готовый test suite, и четко определенный интерфейс с внешним миром нашей FPGA. Хорошее разделение труда. Например, я пишу основной С код, и умею настроить и запустить симулятор HDL. Чел возится с кодом, затем пересылает его мне. Я запускаю симулятор, подключаю код, как описано выше, смотрю, что получилось. Постепенно обучаем друг друга: я учу чела поднимать софтовый симулятор (при этом он не парится тонкостями ОСи), я что-то поверхностно узнаю по HDL. Каждый при желении можут углубить свои познания до бесконечности.
5. Отладка на готовом железе происходит с минимумом софта на самом железе. Это дает массу плюсов:
* сборка и запуск проекта на host машине всегда быстрее и проще
* target не нужно перезагружать при пересборке проекта на машине (если только target не повиснет от глюков)
* на хосте всегда под рукой куча инструментальных средств, тут и спорить не о чем.
6. Врде как все HDL можно сделать средствами Xilinx WebPack ISE. Я конечно понимаю, что на electronix все есть :), но на случай всякий надо готовиться к худшим вариантам.
Вопросы:
* может где ошибка в рассуждениях закралась?
* как все-таки из ModelSim вытащить наружу какой интерфейс? Может, там уже все готовое есть? Sockets было бы просто замечательно.
========= Предыдущие посты по тематике ===============
Dream Platform II: недостающая часть мозаики (с картинками)
http://caxapa.ru/65177.html
http://electronix. …ex.php?showtopic=19870
Дополнение про Dream Platform II
http://caxapa.ru/65704.html
http://electronix. …view=findpost&p=146180
Dream Platform: "$8, которые изменили мир"
http://caxapa.ru/65085.html
http://electronix. …ex.php?showtopic=19858