使用uvm_report_catcher屏蔽错误+csh等价的set-x+覆盖率配置文件+一维数组的二维选择

使用uvm_report_catcher屏蔽错误

报告问题:UVM/RSRC/NOREGEX的警告


class warn_catcher extends uvm_report_catcher;
   `uvm_object_utils(warn_catcher)
   function new(string name);
      super.new(name);
   endfunction
   virtual function action_e catch();
      if((get_severity() == UVM_WARNING)  &&  (get_id() == "UVM/RSRC/NOREGEX"))begin
         set_action(UVM_NO_ACTION);
      end
      return THROW;
   endfunction
endclass
class tc_case extends base_test;
    warn_catcher  catcher;
    ......
    virtual function void build_phase();
        catcher = new("warn_ctr");
        uvm_report_cb::add(null, catcher);
    endfunction
endclass

https://blog.csdn.net/weixin_42264693/article/details/144510865

csh等价的set-x

csh中使用set echo

覆盖率配置文件

https://blog.csdn.net/qq_16423857/article/details/120351452
在收集code coverage的时候,工具默认会收集所有模块的coverage。但是有时候,我们只关心某一层模块以及之下的coverage。此时就需要-cm_hier选项来指定层次。

-cm_hier选项,指定一个coverage配置文件。该配置文件,指定了收集coverage的模块。

对于这个coverage配置文件,有如下一些语法:

+tree instance_name [level_number]

一维数组的二维选择

The range of the part select is illegal Error
https://verificationacademy.com/forums/t/getting-the-range-of-the-part-select-is-illegal-error/46056
原始写法:

if ( value inside {[0:3]})
data[45:14] = temp_data[31:0];
else if (value inside {[4:7]})
data[45:14] = temp_data[63:32];
…
…
…
else if (value inside {[56:59]})
data[45:14] = temp_data[479:448];

简化写法,注意到使用的是+:,不能双头使用变量

for(int i = 0; i<15; i++)
     if( value inside {[(4*i):((4*i)+3)]}) begin
         data[45:14] = temp_data[i*32+:32];
         break;
     end
posted @ 2025-12-21 16:40  大浪淘沙、  阅读(5)  评论(0)    收藏  举报