uvm里控制uvm_info是否打印
专栏:ExASIC June 7, 2025, 4:16 p.m. 71 阅读
uvm里,用UVM_VERBOSITY控制uvm_info是否打印

在uvm里一般用`uvm_info来打印信息。

`uvm_info这个宏定义如下:

`define uvm_info(ID, MSG, VERBOSITY) \
     begin \
         if (uvm_report_enabled(VERBOSITY,UVM_INFO,ID)) \
             uvm_report_info (ID, MSG, VERBOSITY, `uvm_file, `uvm_line, "", 1); \
     end

共有3个参数,分别是,

  • ID:本模块名、class名、例化名等

  • MSG:要打印的主要內容

  • VERBOSITY:控制要打印的等级

uvm_verbosity_level由一个枚举类型定义,数字越小,表示打印得越多。UVM_NONE是总是会打印,而UVM_DEBUG几乎不打印。

typedef enum {
    UVM_NONE   = 0,
    UVM_LOW    = 100,
    UVM_MEDIUM = 200,
    UVM_HIGH   = 300,
    UVM_FULL   = 400,
    UVM_DEBUG  = 500
} uvm_verbosity

另外两个打印宏,则在宏內部固定死了VERBOSITY:

`uvm_error() -> UVM_LOW
`uvm_fatal() -> UVM_NONE
`uvm_warning() -> UVM_NONE

所以,我们在使用这个宏时需要合理地使用VERBOSITY,可以遵循下面的原则:

  • 致命错误,仿真需要立即停止的,用UVM_NONE

  • 总是要打印的重要关键信息,也用UVM_NONE

  • 一般报错,但仿真还可以继续跑,用UVM_LOW

  • 一般的信息,提示性的信息,用UVM_MEDIUM

  • 內部信息,更详细一点信息用UVM_HIGH或者UVM_FULL

  • debug类型的,只在debug时才用,平时不开启,用UVM_DEBUG

在仿真时,在仿真脚本的命令里,传入+UVM_VERBOSITY=UVM_XXX来控制打印的详细程度,比如,传入UVM_LOW时,只有UVM_LOW和UVM_NONE的会打印,而UVM_MEDIUM到UVM_DEBUG则不打印。

如果需要打印全部信息,包括debug信息,则需要传入UVM_DEBUG。

如果为了省事,不如再包几个自定义的宏,大家看看这样是不是更方便理解呢?

`uvm_fatal() / `uvm_important() //UVM_NONE
`uvm_error() / `uvm_warning()   //UVM_LOW
`uvm_tip()                      //UVM_MEDIUM
`uvm_more()                     //UVM_HIGH
`uvm_full()                     //UVM_FULL
`uvm_debug()                    //UVM_DEBUG

 

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏