主要内容

从Simulink Test生成SystemVerilog中的功能覆盖率金宝app验证调用

这个例子演示了如何使用模型模拟测试投影仪控制系统,以及如何为一些在test Sequence块中指定的控制器高级需求生成SystemVerilog DPI组件。这将允许用于模型仿真的需求验证在HDL模拟器中以最小的工作量被重用。

模型取自实例投影仪控制器测试使用验证和实时测试(金宝app仿真软件测试)随Simulink Tes金宝appt™一起发布,并简化为仅显示需求场景4。

要了解有关验证语句的更多信息,请参见使用验证语句评估模型仿真(金宝app仿真软件测试)

其他先决条件

除了所述的产品需求外,本例还要求:

概述

测试使用执行顶级控制器模型的测试序列根据其需求验证控制器。控制器采用按钮输入和温度传感器输入,输出控制风扇、风扇转速和投影灯的信号。

目标是生成一个SystemVerilog DPI组件,该组件捕获控制器的高级需求编号4。有关需求的更多信息,请参阅word文档sltestProjectorCtrlReqs.docx在上面提到的例子中。

要求4在投影仪温度(Tproj)较高时尝试打开和关闭投影仪。该场景在Test Sequence块中有以下步骤:

  1. 设置投影仪温度为50摄氏度。

  2. 试着打开。

  3. 系统不应该打开。

  4. 将温度设置为50摄氏度。

  5. 试着关掉。

  6. 系统应该关闭。

下图显示了上述需求的测试台和如何验证用于检查投影仪是否根据场景打开或关闭。

建立代码生成模型

模型和测试台是用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组件

  1. Req_scenario_4测试台架,右击Req_4子系统块,其中包含测试序列块和选择。C/ c++代码->构建这个子系统

  2. 点击构建在出现的对话框中。

  3. 的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模拟器。