生成HDL代码覆盖使用Simulink和Mentor Graphics金宝app ModelSim的

这个例子说明了如何使用实现和Simulink®的一个的ModelSim®HDL巡航控制器设计的完整代码覆盖率。金宝app

设置示例文件

创建您的MATLAB®安装文件夹的,可以在其中复制示例文件范围以外的文件夹中。该文件夹必须是可写的。

设置你在MATLAB当前文件夹中创建的文件夹。

复制全部位于文件matlabroot \工具箱\ edalink \基础\ hdllink \ demo_src \ cruise_control到您创建的MATLAB中执行以下命令的文件夹:

copyCosimDemoFiles('巡航控制');

打开模型

与此模型相关联的HDL代码经由HDL编码器™从巡航控制器的Simulink的行为模型生成的。金宝app本发明提供一种测试台模型由HDL协同仿真块的输出与原始的行为块进行比较,以验证HDL代码的正确性。在测试台模型的测试用例通过Simulink设计验证™从实现完整的模型覆盖原有的行为模式产生。金宝app这个例子说明,这些自动生成的测试用例也实现完整的HDL代码覆盖率。你不需要安装Simulink设计金宝app验证程序来运行这个例子。请注意,代码覆盖率功能是ModelSim的PE的可选功能。确保您的ModelSim的版本有正确的代码覆盖率许可证来运行这个例子。通过执行打开试验台型号:

open_system('cruise_control_modelsim');

观察联合仿真阻止设置

打开的协同仿真块“hdl_cruise_control”掩模,并选择“模拟”选项卡。此选项卡上的设置显示在下面的图片:

注意,在“预模拟Tcl命令”字段,Tcl的力指令被用来生成用于控制信号的波形:

  1. 时钟的周期为10纳秒

  2. 时钟使能信号在37 ns是活动的。

  3. 复位信号被从0到27纳秒断言。

该选项的目的是为了正确对齐行为块“cruise_control”和HDL信号的信号,使他们能够进行比较和验证直接,无需额外的延误“时间协同仿真开始之前运行HDL仿真器”。这个例子说明如何设置在下一节此选项。

联合仿真起始时间应与HDL时钟的下降沿对齐,以避免出现竞争状况,因为HDL信号在HDL时钟的上升沿改变它们的值。因此,该参数的值应为10纳秒时钟周期的整数倍。

我们也想运行的HDL设计过去复位,但第一个有效时钟沿前停止通过clk_enable启用。这是行为块,其仿真开始后立即更新其内部状态相匹配。

基于上述考虑,选择“时间运行协同仿真开始前的HDL仿真器”设置为40纳秒。当运行的每个测试用例,“预模拟Tcl命令”是在HDL仿真首先施加。然后,HDL仿真前进了40纳秒其时间的协同仿真开始前施加复位,时钟和clk_enable信号。

推出的ModelSim的联合仿真

下面的ModelSim Tcl命令编译HDL代码,并启用代码覆盖加载模拟。

tclCmds = {“VL​​IB工作”...%创建的ModelSim库'VCOM +盖PI_Controller.vhd'...用代码覆盖率%编译VHDL代码启用'VCOM +覆盖Controller.vhd'...用代码覆盖率%编译VHDL代码启用'v金宝appsimulink -coverage work.Controller'...%负载模拟“看跌期权‘准备联合仿真......’”...};%现在我们推出HDL模拟器和等待它准备好了。VSIM('tclstart',tclCmds);DISP(“等待HDL仿真器开始......”);的ProcessID = pingHdlSim(240);DISP(“HDL仿真器准备协同仿真。”);

运行仿真

有测试台模型9个测试用例。本示例运行这个模型中的所有测试用例生成代码覆盖率结果。每次完成联合仿真会话后,就没有必要重新启动HDL仿真器,因为HDL信号是在每次模拟开始正常复位。每个模拟之后,它需要的ModelSim的时间来更新覆盖率结果。为了防止这一进程,并在未来协同仿真会话之间的潜在冲突,在短暂的停顿是两个连续的模拟之间增加。

对于K = 1:9的%选择测试用例signalbuilder('cruise_control_modelsim /输入''activegroup'中,k)%模拟运行SIM('cruise_control_modelsim');%确认的ModelSim已完成先前模拟暂停(5);结束

观察代码覆盖率结果

在模拟过程中,看在的ModelSim代码覆盖窗口中的结果。请注意,代码覆盖率的增加,因为这示例循环通过所有的测试用例。当模拟完成后,100%的代码覆盖率达到。