【UVM实战】打印信息的控制

一、两个概念uvm_severity和uvm_verbosity
1、uvm_severity (打印信息的严重度)
仿真过程中输出的消息拥有不同的严重度,该如何区分呢,对应什么操作?

SeverityDescription
UVM_INFO有用的消息
UVM_WARNING显示潜在的问题
UVM_ERROR显示错误问题,仿真继续,同时计数ERROR CNT
UVM_FATAL显示一个导致仿真无法进行的问题,仿真将退出

2、uvm_verbosity(打印信息的冗余度)
冗余度就是该消息是否能被打印出来的阈值,阈值越小越容易被打印。对于一条消息来说,消息自身有冗余度,此外,打印消息的uvm_component也有自己的冗余度,当两者冲突时,发出消息组件的冗余度的优先级高于消息本身的冗余度。组件和消息的缺省冗余度都是UVM_MEDIUM,所有小于等于UVM_MEDIUM(如UVM_LOW)的消息会被打印出来。

VerbosityValue
UVM_NONE0,不可屏蔽
UVM_LOW100,
UVM_MEDIUM200
UVM_HIGH300
UVM_FULL400
UVM_DEBUG500,调试模式信息

二、打印信息的控制
1、对于某个特定Component的操作
a) get_report_verbosity_level.
获取driver的冗余度

virtual function void connect_phase(uvm_phase phase);
    $display("env.i_agt.drv's verbosity level is %0d", env.i_agt.drv.get_report_verbosity_level());
endfunction

b)set_report_verbosity_level.
设置driver的冗余度为UVM_HIGH,会对该uvm_component内所有的uvm_info宏显示的信息产生影响(UVM_LOW,UVM_MEDIUM和UVM_HIGH的信息都会被打印)

//文件:src/ch3/section3.4/3.4.1/base_test.sv
virtual function void connect_phase(uvm_phase phase);
  	env.i_agt.drv.set_report_verbosity_level(UVM_HIGH);
endfunction

2.递归设置冗余度
将env.i_agt及其下所有的component的冗余度阈值设置为UVM_HIGH

env.i_agt.**set_report_verbosity_level_hier**(UVM_HIGH);

3.设置ID的冗余度
假设driver中有两个使用了不同ID的打印信息

uvm_info("ID1", "ID1 INFO", UVM_HIGH)
uvm_info("ID2", "ID2 INFO", UVM_HIGH)

那么,可以对不同的ID设置不同的冗余度

env.i_agt.drv.set_report_id_verbosity("ID1", UVM_HIGH);

同样的,也可以递归的设置ID的冗余度

env.i_agt.set_report_id_verbosity_hier("ID1", UVM_HIGH);

4.在命令行中设置冗余度阈值

<sim command> +UVM_VERBOSITY=UVM_HIGH
或者:
<sim command> +UVM_VERBOSITY=HIGH

三、重载打印信息的严重度
UVM的四种信息严重度:UVM_INFO,UVM_WARNING,UVM_ERROR和UVM_FATAL,可以相互重载。将driver中所有的UVM_WARNING显示为UVM_ERROR

virtual function void connect_phase(uvm_phase phase);
    env.i_agt.drv.set_report_severity_override(UVM_WARNING, UVM_ERROR);
    //env.i_agt.drv.set_report_severity_id_override(UVM_WARNING, "my_driver", UVM_ERROR);
endfunction

四、UVM_ERROR达到一定数目结束仿真

通过set_report_max_quit_count设置仿真退出的最大UVM_ERROR数量。

function void base_test::build_phase(uvm_phase phase);
   super.build_phase(phase);
   env  =  my_env::type_id::create("env", this);
   set_report_max_quit_count(5);
endfunction

在测试用例中的设置方式与base_test中类似。如果测试用例与base_test中同时设置了,则以测试用例中的设置为准。此外,除了在build_phase之外,在其他phase设置也是可以的。

与set_max_quit_count相对应的是get_max_quit_count,可以用于查询当前的退出阈值。如果返回值为0则表示无论出现多少个UVM_ERROR都不会退出仿真。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值