关于uvm report机制
时间:10-02
整理:3721RD
点击:
首先,提一个看似简单的问题:在使用uvm的做验证的时候,经常需要打印信息,比较常用的可能就是`uvm_info 和uvm_report_info之类的了,那么`uvm_info 和 uvm_report_info之间有没有什么区别呢?下面是`uvm_info的宏展开:
108 `define uvm_info(ID,MSG,VERBOSITY) 109begin
110if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID))
111uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line);
112end
可以看出`uvm_info宏就是调用了uvm_report_enabled function做了一个verbosity_level和action的判断其是否允许进行report操作。关于action和verboisty_level在uvm中可以对其进行很精细的控制,如下面所示:
1)action设置:从上到下,范围由小到大,精细度由高到低,判别优先级由高到低
(severity, id)
id-> action
severity
2)verbosity设置:从上到下, 范围由小到大,精细度由高到低,判别优先级由高到低
(severity,id)
id-> verbosity
severity
这里action有几种功能,可以打印(UVM_DISPLAY), 可以记录message的个数后,并判断属否达到指定的最大count数(UVM_COUNT),也可以直接推出(UVM_EXIT);
而verbosity level 按过滤级别有低到高如下图所示
304typedef enum305{306UVM_NONE= 0,
307UVM_LOW= 100,
308UVM_MEDIUM = 200,
309UVM_HIGH= 300,
310UVM_FULL= 400,
311UVM_DEBUG= 500
312} uvm_verbosity;
除了action和verbosity之外,uvm还允许对severity进行override,uvm使用了两个关联数组来记录override信息,其索引分别是id,
和(severity,id),如果你想override一个id的severity,可以使用set_severity_id_override来override当前的id的原来的severity,但是这个新的severity不会影响原有的(severity,id)->action的设置和(severity,id)->verbosity的设置。那么这个override信息会在哪里使用呢?答案是只会在report函数中使用,也就是说打印信息之前,会进行severity override check,然后在用新的severity,进行打印,那么怎么打印呢?uvm使用了一个单实例的uvm_report_server来承接所有的report message任务。uvm_report在进行打印之前仍然要调用client的uvm_report_enbaled函数,这个函数在本文开头`uvm_info宏里面就有,就是用你给定的(severity,id)检查action和verbosity是否允许打印。而这个传进来的是override之后的severity。
所以关于`uvm_info和uvm_report_info这两个report区别就是,前者需要首先check你提供的(severity,id)是不是允许打印,然后再check override之后的(severity,id)是不是允许打印,如果都允许才会打印;而后者只check override之后的(severity,id)是不是允许打印。
mark一下!
MARK一下
mark一下
mark一下