本页内容
新增 comparer 宏与命名比较辅助
高风险 · 静默/数据
新增功能 :目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。
具体差异
目标新增 comparer 宏族(uvm_compare_int/enum/real/object/string/sarray/qda、named 变体及 threshold begin/end),供手写 do_compare 时按目标 comparer 策略调用。pack/record 宏的拆分、默认 policy 参数和原有调用兼容性统一见 M09-010 ;跨版本位流变化见 M02-001 。
修改方案
已有 do_compare 无需仅为新宏改写。选择新 comparer 宏时,按目标原型传入字段名、值和 comparer,并用相等/不等对象验证比较返回值与诊断。
兼容措施与范围 :本条是新增能力或实现说明,无需恢复旧接口;按使用条件核对行为。
已有实测与复现
补充查阅
扫描定位与记录结果
无对应规则 。当前脚本没有针对本条的直接检测规则。
本条处理级别为“可选采用”,按修改方案评估;缺少扫描规则本身不增加迁移改造要求。
扫描器下载、输入范围与报告说明
源码与标准依据
核查方式:源码与实测核对 。实测仅覆盖本条所列场景。
VCS 内置 UVM-1.2 :uvm_object_defines.svh:3481 起(uvm_record_ 内嵌于 object_defines;uvm_pack_ 见 :3632 起)
VCS 内置 uvm-ieee-2020-2.0 :uvm_packer_defines.svh:136 (uvm_pack_int(VAR,PACKER=packer) 等全族)、uvm_comparer_defines.svh:52 (uvm_compare_int 等)、uvm_recorder_defines.svh:100 (uvm_record_int(...,RECORDER=recorder) 等)
标准依据 :IEEE 1800.2-2020 §B.2.3(recording)、§B.2.4(packing)、§B.2.5(unpacking)。新增 comparer 宏及额外 policy 形参按目标实现核对,不能由这些标准条款推导其原型。
标为“源码标注”或未注明原文核对的条款仅作定位;具体库行为以源码和实测为准。
引用代码(高亮为引用行);上方行号链接可直接定位。
src/vcs-uvm-1.2/macros/uvm_object_defines.svh `ifndef uvm_record_attribute
`ifdef QUESTA
`define uvm_record_attribute ( TR_HANDLE , NAME , VALUE ) \
$ add_attribute ( TR_HANDLE , VALUE , NAME );
`else
`define uvm_record_attribute ( TR_HANDLE , NAME , VALUE ) \
recorder . record_generic ( NAME , $ sformatf ( "%p" , VALUE ));
`endif
`endif
// Macro: `uvm_record_int
//
//| `uvm_record_int(NAME,VALUE,SIZE[,RADIX])
//
// The ~`uvm_record_int~ macro takes the same arguments as
// the <uvm_recorder::record_field> method (including the optional ~RADIX~).
//
// The default implementation will pass the name/value pair to
完整源码 · SHA256:fad4b0a983286e771a025f28de582e35b21fd1dc49d8fcc5c1b2be9f4ebe99d1
src/vcs-uvm-ieee-2020-2.0/macros/uvm_packer_defines.svh // @uvm-ieee 1800.2-2020 auto B.2.4.6
`define uvm_pack_int(VAR,PACKER=packer) \
`uvm_pack_intN(VAR,$bits(VAR),PACKER)
// uvm_pack_object
`define uvm_pack_object(VAR,PACKER=packer) \
PACKER.pack_object_with_meta(VAR);
// @uvm-ieee 1800.2-2020 auto B.2.4.7
`define uvm_pack_enum(VAR,PACKER=packer) \
`uvm_pack_enumN(VAR,$bits(VAR),PACKER)
// @uvm-ieee 1800.2-2020 auto B.2.4.8
`define uvm_pack_string(VAR,PACKER=packer) \
PACKER.pack_string(VAR);
完整源码 · SHA256:08f5c945fa7d7fe4bb53cb9478756c920dfff5d1e86bbbd93054999813f717ab
src/vcs-uvm-ieee-2020-2.0/macros/uvm_comparer_defines.svh `m_uvm_compare_threshold_end
// uvm_compare_int
`define uvm_compare_int(LVALUE, RVALUE, RADIX, COMPARER=comparer) \
`uvm_compare_named_int(`"LVALUE`", LVALUE, RVALUE, RADIX, COMPARER)
`define uvm_compare_named_int(NAME, LVALUE, RVALUE, RADIX, COMPARER=comparer) \
`m_uvm_compare_begin(LVALUE, RVALUE, COMPARER) \
if ($bits(LVALUE) <= 64) \
void'(COMPARER.compare_field_int(NAME , LVALUE, RVALUE, $bits(LVALUE), RADIX)); \
else \
void'(COMPARER.compare_field(NAME , LVALUE, RVALUE, $bits(LVALUE), RADIX)); \
`m_uvm_compare_end
// uvm_compare_enum
`define uvm_compare_enum(LVALUE, RVALUE, TYPE, COMPARER=comparer) \
`uvm_compare_named_enum(`"LVALUE`", LVALUE, RVALUE, TYPE, COMPARER)
完整源码 · SHA256:bc5a1f24eadb26912cc84e92d77fdd35970a281965fa6afc60d9b56b02d36352
src/vcs-uvm-ieee-2020-2.0/macros/uvm_recorder_defines.svh `ifndef uvm_record_int
// @uvm-ieee 1800.2-2020 auto B.2.3.2
`define uvm_record_int(NAME,VALUE,SIZE,RADIX = UVM_NORADIX,RECORDER=recorder) \
if (RECORDER != null && RECORDER.is_open()) begin \
if (RECORDER.use_record_attribute()) \
`uvm_record_attribute(RECORDER.get_record_attribute_handle(),NAME,VALUE,RECORDER) \
else \
if (SIZE > 64) \
RECORDER.record_field(NAME, VALUE, SIZE, RADIX); \
else \
RECORDER.record_field_int(NAME, VALUE, SIZE, RADIX); \
end
`endif
// Macro -- NODOCS -- `uvm_record_string
//
//| `uvm_record_string(NAME,VALUE)
//
完整源码 · SHA256:182dfa5e33826150d5ad29527498a0dfb0418ab868e578332308841cb4c84c00
术语解释 · 兼容配置
pack 位流格式改变(M02-001) · pack、unpack、record 宏的文件拆分(M09-010)
返回Comparer / Printer / Packer / Recorder · 迁移清单
版本适用范围