主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

引用模型的多个实例的模型覆盖率

Model 模块本身只接收模块执行覆盖率。如果将 Model 模块的仿真模式设置为普通软件在环(SIL)处理器在环(PIL),则 Simulink® Coverage™ 会分析 Model 模块引用的模型的覆盖率。

您的 Simulink 模型可以包含多个具有相同仿真模式且引用相同模型的 Model 模块。分析覆盖率时,您可以为引用模型的每个实例指定不同的输入或参数。您可以使用此方法来满足引用模型的额外覆盖率目标。

Simulink Coverage 分析具有相同仿真模式的引用模型的所有实例的覆盖率,并将该引用模型的覆盖率数据合并到最终结果中。

要了解覆盖率如何处理引用模型的多个实例,仿真模型两次。第一次,您在普通仿真模式下记录一个 Model 模块的覆盖率。第二次,在普通仿真模式下记录两个 Model 模块的覆盖率。两个 Model 模块引用相同的模型。在这两种仿真中,您只能看到处于正常仿真模式的模型引用实例的覆盖率结果,因为您无法在一次仿真中收集多种仿真模式的覆盖率。

引用模型的第一个实例的记录覆盖率

记录一个 Model 模块的覆盖率。

  1. 打开您的顶层模型。例如,该模型包含三个引用 sldemo_mdlref_counter_datamngt 模型的 Model 模块。

    每个 Model 模块的角落表示其仿真模式参数的值:

    • Counter1 - 仿真模式:普通

    • Counter2 - 仿真模式:加速

    • Counter3 - 仿真模式:加速

  2. 配置您的模型以记录仿真期间的覆盖率:

    1. 在 Simulink 编辑器中的建模选项卡上,选择模型设置

    2. 在“配置参数”对话框的左侧窗格中,点击覆盖率

    3. 覆盖率窗格中,选择启用覆盖率分析,然后选择引用模型单选按钮。

    4. 点击选择模型。在选择覆盖率分析模型对话框中,您只能选择仿真模式为普通SILPIL 的引用模型。该对话框针对每个仿真模式显示一次模型。在这个示例中,您只能选择引用 sldemo_mdlref_counter_datamngt 的第一个 Model 模块,因为它代表使用正常仿真模式的模型实例。

      Model reference selection dialog shows three models referenced by the top model. One of the referenced models has a check box to select, and the other two do not.

    5. 点击确定退出“选择要进行覆盖率分析的模型”对话框。

  3. 点击确定保存覆盖率设置并退出配置参数对话框。

  4. 通过点击运行(覆盖率)按钮来仿真模型。

    当仿真完成后,覆盖率详细信息窗格将打开并显示覆盖率报告。对于这种情况,参考模型 sldemo_mdlref_counter_datamngt 的覆盖率数据显示该模型实现了 85% 的覆盖率。

  5. 要查看引用模型的内容,点击 Model 模块左下角的箭头。覆盖率详细信息窗格显示引用模型的覆盖率报告,并突出显示模块以显示覆盖率结果。

    在此示例中,对于 Range Check 子系统:

    • Saturate Count 模块执行 50 次。该模块有四个决策结果。决策覆盖率为 50%,因为四个决策结果中有两个不满足:

      • 决策 input >= lower limit 永远不会是 false

      • 决策 input > upper limit 永远不会是 true

      Coverage results for the Saturate Count block report that the block receives 50% decision coverage (2 out of 4 decision outcomes satisfied).

    • DetectOverflow 函数执行 50 次。这个脚本有五个决策。DetectOverflow 脚本实现了 60% 的覆盖率,因为五个决策结果中有两个不满足。表达式 count >= CounterParams.UpperLimit 永远不会是 true,并且表达式 count > CounterParams.LowerLimit 永远不会是 false

      Coverage results for the MATLAB function DetectOverflow report that the function receives 80% decision coverage (4 out of 5 decision outcomes satisfied).

引用模型的第二个实例的记录覆盖率

记录两个 Model 模块的覆盖率。将第二个 Model 模块的仿真模式设置为普通并仿真模型。在此示例中,Counter2 模块增加了从两个 Model 模块引用的模型的覆盖率。

  1. 在顶层模型的 Simulink 编辑器中,右键点击第二个 Model 模块并选择模块参数 (ModelReference)

    打开“模块参数”对话框。

  2. 仿真模式参数设置为普通

  3. 点击确定保存更改并退出“模块参数”对话框。

    Model 模块的角发生变化,表明该模块的仿真模式为普通

  4. 记录此模型两个实例的覆盖率:

    1. 建模选项卡上,选择模型设置

    2. 覆盖率窗格上,选择启用覆盖率分析

    3. 选择引用模型并点击选择模型

      在“选择覆盖率分析模型”对话框中,验证是否选择了引用的模型。在此示例中,列表现在如下所示。

      Model reference selection dialog shows three entries. The first line is the top model which is not selected for coverage analysis. The second selection is the referenced model in normal mode and the third entry is the referenced model in accelerator mode.

    4. 点击确定关闭“选择要进行覆盖率分析的模型”对话框。

  5. 再次仿真模型。

  6. 当仿真完成时,覆盖率详细信息窗格会使用额外的覆盖率数据更新覆盖率报告。

    参考模型实现了 85%的覆盖率。在 Range Check 子系统内部:

    • Saturate Count 模块执行 100 次。Counter2 模型模块的仿真导致饱和计数模块额外执行 50 次。

      在本次仿真中,决策 input > upper limittrue 18 次,而第一次仿真期间为 0 次。第四个决策 input > lower limit 仍然永远不会是 false。仿真期间记录了四个决策中的三个,因此该模块实现了 75% 的决策覆盖率。

      Coverage results for the Saturate Count block report that the block receives 75% decision coverage (3 out of 4 decision outcomes satisfied).

    • DetectOverflow 函数执行 100 次。Counter2 模块的仿真额外执行了 DetectOverflow 函数 50 次。

      DetectOverflow 函数有 5 个决策。在本次仿真中,表达式 count >= CounterParams.UpperLimit 出现了 21 次 true,而第一次仿真中则为 0 次。表达式 count > CounterParams.LowerLimit 永远不会是 false。仿真期间五个决策中有四个得到满足,因此 DetectOverflow 函数实现了 80% 的决策覆盖率。

      Coverage results for the DetectOverflow function report that the function receives 80% decision coverage (4 out of 5 decision outcomes satisfied).

另请参阅

主题