主要内容

生成一个共同仿真模型

需求

什么是共同仿真模型?

联合仿真模型是一个自动生成的Simulink金宝app®为Simulink仿真和与HDL模拟器共同仿真设计配金宝app置的模型。HDL Coder™支金宝app持协同仿真模型的自动生成,作为测试台生成过程的一部分。

协同仿真模型包括:

  • 设计的行为模型,在Simulink子系统中实现。金宝app

  • 一个相应的高密度脂蛋白Cosimulation块,配置为使用HDL验证器共同模拟设计。HDL编码器配置高密度脂蛋白Cosimulation块的使用与任何导师图形®ModelSim®抑扬顿挫®或Xilinx®Vivado®模拟器。

  • 测试输入数据,从您指定的测试台架刺激计算。

  • 范围块,允许您观察和比较DUT和高密度脂蛋白cosimulation输出,以及这些信号之间的任何错误。

  • Goto和From块捕获来自DUT的刺激和响应信号,并使用这些信号来驱动联合模拟。

  • 一种比较/断言机制,用于报告原始DUT输出和联合模拟输出之间的差异。

除了生成的模型之外,HDL Coder还生成一个TCL脚本,用于启动和配置协同仿真工具。脚本文件中的注释文档时钟、重置以及编码器为协同仿真工具定义的其他计时信号信息。

使用模型配置参数生成一个联合仿真模型

本例演示了生成协同仿真模型的过程。这个例子模型,hdl_cosim_demo1,实现了一个简单的乘法和累加(MAC)算法。在MATLAB中输入名称打开模型®命令行:

hdl_cosim_demo1

下图是顶层模型。

DUT是MAC子系统。

在生成试验台的过程中,进行了协同仿真模型的生成。作为最佳实践,在生成测试平台之前生成HDL代码,如下所示:

  1. 打开“配置参数”对话框。右键单击Simulink模型的空白区域并选择金宝app型号配置参数

  2. HDL代码生成窗格的“配置参数”对话框中,设置生成HDLhdl_cosim_demo1 / MAC

  3. 点击应用

  4. 点击生成.HDL Coder显示进度消息,如下面的清单所示:

    ###应用HDL代码生成控制语句HDL检查完成,0错误,0警告和0消息。###开始VHDL代码生成###工作在hdl_cosim_demo1/MAC作为hdlsrc\MAC。vhd ### HDL代码生成完成

接下来,配置测试台选项,以包括生成一个共同仿真模型:

  1. 选择HDL代码生成>试验台窗格中的“配置参数”对话框。

  2. 选择Cosimulation模型复选框。然后选择你的仿真工具在下拉菜单中。

  3. 配置所需的试验台选项。HDL Coder在生成的脚本文件中记录选项设置(参见Cosimulation脚本文件).

  4. 点击应用

接下来,生成测试台代码和协同仿真模型:

  1. 在底部试验台窗格中,单击生成测试台.HDL Coder显示进度消息,如下面的清单所示:

    开始生成新的协同仿真模型:gm_hdl_cosim_demo1_mq0生成新的协同仿真tcl脚本:hdlsrc/gm_hdl_cosim_demo1_mq0_tcl。共仿真模型生成完成。###生成测试台:hdlsrc\MAC_tb。vhd ###请稍等…### HDL测试平台生成完成

    当测试台生成完成后,HDL Coder打开生成的协同仿真模型。下图显示了生成的模型。

  2. 保存生成的模型。生成的模型只存在于内存中,除非保存它。

正如代码生成消息所示,HDL Coder除了通常的HDL测试平台文件外,还生成了以下文件:

  • 一个共同模拟模型(gm_hdl_cosim_demo1_mq

  • 包含TCL协同模拟脚本和有关协同模拟模型设置的信息的文件(gm_hdl_cosim_demo1_mq_tcl.m

生成的文件名派生自模型名,如中所述生成的协同仿真模型和脚本的命名约定

下一部分,生成模型的结构,描述了模型的特点。在运行联合模拟之前,要熟悉这些特性。

生成模型的结构

您可以使用位于生成模型中的控件设置和启动一个联合仿真。本节将研究从示例MAC子系统生成的模型。

模拟路径

该模型由两条并行信号路径组成。的模拟路径,位于模型窗口的上半部分,与原始DUT几乎相同。该仿真路径的目的是执行常规的Simulink仿真,并提供一个参考信号,以便与联合仿真结果进行比较。金宝app仿真路径如下图所示。

两个子系统被标记为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全名样品时间数据类型,以及模型所需的其他字段。HDL编码器也配置其他高密度脂蛋白Cosimulation的块参数。时间尺度而且Tcl窗格。

提示

HDL编码器配置生成的高密度脂蛋白Cosimulation块。共享内存连接方法。

开始模拟器控制

ModelSim或incent®用户-双击Start Simulator控件时,它会启动所选的协同仿真工具,并将启动命令传递给该工具。“启动模拟器”图标显示启动命令,如下图所示。

双击“开始模拟器”图标时执行的命令会启动并设置联合仿真工具,但它们不会启动实际的联合仿真。启动协同模拟描述如何使用生成的模型运行联合模拟。

Vivado模拟器用户-双击“开始模拟器”控件时,它将重新生成共享库(DLL文件)。“开始模拟器”图标显示该信息,如下图所示。

仿真与共仿真路径之间的信号路由

生成的模型使用Goto和From块在仿真和联合仿真路径之间路由信号。的Goto块ToCosimSrc子系统将每个DUT输入信号路由到相应的From块FromCosimSrc子系统。下图显示了每个子系统中的Goto和From块。

上面的图显示了简单的标量输入。复杂和矢量数据类型的信号需要进一步处理。看到生成的协同仿真模型中的复信号和矢量信号获取更多信息。

控制断言和范围显示

比较子系统允许您控制作用域上信号的显示,以及来自断言的警告消息。如下图所示比较子系统gm_hdl_cosim_demo1_mq0模型。

对于DUT的每个输出,HDL Coder生成一个断言检查子系统(Assert_OutN).子系统计算差值(犯错)之间的原始DUT输出(dut裁判)和相应的协同仿真输出(cosim).子系统将比较结果路由到断言块。如果比较结果不为零,则断言块报告差异。

如下图所示Assert_Out1子系统gm_hdl_cosim_demo1_mq0模型。

该子系统还路由dut裁判cosim,犯错信号传递给Scope,以便在模型的顶层显示。

默认情况下,生成的联合仿真模型启用所有断言并显示所有作用域。使用按钮上的比较子系统禁用断言或隐藏作用域。

提示

断言消息是警告,不会停止模拟。

启动协同模拟

运行与生成模型的联合仿真:

  1. 双击比较子系统来配置作用域和断言设置。

    控件上的按钮可以禁用作用域显示或断言警告比较子系统(如下图所示)

  2. 双击“开始模拟器”控件。

    Start Simulator控件启动HDL模拟器(在本例中,HDL Verifier用于Mentor Graphics ModelSim)。

    HDL模拟器依次执行启动脚本。在本例中,启动脚本由位于中的TCL命令组成gm_hdl_cosim_demo1_mq0_tcl.m.当HDL模拟器完成启动脚本的执行时,它将显示如下所示的消息。

    #准备好合作了…
  3. 在生成模型的S金宝appimulink编辑器中,开始仿真。

    在共同模拟运行时,HDL模拟器显示如下所示的消息。

    #运行Simulin金宝appk Cosimulation块。#芯片名称:——> hdl_cosim_demo1/MAC #目标语言:——> vhdl #目标目录:——> hdlsrc #周五6月05日东部夏令时4:26:34 PM 2009 #外部接口请求停止模拟。#做

    在共同模拟结束时,如果您启用了范围显示,比较范围将显示以下信号:

    • cosim输出的结果信号高密度脂蛋白Cosimulation块。

    • dut裁判:来自DUT的参考输出信号。

    • 犯错:这两个输出之间的差值(误差)。

    下图显示了这些信号。

Cosimulation脚本文件

生成的脚本文件有两部分:

  • 注释部分,记录与共同模拟相关的模型设置。

  • 将几行TCL代码存储到变量中的函数,tclCmds.当您启动一个联合模拟时,联合模拟工具将执行这些命令。

标题评论部分

属性生成的脚本文件的注释部分,如下所示hdl_cosim_demo1模型:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 自动生成cosimulation tclstart脚本  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 源模型:hdl_cosim_demo1。生成的模型:gm_hdl_cosim_demo1。协同仿真模型:gm_hdl_cosim_demo1_mq。mdl % %源DUT: gm_hdl_cosim_demo1_mq/MAC %协同DUT: gm_hdl_cosim_demo1_mq/MAC_mq % %文件位置:hdlsrc/gm_hdl_cosim_demo1_mq_tcl. mdl % %源DUT: gm_hdl_cosim_demo1_mq/MAC %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 %模拟金宝app器(N = 10 ) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ResetHighAt:(ClockLowTime + ResetLength + HoldTime) % ResetRiseEdge : 27ns % ResetType : async % ResetAssertedLevel : 1 % % ClockEnableHighAt : (ClockLowTime + ResetLength + ClockEnableDelay + HoldTime) % ClockEnableRiseEdge : 37ns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

评论部分包括以下各小节:

  • 头的评论:这个部分记录了源和生成的模型以及源和生成的DUT的文件名。

  • 试验台设置:本节记录makehdltb影响协同仿真模型生成的属性值。生成的TCL脚本使用这些值来初始化协同模拟工具。

  • 示例时间信息:接下来的两节记录了模型的基本采样时间和过采样因子。HDL Coder使用ModelBaseSampleTime而且OverClockFactor将模型的时钟周期映射到HDL协同仿真时钟周期。

  • 时钟、时钟使能和复位波形:本节记录电路占空比的计算方法clkclk_enable,重置信号。

TCL命令部分

属性生成的脚本文件的TCL命令部分如下所示hdl_cosim_demo1模型:

函数tclCmds = gm_hdl_cosim_demo1_mq_tcl tclCmds = {'do MAC_compile.do',…编译生成的代码'vsimulink work.MAC',…金宝app%启动共模拟'add wave /MAC/clk',…为芯片输入信号添加wave命令' Add wave /MAC/reset',…'add wave /MAC/clk_enable'…'add wave /MAC/In1',…'add wave /MAC/In2',…'add wave /MAC/ce_out',…为芯片输出信号添加wave命令' Add wave /MAC/Out1',…'set UserTimeUnit ns',…%设置模拟时间单位“放置”,…’上面写着“准备好共同模拟……”,…… }; end

生成的协同仿真模型中的复信号和矢量信号

复杂或矢量数据类型的输入信号需要在共模拟路径中插入额外的元素。本节描述这些元素。

复杂的信号

生成的联合仿真模型自动将复杂输入分解为实部和虚部。如下图所示FromCosimSrc接收两个复杂输入信号的子系统。子系统将输入分解为实部和虚部,然后将它们传递给子系统输出。

该模型在整个协同仿真路径中保持实分量和虚分量的分离。的比较子系统对实信号和虚信号分量分别进行比较和范围显示。

矢量信号

生成的协同仿真模型将矢量输入压平。如下图所示FromCosimSrc接收两个2维矢量输入信号的子系统。在将输入传递给子系统输出之前,子系统将输入压扁为标量。

从命令行生成一个协同仿真模型

要从命令行生成联合仿真模型,请传递GenerateCosimModel属性makehdltb函数。GenerateCosimModel获取以下属性值之一:

  • “ModelSim”:生成一个为HDL验证器配置的协同仿真模型,用于Mentor Graphics ModelSim。

  • “尖锐”:生成一个为HDL验证器配置的协同仿真模型,用于Cadence Incisive。

  • “Vivado模拟器”:生成一个为HDL验证器配置的协同仿真模型,用于Xilinx Vivado。

在以下命令中,makehdltb生成一个为HDL验证器配置的协同仿真模型,用于Mentor Graphics ModelSim。

makehdltb(“hdl_cosim_demo1 / MAC”、“GenerateCosimModel”,“ModelSim”);

生成的协同仿真模型和脚本的命名约定

生成的联合仿真模型的命名约定是

前缀_modelname_toolid_后缀,地点:

  • 前缀是字符串通用汽车

  • modelname生成模型的名称。

  • toolid是一个标识符,指示HDL模拟器选择协同仿真模型用于:选择。有效的toolid字符串是“mq”“在”,或“与”

  • 后缀为每个生成的模型提供唯一名称的整数。后缀随着给定模型的每个连续测试台架生成而递增。例如,如果原始模型名称为测验,则生成的协同仿真模型名顺序为gm_test_toolid_0gm_test_toolid_1等等。

生成的协同模拟脚本的命名约定与模型的命名约定相同,除了文件扩展名是.m

协同仿真模型生成的局限性

当您为协同仿真模型生成配置模型时,请注意以下限制:

  • 显式地将源块的采样时间指定给模拟路径中的DUT。使用默认采样时间(-1)可能会在生成模型的协同仿真路径上造成样本时间传播问题。

  • HDL Coder软件不支持连续采样时间的协同仿真模型生成。金宝app不使用采样次数0在模拟路径的源块中。

  • 如果你设置时钟输入多个, HDL Coder不支持生成协同仿真模金宝app型。

  • 组合输出路径(由生成的代码中缺少寄存器引起)在协同模拟中有一个额外的周期延迟。为了避免仿真输出和联合仿真输出之间的比较差异,使用了允许直接馈通选项港口面板高密度脂蛋白Cosimulation自动选择Block。

    或者,您可以通过指定输出流水线来避免延迟(参见OutputPipeline).这将在代码生成期间完全注册输出。

  • 类不支持双数据类型金宝app高密度脂蛋白Cosimulation块。在生成HDL代码和协同仿真模型时,避免在仿真路径中使用双重数据类型。