跳转至

输入查询内容

    本页内容

    新增 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.2uvm_object_defines.svh:3481 起(uvm_record_ 内嵌于 object_defines;uvm_pack_ 见 :3632 起)

    VCS 内置 uvm-ieee-2020-2.0uvm_packer_defines.svh:136uvm_pack_int(VAR,PACKER=packer) 等全族)、uvm_comparer_defines.svh:52uvm_compare_int 等)、uvm_recorder_defines.svh:100uvm_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 · 迁移清单

    版本适用范围