跳转至

输入查询内容

    本页内容

    uvm_sequence_base 废弃的 sequence-library 方法删除

    影响范围

    调用 sequence_base 旧库管理/按名称创建方法。

    具体差异

    1.2 中这些方法已打 UVM_DEPRECATED 警告,2.0 彻底删除,用户代码直接编译错误。

    修改方案

    旧库管理不再放在 uvm_sequence_base 上:把候选类型登记移到具体 uvm_sequence_library,通过 add_typewide_sequence 登记类型,用 get_sequence(idx) 查询并检查索引。若只启动固定 sequence,直接 type_id::create 后 start(target_seqr),避免仅为保留旧方法名再造序列库。

    兼容措施与范围:旧 sequence_base 库管理方法不再提供;具体 sequence_library 与显式 start 须按原选择意图使用。

    迁移后验证

    编译显式创建或 sequence_library 改写,核对被选择的具体类型、启动次数和 parent/sequencer。

    记录本条结果M06-003 · 状态与证据

    补充查阅

    扫描定位与记录结果

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

    • C22 · 启发式:sequence_base 旧库管理方法。 排除已识别的 uvm_sequence_library 及同文件简单派生类的 get_sequence 调用,保留旧 sequence/sequencer 和未知接收者的入口。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules C22
    

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_sequence_base.svh:1241–1363seq_kindnum_sequences()get_seq_kind()get_sequence()do_sequence_kind()get_sequence_by_name()create_and_start_sequence_by_name()ifndef UVM_NO_DEPRECATED 保护)

    VCS 内置 uvm-ieee-2020-2.0src/vcs-uvm-ieee-2020-2.0/seq/uvm_sequence_base.svh 全部不存在

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

    src/vcs-uvm-1.2/seq/uvm_sequence_base.svh
      //------------------------
      // Group- Sequence Library DEPRECATED
      //------------------------
    
    `ifndef UVM_NO_DEPRECATED
    
      // Variable- seq_kind
      //
      // Used as an identifier in constraints for a specific sequence type.
    
      rand int unsigned seq_kind;
    
      // For user random selection. This excludes the exhaustive and
      // random sequences.
      constraint pick_sequence { 
           (num_sequences() <= 2) || (seq_kind >= 2);
           (seq_kind <  num_sequences()) || (seq_kind == 0); }
    
    
      // Function- num_sequences
      // 
      // Returns the number of sequences in the sequencer's sequence library.
    
      function int num_sequences();
        if (m_sequencer == null)
          return 0;
        return (m_sequencer.num_sequences());
      endfunction
    
    
    
      // Function- get_seq_kind
      //
      // This function returns an int representing the sequence kind that has
      // been registerd with the sequencer.  The return value may be used with
      // the <get_sequence> or <do_sequence_kind> methods.
    
      function int get_seq_kind(string type_name);
        `uvm_warning("UVM_DEPRECATED",$sformatf("%m deprecated."))
        if(m_sequencer != null)
          return m_sequencer.get_seq_kind(type_name);
        else 
          uvm_report_warning("NULLSQ", $sformatf("%0s sequencer is null.",
                                               get_type_name()), UVM_NONE);
      endfunction
    
    
      // Function- get_sequence
      //
      // This function returns a reference to a sequence specified by ~req_kind~,
      // which can be obtained using the <get_seq_kind> method.
    
      function uvm_sequence_base get_sequence(int unsigned req_kind);
        uvm_sequence_base m_seq;
        string m_seq_type;
        uvm_coreservice_t cs = uvm_coreservice_t::get();                                                     
        uvm_factory factory=cs.get_factory();
        `uvm_warning("UVM_DEPRECATED",$sformatf("%m deprecated."))
        if (req_kind < 0 || req_kind >= m_sequencer.sequences.size()) begin
          uvm_report_error("SEQRNG", 
            $sformatf("Kind arg '%0d' out of range. Need 0-%0d",
            req_kind, m_sequencer.sequences.size()-1), UVM_NONE);
        end
        m_seq_type = m_sequencer.sequences[req_kind];
        if (!$cast(m_seq, factory.create_object_by_name(m_seq_type, get_full_name(), m_seq_type))) begin
          uvm_report_fatal("FCTSEQ", 
            $sformatf("Factory cannot produce a sequence of type %0s.",
            m_seq_type), UVM_NONE);
        end
        m_seq.set_use_sequence_info(1);
        return m_seq;
      endfunction
    
    
      // Task- do_sequence_kind
      //
      // This task will start a sequence of kind specified by ~req_kind~,
      // which can be obtained using the <get_seq_kind> method.
    
      task do_sequence_kind(int unsigned req_kind);
        string m_seq_type;
        uvm_sequence_base m_seq;
        uvm_coreservice_t cs = uvm_coreservice_t::get();                                                     
        uvm_factory factory=cs.get_factory();
        `uvm_warning("UVM_DEPRECATED",$sformatf("%m deprecated."))
        m_seq_type = m_sequencer.sequences[req_kind];
        if (!$cast(m_seq, factory.create_object_by_name(m_seq_type, get_full_name(), m_seq_type))) begin
          uvm_report_fatal("FCTSEQ", 
            $sformatf("Factory cannot produce a sequence of type %0s.", m_seq_type), UVM_NONE);
        end
    
        m_seq.set_item_context(this, m_sequencer);
    
        if(!m_seq.randomize()) begin
          uvm_report_warning("RNDFLD", "Randomization failed in do_sequence_kind()");
        end
        m_seq.start(m_sequencer,this,get_priority(),0);
      endtask
    
    
      // Function- get_sequence_by_name
      //
      // Internal method.
    
      function uvm_sequence_base get_sequence_by_name(string seq_name);
        uvm_sequence_base m_seq;
        uvm_coreservice_t cs = uvm_coreservice_t::get();                                                     
        uvm_factory factory=cs.get_factory();
        `uvm_warning("UVM_DEPRECATED",$sformatf("%m deprecated."))
        if (!$cast(m_seq, factory.create_object_by_name(seq_name, get_full_name(), seq_name))) begin
          uvm_report_fatal("FCTSEQ", 
            $sformatf("Factory cannot produce a sequence of type %0s.", seq_name), UVM_NONE);
        end
        m_seq.set_use_sequence_info(1);
        return m_seq;
      endfunction
    
    
      // Task- create_and_start_sequence_by_name
      //
      // Internal method.
    
      task create_and_start_sequence_by_name(string seq_name);
        uvm_sequence_base m_seq;
    

    完整源码 · SHA256:1594d38afd79cb400a689fdbe6c8e33ff60714bb7527cd8d79739d9357b31682

    术语解释 · 兼容配置

    返回Sequence / Sequencer · 迁移清单

    版本适用范围