前言:
熟悉打印信息方法和更改冗余度及严重度有利于大型项目的debug。
一.打印信息
1.打印整数:%d
`uvm_info("MY_COMPONENT", $sformatf("my_signal value: %0d", my_signal), UVM_LOW)
2.打印浮点数: %f或%.nf(n为保留的几位小数)
`uvm_info("MY_COMPONENT", $sformatf("my_signal value: %.2f", my_signal), UVM_LOW)
3.打印字符串:%s
`uvm_info("MY_COMPONENT", $sformatf("my_signal value: %0s", my_signal), UVM_LOW)
4.打印多个信号
`uvm_info("MY_COMPONENT", $sformatf("Signal1: %0d, Signal2: %0h", signal1, signal2), UVM_LOW)
5.打印数组信号:常用于数据
int data[] = {1, 2, 3, 4, 5};
string msg = $sformatf("Data: %0d\n%0d\n%0d\n%0d\n%0d", data[0], data[1], data[2], data[3], data[4]);
`uvm_info("MY_COMPONENT", msg, UVM_LOW)
6.打印uvm对象值:obj.sprint() 生成对象的字符串表示。
my_class obj = new();
obj.data = 42;
obj.valid = 1;
`uvm_info("MY_COMPONENT", $sformatf("Object: %0s", obj.sprint()), UVM_LOW)
二.更改冗余度
1.冗余度
UVM_NONE :不打印任何信息(值为 0)。 UVM_LOW :打印低冗余度信息(值为 100)。
UVM_MEDIUM :打印中等冗余度信息(值为 200)。
UVM_HIGH :打印高冗余度信息(值为 300)。
UVM_FULL :打印完整信息(值为 400)。 UVM_DEBUG :打印调试信息(值为 500)。冗余度的默认值是 UVM_MEDIUM ,即只有冗余度小于等于 UVM_MEDIUM 的消息会被打印。
2.更改冗余度方法
2.1 局部设置:(base_test的connect_phase里)
使用 set_report_verbosity_level 或 set_report_verbosity_level_hier 方法设置特定组件的冗余度
// 设置某个组件的冗余度
env.i_agt.drv.set_report_verbosity_level(UVM_HIGH);
// 递归设置某个组件及其子组件的冗余度
env.i_agt.set_report_verbosity_level_hier(UVM_HIGH);
2.2 按ID设置
使用 set_report_id_verbosity 或 set_report_id_verbosity_hier 方法设置特定 ID 的冗余度
// 设置某个组件中特定 ID 的冗余度
env.i_agt.drv.set_report_id_verbosity("MY_ID", UVM_HIGH);
// 递归设置某个组件及其子组件中特定 ID 的冗余度
env.i_agt.set_report_id_verbosity_hier("MY_ID", UVM_HIGH);
2.3通过命令全局设置
+UVM_VERBOSITY=UVM_HIGH 或者
+UVM_VERBOSITY=HIGH
三.重载打印信息的严重性
比如跑仿真时出现将fatal,将它改为error,用于debug。
1.使用命令:例子如下
+uvm_set_severity=" uvm_test_top.env.i_agt.drv,my_driver,UVM_FATAL,UVM_ERROR"
将drv模块里的uvm_info的ID为my_driver的UVM_FATAL改为UVM_ERROR
2.将整个drv模块的UVM_FATAL改为UVM_ERROR:
只需将上面命令里的那个my_driver改为_ALL_