专项五:性质、行为模型与故障验证(41–44)
目标:在实现控制器前就知道如何发现错误。数字行为模型只验证声明的抽象,模拟稳定性、亚稳态概率和供电完整性需要其他证据。
41:用不变量约束控制器
讲解
不变量表达所有合法序列都要满足的条件;例如 sampling→analog_ready,busy→不接受第二个 start,sample_accept→id/version 匹配,fault→禁止新 conversion,cal_success→最终确认通过。
安全性质说明不能发生什么,例如不能使用旧样本;活性性质说明在外部条件满足时最终发生什么,例如 ready 与响应在期限内到来后校准有限结束。若外部永久不响应,应该要求 timeout/FAULT,而不是无限期要求成功。
程序监视器可检查每个周期的状态和计数。Icarus 对完整 SVA/形式流程支持有限,本课可以用普通 SystemVerilog if (...) $fatal、独立计数器和超时;不因为讲义写了性质就宣称完成形式证明。
采样调度要避免竞态:刺激在合适的非采样时刻变化;检查要区分边沿前接受条件和边沿后输出。将 DUT 内部状态原样复制到 reference model 会共享错误,应从接口事件维护参考状态。
练习与验收
为结课项目写至少十条性质,并给每条一个能违反它的故障。注入“settling 提前结束”“旧 id 被接受”“busy-start 覆盖 target”等错误,确认监视器实际失败。验收要求性质有明确观察点和复位例外。
42:构造可控的模拟行为模型
讲解
模型分成 bias/reference ready、trim plant、settling 和 ADC 响应。ready 可以早/晚/抖动/缺失;trim 改变后标记一段时间无效;ADC 在 request 后经过可变延迟返回量化样本,并保持 valid/data/id 到 ack。
plant 可用有符号整数或 testbench 的 real 运算表达,再明确量化、饱和与噪声。real 仅用于仿真参考,不写进普通可综合控制器来代替定点硬件。
模拟模型必须能拒绝不合法请求:未 ready、settling 中、已有未确认响应时不接受新请求,并让测试失败或返回明确 invalid。若模型始终立刻返回理想值,会把控制器过早采样的问题隐藏起来。
随机测试有固定 seed,失败记录 seed、参数和输入序列。模型的 ready 与 DUT 等待计数不能用同一个内部变量驱动;采用独立时序参数才有机会发现 off-by-one。
练习与验收
实现四个独立模型组件,分别验证正常和错误请求。确认将 DUT 的等待少写一周期时,模型/监视器能发现。验收要求明确哪些模拟非理想性没有建模,例如真实 RC、毛刺幅度、相关噪声频谱和连续时间环路。
43:参数扫描与故障矩阵
讲解
数字参数扫描覆盖延迟和接口变化:clk 相位/周期、ready 时刻、settling、转换响应、CDC 时钟关系、offset/gain、噪声、饱和和故障。每个参数范围标“器件规格”或“教学假设”。
行为模型的 slow/fast 参数代表假设场景,不是读取工艺库后的真实 PVT 仿真。PVT 还会影响数字 t_cq、slew、互连和亚稳态特性,这些由库、STA 与物理实现分析。
用等价类和边界优先减少测试规模:N−1/N/N+1 时刻,最小/最大码,零/正/负误差,合法/非法 id,噪声界限,故障与完成同周期。随机回归补充序列变化,不能取代确定性边界用例。
电路前提被破坏时要验证“正确失败”,例如非单调 plant、增益为零、参考不 ready、ADC clipping。不能要求任意异常场景仍校准成功。
练习与验收
写矩阵并区分预期 success、error、abort、FAULT 和不在契约内的输入。至少重放一次随机失败。验收要求失败原因可定位到协议、运算、模型前提或实现,而不是统一归为“收敛不好”。
44:集成、覆盖与证据
讲解
先独立验证 sequencer、measurement、average、search controller,再整合 SPI 寄存器与控制器。集成还要检查模式/状态副作用:busy 中写 shadow、故障时读状态、abort 后迟到结果、清错与新错同周期。
计分板记录开始时快照、每个已接受样本的 id/版本、校准结果和最终 committed 码。结果判定以接口契约与独立 plant 为依据,不复制 DUT 的二分分支来判定自己。
功能覆盖记录状态/分支/异常是否被触发,代码覆盖记录实现是否被执行,二者不互相替代。当前已启用的工具没有完整覆盖系统时,可以用显式计数和事件矩阵,记录未覆盖项。
交付源版本、参数、seed、命令、退出码、完成标记和证据位置。RTL 仿真与综合分别验证不同方面;新项目也需要自己的 runner、映射检查和时序意图审查,不能借第一课的 PASS 标记算通过。
练习与验收
完成一次模块到顶层的回归,证明 count、sample 数、应用次数和错误次数一致。提出三项未被当前模型验证的真实电路风险。验收要求能够重现成功与失败两类结果。