Чтобы выполнить шаги примера самостоятельно, сначала создайте модель примера.
Примерная модель имеет один блок усиления с параметром усиления, который настраивается во время моделирования.

Откройте библиотеку блоков Simulink ® и выберите «Часто используемые блоки».
Добавление блока Inport.
Добавьте блок усиления. Дважды щелкните, чтобы открыть маску блока и изменить значение параметра «Усиление» на gain.
Дважды щелкните блок усиления, чтобы открыть маску блока. На вкладке Signal Attributes установите тип данных Output равным uint8.
Примечание
Если оставить тип данных Output как Inherit: Inherit via internal rule, Simulink Coder™ выбирает тип данных на основе значения по умолчанию Gain , который может не соответствовать значению при настройке параметра после генерации DPI. Укажите конкретный тип выходного сигнала блока, чтобы избежать неправильной настройки типа с помощью Simulink Coder.
Добавление блока исходящего порта.
Подключите все блоки, как показано на предыдущей схеме.
Создайте объект данных для параметра усиления:
В командной строке MATLAB ® введите:
gain = Simulink.Parameter
Далее введите:
open('gain')Эта команда открывает диалоговое окно свойств для объекта параметра.

Введите или выберите следующие значения:
Значение: 2
Тип данных: двойной
Класс хранения:
Model default
Нажмите кнопку ОК.
Дополнительные сведения об использовании объектов параметров для генерации кода см. в разделе Конфигурация генерации кода C для элементов интерфейса модели (Simulink Coder).
Примечание
Установка для класса хранилища значения Auto оптимизирует параметр во время создания кода. Рекомендуемые значения при создании настраиваемых параметров DPI:
Model default
SimulinkGlobal
ExportedGlobal
Использовать Model default когда параметр специфичен для экземпляра, и выберите SimulinkGlobal и ExportedGlobal для создания глобальной переменной.
На вкладке Приложения Simulink щелкните Верификатор HDL. Затем на вкладке HDL Verifier щелкните C Code Settings. Откроется диалоговое окно Параметры конфигурации (Configuration Parameters) в окне Создание кода (Code Generation).
В системном целевом файле нажмите кнопку Обзор и выберите systemverilog_dpi_grt.tlc.
Если у вас есть лицензия на Embedded Coder ®, вы можете выбрать целевойsystemverilog_dpi_ert.tlc. Этот целевой объект позволяет получить доступ к дополнительным параметрам создания кода (на панели Создание кода (Code Generation) в окне Параметры конфигурации модели (Model Configuration Parameters)).
В окне «Цепь инструментов» в разделе «Процесс построения» выберите из списка цепь инструментов, которую требуется использовать. Руководство по выбору цепочки инструментов см. в разделе Создание кроссплатформенных компонентов DPI.
При необходимости можно выбрать флаги для компиляции. В разделе Конфигурация сборки (Build Configuration) выберите Specify из раскрывающегося списка. Щелкните Показать параметры (Show Settings), чтобы отобразить текущие флаги.
В группе Создание кода выберите SystemVerilog DPI.
Снимите флажки «Создать тестовый стенд» и «Настроить сгенерированный код SystemVerilog» (поскольку в этом примере изменяется сгенерированный код SystemVerilog, любой тестовый стенд, сгенерированный одновременно, не имеет правильных результатов).
Нажмите кнопку ОК, чтобы принять эти настройки и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).
В примере модели щелкните правой кнопкой мыши блоки усиления и задержки и выберите Создать подсистему из выбора (Create Subsystem from Selection). В этом примере переименуйте подсистему dut.

В окне «Simulink Toolstrip» на вкладке «HDL Verifier» выберите «Generate DPI Component».
В диалоговом окне «Build code for subsystem» нажмите кнопку «Build».
Компонент SystemVerilog создается как dut_build/dut_dpi.sv в текущей рабочей папке.
Открыть файл dut_build/dut_dpi.sv и проверьте сформированный код.
В этом примере после вызова reset функция, вызовите DPI_dut_setparam_gain с новым значением параметра. Например, здесь коэффициент усиления изменяется на 6:
DPI_dut_setparam_gain(objhandle, 6);
Если сигнал асинхронного сброса имеет высокий уровень (от 0 до 1), вызовите reset снова функция.
if(reset == 1'b1) begin
DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
DPI_dut_setparam_gain(objhandle, 6);
end
Теперь код SystemVerilog выглядит следующим образом:
module dut_dpi(
input clk,
input clk_enable,
input reset,
input real dut_U_In1,
output real dut_Y_Out1
);
chandle objhandle=null;
// Declare imported C functions
import "DPI" function chandle DPI_dut_initialize(chandle existhandle);
import "DPI" function void DPI_dut_reset(input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
import "DPI" function void DPI_dut_output(input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
import "DPI" function void DPI_dut_update(input chandle objhandle, input real dut_U_In1);
import "DPI" function void DPI_dut_terminate(input chandle objhandle);
import "DPI" function void DPI_dut_setparam_gain(input chandle objhandle, input real dut_P_gain);
initial begin
objhandle = DPI_dut_initialize(objhandle);
DPI_dut_setparam_gain(objhandle, 6);
end
final begin
DPI_dut_terminate(objhandle);
end
always @(posedge clk or posedge reset) begin
if(reset == 1'b1) begin
DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
DPI_dut_setparam_gain(objhandle, 6);
end
else if(clk_enable) begin
DPI_dut_output(objhandle, dut_U_In1, dut_Y_Out1);
DPI_dut_update(objhandle, dut_U_In1);
end
end
endmodule
Чтобы запустить моделирование, создайте общую библиотеку и экспортируйте компонент, как описано в следующих разделах.
Перестроить общую библиотеку, как описано в разделе Библиотеки построений.