跳转至

输入查询内容

    本页内容

    uvm_object_globals 字段标志位重构

    影响范围

    硬编码 field FLAG 数值或跨语言传递这些掩码。

    具体差异

    COPY/COMPARE/PRINT/RECORD/PACK 的正负位保持;UNPACK/SET、READONLY、NODEFPRINT 与递归策略位改变,DEFAULT 也改为 ALL_ON。不能概括为所有位重排或所有符号写法透明。符号位运算本身合法,但只提供负向位仍有 M09-002 的 no-op 风险;硬编码旧位值必须改写。

    修改方案

    将硬编码 FLAG 数字改为对应的 UVM_COPY/COMPARE/PRINT/PACK/RECORD 及禁用位符号,不能按旧数字直接复制掩码。只禁用部分操作的声明按 M09-002 保留禁用位并显式启用其他所需操作;自动配置等自定义位另外核对目标编码。

    兼容措施与范围:旧 FLAG 数字编码不恢复;legacy field 开关仅处理操作使能语义,不能替代符号掩码改写。

    迁移后验证

    用符号常量重建掩码,分别验证 copy/compare/print/pack/set;不要只比较枚举的数字是否相同。

    记录本条结果M04-013 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    • S3 · 启发式:field FLAG 的启用操作发生变化,或表达式需要展开。 按两版常量计算受支持的 FLAG 位运算,支持已知常量的 uvm_pkg:: 限定写法,明确操作变化逐处报告;同文件相同未知表达式合并为提示,related_lines 保留全部行号。uvm_pkg::UVM_ALL_ON、UVM_DEFAULT | 0 不报警;其他数值掩码按需提示并关联 M04-013。未模拟 field 宏全部类型差异、set 操作、用户预处理或 legacy 构建;须验证所需操作。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules S3
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_object_globals.svh:180–182UVM_DEFAULT/UVM_ALL_ON/UVM_FLAGS_ON 位掩码字面值)、uvm_object_globals.svh:202–203UVM_READONLY=(1<<15)UVM_NODEFPRINT=(1<<16)

    VCS 内置 uvm-ieee-2020-2.0uvm_object_globals.svh:215–216UVM_READONLY=UVM_NOSET=(1<<12)UVM_NODEFPRINT=(1<<15))、uvm_object_globals.svh:218–223(标志改由 uvm_field_flag_t 组合,新增 UVM_UNPACK/UVM_SET 等位)

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

    src/vcs-uvm-1.2/base/uvm_object_globals.svh
    //F=REFERENCE, S=SHALLOW, D=DEEP
    //K=PACK, R=RECORD, P=PRINT, M=COMPARE, C=COPY
    //--------------------------- AYFSD K R P M C
    parameter UVM_DEFAULT     = 'b000010101010101;
    parameter UVM_ALL_ON      = 'b000000101010101;
    parameter UVM_FLAGS_ON    = 'b000000101010101;
    parameter UVM_FLAGS_OFF   = 0;
    
    //Values are OR'ed into a 32 bit value
    //and externally
    parameter UVM_COPY         = (1<<0);
    parameter UVM_NOCOPY       = (1<<1);
    parameter UVM_COMPARE      = (1<<2);
    parameter UVM_NOCOMPARE    = (1<<3);
    parameter UVM_PRINT        = (1<<4);
    parameter UVM_NOPRINT      = (1<<5);
    parameter UVM_RECORD       = (1<<6);
    parameter UVM_NORECORD     = (1<<7);
    parameter UVM_PACK         = (1<<8);
    

    src/vcs-uvm-1.2/base/uvm_object_globals.svh
    //parameter UVM_REFERENCE    = (1<<12);
    parameter UVM_PHYSICAL     = (1<<13);
    parameter UVM_ABSTRACT     = (1<<14);
    parameter UVM_READONLY     = (1<<15);
    parameter UVM_NODEFPRINT   = (1<<16);
    
    //Extra values that are used for extra methods
    parameter UVM_MACRO_EXTRAS  = (1<<UVM_MACRO_NUMFLAGS);
    parameter UVM_FLAGS        = UVM_MACRO_EXTRAS+1;
    parameter UVM_UNPACK       = UVM_MACRO_EXTRAS+2;
    parameter UVM_CHECK_FIELDS = UVM_MACRO_EXTRAS+3;
    parameter UVM_END_DATA_EXTRA = UVM_MACRO_EXTRAS+4;
    
    
    //Get and set methods (in uvm_object). Used by the set/get* functions
    //to tell the object what operation to perform on the fields.
    parameter UVM_START_FUNCS  = UVM_END_DATA_EXTRA+1;
    parameter UVM_SET           = UVM_START_FUNCS+1;
    parameter UVM_SETINT        = UVM_SET;
    

    完整源码 · SHA256:c2462f17fbd338c1f0d6b5e5faf54821195e02cdf5c0b8c94dd2be152284cd2c

    src/vcs-uvm-ieee-2020-2.0/base/uvm_object_globals.svh
    //@uvm-compat
    parameter uvm_field_flag_t UVM_ABSTRACT     = (1<<14);
    //@uvm-compat
    parameter uvm_field_flag_t UVM_READONLY     = UVM_NOSET;
    parameter uvm_field_flag_t UVM_NODEFPRINT   = (1<<15); //??
    
    parameter uvm_field_flag_t UVM_FLAGS_ON    = UVM_COPY | UVM_COMPARE | 
                                                 UVM_PRINT | UVM_RECORD |
                                                 UVM_PACK | UVM_UNPACK | UVM_SET ;
    parameter uvm_field_flag_t UVM_FLAGS_OFF   = 0;
    parameter uvm_field_flag_t UVM_ALL_ON      = UVM_FLAGS_ON;
    parameter uvm_field_flag_t UVM_DEFAULT     = UVM_ALL_ON;
    
    //Extra values that are used for extra methods
    parameter uvm_field_flag_t UVM_MACRO_EXTRAS  = (1<<UVM_MACRO_NUMFLAGS);
    parameter uvm_field_flag_t UVM_FLAGS         = UVM_MACRO_EXTRAS+1;
    parameter uvm_field_flag_t UVM_CHECK_FIELDS  = UVM_MACRO_EXTRAS+2;
    parameter uvm_field_flag_t UVM_END_DATA_EXTRA = UVM_MACRO_EXTRAS+3;
    
    
    //Get and set methods (in uvm_object). Used by the set/get* functions
    //to tell the object what operation to perform on the fields.
    

    完整源码 · SHA256:0901c91b4736870c6b7bc6408ab2f60ce30cb1c64c5017f71164bc6ccfd7a78f

    术语解释 · 兼容配置

    uvm_field_* automation(M09-002)

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

    版本适用范围