本页内容
新增 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_real 与 uvm_field_aa_int_key,uvm_object_defines.svh:2565 )
VCS 内置 uvm-ieee-2020-2.0 :uvm_object_defines.svh:2435 (uvm_field_sarray_real)、uvm_object_defines.svh:2557 /uvm_object_defines.svh:2560 (uvm_field_array_real/uvm_field_queue_real)、uvm_object_defines.svh:2057 /uvm_object_defines.svh:2118 (uvm_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 / 版本宏 · 迁移清单
版本适用范围