跳转至

输入查询内容

    本页内容

    旧 sequence 注册宏改为 object/component 注册

    影响范围

    使用 uvm_deprecated_defines.svh 内旧宏的代码需修改;开启 deprecated 不能恢复被整文件删除的宏。

    具体差异

    1.2 中已标注 deprecated 但仍默认可用的 sequence/sequencer 注册与打包宏,在 2.0 中彻底删除,UVM_ENABLE_DEPRECATED_API 也不恢复(deprecated/macros/ 仅含 object/sequence 两个 defines)。uvm_add_to_seq_lib 保留(1.2 src/vcs-uvm-1.2/macros/uvm_sequence_defines.svh:356 → 2.0 src/vcs-uvm-ieee-2020-2.0/macros/uvm_sequence_defines.svh:211)。

    修改方案

    uvm_sequence_utils(TYPE,SEQR) 改为 `uvm_object_utils(TYPE);原宏还声明了 typed p_sequencer,需要该成员时保留 `uvm_declare_p_sequencer(SEQR)。只有确需使用具体 uvm_sequence_library 时才加 `uvm_add_to_seq_lib(TYPE, LIBTYPE),LIBTYPE 是 library 类型,不能直接填旧 SEQR。uvm_sequencer_utils(TYPE)`uvm_component_utils(TYPE);package 宏改为匹配的 package / endpackage

    在业务 sequence 类中:

    // UVM 1.2
    `uvm_sequence_utils(traffic_seq, bus_sequencer)
    

    如果类内仍访问 p_sequencer,目标写法需要保留它的声明:

    `uvm_object_utils(traffic_seq)
    `uvm_declare_p_sequencer(bus_sequencer)
    

    没有使用 p_sequencer 时只保留第一行。旧 uvm_sequencer_utils(bus_sequencer) 则改为 uvm_component_utils(bus_sequencer)。启用 deprecated 开关不能恢复这些已删除的注册宏。

    兼容措施与范围deprecated 开关不恢复已删除的注册/package 宏;按原 typed p_sequencer 和候选库需求分别改写。

    迁移后验证

    编译新 utils/package 写法;按 type 和 name 创建对象,并检查 sequence library 注册、p_sequencer 使用意图是否保留。

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

    补充查阅

    扫描定位与记录结果

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

    • D1 · 文本匹配:uvm_deprecated_defines.svh 整文件删除(uvm_sequence_utils/uvm_package 等)。 覆盖 sequence/sequencer_utils 及其 begin/end 宏族;忽略普通诊断字符串中的宏名,保留真实宏调用。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules D1
    

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

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_deprecated_defines.svh:33/uvm_deprecated_defines.svh:73/uvm_deprecated_defines.svh:89/uvm_deprecated_defines.svh:125/uvm_deprecated_defines.svh:138/uvm_deprecated_defines.svh:149/uvm_deprecated_defines.svh:228/uvm_deprecated_defines.svh:246;默认由 uvm_macros.svh:109 编入

    VCS 内置 uvm-ieee-2020-2.0:2.0 全树无对应定义(uvm_macros.svh 中该 include 已移除)

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

    src/vcs-uvm-1.2/macros/uvm_deprecated_defines.svh
    // the sequence will run on. 
    //-----------------------------------------------------------------------------
    
    `define m_uvm_register_sequence(TYPE_NAME, SEQUENCER) \
      static bit is_registered_with_sequencer = SEQUENCER``::add_typewide_sequence(`"TYPE_NAME`");
    
    
    // MACRO- `uvm_sequence_utils_begin
    //
    `define uvm_sequence_utils_begin(TYPE_NAME, SEQUENCER) \
      `m_uvm_register_sequence(TYPE_NAME, SEQUENCER) \
      `uvm_declare_p_sequencer(SEQUENCER) \
      `uvm_object_utils_begin(TYPE_NAME)
    
    // MACRO- `uvm_sequence_utils_end
    //
    `define uvm_sequence_utils_end \
      `uvm_object_utils_end
    

    src/vcs-uvm-1.2/macros/uvm_deprecated_defines.svh
    // Use `uvm_sequence_utils[_begin] for non-parameterized classes and
    // `uvm_sequence_param_utils[_begin] for parameterized classes.
    
    `define uvm_sequence_utils(TYPE_NAME, SEQUENCER) \
      `uvm_sequence_utils_begin(TYPE_NAME,SEQUENCER) \
      `uvm_sequence_utils_end
    
    
    //-----------------------------------------------------------------------------
    //
    // *** DEPRECATED ***
    //
    // Group- Sequencer Registration Macros
    //
    // The sequencer-specific macros perform the same function as the set of
    // `uvm_componenent_*utils macros except that they also declare the plumbing
    // necessary for creating the sequencer's sequence library.
    //-----------------------------------------------------------------------------
    
    `define uvm_declare_sequence_lib \
      protected bit m_set_sequences_called = 1;    \
      static protected string m_static_sequences[$]; \
      static protected string m_static_remove_sequences[$]; \
      \
      static function bit add_typewide_sequence(string type_name); \
        m_static_sequences.push_back(type_name); \
        return 1; \
      endfunction\
      \
      static function bit remove_typewide_sequence(string type_name); \
        m_static_remove_sequences.push_back(type_name); \
        for (int i = 0; i < m_static_sequences.size(); i++) begin \
          if (m_static_sequences[i] == type_name) \
            m_static_sequences.delete(i); \
        end \
    

    src/vcs-uvm-1.2/macros/uvm_deprecated_defines.svh
    // This macro populates the instance-specific sequence library for a sequencer.
    // It should be invoked inside the sequencer��s constructor.
    
    `define uvm_update_sequence_lib \
      m_add_builtin_seqs(0); \
      uvm_update_sequence_lib();
    
    
    // MACRO- `uvm_update_sequence_lib_and_item
    //
    // This macro populates the instance specific sequence library for a sequencer,
    // and it registers the given ~USER_ITEM~ as an instance override for the simple
    // sequence's item variable.
    //
    // The macro should be invoked inside the sequencer's constructor.
    
    `define uvm_update_sequence_lib_and_item(USER_ITEM) \
      begin   uvm_coreservice_t cs = uvm_coreservice_t::get(); uvm_factory factory=cs.get_factory(); \
      factory.set_inst_override_by_type( \
        uvm_sequence_item::get_type(), USER_ITEM::get_type(), \
      {get_full_name(), "*.item"}); end \
      m_add_builtin_seqs(1); \
      uvm_update_sequence_lib();
    
    
    // MACRO- `uvm_sequencer_utils
    
    `define uvm_sequencer_utils(TYPE_NAME) \
      `uvm_sequencer_utils_begin(TYPE_NAME) \
      `uvm_sequencer_utils_end
    
    // MACRO- `uvm_sequencer_utils_begin
    
    `define uvm_sequencer_utils_begin(TYPE_NAME) \
      `uvm_declare_sequence_lib \
      `uvm_component_utils_begin(TYPE_NAME)
    
    // MACRO- `uvm_sequencer_param_utils
    
    `define uvm_sequencer_param_utils(TYPE_NAME) \
      `uvm_sequencer_param_utils_begin(TYPE_NAME) \
      `uvm_sequencer_utils_end
    

    src/vcs-uvm-1.2/macros/uvm_deprecated_defines.svh
    // Use uvm_end_package to endpackage.
    //-----------------------------------------------------------------------------
    
    `define uvm_package(PKG) \
      package PKG; \
      class uvm_bogus_class extends uvm::uvm_sequence;\
      endclass
    
    `define uvm_end_package \
       endpackage
    
    
    //-----------------------------------------------------------------------------
    //
    // MACRO- `uvm_sequence_library_package
    //
    // This macro is used to trigger static initializers in packages. `uvm_package
    // creates a bogus type which gets referred to by uvm_sequence_library_package
    // to make a package-based variable of the bogus type.
    //-----------------------------------------------------------------------------
    
    `define uvm_sequence_library_package(PKG_NAME) \
      import PKG_NAME``::*; \
      PKG_NAME``::uvm_bogus_class M_``PKG_NAME``uvm_bogus_class
    
    `endif // UVM_NO_DEPRECATED
    

    完整源码 · SHA256:8c86b510a64f9caf43c1d5bf9da67291e234054bfecf86a5a99a757dae23ef51

    src/vcs-uvm-1.2/uvm_macros.svh
    `include "macros/uvm_sequence_defines.svh"
    `include "macros/uvm_callback_defines.svh"
    `include "macros/uvm_reg_defines.svh"
    `include "macros/uvm_deprecated_defines.svh"
    
    `ifdef VCS
    `ifndef UVM_VCS_ENC
    `define UVM_VCS_GLOBAL_DECLARATIONS
    `define UVM_VCS_DECLARATIONS
    `define UVM_VCS_CHECK(if_expr) if_expr
    `define UVM_VCS_CLP_TF
    `ifdef UVM_VCS_DTL_REFRESH
    `define UVM_VCS_CALL_REFRESH_COMPONENT
    `endif
    `endif
    `endif
    
    `endif
    

    完整源码 · SHA256:cdf2c414fc9ae4bb2453842e5a1c1172596c5d19e34abeb4c7745a2773f98070

    src/vcs-uvm-1.2/macros/uvm_sequence_defines.svh
    //|  endclass
    
    
    `define uvm_add_to_seq_lib(TYPE,LIBTYPE) \
       static bit add_``TYPE``_to_seq_lib_``LIBTYPE =\
          LIBTYPE::m_add_typewide_sequence(TYPE::get_type());
    
    
    
    // MACRO: `uvm_sequence_library_utils
    //
    //| `uvm_sequence_library_utils(TYPE)
    // 
    // Declares the infrastructure needed to define extensions to the
    // <uvm_sequence_library> class. You define new sequence library subtypes
    // to statically specify sequence membership from within sequence
    // definitions. See also <`uvm_add_to_sequence_library> for more information.
    //
    //
    

    完整源码 · SHA256:8f1f8e8929451dbdf0aacd34e0dc876ab8c62e8910a05b4542e77d1578227344

    src/vcs-uvm-ieee-2020-2.0/macros/uvm_sequence_defines.svh
    // @uvm-ieee 1800.2-2020 auto B.3.2.1
    `define uvm_add_to_seq_lib(TYPE,LIBTYPE) \
       static bit add_``TYPE``_to_seq_lib_``LIBTYPE =\
          LIBTYPE::m_add_typewide_sequence(TYPE::get_type());
    
    
    
    // MACRO -- NODOCS -- `uvm_sequence_library_utils
    //
    //| `uvm_sequence_library_utils(TYPE)
    // 
    // Declares the infrastructure needed to define extensions to the
    // <uvm_sequence_library> class. You define new sequence library subtypes
    // to statically specify sequence membership from within sequence
    // definitions. See also <`uvm_add_to_sequence_library> for more information.
    //
    //
    

    完整源码 · SHA256:f63e78e8f476e6f17a2814a5954789951aa09b0946e394d7cf6b9e66c270c43a

    术语解释 · 兼容配置

    返回Sequence / Sequencer · 迁移清单

    版本适用范围