主要内容

检测整数溢出和除以零错误

以下各节描述如何分析 sldvdemo_cruise_control_fxp_fixed 模型以检测整数溢出和除以零错误。

分析模型

打开模型并检查整数溢出和除以零错误:

1.打开 sldvdemo_cruise_control_fxp_fixed 模型。

open_system('sldvdemo_cruise_control_fxp_fixed');

2.在 Design Verifier 选项卡的准备部分中,从模式设置的下拉菜单中点击设置

3.在“配置参数”对话框中,选择 Design Verifier > 设计错误检测

4.在设计错误检测窗格中,选择:

  • 整数溢出

  • 除以零

5.在“配置参数”对话框的诊断 > 数据有效性窗格中,设置信号 > 溢出时绕回信号 > 溢出时饱和

6.点击确定保存这些设置并关闭“配置参数”对话框。

7.在模式部分中,选择设计错误检测

8.点击检测设计错误

分析完成后:

  • 软件会根据分析结果突出显示模型。

  • Simulink® Design Verifier™ 的“结果”对话框会打开并显示分析摘要。

查看分析结果

在模型上查看结果

推导范围可以通过识别可能的信号值来帮助您了解错误的来源,您可以通过执行以下步骤来进行查看:

1.在 sldvdemo_cruise_control_fxp_fixed 模型的顶层,点击 Fixed-Point Controller 子系统。

Simulink® Design Verifier™ 的“结果”窗口会显示通过分析计算得出的 Outport 的可能信号值的推导范围:

  • Outport 1(油门)的值范围为 –2.6101 到 2.6096。

  • Outport 2(目标)的值范围为 0 到 255.9960。

fp_controller_sldv_results.png

2.点击 sldvdemo_cruise_control_fxp_fixed 模型的 Outport 模块以查看相同的信号边界值。

3.打开 Fixed-Point Controller 子系统。

该子系统中的两个对象用红色轮廓标出。PI Controller 子系统用绿色轮廓标出。

4.点击用红色轮廓标出的 Sum 模块,该模块为 PI Controller 子系统提供了错误输入。

sum_block_red.png

该 Sum 模块可能会产生溢出错误。分析发现,有一个测试用例可能产生 Sum 模块的输出超出范围 [–128..127.9960] 的计算结果。

sum_overflow_sldv_results.png

5.为了更充分地了解此错误,请点击为 Sum 模块提供输入的两个模块。在 Simulink® Design Verifier™ 的“结果”窗口中,查看它们的推导范围:

  • Bus 模块的第三个 Outport 的范围为 [0..256]。

  • Switch 模块的 Outport 的范围为 [0..256]。

可以看到,对这些信号范围的求和运算可能会计算出一个超出 Sum 模块的 Outport 范围 [–128..128] 的值。

分析会报告 Sum 模块有溢出错误。分析不会传播此错误,并假定 Sum 模块的输出在任何后续计算中处于有效范围内。

6.点击用绿色轮廓标出的 PI Controller 子系统。PI Controller 子系统中的任何模块都不会产生溢出或除以零错误。当软件分析 PI Controller 子系统时,它会忽略 Sum 模块中的溢出错误,并假定该子系统的输入有效。

保持 sldvdemo_cruise_control_fxp_fixed 模型打开。在下一节中,您将创建框架模型来查看产生 Sum 模块溢出错误的测试用例。

查看框架模型

要查看演示错误的测试用例,请从 Simulink® Design Verifier™ 的“结果”窗口生成框架模型:

1.在 sldvdemo_cruise_control_fxp_fixed 模型中,打开 Fixed-Point Controller 子系统。

2.点击用红色轮廓标出的 Sum 模块,该模块为 PI Controller 子系统提供了错误输入。

Simulink® Design Verifier™ 的“结果”窗口会显示发生溢出错误的信息。

3.在 Simulink® Design Verifier™ 的“结果”窗口中,点击查看反例

软件会创建一个包含测试用例的框架模型,该测试用例具有导致此溢出错误的信号值。

在该框架模型中,将打开“信号编辑器”对话框,其中显示 Counterexample_4。

4.点击全部运行按钮以使用此测试用例对模型进行仿真。

正如预期的那样,由于 Fixed-Point Controller 子系统中 Sum 模块的溢出错误,仿真失败。

有关详细信息,请参阅管理 Simulink Design Verifier 框架模型

查看分析报告

要查看包含有关 sldvdemo_cruise_control_fxp_fixed 模型分析报告的详细信息的 HTML 报告,请执行以下操作:

在 Simulink® Design Verifier™ 的“结果”窗口中,点击 HTML 以查看详细分析报告。

软件会生成详细分析报告,该报告会在浏览器中打开。

对于 sldvdemo_cruise_control_fxp_fixed 模型,报告的设计错误检测目标状态章节会提供以下两类详细结果:

  1. 目标有效 - 未产生错误的模型对象

  2. 用反例证伪的目标 - 测试用例产生错误的模型对象

具有决策或条件结果的模型对象会接受死逻辑检测。有关具有决策或条件目标的模型对象完整列表的详细信息,请参阅接受覆盖率的模型对象 (Simulink Coverage)

有关详细信息,请参阅查看结果

注意:缺陷检查器会自动调用死逻辑、越界数组访问、除以零、整数溢出以及指定的最小值和最大值违规检查。要指定检查,请将缺陷检查器设置为 off。有关详细信息,请参阅使用优化检查检测缺陷

另请参阅

检测整数溢出错误

检测具有复杂输入的模型中的整数溢出