跳转至

输入查询内容

    本页内容

    uvm_phase::max_ready_to_end_iter 公共字段删除,改为访问器;get_ready_to_end_count() 删除

    影响范围

    直接访问 max_ready_to_end_iter 或 get_ready_to_end_count。

    具体差异

    旧行为——可直接读写 phase.max_ready_to_end_iter;新行为——字段变 local,直接访问编译失败,须用访问器;且新增"默认值"静态访问器,可全局改默认(1.2 只能逐个 phase 改)。get_ready_to_end_count() 无替代、直接删除(1.2 中本就属 NODOCS 内部接口)。

    修改方案

    将 phase.max_ready_to_end_iter = n 改为 phase.set_max_ready_to_end_iterations(n),读字段改为 phase.get_max_ready_to_end_iterations()。旧 get_ready_to_end_count() 无等价公开替代;若它参与退出判断,改为明确的业务完成条件,若仅用于统计则在自己的回调中计数。

    兼容措施与范围:旧字段和 get_ready_to_end_count 不再提供;迭代上限使用访问器,退出条件或统计自行维护。

    迁移后验证

    编译所有调用并读回 iteration 设置;构造需要再次 ready_to_end 的受控流程,检查结束条件和上限符合预期。

    记录本条结果M03-005 · 状态与证据

    补充查阅

    扫描定位与记录结果

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

    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules C20
    

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_phase.svh:539int unsigned max_ready_to_end_iter = 20; public 字段)、uvm_phase.svh:591get_ready_to_end_count()

    VCS 内置 uvm-ieee-2020-2.0uvm_phase.svh:450–451local 字段 m_default_max_ready_to_end_iters/max_ready_to_end_iters)、uvm_phase.svh:159–168set/get_max_ready_to_end_iterations()set/get_default_max_ready_to_end_iterations(),实现 uvm_phase.svh:1093–1115

    标准依据:IEEE 1800.2-2020 §9.3.1.3.5(源码注释明确初始值 20 出自该节)

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

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

    src/vcs-uvm-1.2/base/uvm_phase.svh
      extern function uvm_phase get_jump_target();
    
    
      int unsigned max_ready_to_end_iter = 20;
    
      //--------------------------
      // Internal - Implementation
      //--------------------------
    
      // Implementation - Construction
      //------------------------------
      protected uvm_phase_type m_phase_type;
      protected uvm_phase      m_parent;     // our 'schedule' node [or points 'up' one level]
      uvm_phase                m_imp;        // phase imp to call when we execute this node
    
      // Implementation - State
      //-----------------------
      local uvm_phase_state    m_state;
      local int                m_run_count; // num times this phase has executed
    

    src/vcs-uvm-1.2/base/uvm_phase.svh
      uvm_objection phase_done; // phase done objection
      local int unsigned m_ready_to_end_count;
    
      function int unsigned get_ready_to_end_count();
         return m_ready_to_end_count;
      endfunction
    
      extern local function void get_predecessors_for_successors(output bit pred_of_succ[uvm_phase]);
      extern local task m_wait_for_pred();
    
      // Implementation - Jumping
      //-------------------------
      local bit                m_jump_bkwd;
      local bit                m_jump_fwd;
      local uvm_phase          m_jump_phase;
      local bit                m_premature_end;
      extern function void clear(uvm_phase_state state = UVM_PHASE_DORMANT);
      extern function void clear_successors(
                                 uvm_phase_state state = UVM_PHASE_DORMANT,
    

    完整源码 · SHA256:35d4b96b111219dd92ea544929952a1d7bbeb3ce29153c705a75c934551f050e

    src/vcs-uvm-ieee-2020-2.0/base/uvm_phase.svh
      extern function uvm_phase_type get_phase_type();
    
      // @uvm-ieee 1800.2-2020 auto 9.3.1.3.3
      extern virtual function void set_max_ready_to_end_iterations(int max);
    
      // @uvm-ieee 1800.2-2020 auto 9.3.1.3.4
      // @uvm-ieee 1800.2-2020 auto 9.3.1.3.6
      extern virtual function int get_max_ready_to_end_iterations();
    
      // @uvm-ieee 1800.2-2020 auto 9.3.1.3.5
      extern static function void set_default_max_ready_to_end_iterations(int max);
    
      extern static function int get_default_max_ready_to_end_iterations();
    
      //-------------
      // Group -- NODOCS -- State
      //-------------
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_phase.svh
      // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      protected uvm_phase_state_change m_state_chg;
      /*local*/ process            m_phase_proc;
      local static int         m_default_max_ready_to_end_iters = 20;    // 20 is the initial value defined by 1800.2-2020 9.3.1.3.5
      local int                      max_ready_to_end_iters = get_default_max_ready_to_end_iterations();
      int                      m_num_procs_not_yet_returned;
      extern function uvm_phase m_find_predecessor(uvm_phase phase, bit stay_in_scope=1, uvm_phase orig_phase=null);
      extern function uvm_phase m_find_successor(uvm_phase phase, bit stay_in_scope=1, uvm_phase orig_phase=null);
      extern function uvm_phase m_find_predecessor_by_name(string name, bit stay_in_scope=1, uvm_phase orig_phase=null);
      extern function uvm_phase m_find_successor_by_name(string name, bit stay_in_scope=1, uvm_phase orig_phase=null);
      extern function void m_print_successors();
    
      // Implementation - Callbacks
      //---------------------------
      // Provide the required component traversal behavior. Called by execute()
      virtual function void traverse(uvm_component comp,
                                     uvm_phase phase,
                                     uvm_phase_state state);
      endfunction
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_phase.svh
    // set_max_ready_to_end_iterations
    // -------------------------------
    
    function void uvm_phase::set_max_ready_to_end_iterations(int max);
      max_ready_to_end_iters = max;
    endfunction
    
    // get_max_ready_to_end_iterations
    // -------------------------------
    
    function int uvm_phase::get_max_ready_to_end_iterations();
      return max_ready_to_end_iters;
    endfunction
    
    // set_default_max_ready_to_end_iterations
    // ---------------------------------------
    
    function void uvm_phase::set_default_max_ready_to_end_iterations(int max);
      m_default_max_ready_to_end_iters = max;
    endfunction
    
    // get_default_max_ready_to_end_iterations
    // ---------------------------------------
    
    function int uvm_phase::get_default_max_ready_to_end_iterations();
      return m_default_max_ready_to_end_iters;
    

    完整源码 · SHA256:a788b22ff02a9ff8e6eab4a18c55794dcae9777ddfa19695bffa88bf14b83181

    术语解释 · 兼容配置

    返回Phase / Objection / Event · 迁移清单

    版本适用范围