逻辑运算符级联模式
此示例显示了当逻辑运算符模块位于其他逻辑运算符模块的下游时,Simulink® Coverage™ 如何分析逻辑运算符模块。
示例模型概述
示例模型包含各种模式的级联 Logical Operator 模块。此示例说明了 Simulink Coverage 为了对修正条件/决策覆盖率 (MCDC) 度量进行模型覆盖率分析而识别逻辑运算模块级联的准则。
示例模型包含 Logical Operator 模块级联模式。
open_system('slcoverage_mcdc_logic_cascade');当您分析 MCDC 模型时,Simulink Coverage 会搜索逻辑操作符模块的级联。当逻辑运算符模块位于其他逻辑运算符模块的下游时,就会发生逻辑级联。当 Simulink Coverage 识别逻辑级联时,它会分析模块组合所表示的整体表达式,而不是单独分析每个模块。如果逻辑运算符模块不是逻辑级联的一部分,那么您只会收到单个模块的 MCDC 结果。
仅当以下条件成立时,Logical Operator 模块才会接收 MCDC 作为逻辑级联的一部分:
模块输入和输出信号都是标量。
模块操作不是 XOR/NXOR
该模块具有多个输入信号(除非其操作不是)
输入信号不会分支到另一个非虚拟模块
点击运行(覆盖率)来仿真模型。仿真完成后,将打开覆盖率详细信息窗格。
sim('slcoverage_mcdc_logic_cascade');查看第一个级联
点击 And 模块 And_Block。

And_Block 的覆盖率报告显示三种情况,每种情况有两种可能的结果。只有一个结果得到满足。但是,And_Block 没有显示 MCDC 表。发生这种情况是因为 Simulink Coverage 将 And_Block 识别为逻辑级联的一部分。相反,报告中的 MCDC 行链接到代表逻辑级联根的模块 Not_Block。点击链接查看 Not_Block。

Not_Block 的覆盖率报告显示了一种情况,但有两种可能的结果。但是,在此模块的覆盖率细节中,有一个 MCDC 分析表。该 MCDC 表显示 And_Block 和 Not_Block 的逻辑级联组合输出的覆盖率结果。And_Block 表示逻辑运算 C1 && C2 && C3,其中每个输入都是一个布尔值。然后,Not_Block 对此进行否定,因此 Simulink Coverage 分析 MCDC 分析表中的整体表达式 ~(C1 && C2 && C3)。由于仿真期间仅发生了一种条件结果,因此该级联没有令人满意的 MCDC 结果。
查看第二级瀑布
点击 Nor_Block。

与 And_Block 类似,Nor_Block 显示具有一个满足结果的条件表,但没有 MCDC 分析表。报告的 MCDC 行链接到位于 Masked Subsystem 内部的 Masked_AND_Block。在模型中,点击 Masked Subsystem。
第二级联与第一级联是分开的,因为第一级联的输出信号(也是第二级联的输入信号)会分支。如果信号仅分支到虚拟模块,则 MCDC 级联将继续不间断地进行。如果信号分支到非虚拟模块,那么 Simulink Coverage 会将它们视为两个独立的逻辑级联。

Masked Subsystem 是一个包含 Masked_AND_Block 的子系统。封装子系统模块的第一个输入是与 Nor_Block 输出的虚拟连接。从 MCDC 表中可以看出,这并不妨碍对级联逻辑的分析。Nor_Block 代表逻辑表达式 C1 || C2,而 Masked_AND_Block 将该表达式的输出与第三个布尔值 C3 相结合,得出级联逻辑表达式 ~(C1 || C2) && C3。MCDC 表还显示代表级联逻辑的表达式。
不支持的逻辑运算
点击 Or_Block。

覆盖率报告显示此模块的条件表和 MCDC 表。现在点击 XOR_Block。

覆盖率报告也在此处显示两个分析表。发生这种情况的原因是,级联 MCDC 分析不支持 XOR 和 NXOR 运算。因此,Simulink Coverage 会单独分析这些模块的 MCDC。
点击 Vector_AND_Block 可看到该模块的报告还包含 MCDC 分析表。级联 MCDC 分析不支持逻辑运算符模块的向量输入。