跳转至

输入查询内容

    本页内容

    寄存器 path 类型更名,旧别名仍可使用

    影响范围

    仅改用目标库且使用常规 read/write/mirror 等调用时,可保留旧名称。依赖 $typename、反射或其他类型敏感操作时另行核对。

    具体差异

    uvm_path_e/UVM_DEFAULT_PATH 更名为 uvm_door_e/UVM_DEFAULT_DOOR,波及所有 read/write/mirror/update/peek/poke 及 uvm_reg_sequence::read_reg 等的 path 参数(1.2 src/vcs-uvm-1.2/reg/uvm_reg_sequence.svh:225 → 2.0 src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_sequence.svh:204)。2.0 用 typedef + parameter 别名(源码标注 @uvm-compat)保持旧名字可用,故普通用户代码无需改动;仅当代码对 uvm_path_e 做枚举类型强转/反射($typename)等类型敏感操作时才有风险。uvm_reg_block::default_path 公有字段类型同步变更(1.2 src/vcs-uvm-1.2/reg/uvm_reg_block.svh:54 → 2.0 src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_block.svh:57)。

    修改方案

    uvm_path_e / UVM_DEFAULT_PATH 等旧名称在主库保留,可继续使用。采用新命名时将类型改为 uvm_door_e、默认值改为 UVM_DEFAULT_DOOR;无需仅为改名重写所有 read/write/mirror 调用,访问语义仍按具体 RAL 风险验证。

    兼容措施与范围:主库以 typedef 与 parameter 保留 uvm_path_e / UVM_DEFAULT_PATH 等旧名称,无需 deprecated 开关或 compat 包,也不要求仅为改名而替换;实际访问数据与镜像仍按 RAL 条目验证。

    迁移后验证

    编译两库下的路径声明;分别运行实际 frontdoor/backdoor/default 访问并核对路径选择,名称别名不代表所有访问实现等价。

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

    已有实测与复现

    补充查阅

    扫描定位与记录结果

    无对应规则。当前脚本没有针对本条的直接检测规则。

    按“影响范围”检视实际代码与配置,再执行本条验证方法;扫描零命中不能排除此项。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_reg_model.svh:169uvm_path_e 枚举,含 UVM_DEFAULT_PATH);uvm_reg_item.svh:119uvm_path_e path

    VCS 内置 uvm-ieee-2020-2.0uvm_reg_model.svh:180uvm_door_e 枚举,含 UVM_DEFAULT_DOOR)、uvm_reg_model.svh:183parameter uvm_door_e UVM_DEFAULT_PATH = UVM_DEFAULT_DOOR)、uvm_reg_model.svh:186typedef uvm_door_e uvm_path_e);uvm_reg_item.svh:145uvm_door_e path

    标准依据:IEEE 1800.2-2020 §17.2.2.2

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

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

    src/vcs-uvm-1.2/reg/uvm_reg_model.svh
    //                    the <uvm_reg_predictor> class.
    // UVM_DEFAULT_PATH - Operation specified by the context
    //
       typedef enum {
          UVM_FRONTDOOR,
          UVM_BACKDOOR,
          UVM_PREDICT,
          UVM_DEFAULT_PATH
       } uvm_path_e;
    
    
    // Enum: uvm_check_e
    //
    // Read-only or read-and-check
    //
    // UVM_NO_CHECK   - Read only
    // UVM_CHECK      - Read and check
    //   
       typedef enum {
    

    完整源码 · SHA256:f29457c271b91936df38d49968f1b68383159bc266e9858e32a4fe3af4fded8d

    src/vcs-uvm-1.2/reg/uvm_reg_item.svh
      //
      // The path being used: <UVM_FRONTDOOR> or <UVM_BACKDOOR>.
      //
      uvm_path_e path;
    
    
      // Variable: parent
      //
      // The sequence from which the operation originated.
      //
      rand uvm_sequence_base parent;
    
    
      // Variable: prior
      //
      // The priority requested of this transfer, as defined by
      // <uvm_sequence_base::start_item>.
      //
      int prior = -1;
    

    完整源码 · SHA256:3320bcaa3e6708dca67754638c132010334978f74c29bea5e373494ba050ab4c

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_model.svh
          UVM_BACKDOOR,
          UVM_PREDICT,
          UVM_DEFAULT_DOOR
       } uvm_door_e;
    
       //@uvm-compat for compatibility with 1.2
       parameter uvm_door_e UVM_DEFAULT_PATH = UVM_DEFAULT_DOOR ; 
    
       //@uvm-compat for compatibility with 1.2
       typedef uvm_door_e uvm_path_e ; 
    
    // Enum -- NODOCS -- uvm_check_e
    //
    // Read-only or read-and-check
    //
    // UVM_NO_CHECK   - Read only
    // UVM_CHECK      - Read and check
    //   
       typedef enum {
          UVM_NO_CHECK,
          UVM_CHECK
       } uvm_check_e;
    
    
    // Enum -- NODOCS -- uvm_endianness_e
    

    完整源码 · SHA256:14112c26926a565dcc1015ad016048c30900829ae7de1621707e404f72c57901

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_item.svh
      // The path being used: <UVM_FRONTDOOR> or <UVM_BACKDOOR>.
      //
    
      uvm_door_e path;
    
    
      // Variable: parent
      //
      // The sequence from which the operation originated.
      //
      // Access to this variable is provided for randomization, otherwise interactions
      // with it shall be via the set_parent() and get_parent() accessor methods
      //
      // @uvm-contrib This variable is being considered for potential contribution to 1800.2
    
      rand uvm_sequence_base parent;
    
    
      // Variable -- NODOCS -- prior
    

    完整源码 · SHA256:f0ef6373d2292ca32e5dcbb2ba20db3542bef2cd68fd1e00a57d2f3019ef9a36

    src/vcs-uvm-1.2/reg/uvm_reg_sequence.svh
       virtual task write_reg(input  uvm_reg           rg,
                              output uvm_status_e      status,
                              input  uvm_reg_data_t    value,
                              input  uvm_path_e        path = UVM_DEFAULT_PATH,
                              input  uvm_reg_map       map = null,
                              input  int               prior = -1,
                              input  uvm_object        extension = null,
                              input  string            fname = "",
                              input  int               lineno = 0);
          if (rg == null)
            `uvm_error("NO_REG","Register argument is null")
          else
            rg.write(status,value,path,map,this,prior,extension,fname,lineno);
       endtask
    
    
       // Task: read_reg
       //
       // Reads the given register ~rg~ using <uvm_reg::read>, supplying 'this' as
    

    完整源码 · SHA256:7a1ac0e79f51749d06dcde2977fbfc881c5f866ad37bb831f0e8380bada05664

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_sequence.svh
       virtual task write_reg(input  uvm_reg           rg,
                              output uvm_status_e      status,
                              input  uvm_reg_data_t    value,
                              input  uvm_door_e        path = UVM_DEFAULT_DOOR,
                              input  uvm_reg_map       map = null,
                              input  int               prior = -1,
                              input  uvm_object        extension = null,
                              input  string            fname = "",
                              input  int               lineno = 0);
          if (rg == null)
            `uvm_error("NO_REG","Register argument is null")
          else
            rg.write(status,value,path,map,this,prior,extension,fname,lineno);
       endtask
    
    
    
       // @uvm-ieee 1800.2-2020 auto 19.4.1.5.2
       virtual task read_reg(input  uvm_reg           rg,
    

    完整源码 · SHA256:6edc59e13f8136932b1f31bcb0c69d640ccc294438d675185546872a393a5849

    src/vcs-uvm-1.2/reg/uvm_reg_block.svh
       // Variable: default_path
       // Default access path for the registers and memories in this block.
       uvm_path_e      default_path = UVM_DEFAULT_PATH;
    
       local string         default_hdl_path = "RTL";
       local uvm_reg_backdoor backdoor;
       local uvm_object_string_pool #(uvm_queue #(string)) hdl_paths_pool;
       local string         root_hdl_paths[string];
    
       local bit            locked;
    
       local int            has_cover;
       local int            cover_on;
       local string         fname;
       local int            lineno;
    
       local static int id;
    

    完整源码 · SHA256:6ca6f50282876b0cf52951223df74e4f721ad7443e194ec27b1e6dd995da8d43

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg_block.svh
       // Variable -- NODOCS -- default_path
       // Default access path for the registers and memories in this block.
       // @uvm-compat made public for compatibility with 1.2
       uvm_door_e default_path = UVM_DEFAULT_DOOR;
    
       local string         default_hdl_path = "RTL";
       local uvm_reg_backdoor backdoor;
       local uvm_object_string_pool #(uvm_queue #(string)) hdl_paths_pool;
       local string         root_hdl_paths[string];
    
       local bit            locked;
    
       local int            has_cover;
       local int            cover_on;
       local string         fname;
       local int            lineno;
    
       local event m_uvm_lock_model_complete;
    

    完整源码 · SHA256:8ddc84d53bbce80c641eb7a6c02b0fef630ee9244c536d195d3dc93c068e2915

    术语解释 · 兼容配置

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

    版本适用范围