uvm_tlm_generic_payload::do_compare() 全面重写
已复现的目标库问题
目标库 GP extension 漏检已复现;显式集合比较在限定场景通过。
影响范围
scoreboard 比较 uvm_tlm_generic_payload,且事务携带 extension 时重点核对。
具体差异
1.2 对字段作短路比较,extension 集合双向检查,byte_enable 数组内容本身不参与比较。2.0 改为逐字段 comparer 操作,新增 byte_enable 内容比较;threshold 控制比较停止门槛,与控制消息条数的 show_max 是不同属性。消息经 comparer.print_msg() 发出,仍使用 comparer 的 severity。顶层 obj.compare() 自动 flush;只有直接调用 do_compare() 等自行管理上下文的路径才需额外防范累计 result。
已复现的风险:① 2.0 只遍历 lhs 的 extension,rhs 独有项漏检;② 遍历中 if (!threshold || result < threshold) break 在尚未达到阈值时退出,两个相同 extension 只调用一次比较,删除后一个 extension 仍返回相等。双库 semantic_probe 在相同条件下分别观察到比较次数 2 / 1、缺失后返回值 0 / 1。该缺陷存在于目标实现,不能仅靠双向调用 GP compare 消除。
修改方案
使用 extension 的 scoreboard 显式检查两侧键集合,并逐项比较每个 extension,结果与 GP 基本字段比较共同决定匹配。semantic_probe.sv 的 extensions_equal() 演示了派生 GP 访问受保护集合的方案;实际环境也可对已知 extension 类型逐项检查。依赖日志的断言同步核对消息 ID、数量和 severity;不能仅凭 compare 输出安静就判断相等。
兼容措施与范围:兼容措施不修复 GP extension 漏检;键集合与各项内容须显式比较,并保留基本字段检查。
已知限制:KI-008
迁移后验证
分别制造 lhs/rhs 独有 extension、缺失后一个 extension 和内容不匹配;每种不等都应检出,全部匹配才返回相等。
记录本条结果:M08-002 · 状态与证据。
已有实测与复现
补充查阅
扫描定位与记录结果
有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。
- S12 · 启发式:TLM generic payload 比较可能漏检 extension。
核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。
源码与标准依据
核查方式:源码与实测核对。实测仅覆盖本条所列场景。
VCS 内置 UVM-1.2:uvm_tlm2_generic_payload.svh:444
VCS 内置 uvm-ieee-2020-2.0:uvm_tlm2_generic_payload.svh:471
标准依据:无(2.0 标注 @uvm-contrib,待贡献至 1800.2)
标为“源码标注”或未注明原文核对的条款仅作定位;具体库行为以源码和实测为准。
引用代码(高亮为引用行);上方行号链接可直接定位。
完整源码 · SHA256:a9d6f673e4c9fcf993fbb28fb24a1ecbb5912784966a3048b94c77fede11c6cf
完整源码 · SHA256:fe1a030902614234ed93702a137118fabfd1716a1c818177d7aa2bd56b5c87f5