uvm 中将修改uvm_severity 和 uvm_verbosity

uvm_severity和uvm_verbosity

uvm_severity

Severity Description
UVM_INFO 根据Verbosity来控制在log中的打印行为
UVM_WARNING 打印warning信息
UVM_ERROR 根据MAX_QUIT_NUM控制退出仿真
UVM_FATAL 当打印UVM_FATAL时会立刻退出仿真

uvm_verbosity

  uvm_verbosity 定义很tricky,理解成打印级别更符合中文习惯

  • UVM_DEBUG
  • UVM_FULL
  • UVM_HIGH
  • UVM_MEDIUM
  • UVM_LOW
  • UVM_NONE
    uvm 中将修改uvm_severity 和 uvm_verbosity_第1张图片
      uvm中通过设置打印级别阈值来控制打印的信息,当uvm_info输入的打印级别小于阈值时就会被打印,反之不会打印到log中。uvm提供了两种控制打印级别阈值的方法。
  1. 在command line中设置,比如+UVM_VERBOSITY=UVM_LOW,这种方法会将该阈值设置到环境中所有组件中
  2. 使用set_report_verbosity_level function来设置特定component的打印级别阈值
    注: 因为uvm_warning/uvm_error和uvm_fatal打印的信息都是比较重要的,所以这两种信息一定会被打印。

更改uvm_severity 和 uvm_verbosity

更改uvm_severity和uvm_verbosity的场景

   在验证中常常会需要注错,在注错的时候VIP或者自己环境中正常check的打印信息会报错,这种场景下一般时需要将uvm_error/uvm_fatal 更改成uvm_warning/uvm_info 或者忽略这些打印信息。

更改uvm_severity方法

   uvm中提供uvm_report_catcher class来实现更改uvm_severity的目的,uvm_report_catcher 是扩展自uvm_callback,该类中提供了catch function,用户需要更改的信息可以在该function中使用。一下拿一个uvm源码中的一个例子来具体说明用户该怎样更改uvm_severity(UVM_ERROR->UVM_INFO):
uvm 中将修改uvm_severity 和 uvm_verbosity_第2张图片
在这个例子中,重点看catch function,该function中首先得到需要更改uvm_severity的信息,这里使用了
get_severity() 和 get_id()来获取log中的信息,也有其它的方法获得需要filter掉的信息,比如:
if(get_severity() == UVM_ERROR && uvm_re_match(get_message(), “FILTER_MESSAGE*”) ),uvm_re_match 支持通配符。当该function return THROW 更改uvm_severity之后的message也会被打印到log中,如果return CAUGHT则该message会被discard掉。
   如果将要更改的信息是uvm_info,则可以在catch function 使用set_verbosity()更改打印级别,该方法可以更改特定打印信息的打印级别。
  还可以更改打印信息的id及打印的信息内容,具体function可以查看uvm_report_catcher class。

catch function更改打印信息机制

  如下图,不同大小不同颜色的矩形表示的是不同的class,首先uvm_report_catcher中的prcess_report_message function会收集仿真中的catch function以知晓将要更改的message,uvm_report_server中process_report_message function来查找已经更改的message,如果更改了就会将打印信息改成更改之后的,否则不做更改则不做处理。到这里已经做完了message更改的工作,uvm_report_object中uvm_process_report_message做的就是将打印信息规划到uvm_root中。
uvm 中将修改uvm_severity 和 uvm_verbosity_第3张图片
注:上图右侧是说明不同颜色所代表的class

你可能感兴趣的:(UVM,and,Systemverilog,学习,经验分享)