重载打印信息的严重性
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
重载严重性可以只针对某个component内的某个特定的ID起作用:env.i_agt.drv.set_report_severity_id_override(UVM_WARNING, “my_driver”, UVM_ERROR);
UVM不提供递归的严重性重载函数。严重性重载用的较少,一般只会对某个component内使用,不会递归的使用。
重载严重性也可在命令行中实现,其调用方式为:
<sim command> +uvm_set_severity=<comp>,<id>,<current severity>,<new severity>
如:<sim command> +uvm_set_severity="uvm_test_top.env.i_agt.drv,my_driver,UVM_WARNING,UVM_ERROR"
//若要设置所有的ID,可以在id处使用_ALL_:
<sim command> +uvm_set_severity="uvm_test_top.env.i_agt.drv,_ALL_,UVM_WARNING,UVM_ERROR"
-
+UVM_VERBOSITY=UVM_NONE 将整个UVM环境钟的verbosity级别都设置为了UVM_NONE。
-
+uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<time>将设置特定的component下指定ID的verbosity。
-
例如:“+uvm_set_verbosity=tb_top.pcie_inst*,_ALL_,UVM_NONE,time,0”就是设置tb_top.pcie_inst下面所有ID的verbosity为UVM_NONE。
-
<sim command> +uvm_set_verbosity=uvm_test_top.env0.agent1.*,_ALL_,UVM_FULL,time,800
-
UVM目前定义了6种啰嗦等级,UVM_NONE -> UVM_LOW -> UVM_MEDIUM -> UVM_HIGH-> UVM_DEBUG -> UVM_FULL是越来越啰嗦。
-
这里的<comp>是uvm component 的路径,支持*号通配符(跟uvm_config_db set/get时的用法类似,只是这里必须用绝对路径)。
-
<id>是uvm_info的第一个参数(如果选择component的所有打印语句,就写_ALL_)。
-
<phase>可以指定从某个uvm phase开始生效。xxx_phase直接写xxx就可以了,_phase省略掉。
-
<time>可以指定从某个仿真时刻开始生效
这些plusargs是在仿真刚开始但RTL时间还未推进之前就解析并执行的,也就是说在0时刻之前。
对于全局配置,如果指定了多次,会按照最低的容忍等级来执行。也就是说,如果在一长串的仿真参数里,先给了一个+UVM_VERBOSITY=UVM_LOW,又给了一个+UVM_VERBOSITY=UVM_HIGH,最终会按照UVM_LOW来过滤信息。这有点像木桶短板理论。
注意:这时候另外加上参数+uvm_set_verbosity=uvm_test_top.env0.agent0,msg_a,UVM_HIGH,run,可以单独指定系统对uvm_test_top.env0.agent0里info id为“msg_a”的打印信息的容忍等级改为高,并且从run phase开始生效。
另外,uvm_set_action,直接贴源码,解释的很清晰。