跳转至

输入查询内容

    本页内容

    uvm_packer 新增 API(pack_object_with_meta / unpack_object_with_meta / set_default 等)

    新增功能:目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    影响范围

    采用 pack_object_with_meta 或新的默认 packer 管理接口。

    具体差异

    新增对象引用追踪打包(with_meta 系列,可保持结构/句柄一致性,@uvm-contrib 待进标准)、pack_object_wrapper/unpack_object_wrapper、is_object_wrapper;uvm_packer 注册进工厂(uvm_object_utils),构造 new(string name=""),经 coreservice 管理默认实例。另新增 compat 辅助 unpack_string_with_size(int num_chars=-1):363,注意基类实现忽略 num_chars,直接等价 unpack_string())。

    修改方案

    无(新增能力,可选用)

    兼容措施与范围

    显式使用兼容包提供的类或宏后生效。unpack_string(int num_chars) 旧签名由 compat`uvm_unpack_string_with_sizecompat/uvm_compat_macros.svh:32)与 uvm_compat_packer::unpack_string_with_sizecompat/uvm_compat_packer.svh:384)承接

    迁移后验证

    区分普通 pack_object 和带元数据接口,记录位数与对象类型/空标记;跨版本交换按 M02-001golden 逐位比较。

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    无对应规则。当前脚本没有针对本条的直接检测规则。

    本条处理级别为“可选采用”,按修改方案评估;缺少扫描规则本身不增加迁移改造要求。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码与实测核对。实测仅覆盖本条所列场景。

    VCS 内置 UVM-1.2:无

    VCS 内置 uvm-ieee-2020-2.0uvm_packer.svh:220(pack_object_with_meta)、uvm_packer.svh:321(unpack_object_with_meta)、uvm_packer.svh:244(is_object_wrapper)、uvm_packer.svh:119(static set_default/get_default)

    标准依据:IEEE 1800.2-2020 §16.5.2(构造/默认实例)

    标为“源码标注”或未注明原文核对的条款仅作定位;具体库行为以源码和实测为准。

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-ieee-2020-2.0/base/uvm_packer.svh
      //----------------//
    
      // @uvm-ieee 1800.2-2020 auto 16.5.2.4
      static function void set_default (uvm_packer packer) ;
         uvm_coreservice_t coreservice ;
         coreservice = uvm_coreservice_t::get() ;
         coreservice.set_default_packer(packer) ;
      endfunction
    
      // @uvm-ieee 1800.2-2020 auto 16.5.2.5
      static function uvm_packer get_default () ;
         uvm_coreservice_t coreservice ;
         coreservice = uvm_coreservice_t::get() ;
         return coreservice.get_default_packer() ;
      endfunction
    
    
      // @uvm-ieee 1800.2-2020 auto 16.5.2.2
      extern virtual function void flush ();
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_packer.svh
      // @uvm-ieee 1800.2-2020 auto 16.5.4.2
      extern virtual function void pack_object (uvm_object value);
    
      extern virtual function void pack_object_with_meta (uvm_object value);
    
      extern virtual function void pack_object_wrapper (uvm_object_wrapper value);
    
    
      //------------------//
      // Group -- NODOCS -- Unpacking //
      //------------------//
    
      // Function -- NODOCS -- is_null
      //
      // This method is used during unpack operations to peek at the next 4-bit
      // chunk of the pack data and determine if it is 0.
      //
      // If the next four bits are all 0, then the return value is a 1; otherwise
      // it is 0. 
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_packer.svh
      extern virtual function bit is_null ();
    
    
      extern virtual function bit is_object_wrapper();
      // Function -- NODOCS -- unpack_field
      //
      // Unpacks bits from the pack array and returns the bit-stream that was
      // unpacked. ~size~ is the number of bits to unpack; the maximum is 4096 bits.
    
      // @uvm-ieee 1800.2-2020 auto 16.5.4.16
      extern virtual function uvm_bitstream_t unpack_field (int size);
    
      // Function -- NODOCS -- unpack_field_int
      //
      // Unpacks bits from the pack array and returns the bit-stream that was
      // unpacked. 
      //
      // ~size~ is the number of bits to unpack; the maximum is 64 bits. 
      // This is a more efficient variant than unpack_field when unpacking into
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_packer.svh
      // @uvm-ieee 1800.2-2020 auto 16.5.4.4
      extern virtual function void unpack_object (uvm_object value);
    
      extern virtual function void unpack_object_with_meta (inout uvm_object value);
    
      extern virtual function uvm_object_wrapper unpack_object_wrapper();
    
    
      // Function -- NODOCS -- get_packed_size
      //
      // Returns the number of bits that were packed.
    
      // @uvm-ieee 1800.2-2020 auto 16.5.3.3
      extern virtual function int get_packed_size(); 
    
    
      //------------------//
      // Group -- NODOCS -- Variables //
      //------------------//
    

    完整源码 · SHA256:46e8c9a07d8057451745f4d9b1f49549150620837e7a34bc638a6382d45d9ee2

    术语解释 · 兼容配置

    pack 位流格式改变(M02-001)

    返回Comparer / Printer / Packer / Recorder · 迁移清单

    版本适用范围