跳转至

输入查询内容

    本页内容

    资源特化类删除返回子类型的静态 get_by_name/get_by_type

    影响范围

    调用资源特化子类的静态 get_by_name/get_by_type,或假设返回的都是该子类。

    具体差异

    uvm_int_rsrc/uvm_string_rsrc/uvm_obj_rsrc/uvm_bit_rsrc/uvm_byte_rsrc 类并未删除,其返回特化子类型的静态查询消失。构造函数现在调用 pool.set_scope,因此这组便利类型的构造还会入池,不应套用普通 uvm_resource 构造不入池的结论。

    修改方案

    按值类型使用 resource_db#(T)::get_by_name/get_by_type;结果为 uvm_resource#(T)。需要原特化子类型时显式检查 null 与 cast,不要假设池中同型资源都是该子类。

    兼容措施与范围:特化资源类保留,旧静态查询不恢复;DB 返回基类型资源,所需子类型必须判空并 cast。

    迁移后验证

    编译 DB 查询替代,分别测试空结果、同值类型不同子类和预期子类;先判空再检查 cast 结果。

    记录本条结果M05-011 · 状态与证据

    已有实测与复现

    补充查阅

    扫描定位与记录结果

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

    • C16 · 文本匹配:资源特化类的静态查询删除。 按括号配对识别特化资源的静态查询,支持标准包限定和嵌套参数;用户包同名类型不按标准 UVM 类型处理。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules C16
    

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

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

    源码与标准依据

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

    证据tests/uvm_review/compile_extended.sv C16。

    VCS 内置 UVM-1.2uvm_resource_specializations.svh:72(uvm_int_rsrc 等通过 UVM_RESOURCE_GET_FCNS 定义静态查询)

    VCS 内置 uvm-ieee-2020-2.0uvm_resource_specializations.svh:72(特化类保留,但查询宏调用删除)

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

    src/vcs-uvm-1.2/base/uvm_resource_specializations.svh
    class uvm_int_rsrc extends uvm_resource #(int);
    
      typedef uvm_int_rsrc this_subtype;
    
      function new(string name, string s = "*");
        super.new(name, s);
      endfunction
    
      function string convert2string();
        string s;
        $sformat(s, "%0d", read());
        return s;
      endfunction
    
      `UVM_RESOURCE_GET_FCNS(int)
    
    endclass
    
    //----------------------------------------------------------------------
    

    完整源码 · SHA256:5a83d54baaa380c333663fbc23e87564344400edbc94117facd59b7ec4567b13

    src/vcs-uvm-ieee-2020-2.0/base/uvm_resource_specializations.svh
    //
    // specialization of uvm_resource #(T) for T = int
    //----------------------------------------------------------------------
    class uvm_int_rsrc extends uvm_resource #(int);
    
      typedef uvm_int_rsrc this_subtype;
    
      function new(string name, string s = "*");
        uvm_resource_pool rp;
        super.new(name);
        rp = uvm_resource_pool::get();
        rp.set_scope(this, s);
      endfunction
    
      function string convert2string();
        string s;
        $sformat(s, "%0d", read());
        return s;
      endfunction
    

    完整源码 · SHA256:a53564a206282793961fae03ebaca9726fa846dd870af3d2c332e499ace68fe0

    术语解释 · 兼容配置

    返回Config DB / Resource DB · 迁移清单

    版本适用范围