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

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

Введите или выберите следующие значения:
<reservedrangesplaceholder0> 2
Data type: double
<reservedrangesplaceholder1> <reservedrangesplaceholder0>
Нажмите OK.
Для получения дополнительной информации об использовании объектов параметров для генерации кода смотрите Строение Генерации кода C для Элементов Интерфейса Модели (Simulink Coder).
Примечание
Установка значения Storage class Auto оптимизирует параметр во время генерации кода. Рекомендуемые значения при генерации настраиваемых параметров DPI:
Model default
SimulinkGlobal
ExportedGlobal
Использование Model default когда ваш параметр специфичен для экземпляра и выбирает между SimulinkGlobal и ExportedGlobal чтобы сгенерировать глобальную переменную.
На вкладке Apps Simulink нажмите HDL Verifier. Затем на вкладке HDL Verifier нажмите C Code Settings. Диалоговое окно Configuration Parameters откроется на Code Generation.
При System target file кликните Browse и выберите systemverilog_dpi_grt.tlc.
Если у вас есть лицензия для Embedded Coder®можно выбрать целевую systemverilog_dpi_ert.tlc. Эта цель позволяет вам получить доступ к дополнительным опциям генерации кода (на панели Генерация кода в параметрах конфигурации модели).
В Toolchain, под Build process, выберите набор инструментов, который вы хотите использовать в списке. Инструкции по выбору набора инструментальных средств см. в разделе «Генерация кросс-платформенных компонентов DPI».
Вы можете выбрать флаги для компиляции. В группе Build Configuration выберите Specify из раскрывающегося списка. Нажмите кнопку Show Settings, чтобы отобразить текущие флаги.
В группе Генерация кода щелкните SystemVerilog DPI.
Оставьте Generate test bench и Customize generated SystemVerilog code очищенными (поскольку этот пример изменяет сгенерированный код SystemVerilog, любой сгенерированный при этом испытательный стенд не имеет правильных результатов).
Щелкните OK, чтобы принять эти настройки и закрыть диалоговое окно Параметры конфигурации.
В модели примера щелкните правой кнопкой мыши по блокам усиления и задержки и выберите Create Subsystem from Selection. В данном примере переименуйте подсистему dut.

На панели инструментов Simulink, на вкладке HDL Verifier, нажмите Generate DPI Component.
В диалоговом окне Код сборки для подсистемы нажмите Build.
Компонент SystemVerilog генерируется следующим dut_build/dut_dpi.sv в текущей рабочей папке.
Откройте файл dut_build/dut_dpi.sv и исследуйте сгенерированный код.
В этом примере после вызова reset function, вызовите 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
Чтобы запустить симуляцию, создайте общую библиотеку и экспортируйте компонент, как объяснено в следующих разделах:
Перестроите общую библиотеку, как описано в Build Libraries.