UVM 记分板与参考模型:乱序与多端口的事务对齐
更新时间:2026-10-01。教科书里 scoreboard 是“一个期望队列 + 一个实际队列”,真实 DUT 会重排、汇聚多端口、延迟不定,简单 FIFO 比对会大量误报。
本文要回答的问题
- 事务顺序不确定时,怎么找到“对应的那一笔”?
- 多个输入汇聚、多个输出分叉,期望数据如何 join?
- 怎么避免漏比(假 pass)和重比(假 fail)?
一、in-order 与 out-of-order
- in-order:DUT 保证顺序(如简单 FIFO),直接两队列队首比较即可。
- out-of-order:用稳定键(transaction id/tag/地址)做检索,实际事务到达时在期望集合中按键查找匹配,而不是比较队首。匹配后从集合移除,保证“一笔只比一次”。
二、参考模型与多端口汇聚
参考模型消费输入 agent 的事务,产生期望输出;多路输入要按可定义的顺序 join(同一时间步的输入快照),否则模型输入不确定。多路输出分别建期望表,按各端口协议匹配。
三、容错与防护
- 比较策略:可忽略字段(mask)、浮点用容差、统计量按区间,而不是逐位全等。
- 超时:期望事务久未匹配要报错(抓 DUT 丢包/卡死),避免只进不出。
- 结束检查:仿真结束时期望集合必须清空,否则是漏比(DUT 少输出)。
- mismatch 打印键、字段差异、相关历史,便于定位。
四、常见坑
- 用 FIFO 比对乱序输出,全是假性 mismatch。
- 键不唯一或没把会话标识纳入键,匹配错对象。
- 多输入 join 顺序不确定,参考模型结果漂移。
- 只在匹配时报错,结束不查残余期望,漏掉丢包类 bug。
- 比较器逐位全等,浮点/保留字段导致噪音误报。
小结
顺序确定用队列、重排用键检索,多端口靠确定性 join,配合超时与结束残余检查杜绝漏比。下一篇 UVM 覆盖率模型与签核。
总结
真实 DUT 会重排、汇聚多端口、延迟不定,教科书式“两个队列队首比较”会大量误报:in-order DUT 可直接队列比对,out-of-order 必须用稳定键(transaction id/tag/地址)在期望集合中检索匹配、匹配即移除,保证一笔只比一次;多输入端口要按确定顺序(同一时间步输入快照)join 喂给参考模型,多路输出分别建期望表按各端口协议匹配。比较要能容错——mask 忽略字段、浮点用容差——并用两道防护杜绝漏比/假 pass:期望事务久未匹配要超时报错(抓丢包/卡死)、仿真结束时期望集合必须清空(抓少输出),mismatch 时打印键和字段差异上下文。