|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 hbhbts 于 2014-5-30 14:17 编辑
首先,提一个看似简单的问题:在使用uvm的做验证的时候,经常需要打印信息,比较常用的可能就是`uvm_info 和uvm_report_info之类的了,那么`uvm_info 和 uvm_report_info之间有没有什么区别呢? 下面是`uvm_info的宏展开:
108 `define uvm_info(ID,MSG,VERBOSITY) 109 begin
110 if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID))
111 uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line);
112 end
可以看出`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 按过滤级别有低到高如下图所示
304 typedef enum305 {306 UVM_NONE = 0,
307 UVM_LOW = 100,
308 UVM_MEDIUM = 200,
309 UVM_HIGH = 300,
310 UVM_FULL = 400,
311 UVM_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)是不是允许打印。 |
|