生成一个协同仿真模型
需求
要使用此功能,您的安装必须包含HDL Verifier™许可证。
确保DUT子系统没有未连接的输出端口。看到终止未连接的块输出和注释块的使用.
什么是协同仿真模型?
联合仿真模型是一个自动生成的Simulink®模型配置为Simulink仿真和您的设计与HDL模拟器的联合仿真。HDL Coder™支持自动生成联合仿真模型,作为测试台架生成过程的一部分。
协同仿真模型包括:
设计的行为模型,在Simulink子系统中实现。
一个相应的高密度脂蛋白Cosimulation块,配置为使用HDL验证器共同模拟设计。HDL Coder配置高密度脂蛋白Cosimulation块,以便与Mentor Graphics一起使用®ModelSim®,节奏敏锐的®,或者Xilinx®Vivado®模拟器。
测试输入数据,从指定的测试台架刺激计算。
范围块,它允许您观察和比较DUT和高密度脂蛋白cosimulation输出,以及这些信号之间的任何错误。
Goto和From模块捕获来自DUT的刺激和响应信号,并使用这些信号来驱动协同模拟。
一种比较/断言机制,报告原始DUT输出和联合仿真输出之间的差异。
除了生成的模型之外,HDL Coder还生成一个TCL脚本,用于启动和配置您的协同仿真工具。脚本文件文档时钟、重置和其他由编码器为协同仿真工具定义的计时信号信息中的注释。
使用模型配置参数生成协同仿真模型
这个例子演示了生成协同仿真模型的过程。模型的例子中,hdl_cosim_demo1
,实现了一个简单的乘法和累积(MAC)算法。在MATLAB中输入名称打开模型®命令行:
hdl_cosim_demo1
下图显示了顶层模型。
DUT是MAC子系统。
协同仿真模型的生成在试验台的生成过程中进行。作为最佳实践,在生成测试台架之前生成HDL代码,如下所示:
打开“配置参数”对话框。右键单击Simulink模型的留白并选择模型配置参数.
在HDL代码生成“配置参数”对话框的“配置参数”窗口中,设置产生高密度脂蛋白来
hdl_cosim_demo1 / MAC
.点击应用.
点击生成.HDL Coder显示进度消息,如下表所示:
应用HDL代码生成控制语句启动HDL检查。HDL检查完成,显示0错误,0警告和0消息。开始VHDL代码生成##工作在hdl_cosim_demo1/MAC作为hdlsrc\MAC。HDL代码生成完成。
接下来,配置测试台架选项,以包括协同仿真模型的生成:
选择HDL代码生成>试验台“配置参数”对话框中的“配置参数”。
选择Cosimulation模型复选框。然后选择你仿真工具在下拉菜单中。
配置所需的测试台架选项。HDL Coder在生成的脚本文件中记录选项设置(参见协同模拟脚本文件).
点击应用.
接下来,生成测试台代码和协同仿真模型:
在底部试验台窗格中,单击生成测试工作台.HDL Coder显示的进度信息如下表所示:
###开始生成测试工作台###生成新的协同仿真模型:gm_hdl_cosim_demo1_mq0。生成新的协同仿真tcl脚本:hdlsrc/gm_hdl_cosim_demo1_mq0_tcl。协同仿真模型生成完成。###生成测试台:hdlsrc\MAC_tb。vhd ###请稍候…HDL测试平台生成完成。
当测试台架生成完成后,HDL Coder打开生成的共模拟模型。下图显示了生成的模型。
保存生成的模型。生成的模型只存在于内存中,除非您保存它。
如代码生成消息所示,除了通常的HDL测试工作台文件外,HDL Coder还生成以下文件:
一个协同仿真模型(
gm_hdl_cosim_demo1_mq
)一个包含TCL协同仿真脚本和关于协同仿真模型设置的信息的文件(
gm_hdl_cosim_demo1_mq_tcl.m
)
生成的文件名派生自模型名,如中所述生成的协同仿真模型和脚本的命名约定.
在下一节中,生成模型的结构,描述了模型的特点。在运行协同模拟之前,要熟悉这些特性。
生成模型的结构
您可以使用位于生成模型中的控件来设置和启动联合仿真。本节研究从示例MAC子系统生成的模型。
模拟路径
该模型由两条并行信号路径组成。的模拟路径,位于模型窗口的上半部分,与原来的DUT几乎相同。仿真路径的目的是执行一个普通的Simulink仿真,并为联合仿真结果的比较提供一个参考信号。仿真路径如下图所示。
两个子系统被标记为ToCosimSrc
而且ToCosimSink
请勿更改模拟路径的性能。它们的目的是捕获DUT的刺激和响应信号,并将它们路由到和从高密度脂蛋白cosimulation块(见仿真与共仿真路径之间的信号路由).
Cosimulation路径
的cosimulation路径,位于模型窗口的下半部分,包含生成的高密度脂蛋白Cosimulation块。下图显示了协同仿真路径。
的FromCosimSrc
子系统接收驱动DUT的相同输入信号。在gm_hdl_cosim_demo1_mq0
模型时,子系统简单地将输入传递到高密度脂蛋白Cosimulation块。其他一些数据类型的信号在此阶段需要进一步处理(参见仿真与共仿真路径之间的信号路由).
的比较
位于协同仿真路径末端的子系统将协同仿真输出与仿真路径产生的参考输出进行比较。中的断言块,如果比较检测到不一致比较
子系统显示警告消息。控件的断言和控制其他操作比较
子系统。看到控制断言和范围显示获取详细信息。
HDL Coder填充高密度脂蛋白Cosimulation块与DUT的编译I/O接口。下图显示港口面板的Mac_mq
高密度脂蛋白Cosimulation块。
HDL Coder设置完整的高密度脂蛋白的名字,样品时间,数据类型,以及模型所需的其他字段。HDL Coder也配置其他高密度脂蛋白Cosimulation块参数下的时间尺度而且Tcl窗格。
提示
HDL Coder配置生成的高密度脂蛋白Cosimulation块的共享内存
连接方法。
开始模拟控制
ModelSim或深刻的®用户—当您双击Start Simulator控件时,它将启动所选的协同仿真工具,并将启动命令传递给该工具。启动模拟器图标显示启动命令,如下图所示。
双击Start Simulator图标时执行的命令会启动并设置协同模拟工具,但它们不会启动实际的协同模拟。启动一个Cosimulation描述如何使用生成的模型运行联合仿真。
Vivado模拟器用户-当您双击启动模拟器控件时,它会重新生成一个共享库(DLL文件)。启动模拟器图标显示该信息,如下图所示。
仿真与共仿真路径之间的信号路由
生成的模型使用Goto和From块在仿真和协同仿真路径之间路由信号。例如,Goto块在ToCosimSrc
子系统将每个DUT输入信号路由到相应的From块FromCosimSrc
子系统。下图显示了每个子系统中的Goto和From块。
上面的图显示了简单的标量输入。复杂和矢量数据类型的信号需要进一步处理。看到生成的协同仿真模型中的复信号和矢量信号为进一步的信息。
控制断言和范围显示
的比较
子系统允许您控制作用域上信号的显示,以及来自断言的警告消息。下图显示比较
子系统的gm_hdl_cosim_demo1_mq0
模型。
对于DUT的每个输出,HDL Coder生成一个断言检查子系统(Assert_OutN
).子系统计算差值(犯错
)之间的原始DUT输出(dut裁判
)和相应的共仿真输出(cosim
).子系统将比较结果路由到断言块。如果比较结果不为零,则Assertion块报告差异。
下图显示Assert_Out1
子系统的gm_hdl_cosim_demo1_mq0
模型。
该子系统还路由dut裁判
,cosim
,犯错
向Scope发送信号,以便在模型的顶层显示。
默认情况下,生成的联合仿真模型启用所有断言并显示所有scope。的按钮比较
子系统来禁用断言或隐藏作用域。
提示
断言消息是警告,并不停止模拟。
启动一个Cosimulation
使用生成的模型运行联合仿真:
双击
比较
子系统来配置作用域和断言设置。控件上的按钮,如果您想在启动协同模拟之前禁用作用域显示或断言警告
比较
子系统(如下图所示)。双击Start Simulator控件。
启动模拟器控件启动您的HDL模拟器(在本例中,与Mentor Graphics ModelSim一起使用的HDL验证器)。
HDL模拟器依次执行启动脚本。在这种情况下,启动脚本由位于的TCL命令组成
gm_hdl_cosim_demo1_mq0_tcl.m
.当HDL模拟器完成启动脚本的执行时,它会显示如下的消息。#准备好共同模拟…
在生成的模型的Simulink编辑器中,开始仿真。
在运行联合仿真时,HDL模拟器显示如下消息。
#运行Simulink Cosimulation块。#芯片名称:——> hdl_cosim_demo1/MAC #目标语言:——> vhdl #目标目录:——> hdlsrc # Fri Jun 05东部夏令时4:26:34 PM #外部接口请求停止模拟。#做
在联合仿真结束时,如果您启用了Scope displays,比较作用域将显示以下信号:
cosim
:输出的结果信号高密度脂蛋白Cosimulation块。dut裁判
: DUT的参考输出信号。犯错
:两个输出的差值(误差)。
下图显示了这些信号。
协同模拟脚本文件
生成的脚本文件有两个部分:
注释部分,记录与协同仿真相关的模型设置。
将几行TCL代码存储到一个变量中的函数,
tclCmds
.在启动联合模拟时,联合模拟工具会执行这些命令。
头评论部分
控件生成的脚本文件的注释部分hdl_cosim_demo1
模型:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 自动生成cosimulation tclstart脚本 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 源模型:hdl_cosim_demo1。生成的模型:gm_hdl_cosim_demo1。mdl % Cosimulation Model: gm_hdl_cosim_demo1_mq。mdl % %源DUT: gm_hdl_cosim_demo1_mq/MAC % Cosimulation DUT: gm_hdl_cosim_demo1_mq/MAC_mq % %文件位置:hdlsrc/gm_hdl_cosim_demo1_mq_tcl. mdl % %m %创建:2009-06-16 10:51:01 % %由MATLAB 7.9和1.6 HDL编码器 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ClockName: clk % ResetName:重置% ClockEnableName: clk_enable % % ClockLowTime: 5 ns % ClockHighTime: 5 ns % ClockPeriod: 10 ns % % ResetLength: 20 ns % ClockEnableDelay: 10 ns % HoldTime:2 ns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ModelBaseSampleTime: 1% OverClockFactor:1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 的映射DutBaseSampleTime ClockPeriod % % N = (ClockPeriod / DutBaseSampleTime) * OverClockFactor % 1秒10 ns模型对应的HDL %模拟器(N = 10 ) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ResetHighAt:(ClockLowTime + ResetLength + HoldTime) % ResetRiseEdge : 27ns % ResetType : async % ResetAssertedLevel : 1 % % ClockEnableHighAt : (ClockLowTime + ResetLength + ClockEnableDelay + HoldTime) % ClockEnableRiseEdge : 37ns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
评论部分包括下列各小节:
头的评论:本节记录源和生成的模型的文件名,以及源和生成的DUT的文件名。
试验台的设置:本节记录
makehdltb
影响协同仿真模型生成的属性值。生成的TCL脚本使用这些值来初始化协同模拟工具。样品时间信息:接下来的两节记录了模型的基本采样时间和过采样因子。高密度脂蛋白编码器使用
ModelBaseSampleTime
而且OverClockFactor
将模型的时钟周期映射到HDL联合仿真时钟周期。时钟,时钟使能和复位波形本节记录了负载比的计算方法
clk
,clk_enable
,重置
信号。
TCL命令部分
控件生成的脚本文件的TCL命令部分hdl_cosim_demo1
模型:
函数tclCmds = gm_hdl_cosim_demo1_mq_tcl tclCmds = {'do MAC_compile.do',…编译生成的代码'vsimulink work.MAC',…%启动协同模拟'add wave /MAC/clk',…为芯片输入信号添加wave命令' Add wave /MAC/reset',…“添加/ MAC / clk_enable浪潮”,……“添加波/ MAC /三机一体”,……“添加波/ MAC / In2”,……“添加/ MAC / ce_out浪潮”,……为芯片输出信号添加wave命令' Add wave /MAC/Out1',…UserTimeUnit ns,这……%设置模拟时间单位“put”“”,…’写的是“准备好合作了……” }; end
生成的协同仿真模型中的复信号和矢量信号
复杂或矢量数据类型的输入信号需要在协同仿真路径中插入额外的元素。本节将介绍这些元素。
复杂的信号
生成的联合仿真模型自动将复杂的输入分解为实部和虚部。如下图所示FromCosimSrc
接收两个复杂输入信号的子系统。子系统将输入分为实部和虚部,然后将它们传递给子系统输出。
该模型在整个协同仿真过程中保持实分量和虚分量的分离。的比较
子系统为实信号和虚信号组件执行单独的比较和单独的范围显示。
矢量信号
生成的联合仿真模型使矢量输入变平。如下图所示FromCosimSrc
接收两个二维矢量输入信号的子系统。子系统将输入扁平化为标量,然后将它们传递给子系统输出。
从命令行生成一个协同仿真模型
要从命令行生成联合仿真模型,请传递GenerateCosimModel
财产makehdltb
函数。GenerateCosimModel
获取以下属性值之一:
“ModelSim”
:生成一个为HDL Verifier配置的联合仿真模型,用于Mentor Graphics ModelSim。“尖锐”
:生成一个配置为HDL Verifier的协同仿真模型,用于Cadence Incisive。“Vivado模拟器”
:生成一个配置为HDL Verifier的协同仿真模型,用于Xilinx Vivado。
在下面的命令中,makehdltb
生成一个为HDL Verifier配置的联合仿真模型,用于Mentor Graphics ModelSim。
makehdltb(“hdl_cosim_demo1 / MAC”、“GenerateCosimModel”,“ModelSim”);
生成的协同仿真模型和脚本的命名约定
生成的联合仿真模型的命名约定是
前缀
_modelname
_
toolid
_
后缀,地点:
前缀
是字符串通用汽车
.modelname
生成模型的名称。toolid
指示由?选择的HDL模拟器的标识符协同仿真模型用于:选择。有效的toolid
字符串是“mq”
,“在”
,或“与”
.后缀为每个生成的模型提供惟一名称的整数。后缀随着给定模型的每个连续测试台架的生成而增加。例如,如果原始模型名称是
测验
,则生成的联合仿真模型名称顺序为gm_test_toolid_0
,gm_test_toolid_1
,等等。
生成的协同模拟脚本的命名约定与模型的命名约定相同,除了文件扩展名是.m
.
协同仿真模型生成的局限性
当您为协同仿真模型生成配置一个模型时,请注意以下限制:
显式地指定模拟路径中的DUT的源块的采样时间。使用默认采样时间(
-1
)可能会在生成模型的共仿真路径上造成样本时间传播问题。HDL Coder软件不支持连续采样时间来生成协同仿真模型。不使用采样时间
0
或正
在模拟路径的源块中。如果你设置时钟输入来
多个
, HDL Coder不支持生成协同仿真模型。组合输出路径(由生成代码中缺少寄存器引起)在协同模拟中有一个额外周期的延迟。为避免仿真输出和共仿真输出之间的比较存在差异,将允许直接引线选择在港口面板的高密度脂蛋白CosimulationBlock被自动选中。
或者,您可以通过指定输出流水线来避免延迟(参见OutputPipeline).这将在代码生成期间完全注册输出。
类不支持双数据类型高密度脂蛋白Cosimulation块。在生成HDL代码和联合仿真模型时,避免在仿真路径中使用双重数据类型。