主要内容

从Simulink测试在SystemVerilog中生成功能覆盖验证调用

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

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

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

其他先决条件

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

概述

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

目标是生成一个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个验证调用收集功能覆盖率

  • 有一个关于控制器在温度超过限制时关闭失败的错误标记。

  • 测试被标记为PASSED,因为SystemVerilog的仿真结果与Simulink的仿真结果相匹配。

  • 功能覆盖显示第一个验证调用实现了覆盖,但第二个验证调用没有实现覆盖。

  • 总体功能覆盖率目标没有达到。

误差与Simulink中的仿真结果一致(如下图)。打开测试管理器显示,当温度超过限制时按下on_off按钮时,控制器无法关闭。要打开测试管理器,可以执行:

sltest.testmanager.load(测试文件);sltest.testmanager.view;

解决故障需要修改主模型中的OnOff检查子系统。另一个要求,verify_sc4_on从Simulink Test和SystemVerilog的覆盖结果来看,都是令人满意的。

跟踪SystemVerilog错误返回到Simulink

如果你想跟踪生成错误的验证语句到Simulink,你需要从错误消息中找到Simulink标识符(SID),如下所示:

在测试序列块中找到步骤id的SID后,可以使用一个函数突出显示相应的块。执行以下命令:

Simulink.ID.hilite (“Req_scenario_4:32:60”);

这将突出显示如下所示的相关块。

筛选一个特定的验证评估

要在HDL模拟器中筛选任何验证评估状态检查,将您想要筛选的评估的SID作为plusargs参数提供给HDL模拟器。这样的过滤器将意味着没有错误,也不会检查评估的覆盖率。例如,你可以过滤错误verify_sc4_off通过向HDL模拟器提供参数“+Req_scenario_4:32:60”来给出。您可以通过一个环境变量来实现这一点,这样就不必修改生成的脚本。

清除影响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模拟现在显示:

  • 一个警告,说明其中一个验证评估正在被过滤

  • 将为其他评估收集覆盖率的信息消息

  • 不再有任何错误。

  • 测试被标记为PASSED,因为SystemVerilog的仿真结果与Simulink的仿真结果相匹配。

  • 功能覆盖率显示为启用的评估实现了覆盖率

  • 总体功能覆盖率目标得到满足。

增加特定验证评估的覆盖目标

您还可以通过为加号参数提供一个正的值来更改任何评估所需的功能覆盖率目标。默认目标是查看verify调用的至少一个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 +参数来调用。如果您需要检查untesting、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模拟现在将每个untesting和PASS状态检查值显示为SystemVerilog信息消息,每个FAIL状态都是SystemVerilog错误。

结论

SystemVerilog DPI组件生成和来自Simulink Test™的Test Sequence块可以用最小的努力将验证逻辑从Simulink迁移到HDL模拟器。

Baidu
map