关于uvm report机制

本秂侑毒 提交于 2019-12-06 19:21:11
zz: http://bbs.eetop.cn/thread-447424-1-1.html


首先,提一个看似简单的问题:在使用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)是不是允许打印。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!