跳转至

输入查询内容

    本页内容

    新增 field 宏:real 数组/队列/静态数组与 aa_object_key/aa_string_key

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

    具体差异

    补齐 real 类型容器。aa_object_key/aa_string_key 中 object/string 指数组的值类型,KEY 是显式的索引类型,不能将宏名解释为“对象/字符串作键”。相关实现用 $bits(KEY) 与整数索引打包,须按支持的键类型使用;既有宏签名统一加默认 FLAG

    修改方案

    无(1.2 中手写 do_* 处理的 real 容器字段可改用新宏)。

    兼容措施与范围:本条是新增能力或实现说明,无需恢复旧接口;按使用条件核对行为。

    补充查阅

    扫描定位与记录结果

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

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

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

    源码与标准依据

    核查方式:源码核对。未单独进行 VCS 行为实测。

    VCS 内置 UVM-1.2:无(1.2 仅标量 uvm_field_realuvm_field_aa_int_keyuvm_object_defines.svh:2565

    VCS 内置 uvm-ieee-2020-2.0uvm_object_defines.svh:2435uvm_field_sarray_real)、uvm_object_defines.svh:2557/uvm_object_defines.svh:2560uvm_field_array_real/uvm_field_queue_real)、uvm_object_defines.svh:2057/uvm_object_defines.svh:2118uvm_field_aa_object_key/uvm_field_aa_string_key

    标准依据:IEEE 1800.2-2020 §B.2.2

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

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

    src/vcs-uvm-1.2/macros/uvm_object_defines.svh
    // that is an associative array of integrals, and ~FLAG~ is a bitwise OR of one 
    // or more flag settings as described in <Field Macros> above.
    
    `define uvm_field_aa_int_key(KEY, ARG, FLAG) \
      begin \
      if(what__==UVM_CHECK_FIELDS) __m_uvm_status_container.do_field_check(`"ARG`", this); \
      `M_UVM_FIELD_DATA_AA_int_key(KEY,ARG,FLAG) \
      `M_UVM_FIELD_SET_AA_INT_TYPE(KEY, INT, ARG, __m_uvm_status_container.bitstream, FLAG)  \
      end
    
    
    // MACRO: `uvm_field_aa_int_enumkey
    //
    // Implements the data operations for an associative array of integral
    // types indexed by any enumeration key data type. 
    //
    //|  `uvm_field_aa_int_enumkey(KEY, ARG,FLAG)
    //
    // ~KEY~ is the enumeration type of the key, ~ARG~ is the name of a property 
    

    完整源码 · SHA256:fad4b0a983286e771a025f28de582e35b21fd1dc49d8fcc5c1b2be9f4ebe99d1

    src/vcs-uvm-ieee-2020-2.0/macros/uvm_object_defines.svh
      `uvm_field_aa_object_key(int, ARG, FLAG)
    
    // Not LRM, but supports packing + configuration
    `define uvm_field_aa_object_key(KEY, ARG,FLAG=UVM_DEFAULT) \
      `m_uvm_field_begin(ARG, FLAG, `"ARG[+]`") \
        `m_uvm_field_op_begin(COPY,FLAG) \
          `uvm_copy_aa_object(ARG, local_rhs__.ARG, `m_uvm_field_recursion(FLAG), __local_copier__) \
        `m_uvm_field_op_end(COPY) \
        `m_uvm_field_op_begin(COMPARE,FLAG) \
          `uvm_compare_aa_object_int(ARG, local_rhs__.ARG, `m_uvm_field_recursion(FLAG), __local_comparer__) \
        `m_uvm_field_op_end(COMPARE) \
        `m_uvm_field_op_begin(PACK,FLAG) \
          if (`m_uvm_field_recursion(FLAG) != UVM_REFERENCE) \
            `uvm_pack_aa_object_intN(ARG, $bits(KEY), __local_packer__) \
        `m_uvm_field_op_end(PACK) \
        `m_uvm_field_op_begin(UNPACK,FLAG) \
          if (`m_uvm_field_recursion(FLAG) != UVM_REFERENCE) \
            `uvm_unpack_aa_object_intN(ARG, $bits(KEY), __local_packer__) \
        `m_uvm_field_op_end(UNPACK) \
    

    src/vcs-uvm-ieee-2020-2.0/macros/uvm_object_defines.svh
      `uvm_field_aa_string_key(int, ARG, FLAG)
    
    // Not LRM, but supports packing + configuration
    `define uvm_field_aa_string_key(KEY, ARG,FLAG=UVM_DEFAULT) \
      `m_uvm_field_begin(ARG, FLAG, `"ARG[+]`") \
        `m_uvm_field_op_begin(COPY,FLAG) \
          ARG = local_rhs__.ARG; \
        `m_uvm_field_op_end(COPY) \
        `m_uvm_field_op_begin(COMPARE,FLAG) \
          `uvm_compare_aa_string_int(ARG, local_rhs__.ARG, __local_comparer__) \
        `m_uvm_field_op_end(COMPARE) \
        `m_uvm_field_op_begin(PACK,FLAG) \
          `uvm_pack_aa_string_intN(ARG, $bits(KEY), __local_packer__) \
        `m_uvm_field_op_end(PACK) \
        `m_uvm_field_op_begin(UNPACK,FLAG) \
          `uvm_unpack_aa_string_intN(ARG, $bits(KEY), __local_packer__) \
        `m_uvm_field_op_end(UNPACK) \
        `m_uvm_field_op_begin(PRINT,FLAG) \
          /* TODO */ \
    

    src/vcs-uvm-ieee-2020-2.0/macros/uvm_object_defines.svh
      `m_uvm_field_end(ARG)
    
    //-- Field Macros for arrays of real (Non-LRM enhancement)
    `define uvm_field_sarray_real(ARG,FLAG=UVM_DEFAULT) \
      `m_uvm_field_begin(ARG,FLAG, `"ARG[+]`") \
        `m_uvm_field_op_begin(COPY,FLAG) \
          ARG = local_rhs__.ARG; \
        `m_uvm_field_op_end(COPY) \
        `m_uvm_field_op_begin(COMPARE,FLAG) \
          `uvm_compare_sarray_real(ARG, local_rhs__.ARG, __local_comparer__) \
        `m_uvm_field_op_end(COMPARE) \
        `m_uvm_field_op_begin(PACK,FLAG) \
          `uvm_pack_sarray_real(ARG, __local_packer__) \
        `m_uvm_field_op_end(PACK) \
        `m_uvm_field_op_begin(UNPACK,FLAG) \
          `uvm_unpack_sarray_real(ARG, __local_packer__) \
        `m_uvm_field_op_end(UNPACK) \
        `m_uvm_field_op_begin(RECORD,FLAG) \
          `uvm_record_qda_real(ARG, __local_recorder__)  \
    

    src/vcs-uvm-ieee-2020-2.0/macros/uvm_object_defines.svh
        `m_uvm_field_op_end(SET) \
      `m_uvm_field_end(ARG)
    
    `define uvm_field_array_real(ARG,FLAG=UVM_DEFAULT) \
      `m_uvm_field_qda_real(da,ARG,FLAG)
    
    `define uvm_field_queue_real(ARG,FLAG=UVM_DEFAULT) \
      `m_uvm_field_qda_real(queue,ARG,FLAG)
    
    `endif // !`ifdef UVM_EMPTY_MACROS
    
    `endif  // UVM_OBJECT_DEFINES_SVH
    

    完整源码 · SHA256:072baece05e653f6811936de05739a8ff55c02651d89a9278f39cca11372a260

    术语解释 · 兼容配置

    返回Field Automation / 版本宏 · 迁移清单

    版本适用范围