从Simulink Test生成SystemVerilog中的功能覆盖率金宝app验证
调用
这个例子演示了如何使用模型模拟测试投影仪控制系统,以及如何为一些在test Sequence块中指定的控制器高级需求生成SystemVerilog DPI组件。这将允许用于模型仿真的需求验证在HDL模拟器中以最小的工作量被重用。
模型取自实例投影仪控制器测试使用验证和实时测试(金宝app仿真软件测试)随Simulink Tes金宝appt™一起发布,并简化为仅显示需求场景4。
要了解有关验证语句的更多信息,请参见使用验证语句评估模型仿真(金宝app仿真软件测试).
其他先决条件
除了所述的产品需求外,本例还要求:
支持金宝app的HDL模拟器。看到UVM和DPI组件生成要求.
支持金宝app的C编译器。看到选择并配置C或c++编译器(金宝app仿真软件编码器).
概述
测试使用执行顶级控制器模型的测试序列根据其需求验证控制器。控制器采用按钮输入和温度传感器输入,输出控制风扇、风扇转速和投影灯的信号。
目标是生成一个SystemVerilog DPI组件,该组件捕获控制器的高级需求编号4。有关需求的更多信息,请参阅word文档sltestProjectorCtrlReqs.docx
在上面提到的例子中。
要求4在投影仪温度(Tproj)较高时尝试打开和关闭投影仪。该场景在Test Sequence块中有以下步骤:
设置投影仪温度为50摄氏度。
试着打开。
系统不应该打开。
将温度设置为50摄氏度。
试着关掉。
系统应该关闭。
下图显示了上述需求的测试台和如何验证
用于检查投影仪是否根据场景打开或关闭。
建立代码生成模型
模型和测试台是用SystemVerilog DPI系统目标文件之一(systemverilog_dpi_grt.tlc)预配置的。打开测试线束Req_scenario_4
通过执行:
测试文件=“svdpi_sltestProjectorCtrlTests.mldatx”;testHarness =“Req_scenario_4”;模型=“svdpi_sltestProjectorController”;open_system(模型)
testHarness sltest.harness.open(模型)
生成SystemVerilog DPI组件
在Req_scenario_4测试台架,右击Req_4子系统块,其中包含测试序列块和选择。C/ c++代码->构建这个子系统.
点击构建在出现的对话框中。
的C代码生成Req_4子系统,以及SystemVerilog DPI包装器和名为“Req_4_build/Req_4_dpi”的包文件。“Req_4_build/Req_4_dpi_pkg.sv”。
注意,一些验证警告将被触发,这将在后面解释。
或者你可以通过执行以下命令来生成组件:
slbuild (“Req_scenario_4 / Req_4”);
在HDL模拟器中运行生成的测试平台
对于本例,将使用ModelsSim/QuestaSim模拟器。有关如何运行测试台的详细说明,请参阅开始使用SystemVerilog DPI组件生成.
cdReq_4_build / dpi_tb!Vsim -c -do run_tb_mq.使用实例在控制台模式下运行ModelSim/QuestaSimcd. . / . .
检查HDL模拟输出并注意以下内容:
信息消息显示将为组件中的2个验证调用收集功能覆盖率
有一个关于控制器在温度高于限制时关闭失败的错误标记。
由于SystemVerilog的仿真结果与Simulink的仿真结果一致,所以该测试被标记为PASSED。金宝app
函数覆盖显示第一个验证调用实现了覆盖,但第二个验证调用没有实现覆盖。
总体功能覆盖目标没有达到。
误差与Simulink中的仿真结果一致(下图)。金宝app打开测试管理器,发现当温度超过限制时按下on_off按钮时,控制器无法关闭。要打开测试管理器,可以执行以下命令:
sltest.testmanager.load(测试文件);sltest.testmanager.view;
解决这个问题需要修改主模型中的OnOff检查子系统。另一个要求,verify_sc4_on
在Simulink Test和SystemVerilog覆盖结果中都显示了金宝app满意的结果。
追踪SystemVerilog错误返回到Simulink金宝app
如果您想跟踪生成错误的验证语句回到Simulink,您需要从错误消息中找到Simulink标识符(SID),如下所示:金宝app
一旦您在测试序列块中找到了步骤id的SID,您就可以使用一个函数来突出显示相应的块。执行如下命令:
金宝appSimulink.ID.hilite (“Req_scenario_4:32:60”);
这将突出显示相关的块,如下所示。
筛选一个特定的验证评估
为了在HDL模拟器中过滤任何验证评估状态检查,将您想要过滤的评估的SID作为plusargs参数提供给HDL模拟器。这样的过滤器将意味着没有错误,也不会为评估检查覆盖范围。例如,你可以过滤错误verify_sc4_off
通过将参数“+ req_scenario:32:60”提供给HDL模拟器。您可以通过一个环境变量来实现这一点,这样就不必修改生成的脚本。
清除影响SV模拟的环境变量setenvEXTRA_SVDPI_COMP_ARGSsetenvEXTRA_SVDPI_SIM_ARGS
过滤失败的verify()setenvEXTRA_SVDPI_SIM_ARGS+ Req_scenario_4:32:60 = 1cdReq_4_build / dpi_tb!Vsim -c -do run_tb_mq.使用实例在控制台模式下运行ModelSim/QuestaSimcd. . / . .
注意,HDL模拟现在显示:
正在过滤一个验证评估的警告
将为其他评估收集覆盖率的信息消息
不再有任何错误。
由于SystemVerilog的仿真结果与Simulink的仿真结果一致,所以该测试被标记为PASSED。金宝app
功能覆盖显示为启用的评估实现了覆盖
总体功能覆盖目标得到满足。
增加特定验证评估的覆盖目标
您还可以通过为plus参数提供一个正值来更改任何评估所需的功能覆盖率目标。默认目标是查看验证调用的至少1个PASS状态。如果你想确保至少有2个验证PASS状态检查,你可以提供一个“2”作为加号参数值。
清除影响SV模拟的环境变量setenvEXTRA_SVDPI_COMP_ARGSsetenvEXTRA_SVDPI_SIM_ARGS
过滤失败的|验证|,并为其他|验证|设置覆盖目标为2setenvEXTRA_SVDPI_SIM_ARGS“+ Req_scenario_4:32:60 = 1 + Req_scenario_4:32:39 = 2”cdReq_4_build / dpi_tb!Vsim -c -do run_tb_mq.使用实例在控制台模式下运行ModelSim/QuestaSimcd. . / . .
注意,HDL模拟现在显示了未过滤的验证
没有达到至少2个及格的覆盖率目标,因此整个测试也没有达到。
记录所有验证评估的通过、失败和未测试状态
您可以为所有未过滤的状态检查添加日志输出验证
通过添加+VERBOSE_VERIFY +参数来调用。如果您需要检查undetected、PASS和FAIL验证状态值的时间和分布,这可能很有用。
清除影响SV模拟的环境变量setenvEXTRA_SVDPI_COMP_ARGSsetenvEXTRA_SVDPI_SIM_ARGS
记录每一次状态检查。setenvEXTRA_SVDPI_SIM_ARGS+ VERBOSE_VERIFYcdReq_4_build / dpi_tb!Vsim -c -do run_tb_mq.使用实例在控制台模式下运行ModelSim/QuestaSimcd. . / . .
注意,HDL模拟现在将每个untests和PASS状态检查值显示为SystemVerilog信息
消息和每个FAIL状态都是SystemVerilog错误。
结论
SystemVerilog DPI组件生成和来自Simulink Test™的Test Sequence块可以用最小的努力将验证逻辑从Simul金宝appink迁移到HDL模拟器。