主要内容

DPI组件生成的注意事项MATLAB

您可以导出MATLAB®作为具有直接编程接口(DPI)的组件,用于SystemVerilog模拟。HDL Verifier™用DPI包装器包装生成的C代码,该包装器在SystemVerilog模拟中与SystemVerilog瘦接口函数通信。

对于MATLAB,您可以使用dpigen函数。

请注意

你必须有一个MATLAB编码器™该特性的使用许可。

金宝app支持MATLAB数据类型

金宝app支持的MATLAB数据类型转换为SystemVerilog数据类型,如下表所示。当使用dpigen函数,使用PortsDataType要选择的属性兼容C型逻辑向量,或位向量数据类型。

生成的SystemVerilog类型

MATLAB SystemVerilog
兼容C型 逻辑向量 位向量
uint8 字节无符号 逻辑(7:0) 位(7:0)
uint16 shortint无符号 逻辑15:0 位(15:0)
uint32 int无符号 逻辑(31:0) 位(31:0)
uint64 longint无符号 逻辑(63:0) 位(63:0)
int8 字节 逻辑符号[7:0] 位符号为[7:0]
int16 shortint 逻辑签名[15:0] 位符号[15:0]
int32 int 逻辑签名[31:0] 位符号[31:0]
int64 longint 逻辑符号[63:0] 位符号[63:0]
逻辑 字节无符号 逻辑0时 位(0时)
fi(定点数据类型)

取决于定点字的长度。如果定点字长度大于主机字大小(例如,64位与32位),则此数据类型不能通过MATLAB编码器你会得到一个错误。如果定点字长小于或等于主机字长,则MATLAB编码器将定点数据类型转换为内置C类型。

逻辑(n-1:0)

逻辑符号为[n-1:0]

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

位(n-1:0)

位符号为[n-1:0]

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

shortreal
真正的
复杂的

编码器在SystemVerilog组件中将复杂信号平抑为实部和虚部。

向量,矩阵

数组

例如,MATLAB中的4 × 2矩阵在SystemVerilog中转换为一维的8个元素数组。默认情况下,编码器将矩阵按列-主序排列。若要更改为行主序,请使用-rowmajor选项中的dpigen函数。有关其他信息,请参见生成使用行主数组布局的代码(MATLAB编码器)

结构

编码器将结构元素平展到SystemVerilog组件中的独立端口中。

枚举数据类型 枚举

生成的共享库

函数dpigen自动编译在SystemVerilog环境中运行导出的DPI组件所需的共享库。构建共享库的makefile具有扩展名_rtw.mk.例如,对于fun.m,则make文件的名称为fun_rtw.mk

在编译期间,函数dpigen生成一个库文件。

  • 窗户®64:函数_win64.dll

  • Linux®函数所以

函数是生成DPI组件的MATLAB函数的名称。

请注意

如果在Windows上使用64位MATLAB,则会得到一个64位DLL,它只能与64位HDL模拟器一起使用。

确保您的MATLAB版本与HDL模拟器版本匹配。

生成测试台

函数dpigen还创建一个测试台架。您可以使用这个测试平台来验证生成的SystemVerilog组件在功能上与原始的MATLAB函数等效。生成器运行MATLAB代码以保存输入和输出数据向量,以便在测试台上使用。此测试台并不打算取代您自己应用程序的系统测试台。但是,在创建自己的系统测试台架时,您可以使用生成的测试台架作为开始示例。

生成的输出

  • C和头文件从您的算法,由MATLAB编码器

  • C和DPI包装器的头文件,由HDL验证器生成

  • SystemVerilog文件,它公开组件并添加控制信号

  • 包含DPI组件所有函数声明的SystemVerilog包文件

  • SystemVerilog测试平台(使用-testbench选项)

  • 与HDL模拟器一起使用的数据文件(与-testbench选项)

  • HDL模拟器脚本,例如*,* . sh(-testbench选项)

  • Makefile*楼上

生成的SystemVerilog包装器

产生的控制信号

为逐个函数的顺序函数生成的SystemVerilog代码dpigen包含一组控制信号。

  • clk:同步时钟

  • clk_enable:时钟使能

  • 重置:异步复位

在为组合设计生成SystemVerilog时,生成的代码不具有上述控制信号。属性指定顺序的或组合的ComponentTemplateType的参数dpigen函数。

生成的Initialize函数

生成的所有SystemVerilog代码dpigen函数包含初始化函数。的初始化函数在模拟开始时调用。

例如:

导入DPI函数void DPI_Subsystem_initialize()

如果异步复位信号高(从0到1),初始化再次调用。

仿真考虑

在HDL环境中模拟DPI组件时,重置时钟,clk_enable行为如下:

  • clk_enable0时,DPI输出函数不执行,输出值不更新。

  • clk_enable1而且重置0时,DPI输出函数在时钟信号的正边缘执行。

  • 重置1时,DPI组件的内部状态设置为其初始值。此操作等价于使用清晰的函数在MATLAB中更新持久变量。然后输出值反映DPI组件的初始状态和当前输入值。有关持久变量的详细信息,请参见持续的变量

限制

  • 不支持超过系统字长的大定点数。金宝app

  • 不支持某些优化,比如常量折叠,因为它们会改变生成的C函数的接口。金宝app有关更多信息,请参见生成代码中的MATLAB编码器优化(MATLAB编码器)

  • HDL验证器将矩阵和向量限制为SystemVerilog中的一维数组。例如,MATLAB中的4 × 2矩阵在SystemVerilog中转换为8个元素的一维数组。

  • PostCodegen不支持配置对象中的回调。金宝app

相关的话题