这里会调用 uvm_root 的 m_do_pre_abort 函数,进行仿真结束前的清理工作,之后调用 report_summarize 函数,把所有的统计信息打印出来,如有多少个UVM_ERROR 出现等,每个不同的 ID 有多少条信息打印。最后会调用$finish 退出仿真。例如如果是一个uvm_fatal 宏的话,这里就会结束仿真。 345 到 352 行用来查看 UVM_...
存储的值是int类型的verbosity值(m_max_verbosity_level默认是UVM_MEDIEM,这是由于每个组件例化的时候都带有一个uvm_report_handle的句柄,uvm_report_handle在例化的时候将m_max_verbosity_level默认是UVM_MEDIEM,方法set_verbosity_level可以改变这个变量值,在命令行同时可以改变+UVM_VERBOSITY=xxxx) 因此对于uvm_er...
又或者,当我们把uvm_fatal/uvm_error改成了uvm_warning/uvm_info以后,仿真虽然没有终结,但是这些信息仍在刷屏怎么办? 别急,听Q哥给大家慢慢道来。 除了啰嗦程度(verbosity)和严重程度(severity),UVM内部为每个调试语句都记录了一个调试行为(action),它是一个多比特的变量,每一比特都代表一种行为,如下图所示。
UVM_FILEinfo_log;UVM_FILEwarning_log;UVM_FILEerror_log;UVM_FILEfatal_log;virtualfunctionvoidconnect_phase(uvm_phasephase);info_log=$fopen("info.log","w");warning_log=$fopen("warning.log","w");error_log=$fopen("error.log","w");fatal_log=$fopen("fatal.log","w");env.i_agt.d...
重载打印信息的严重性 UVM默认有四种信息严重性:UVM_INFO、UVM_WARNING、UVM_ERROR、UVM_FATAL,这四种严重性可以互相重载 把所有的UVM_WARNING显示为UVM_ERROR:env.i_agt.drv.set_report_severity_override(UVM_WARNING, UVM_ERROR); 重载严重性可以只针对某个component内的某个特定的ID起作用:env.i_agt.drv.set...
最终打印的log显示没有UVM_ERROR报出。 第二种解决办法的思路更简单直接,就是将1195行的response_queue_error_report_disabled设为1,那么按理说就不会执行1196行的UVM_ERROR打印行为我们先看下这是个什么变量以及如何进行赋值。response_queue_error_report_disabled定义在uvm_sequence_base.sv中行如图11所示,uvm_sequ...
打印冗余度设置 显示冗余度信息。 打印严重性的 重载 超出多个ERROR打印则终止 将其它也纳入计数 设定严重性暂停进入交互 INFO写入文件 其中的ID是在drv中的如下:info和warning指出 控制打印行为的不显示 config_db automation的省略get语句 get语句生效顺序 通配符 检查变量的get情况 检查component的可见信息 虚类 执行...
其中,UVM_INFO是最常见的等级,代表信息的重要性比较低,如通常用来报告仿真中的某些细节,比如环境变量或者端口的状态等。UVM_WARNING则提示可能存在问题,仿真人员需要关注并采取措施。UVM_ERROR代表出现严重错误,需要立即暂停仿真并进行处理。而UVM_FATAL则表示仿真已经无法继续进行,需要立即终止。这四个信息严重性等级可以...
uvm的打印分级策略如下图所示: 其中,`uvm_fatal宏的严重等级最高,发生uvm_fatal,仿真会直接停止;其次是`uvm_error,发生uvm_error,不会导致仿真直接停止,仿真会运行完成,只不过运行到最后,用例会fail,指明有bug,可能是环境问题,也可能是dut问题。然后是uvm_warning,起到提醒作用,说明当前点可能会发生错误,有的地方...