В этом примере показано, как создать компонент SystemVerilog DPI для программируемого генератора прямоугольных волн, написанного в MATLAB ®, и экспортировать его в имитатор HDL.
В демонстрационных целях в этом примере используется приложение Modelsim ® 10.3c в 64-разрядной ОС Windows ® 7. Однако эта же процедура может быть легко воспроизведена для других систем и тренажеров.
Продукты, необходимые для этого примера:
MATLAB Coder™
Симуляторы: Mentor Graphics ® ModelSim ®/QuestaSim ® или Cadence ® Incisive
Один из поддерживаемых компиляторов C: Microsoft ® Visual C++ или GNU GCC
Код MATLAB, используемый в этом примере, демонстрирует простой программируемый генератор прямоугольных волн. В этом примере также представлен испытательный стенд MATLAB, на котором выполняется проектирование.
Дизайн: ProgSWGenerator
Испытательный стенд: ProgSWGenerator_tb
На следующем рисунке показан компонент DPI, созданный в этом примере:

«On _ time» и «Off _ time» управляют рабочим циклом выходного сигнала.
Например, если On_time=1 и Off_time=1, генерируемая квадратная волна будет иметь 50% рабочий цикл.
Чтобы убедиться в отсутствии ошибок во время выполнения и в том, что конструкция соответствует требованиям, смоделируйте конструкцию с помощью поставляемых средств тестирования до создания кода. Введите следующую команду в MATLAB:
ProgSWGenerator_tb
На ней должен быть показан рисунок ниже:

Следует отметить, что на графике показан выходной сигнал, запрограммированный на следующее поведение:
Тактовые циклы < 100: on = 1, off = 1
100 < Тактовые циклы < 250: on = 2, off = 1
250 < Тактовые циклы: on = 1, off = 2
С помощью DPIGEN создайте компонент DPI.
Выполните команду DPIGEN в MATLAB следующим образом:
dpigen -testbench ProgSWGenerator_tb ProgSWGenerator -args {0,0}
Создается следующая структура каталогов:

dpi_tb: Папка, в которой находятся все файлы, связанные с testbench.
ProgSWGenerator_dpi.sv: Созданный компонент DPI.
ProgSWGenerator_dpi_pkg.sv: Созданный пакет SystemVerilog.
libProgSWGenerator_dpi.dll: Библиотека, содержащая определения всех импортированных функций.
Примечание: DPIGEN автоматически попытается скомпилировать библиотеку. Чтобы просто создать файлы без компиляции, следует использовать параметр -c. Например:
dpigen -c -testbench ProgSWGenerator_tb ProgSWGenerator -args {0,0}
Для ModelSim/QuestaSim выполните следующие действия.
Запустите ModelSim/QuestaSim в режиме графического интерфейса пользователя.
В симуляторе HDL измените текущий каталог на «dpi_tb» в каталоге генерации кода.
Введите следующую команду для запуска моделирования
do run_tb_mq.do
Например:

Генерируются следующие формы волн:

Следует отметить, что выходная волна (нижняя) ведет себя точно так же, как и сигнал, отображаемый в тестовых инструментах MATLAB.
Для имитатора Incisive и VCS:
Запуск оболочки терминала
Изменить текущий каталог на «dpi_tb» в каталоге генерации кода
Для параметра Incisive введите следующую команду в оболочке.
sh run_tb_incisive.sh
Для VCS введите следующую команду в оболочку.
sh run_tb_vcs.sh
По завершении моделирования на консоли должен быть напечатан следующий текст:
**************TEST COMPLETED (PASSED)**************
На этом завершается пример создания компонентов DPI SystemVerilog на основе MATLAB.