一、两个概念uvm_severity和uvm_verbosity
1、uvm_severity (打印信息的严重度)
仿真过程中输出的消息拥有不同的严重度,该如何区分呢,对应什么操作?
Severity | Description |
---|---|
UVM_INFO | 有用的消息 |
UVM_WARNING | 显示潜在的问题 |
UVM_ERROR | 显示错误问题,仿真继续,同时计数ERROR CNT |
UVM_FATAL | 显示一个导致仿真无法进行的问题,仿真将退出 |
2、uvm_verbosity(打印信息的冗余度)
冗余度就是该消息是否能被打印出来的阈值,阈值越小越容易被打印。对于一条消息来说,消息自身有冗余度,此外,打印消息的uvm_component也有自己的冗余度,当两者冲突时,发出消息组件的冗余度的优先级高于消息本身的冗余度。组件和消息的缺省冗余度都是UVM_MEDIUM,所有小于等于UVM_MEDIUM(如UVM_LOW)的消息会被打印出来。
Verbosity | Value |
---|---|
UVM_NONE | 0,不可屏蔽 |
UVM_LOW | 100, |
UVM_MEDIUM | 200 |
UVM_HIGH | 300 |
UVM_FULL | 400 |
UVM_DEBUG | 500,调试模式信息 |
二、打印信息的控制
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都不会退出仿真。