跳转至

输入查询内容

    本页内容

    uvm_reg_predictor:type_name 由静态变量改为静态函数;新增 flush()

    影响范围

    predictor.type_name,或显式清理多拍预测状态。

    具体差异

    type_name 从变量改为无参函数。SV 允许无参函数调用省略括号,普通读取不因省略括号而必然报错;向旧可写变量赋值或将其用于要求变量的上下文才需修改。flush() 新增,用于清空预测器内部状态。

    修改方案

    新代码显式调用 type_name();移除对原可写 type_name 字段的赋值。

    兼容措施与范围:兼容措施不恢复可写 type_name;自有变量用于缓存或改写,预测器清理按实际事务边界执行。

    迁移后验证

    编译静态名称调用;发送未完成多拍事务后按业务重置点清理,再检查新事务不会拼接旧数据。

    记录本条结果M07-012 · 状态与证据

    补充查阅

    扫描定位与记录结果

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

    • C27 · 启发式:type_name 被当作可写变量。 排除自有变量、形参及普通下标读取;受影响成员写入和注册宏与同名声明冲突仍提示,未解析完整类型系统。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules C27
    

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_reg_predictor.svh:116static string type_name = "")、uvm_reg_predictor.svh:117virtual function string get_type_name()

    VCS 内置 uvm-ieee-2020-2.0uvm_reg_predictor.svh:128static function string type_name())、uvm_reg_predictor.svh:137get_type_name 改为转调 type_name())、uvm_reg_predictor.svh:285(新增 virtual function void flush()

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

    src/vcs-uvm-1.2/reg/uvm_reg_predictor.svh
      endfunction
    
      // This method is documented in uvm_object
      static string type_name = "";
      virtual function string get_type_name();
        if (type_name == "") begin
          BUSTYPE t;
          t = BUSTYPE::type_id::create("t");
          type_name = {"uvm_reg_predictor #(", t.get_type_name(), ")"};
        end
        return type_name;
      endfunction
    
      // Function: pre_predict
      //
      // Override this method to change the value or re-direct the
      // target register
      //
      virtual function void pre_predict(uvm_reg_item rw);
      endfunction
    

    完整源码 · SHA256:edfc951ca2d36f78c9a4c3368f07ca71136803dfcfb356a23c30a9549109749a

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_predictor.svh
      // This method is documented in uvm_object
      // TODO:  Is it better to replace this with:
      //| `uvm_type_name_decl($sformatf("uvm_reg_predictor #(%s)", BUSTYPE::type_name())
      static function string type_name();
        static string m_type_name;
        if (m_type_name == "") begin
          BUSTYPE t;
          t = BUSTYPE::type_id::create("t");
          m_type_name = {"uvm_reg_predictor #(", t.get_type_name(), ")"};
        end
        return m_type_name;
      endfunction // type_name
      virtual function string get_type_name();
        return type_name();
      endfunction : get_type_name
    
      // @uvm-ieee 1800.2-2020 auto 19.3.3.2
      virtual function void pre_predict(uvm_reg_item rw);
      endfunction
    
      local uvm_predict_s m_pending[uvm_reg];
    
    
      // Function- write
      //
      // not a user-level method. Do not call directly. See documentation
      // for the ~bus_in~ member.
      //
    

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_predictor.svh
      // Clear the state of the predictor including the pending writes.
      //
      // @uvm-contrib This API is being considered for potential contribution to 1800.2
      virtual function void flush(); 
        m_pending.delete();
      endfunction
    
    endclass
    

    完整源码 · SHA256:a6e7b4d48f874febb3ba5edf30ad961c4eaa8e988e8a99b6f6bb0b374e88fece

    术语解释 · 兼容配置

    返回RAL(寄存器模型) · 迁移清单

    版本适用范围