Недавно я создал интерфейс между средой моделирования и хост-системой. Разные симуляторы hdl имеют разные интерфейсы, и заставить симулятор НЕ думать в пакетном режиме, традиционной модели симуляции, вместо этого, работать вечно, как реальный дизайн, это половина проблемы.
Затем с хоста, использующего C (или любой другой), вы можете создавать абстракции, которые могут или не могут позволить вам написать ваше прикладное программное обеспечение для какой-либо цели (в зависимости от того, какой у вас язык и возможности компилятора). Например, вы можете сделать универсальную функцию poke and peek, и на конечной цели они будут иметь фактически poke and peek memory или I / O, но для симуляции через абстракцию вы говорите с testbench в симуляции, которая симулирует тот же цикл памяти.
Я пошел еще дальше и использовал сокеты (Berkeley) между хостом и испытательным стендом, чтобы моделирование могло продолжаться, пока приложения хоста останавливаются и запускаются. В отличие от реального процессора с ОС, вы запускаете приложения, запускаете их до завершения и запускаете другую. По крайней мере, для тестовых приложений, для доставки у вас, вероятно, есть только одно приложение.
Создавая эти слои абстракции, я могу написать реальные приложения, которые будут использоваться на цели при ее создании. По пути вы можете сначала использовать программную симуляцию логики, затем, если вам нравится создавать fpga с интерфейсом абстракции (выбрасывать логику), скажем, например, uart. Замените прокладку между уровнем абстракции приложений и симулятором с интерфейсом uart или чем-то еще. Затем, когда вы объединяете процессор и логику в одном чипе или на одной плате, снова замените уровень абстракции прямыми вызовами к любым интерфейсам, которые у них всегда были, хотя они и говорили. Если что-то сломалось и вы сохранили уровень абстракции, вы можете вернуть приложение в имитационную модель и получить доступ ко всем внутренним элементам вашей логики.
В частности, на этот раз я использую cdl для циклического языка hdl, который находится на sourceforge, документация нуждается в некоторой помощи, но примеры могут помочь вам в работе, и она генерирует синтезируемый verilog, так что вы получите дополнительный выигрыш. Я выбросил весь пакетный материал сценариев, кроме минимума, необходимого для подключения и запуска C-модели. Так что мой тестовый стенд находится в C (ну, технически, C ++), там был сделан слой сокетов. Выходными данными могут быть файлы .vcd, которые использует gtkwave. По сути, вы можете выполнить большую часть дизайна HDL, используя программное обеспечение с открытым исходным кодом без лицензий и т. Д. Добавив одну или две строки кода к части моделирования CDL, я смог запустить ее как бесконечный цикл, который, я могу сказать, работает вполне возможно, что нет никаких утечек памяти и т. д.
и modelsim, и cadence имеют стандартизированные способы соединения программ хоста C с миром моделирования, и оттуда вы можете использовать IPC для доступа к приложениям хоста, взаимодействующим с API уровня абстракции.
это, вероятно, слишком много для фотографии, я уже давно отказался от фотографий из-за более быстрых и дружественных для C микрофонов. Есть / была картинка с открытым ядром, которую вы могли бы просто включить в симуляцию, хотя это не то, что вы пытаетесь сделать здесь.