
1. 概念讲解1.1 总体思路你可以在模型或测试框架中放入Test Assessment 模块并在其中编写verify语句从而评估模型仿真。verify语句对整体仿真和每个时间步都返回 pass、fail 或 untested 结果结果出现在测试管理器中。Test Assessment 模块默认包含一个When 分解序列它帮助你清晰地定义每条verify语句在什么仿真条件下被激活。激活verify语句有两种范式如果你的模型使用 Test Sequence 模块作为信号源考虑用 Test Sequence 模块的活动步骤来激活每条verify如果你的模型不用 Test Sequence 模块做信号源或者测试序列步骤与待验证条件不对应就用信号条件signal condition来激活每条verify。1.2 用 Test Sequence 活动步骤激活 verify把 Test Sequence 与 Test Assessment 模块用 Test Sequence 模块的活动步骤信号连接起来每条verify由对应的活动步骤激活。下图是一个示例测试框架Test Sequence 与 Test Assessment 模块之间通过Active_Step信号连接Test Assessment 内含一个 When 分解序列四个子步骤各含一条verify分别由不同的 Test Sequence 步骤激活。其中Else步骤没有动作用来处理不匹配任何前面 when 条件的仿真工况——它的名字可以叫Else或任意名字但不能包含 when 条件。具体操作分四步为 Test Sequence 模块创建活动步骤数据输出选中 Test Sequence 模块在Property Inspector中勾选Create data to monitor the active step把Data Type设为Enum并在Enum name中填入枚举名如Test_Sequence_Active_Step_Enum。为 Test Assessment 模块创建数据输入打开 Test Assessment 模块在 Symbols 窗格中悬停到 Input 旁单击Add data命名该输入。在框图中把 Test Sequence 模块输出连到 Test Assessment 模块输入。在 Test Assessment 中创建 When 分解序列默认即为 When 分解要在标准序列与 When 分解之间切换右键父步骤选择When decomposition。对每个 When 子步骤用活动步骤枚举数据定义激活条件例如VerifyBoth when TSActiveStepIN ... Test_Sequence_Active_Step_Enum.PressBothButtons verify(RedButtonOUT false GreenButtonOUT false)下图左为 Test Sequence 编辑器四个标准步骤PressNeitherButton/PressBothButtons/PressRedButton/PressGreenButton输出枚举TSActiveStepOUT右为 Test Assessment 的 When 分解VerifyNeither/VerifyBoth/VerifyRed/VerifyGreen分别用枚举值激活。1.3 用信号条件激活 verify如果模型不用 Test Sequence 做信号源例如用 Signal Editor 模块输入或测试序列步骤与待验证条件不对应就用唯一的信号条件激活每条verify把verify放在 When 分解序列中并在 when 条件里写条件语句。下图左侧是 Signal Editor 生成的RedButtonIN、GreenButtonIN阶跃输入右侧 Test Assessment 的 When 分解用RedButtonIN false GreenButtonIN false这样的唯一条件激活各子步骤。1.4 编写 verify 语句verify语句对逻辑表达式求值。你可以用可选参数给结果在测试管理器中打标签。整体仿真结果的判定规则任一时刻步 fail则整体 fail没有 fail 的时刻步时任一时刻步 pass则整体 pass否则整体为 untested。结果出现在测试结果的Verify Statements分区。示例父步骤用两条verify评估仿真中的两个局部变量x、y——verify(x y)因整个序列都为真而整体 passverify(x y)与verify(x ~ y)分别在step_1_2、step_1_1中失败。测试管理器的显示如下左侧 Verify Statements 树列出三条语句的状态红叉/绿勾右侧按时间步绘制 Fail/Pass/Untested 三段。1.5 一次验证多个条件Verify Multiple Conditions at a Time要在同一个时间步验证多个条件把verify语句放进if语句并在同一个测试步骤中放多个if。指南以一个双按钮异或XOR工具函数为例同一时间步可能同时满足多个输入条件期望输出如下表节选输入条件期望输出RedButtonIN false GreenButtonIN falseRedButtonOUT false GreenButtonOUT falseGreenButtonIN falseGreenButtonOUT ~ trueRedButtonIN falseRedButtonOUT ~ trueRedButtonIN true GreenButtonIN trueRedButtonOUT false GreenButtonOUT falseRedButtonIN true GreenButtonIN falseRedButtonOUT true GreenButtonOUT falseRedButtonIN false GreenButtonIN trueRedButtonOUT false GreenButtonOUT true对应地Test Assessment 第一个测试步骤内放六条verify分别包在六个if ... end中该步骤在仿真中持续激活每个时间步对这些if求值。1.6 用 When 分解评估模型Assess a Model by Using When Decomposition指南给出完整示例模型实现一个简单信号跟踪器 SimpleTracker工作在三种模式——0Off、1Slow、2Quick。模型结构如下图Sine 与阶跃mode信号接入 SimpleTracker输出u,y与err接 Scope 与测试框架。SimpleTracker 子系统已建好测试框架 SimpleTrackerHarness内含 Test Assessment 模块。测试框架结构如下图Test Sequence 生成u与mode激励Test Assessment 按mode值决定运行哪些verify。Test Assessment 用 When 分解评估 SimpleTracker 行为。父步骤CheckError含三个子步骤OffModewhenmode uint8(0)verify(elapsed 0.5 || y 0, After 0.5 sec in Off, y must remain 0);SlowModewhenmode uint8(1)verify(elapsed 0.5 || err 2, After 0.5 sec in Slow, err must remain 2);QuickMode不写 when 条件兜底verify(elapsed 0.5 || err 1, After 0.5 sec in Quick, err must remain 1);运行评估仿真测试框架打开 Simulation Data Inspector 查看结果。三条verify在各自 mode 区间内显示绿色 Pass在不对应 mode 的区间显示灰色 Untested。2. 操作步骤 / 工作流用活动步骤激活 verify 的标准流程选中 Test Sequence 模块在 Property Inspector 勾选Create data to monitor the active stepData Type 设为 Enum填 Enum name。打开 Test Assessment 模块在 Symbols 窗格给 Input 加数据并命名。在框图中连接 Test Sequence 输出与 Test Assessment 输入。在 Test Assessment 中写 When 分解每个子步骤名后跟when 活动步骤枚举输入 枚举值再写verify(...)最后一个子步骤不写 when。运行仿真在测试管理器有测试用例时或 Simulation Data Inspector无测试用例时查看结果。用信号条件激活 verify上述第 1~3 步改为用 Signal Editor 等信号源第 4 步把 when 条件写成对具体信号值的判断如RedButtonIN true GreenButtonIN false。3. 示例% 带可选消息的 verify消息在结果中显示 verify(elapsed 0.5 || y 0, After 0.5 sec in Off, y must remain 0); % 同一时间步用多个 if 验证并行条件 if RedButtonIN false GreenButtonIN false verify(RedButtonOUT false GreenButtonOUT false) end if RedButtonIN true GreenButtonIN false verify(RedButtonOUT true GreenButtonOUT false) end % 用活动步骤枚举激活 VerifyBoth when TSActiveStepIN Test_Sequence_Active_Step_Enum.PressBothButtons verify(RedButtonOUT false GreenButtonOUT false)4. 要点与注意事项Test Assessment 模块默认就是 When 分解序列要改成标准序列需右键父步骤切换。两种激活范式二选一有 Test Sequence 源且步骤与工况对应时用活动步骤枚举否则用信号条件。兜底子步骤Else/QuickMode 等不能写 when 条件且通常不写动作。整体结果判定任一时步 fail → 整体 fail无 fail 时任一时步 pass → 整体 pass否则 untested。同一时步多条件并行时用多个if ... verify ... end而不是拆成多个 When 子步骤。elapsed是步骤内已激活时间elapsed 0.5 || ...这种写法的含义是刚切换到该模式的前 0.5 秒内不评判0.5 秒后必须满足稳态条件。For Each 子系统内不要用 Model Verification 块用 Test Sequence 的verify见第 10 讲。