主要内容

DPI组件生成金宝app

DPI代概述

如果你有金宝app®编码器™您可以使用以下两种方法之一生成SystemVerilog DPI组件。

导出子系统的SystemVerilog DPI组件

HDL Verifier™与金宝app仿真软件编码器在SystemVerilog组件中使用直接编程接口(DPI)将子系统作为生成的C代码导出。您可以将此组件作为行为模型集成到您的HDL模拟中。编码器提供了定制生成的SystemVerilog结构的选项。组件生成器支持测试点访问和可调参数。金宝app编码器可选地生成一个SystemVerilog测试台,该测试台根据来自Simulink子系统的数据向量验证生成的DPI组件。金宝app下面的“模型配置参数”对话框中有此特性代码生成看见生成SystemVerilog DPI组件

生成SystemVerilog测试台高密度脂蛋白编码器

从HDL编码器™,您可以生成SystemVerilog DPI测试台。使用测试台,使用来自整个Simulink模型生成的C代码的生成的HDL码,包括DUT和数据源。金宝app要使用此功能,整个型号必须支持C代码金宝app金宝app仿真软件编码器.您可以在下面的HDL Workflow Advisor中访问此功能HDL代码生成>设置TestBench选项,或在“模型配置参数”对话框中,在HDL代码生成>试验台.或者,对于命令行访问,设置GenerateSVDPITestBench的属性makehdltb(高密度脂蛋白编码器)看见使用SystemVerilog DPI测试台验证HDL设计(高密度脂蛋白编码器)

金宝app支持金宝app数据类型

金宝app支持的Simulin金宝appk数据类型转换为SystemVerilog数据类型,如此表所示。

您可以选择位向量、逻辑向量或兼容的C类型。在“配置参数”对话框中选择代码生成>SystemVerilog DPI部分,下面SystemVerilog港口>端口数据类型

生成SystemVerilog类型

MATLAB® SystemVerilog.
兼容的c类型 逻辑矢量 位矢量
uint8 字节无符号 逻辑(7:0) 比特[7:0]
uint16 短缺unsigned 逻辑15:0 位(15:0)
uint32 int无符号 逻辑(31:0) 位(31:0)
UINT64 龙眼无符号 逻辑[63:0] 位[63:0]
INT8. 字节 逻辑(7:0)签署 位符号[7:0]
int16 缩短 逻辑签名[15:0] 位签署(15:0)
int32 int 逻辑(31:0)签署 位符号[31:0]
int64 longint 逻辑(63:0)签署 位签署(63:0)
布尔值 字节无符号 逻辑0时 位[0:0]
定点

端口被符号扩展为内置的C类型,例如intint无符号字节字节无符号, 等等。

逻辑(n-1:0)

逻辑签名[n-1:0]

逻辑矢量长度(n等于.符号继承自固定点类型。

位(n-1:0)

位签署(n-1:0)

位矢量长度(n等于.符号继承自固定点类型。

单身的 shortreal
真实的
复杂的

您可以选择SystemVerilog结构体SystemVerilog接口中的实部和虚部的数据类型或平坦端口。要在这些选项中进行选择,请在配置参数对话框的左侧窗格中选择代码生成>SystemVerilog DPI,然后设置复合数据类型参数到结构体或者压扁

vectors,矩阵

您可以选择SystemVerilog阵列或标量端口。要在这些选项中进行选择,请在配置参数对话框的左侧窗格中选择代码生成>SystemVerilog DPI,然后选择矩阵和向量端口的标量化参数。

例如,一种类型的类型矢量uint32在Si金宝appmulink中生成SystemVerilog矢量端口:

输入逻辑[31:0] vecinput [0:1]

当你选择矩阵和向量端口的标量化,生成的SystemVerilog包括这两个端口,每个端口的类型逻辑(31:0)

输入逻辑[31:0]vecInput_0,输入逻辑[31:0]vecInput_1

当生成向量和阵列端口时,编码器以列主要顺序在列中达成矩阵。

非宽恕巴士

您可以选择SystemVerilog结构体SystemVerilog接口中单独组件信号的类型或平坦端口。要在这些选项中进行选择,请在配置参数对话框的左侧窗格中选择代码生成>SystemVerilog DPI部分和设置复合数据类型结构体或者压扁

枚举数据类型 枚举

生成SystemVerilog包装器

产生控制信号

由SystemVerilog DPI生成器生成的所有SystemVerilog代码包含以下控制信号:

  • clk——同步时钟

  • clk_enable——时钟使

  • 重置——异步复位

生成SystemVerilog模块界面

在端口列表或接口声明之间进行选择。在配置参数下设置此选项代码生成>SystemVerilog港口>联系

  • 端口列表-生成一个SystemVerilog模块,在头中有一个端口列表,代表它的接口。

    例如:

    模块MyMod_DPI(输入位CLK,输入位CLK_ENABLE,输入比特复位,/ * SIMULINK信号名称:'IN1'* /输入真实IN1,/ 金宝app* SIMULINK信号名称:'OUT1'* /输出真实OUT1);......终点

  • 接口-生成一个SystemVerilog模块,在头文件中包含一个接口名称,并单独声明接口。

    例如:

    接口simple_if;位时钟;位clk_enable;位复位;/* 金宝appSimulink信号名:'in1' */真实in1;/* 金宝appSimulink信号名:'out1' */真实的out1;endinterface模块MyMod_dpi(simple_if vif);......终点

选择命令行:使用set_param.(金宝app模型)功能并设置DPIPortConnection参数是“接口”或者的端口列表

例如:

set_param(bdroot,'dpiportconection','interface')

生成的组件功能

由SystemVerilog DPI生成器生成的SystemVerilog代码包含以下函数:

//声明导入的C函数导入“DPI”功能Chandle DPI_subsystemname._Initialize(Chandle alishedHandle);导入“DPI”功能Chandle DPI_subsystemname._reset(输入chandle objhandle,……input real In1, inout real Out1);import“DPI”函数void DPI_subsystemname._output(input chandle objhandle,…)input real In1, inout real Out1);import“DPI”函数void DPI_subsystemname._Update(输入Chandle Objhandle,输入真实In1);import“DPI”函数void DPI_subsystemname._终止(输入chandle objhandle);

这里,subsystemname.为其生成代码的子系统的名称。

如果您的模型还包含可调参数,请参阅参数调优

  • 初始化功能 -初始化在模拟开始时调用函数。

    例如,对于标题为DUT.

    初始化objhandle = DPI_dut_initialize(objhandle);结束
  • 重置功能-调用重置函数时要将模拟重置为已知的重置状态。

    例如,对于标题为DUT.

    初始化objhandle = DPI_dut_reset(objhandle, 0, 0);结束
  • 输出功能-在时钟的正边缘,如果clk_enable为高,则首先调用输出函数,然后调用更新函数。

    例如,对于标题为DUT.

    如果(clk_enable)开始DPI_dut_output(objhandle, dut_In1, dut_Out1);DPI_dut_update (objhandle dut_In1);结束
  • 更新功能

    在时钟的正边缘,如果clk_enable时,更新函数在输出函数之后调用。

    例如,对于标题为DUT.

    如果(clk_enable)开始DPI_dut_output(objhandle, dut_In1, dut_Out1);DPI_dut_update (objhandle dut_In1);结束
  • 终止函数

    设定模拟提前终止的具体条件。

    例如,对于标题为DUT.

    DPI_dut_terminate(objhandle); / /终止的条件结束

系统中生成的SystemVerilog代码中的功能详细信息变化。您可以检查所生成的代码以获取细节。有关上下文中生成的函数的示例,请参阅开始SystemVerilog DPI组件生成

参数调优

您可以使用Simulink模型中的参数的各种值运行不同的模拟。金宝app如果您的系统具有可调谐参数,则生成的SystemVeriLog代码也包含每个可调谐参数的SET参数函数。

DPI组件生成器以格式为每个可调谐参数生成SET参数函数DPI_subsystemname._setparam_可调参数名称

在这个例子中,可调增益参数有它自己的setparam_gain.函数。

导入“DPI”函数void DPI_DUT_SETPARAM_GAIN(输入CHANDLE OBJHANDLE,输入REAL DUT_P_GAIN);

生成的SystemVerilog代码不调用这个函数。相反,使用默认参数。要在模拟过程中更改这些参数,显式地调用特定的setparam函数。例如,在标题为DUT.,您可以通过插入以下呼叫在仿真期间将增益更改为6:

DPI_dut_setparam_gain (objhandle 6);

要使参数可调,请在生成SystemVerilog代码之前从子系统创建数据对象。看到仿真过程中调谐增益参数

测试点访问功能

该特性使您能够在您的HDL模拟器中访问SystemVerilog DPI组件的内部信号。您可以将模型中的内部信号指定为测试点,并配置SystemVerilog DPI生成器来创建单独的或分组的访问函数。

您还可以在测试点上启用日志记录。启用日志记录后,您可以使用生成的测试台将来自Simulink的日志数据与运行SystemVerilog组件时观察到的值进行比较。金宝app

看到SystemVerilog DPI组件测试点访问开始SystemVerilog DPI组件生成

额外的样本延迟

与原始的Simulink模型相比,生成的SystemV金宝apperilog模块在输出时引入了一个额外的样本延迟。例如,在下面的Simulink模型中,输出是输入信号的一个样金宝app本延迟版本。

生成的C代码保留了这种行为,输出包含输入信号的一个样本延迟版本。然而,在SystemVerilog包装文件中,时钟信号用于同步输入和输出信号:

始终@(提出CLK)开始DPI_BLK2_OUTPUT(BLK2_IN1,BLK2_OUT1);dpi_blk2_update();结束

SystemVerilog模块的输出只能在时钟上升沿更新。这个要求引入了额外的采样延迟。

多速率系统行为

默认情况下,Simuli金宝appnk子系统有一个基本的样本时间变量(基金),指示在模拟期间,子系统何时产生输出并更新其内部状态。使用多速率系统,您可以为不同的端口指定不同的采样时间。有关更多信息,请参见什么是样本时间?(金宝app模型)

当多速率子系统生成DPI组件时,DPI组件在示例时间下运行,该示例时间等于子系统中所有采样时间的最大常见除法。

例如,假设子系统具有0.01的基本采样时间(即,基金0.01)和采样时间ST1.ST2.分别为0.5和0.7。

ST1=0.5,ST2=0.7.DPI组件在0.1的采样时间运行(因为0.1是0.5和0.7的最大公约数)。成功获取采样时间为0.5的信号(ST1.)或0.7(ST2.), HDL的时钟信号必须分别切换5或7次。

当从顶层生成DPI组件时,该组件将在基本示例时间执行。

这个图显示了HDL输入时钟和采样时间之间的关系ST1., 和ST2.

定制

您可以通过修改HDL Verifier附带的模板来定制生成的SystemVerilog包装器(svdpi_grt_template.vgt)。或者,您可以创建自己的自定义模板。为模板中生成的代码提供锚点,以验证模板生成有效的SystemVerilog代码。

由HDL verilog提供的默认SystemVerilog模板是svdpi_grt_template.vgt。在此模板中,特殊clken_inclken_out.控制信号被添加到SystemVerilog模块接口。

您可以从多个子系统生成SystemVerilog DPI组件,并在一个HDL模拟器中将它们连接在一起。当您这样做时,这些控制信号将决定这些组件的执行顺序。它们还最小化了Simulink信号和SystemVerilog信号之间的延迟。金宝app

你也可以在以下条件下指定你自己的模板文件:

  • 该文件必须在MATLAB路径和可搜索。

  • 文件必须有一个.vgt扩大

你可以使用这些可选标记自定义生成的代码,将它们插入到整个模板的注释语句中:

  • % < PortList >

  • % < EnumDataTypeDefinitions >

  • % < ImportSetParamFunction >

  • % < CallInitFunction >

  • % < CallUpdateFunction >

  • % < ObjHandle >

看到自定义生成的SystemVerilog代码有关自定义代码的说明。

请注意

SystemVerilog DPI组件生成器不会为定制组件生成测试台。

限制

  • 默认情况下,HDL验证器在SystemVerilog中将矩阵和向量转换为一维数组。例如,Simulink中的4×2矩阵在SystemVerilog中转换为八个元素的一维数组。要在SystemVerilog接口中生成多个标量端口,请选择金宝app矩阵和向量端口的标量化配置参数中。

  • SystemVerilog DPI组件生成仅支持以下子系统进行代码生成。金宝app这些子系统没有测试台支持。金宝app

    • 触发子系统

    • 启用子系统

    • 带动作端口子系统

为了获得最佳结果,应避免分别导出多个子系统,因为很难实现正确的执行顺序。相反,将多个子系统组合成一个子系统,并从新创建的单个子系统生成代码。

相关话题