Начало работы с генерацией компонента SystemVerilog DPI

Этот пример показывает вам, как сгенерировать компонент SystemVerilog DPI от диспетчера пропорциональной интегральной производной (PID) в модели Simulink® и экспортировать его в симулятор HDL.

Требования и предпосылки

Продукты потребовали для этого примера:

  • MATLAB®

  • Simulink®

  • Simulink Coder®

  • Один из поддерживаемых симуляторов HDL: Наставник Graphics® ModelSim®/QuestaSim® или Cadence® Incisive

  • Один из поддерживаемого компилятора C: Microsoft® Visual C ++ или GNU GCC

Настройте пример

Запустите следующий код, чтобы настроить проект

cd(tempdir);
[~, ~, ~] = rmdir('svdpi_pid', 's');
mkdir('svdpi_pid');
cd('svdpi_pid');
open_system('svdpi_pid');

Настройте модель для генерации кода

Откройте панель Параметра конфигурации Модели Simulink из svdpi_pid модели. Установите следующие параметры:

Выберите Code Generation-> System Target File. Кликните по Кнопке обзора и выберите "systemverilog_dpi_grt.tlc".

Если у вас есть Embedded Coder, можно альтернативно выбрать 'ert' конечный файл, как показано в фигуре ниже.

В установке Toolchain выберите одну из версий Visual Studio, если вы используете Windows или один из наборов инструментальных средств GCC, если вы используете Linux.

Убедитесь, что опция "Генерирует код только", неконтролируем.

Выберите Code Generation-> SystemVerilog DPI и проверяйте, что опция "Генерирует Испытательный стенд"

Теперь мы сделаны с панелью Параметра конфигурации. Нажмите кнопку "OK", чтобы закрыть его.

Выберите Internal Signals for Test Point Logging (Необязательно)

Если вы интересуетесь доступом к внутренним сигналам компонента DPI-C в среде SystemVerilog, то можно использовать возможность журналирования тестовой точки DPI-C.

Первый шаг должен выбрать, к каким сигналам вы хотите получить доступ. Можно сделать это путем щелчка правой кнопкой по сигналу интереса и выбора "Properties".

В диалоговом окне устанавливают флажок, отмеченный как "Тестовая точка", и дают сигналу метку на "Имя Сигнала". Note:It рекомендуют дать сигналу имя на "Имя Сигнала" к каждой Тестовой точке, в противном случае будет трудно сопоставить сигнал со сгенерированным кодом.

Если вы также интересуетесь получением тестового вектора внутреннего сигнала и воспроизводите его в сгенерированном испытательном стенде, затем устанавливают флажки "Test Point" и "Log Signal Data".

Второй шаг должен включить API C, предлагаемый Embedded Coder. Чтобы сделать это движение к панели Параметров конфигурации и на Генерации кода->, Интерфейс убеждается, что, по крайней мере, флажок "сигналов" устанавливается.

Третий шаг должен выбрать интерфейс функций SystemVerilog, которые будут использоваться, чтобы получить доступ к тестовым точкам. Это сделано путем выбора из выпадающего меню под: Генерация кода-> SystemVerilog DPI-> Функции доступа Тестовой точки

Если вы выберете "None" затем, то отмеченные тестовые точки будут проигнорированы, и никакие функции доступа не будут сгенерированы.

Выбор "One function per test point" позволит вам получать доступ к каждой тестовой точке независимо. Если эта опция выбрана, интерфейс, сгенерированный для этого примера, показывают ниже:

Выбор "One function for all test points" позволит вам получать доступ ко всей тестовой точке с одним вызовом функции. Если эта опция выбрана, интерфейс, сгенерированный для этого примера, показывают ниже:

После выполнения сгенерированного испытательного стенда вы видите сигналы формы волны.

Заметьте, что для "Gain_1_TestPoint" нет никаких ссылочных значений, чтобы соответствовать, поскольку мы только проверяли флажок "Test Point" ранее. По контрасту для "Gain_4_TestPoint_And_Logging" в дополнение к функции доступа существуют также ссылочные значения, чтобы соответствовать.

Сгенерируйте компонент SystemVerilog DPI

  1. В "svdpi_pid" модели щелкните правой кнопкой мыши по блоку Controller и выберите C/C ++ Code-> Build This Subsystem.

  2. Нажмите Build в диалоговом окне, которое появляется.

  3. Компонент SystemVerilog сгенерирован как "Controller_build/Controller_dpi.sv". Когда генерация кода будет завершена, исследуйте новый компонент.

Запустите сгенерированный испытательный стенд

Для ModelSim/QuestaSim,

  1. Запустите ModelSim/QuestaSim в режиме GUI.

  2. Измените свой текущий каталог на "dpi_tb" в соответствии с директорией генерации кода в вашем симуляторе HDL.

  3. Введите следующую команду, чтобы запустить вашу симуляцию

do  run_tb_mq.do

Для Острого средства моделирования:

  • Запустите свой терминальный интерпретатор

  • Измените текущий каталог на "dpi_tb" в соответствии с директорией генерации кода

  • Введите следующую команду в свой интерпретатор.

sh run_tb_incisive.sh

Для средства моделирования VCS:

  • Запустите свой терминальный интерпретатор

  • Измените текущий каталог на "dpi_tb" в соответствии с директорией генерации кода

  • Введите следующую команду в свой интерпретатор.

sh run_tb_vcs.sh
  • Когда симуляция заканчивается, необходимо видеть следующий текст, распечатанный в консоли:

**************TEST COMPLETED (PASSED)**************