跳转至

输入查询内容

    本页内容

    uvm_reg_err_service:寄存器检查错误处理钩子

    新增功能:目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    影响范围

    定制寄存器检查错误消息或使用错误服务钩子。

    具体差异

    检查不通过时的错误消息生成改为经由可替换的单例服务类,用户可 uvm_reg_err_service::set(自定义子类) 定制错误输出。1.2 中直接 override do_check 的做法仍可用(do_check 仍是 virtual)。源码标注 @uvm-accellera——该 API 属 Accellera 实现扩展,不在 IEEE 标准正文。

    修改方案

    无强制;有定制错误消息需求时可改用该钩子。

    兼容措施与范围:本条是新增能力或实现说明,无需恢复旧接口;按使用条件核对行为。

    迁移后验证

    注入一个可预期的寄存器不匹配,检查错误服务调用、ID/severity 及原始失败状态。

    补充查阅

    扫描定位与记录结果

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

    本条处理级别为“可选采用”,按修改方案评估;缺少扫描规则本身不增加迁移改造要求。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_reg.svh:2932do_check 内部直接拼 uvm_error 消息)

    VCS 内置 uvm-ieee-2020-2.0uvm_reg.svh:41class uvm_reg_err_service,含 get()/set()/do_check_error())、uvm_reg.svh:2544do_check 改为委托 err_service.do_check_error(this, expected, actual, map, valid_bits_mask)

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

    src/vcs-uvm-1.2/reg/uvm_reg.svh
    // do_check
    function bit uvm_reg::do_check(input uvm_reg_data_t expected,
                                   input uvm_reg_data_t actual,
                                   uvm_reg_map          map);
    
       uvm_reg_data_t  dc = 0;
    
       foreach(m_fields[i]) begin
          string acc = m_fields[i].get_access(map);
          acc = acc.substr(0, 1);
          if (m_fields[i].get_compare() == UVM_NO_CHECK ||
              acc == "WO") begin
             dc |= ((1 << m_fields[i].get_n_bits())-1)
                << m_fields[i].get_lsb_pos();
          end
       end
    

    完整源码 · SHA256:a01d27ace4190cce87f4bf8f78d0db63b1517ffb43a412e187e67391984971b6

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg.svh
    // format.
    //
    // @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
    class uvm_reg_err_service extends uvm_object ;
    
       `uvm_object_utils(uvm_reg_err_service)
    
       static uvm_reg_err_service inst ;
    
       // Function : get()
       // Called by the library when a supported uvm_reg error occurs.  Returns an
       // instance of the standard UVM library class if set() has not been called or 
       // has been called with a null instance; otherwise, returns the instance 
       // passed to set().
       //
       // @uvm-accellera The details of this API are specific to the Accellera implementation, and are not being considered for contribution to 1800.2
       static function uvm_reg_err_service get() ;
          if (inst == null) inst = uvm_reg_err_service::type_id::create("uvm_inst");
          return inst ;
    

    src/vcs-uvm-ieee-2020-2.0/reg/uvm_reg.svh
       if ((actual&valid_bits_mask) === (expected&valid_bits_mask)) return 1;
       else begin
          uvm_reg_err_service err_service ;
          err_service = uvm_reg_err_service::get();
          err_service.do_check_error(this, expected, actual, map, valid_bits_mask);
          return 0;
       end
    endfunction
    
    function void uvm_reg_err_service::do_check_error(
                                   uvm_reg              this_reg,
                                   uvm_reg_data_t       expected,
                                   uvm_reg_data_t       actual,
                                   uvm_reg_map          map,
                                   uvm_reg_data_t       valid_bits_mask);
    
       uvm_reg_field fields[$] ;
       `uvm_error("RegModel", $sformatf("Register \"%s\" value read from DUT (0x%h) does not match mirrored value (0x%h) (valid bit mask = 0x%h)",
    

    完整源码 · SHA256:a0b3ba54fe8e7a696018aa531a0e93c98cfdc89c74073dfcf7eed58b9833618e

    术语解释 · 兼容配置

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

    版本适用范围