如果你有金宝app®编码器™许可证,您可以从一个Simulink模型生成一个通用验证方法(UVM)测试台和其他组件。金宝app生成UVM组件可以实现从Simulink环境到UVM框架的直接转换。金宝app
使用直接编程接口(DPI),将Simulin金宝appk子系统作为生成的C代码输出到UVM组件中。您可以将这些生成的组件集成到现有的UVM环境中。您还可以使用生成的UVM测试台来测试一个HDL DUT,方法是用详细的HDL设计替换生成的行为DUT。
您的Sim金宝appulink模型必须包括这些子系统。
DUT子系统。这个子系统生成您的DUT的SystemVerilog DPI (SVDPI)行为模型。有关SystemVerilog DPI生成的详细信息,请参见用Simulink生成DPI组件金宝app.
一个序列子系统。这个子系统创建刺激并将其驱动到DUT。
一个记分牌子系统。该子系统对DUT的输出进行采集和检查。
序列还可以将信号直接驱动到记分板,如Simulink模型结构图中的红色所示。金宝app
创建子系统的详细操作请参见创建子系统(金宝app模型).
金宝app仿真软件模型结构
除了前面的结构之外,您还可以选择包括这些子系统。
一个司机子系统
监控子系统
预测子系统
请注意
Simulink模型中的所有子系统的名称必须以字母开头金宝app,并使用字母数字字符和下划线的组合。
当添加监视器、驱动程序或预测器子系统时,该特性支持这些配置。金宝app
所有发出的信号序列必须连接到驱动器,预测器,或计分板。其他输出信号在生成UVM时被忽略。
如果您的模型包含一个驱动子系统,那么所有来自驱动的信号都必须连接到DUT。
如果您的模型包含一个驱动子系统,那么所有给驱动的输入信号都必须在序列中产生。
如果您的模型包含监视器子系统,那么所有从DUT发出的信号都必须连接到监视器。
如果您的模型包含一个监视器子系统,那么监视器发出的所有信号都必须连接到记分牌上。
如果您的模型包含一个预测器子系统,那么所有到预测器的输入信号都必须在序列中产生。在生成UVM时忽略其他输入。
如果您的模型包含一个预测器子系统,那么来自预测器的所有输出信号都必须连接到记分牌。在生成UVM时忽略其他输出。
该图像显示了一个Simulink模型,金宝app其中包括一个驱动程序、一个监视器和一个预测子系统。
因为UVM生成使用了生成SystemVerilog DPI的技术,所以必须首先选择一个支持的系统目标文件。金宝app打开配置参数对话框,选择代码生成从左窗格。为系统目标文件,点击浏览,然后选择systemverilog_dpi_grt.tlc
从列表中。
或者,如果你有嵌入式编码器®产品,您可以选择目标systemverilog_dpi_ert.tlc
.此目标使您能够在选择时访问其他代码生成选项代码生成从“配置参数”对话框的左窗格中。
有关UVM生成的示例,请参见从Simulink生成参数化UVM测试台金宝app.
使用uvmbuild
函数来生成这种UVM组件结构。
Top -该模块实例化生成的行为DUT和测试环境。顶部模块有时钟和复位信号,传播到设计中。
一个行为测试设计模块是从你的Simulink DUT子系统生成的。金宝app
Test—这个模块包括UVM环境和序列类。
Sequence——这个UVM对象定义了一组事务。序列对象是从您的Simulink序列子系统生成的。金宝app
环境—该模块包括代理和生成的记分牌,以及可选的预测器。
计分板- UVM计分板是由Simulink计分板子系统生成的。金宝app计分板将预期结果与DUT的输出进行比较。
代理—UVM代理包括音序器、驱动程序和监视器。如果存在从Simulink序列子系统到Simulink记分牌子系统金宝app的直接路径,则包含一个附加的监视器(如图中红色部分所示)来监视该信号。
该模块控制到DUT的序列事务流。
Driver -该模块由Simulink驱动子系统生成,并将每个事务从序列转换为行为DU金宝appT理解的信号。
Monitor -此模块由Simulink Monitor子系统生成,它对行为DUT的信号金宝app进行采样,并生成发送到UVM记分牌的事务。
Monitor Input—如果您有一个预测器或从序列到记分牌子系统的直接连接,则会生成此模块。监视器输入对序列中的信号进行采样,并生成发送到UVM预测器或记分牌的事务。
这个模块是从你的Simulink预测器子系统中生成的。金宝app预测器代表了DUT的黄金模型。它从序列中接收输入,计算结果,并将结果驱动到计分板以与DUT结果进行比较。
有关UVM组件和结构的更多信息,请参见UVM参考指南.
当生成UVM组件时,HDL验证器从您的DUT、序列和计分板子系统生成SystemVerilog DPI (SV-DPI)组件,以及驱动程序、监控或预测子系统的可选SV-DPI组件(如果您的模型包括它们)。DPI生成的工件被放置在一个名为uvm_build
在您的工作目录中,它包括以下两个目录:
—该目录包含所有生成的DPI组件。top_model
_dpi_components
—该目录包括UVM测试台、生成的DUT和共享库。top_model
_uvm_testbench
在哪里
是顶级Simulink模型的名称。金宝app可以通过设置top_model
buildDirectory
财产的uvmcodegen.uvmconfig
配置对象。
的
目录包含顶层模型(DUT、序列、记分牌、驱动程序、监视器或预测器)中每个子系统的目录top_model
_dpi_components
.每个目录包括:子系统
_build
- SystemVerilog包文件,包含组件的函数声明子系统
_dpi_pkg.sv
—已生成的SystemVerilog组件子系统
_dpi.sv
DPI组件和扩展名为.c和.h的头文件
扩展名为.mat、.txt、.dmr、.tmw和.def的元数据和信息文件
用于将组件编译为.o和.so文件的makefile
的
目录包含多个子文件夹,用于生成各种UVM组件:top_model
_uvm_testbench
DPI_dut
-该文件夹包含SystemVerilog包、模块文件和。dll文件的副本
文件夹中。dut
_build
司机
(可选的)-如果您指定一个驱动子系统到uvmbuild
函数。该文件夹包含UVM驱动程序、SystemVerilog包的副本和来自
文件夹中。司机
_build
监控
(可选的)-如果您指定了监视子系统到uvmbuild
函数。该文件夹包含UVM监视器、SystemVerilog包的一个副本和来自
文件夹中。监控
_build
预测
(可选的)-如果您指定一个预测器子系统到uvmbuild
函数。该文件夹包含一个UVM预测器、一个SystemVerilog包的副本、一个预测器事务和来自
文件夹中。预测
_build
记分板
-该文件夹包含SystemVerilog包的副本和。dll文件
文件夹中。此文件夹还包括UVM计分板类、计分板配置对象和一个计分板事务,该事务定义了计分板的输入事务类型。记分板
_build
序列
-该文件夹包含SystemVerilog包的副本和。dll文件
文件夹中。这个文件夹还包括UVM序列类和一个序列事务,该事务定义了从排序器到驱动程序的事务类型。序列
_build
前
-这个文件夹包含SystemVerilog包和顶级Simulink模型的模块文件。金宝app此文件夹还包含用于执行html模拟器的脚本。
uvm_artifacts
—该文件夹包含SystemVerilog文件。
mw_
—该文件包含一个UVM代理,用于实例化序列、驱动程序和监视器。DUT
_agent.sv
mw_
—这个文件包括一个UVM环境,它实例化一个代理和一个记分牌。DUT
_environment.sv
mw_
-该文件定义了DUT SystemVerilog接口类型。它包含DUT输入和输出,以及时钟、复位和时钟使能信号的端口。DUT
_if.sv
mw_
—该文件包含一个直通UVM监控器。监视器从驾驶员向记分牌或预测器采样信号。DUT
_monitor_input.sv
mw_
-这个文件包括一个UVM测试,它实例化一个环境和序列。测试模块通过调用来启动事务DUT
_test.svseq.start
.
mw_dpi_types_pkg.sv
—该文件包含生成的SystemVerilog类型的定义,例如枚举
和结构体
,由UVM组件接口公开。只有使用这些类型的UVM组件才会导入这个包。
mw_
—该文件默认包含直通UVM驱动程序。当指定一个驱动子系统时DUT
_driver.svuvmbuild
函数时,该模块包括一个调度程序和对DPI组件的API调用
.司机
_dpi_pkg.sv
mw_
—该文件包含一个直通UVM监控器。监视器从DUT采样信号到计分板。的监视器子系统时DUT
_monitor.svuvmbuild
函数时,该模块包括一个调度程序和对dpi组件的API调用
.监控
_dpi_pkg.sv
该图像显示了为名为drv_and_mon_uvmtb
.
金宝app支持的Simulin金宝appk数据类型转换为SystemVerilog数据类型,如下表所示。
生成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时) |
定点 | 端口被符号扩展为内置的C类型,例如 |
逻辑向量长度( |
位向量长度( |
单 |
shortreal |
||
双 |
真正的 |
||
复杂的 |
您可以选择SystemVerilog |
||
向量,矩阵 | 您可以选择SystemVerilog阵列或标量端口。要在这些选项中进行选择,请在配置参数对话框的左侧窗格中选择代码生成>SystemVerilog DPI,然后选择矩阵和向量端口的标量化参数。 例如,一个两元素类型的向量 输入逻辑[31:0] 当您选择矩阵和向量端口的标量化,生成的SystemVerilog包括这两个端口,每个端口的类型 输入逻辑[31:0]vecInput_0,输入逻辑[31:0]vecInput_1 当生成向量和数组端口时,编码器按列长顺序将矩阵扁平化。 |
||
nonvirtual总线 | 您可以选择SystemVerilog |
||
枚举数据类型 | 枚举 |
默认情况下,HDL验证器在SystemVerilog中将矩阵和向量转换为一维数组。例如,Simulink中的4 × 2矩阵在SystemVeril金宝appog中被转换为一个由8个元素组成的一维数组。要在SystemVerilog接口中生成多个标量端口,请选择矩阵和向量端口的标量化配置参数中。
的uvmbuild
函数忽略没有指定为DUT、序列、记金宝app分牌、驱动程序、监视器或预测子系统的Simulink组件。
您可以在任何子系统内部使用反馈循环,但不能在它们之间使用。
序列、记分板和预测子系统必须以单一的速率运行,并且它们的子系统的基本采样时间必须相等。有关示例时间的更多信息,请参见系统中的采样时间(金宝app模型).
驱动、DUT和监控子系统的基本采样时间必须相等。它们的端口可以是多速率的,但最大公约数(GCD)或基本采样时间必须相同。
序列、计分板和预测子系统的采样时间必须大于或等于驱动程序、DUT和监视器的基本采样时间。