消息管理
1、消息方法
1)、4个消息方法
uvm_report_info()、uvm_report_waring()、uvm_report_error()、uvm_report_fatal()
2)、方法原型
function void uvm_report_info/waring/error/fatal(string id,string message, int verbosity = UVM_MEDIUM/LOW/NONE,string filename = “”, int line = 0);
3)、方法说明
这4个方法通过函数名和参数传递消息的基本信息,函数名表示信息的严重级别,参数依次表示消息ID,消息信息,消息冗余度,文件名和行号。
严重级别
从低到高依次为UVM_INFO、UVM_WARING、UVM_ERROR、UVM_FATAL。
仿真器对不同严重级别的消息处理方式也不一样:
1)、对于UVM_INFO、UVM_WARING级别的消息,默认消息处理方式为UVM_DISPLAY,将消息打印到输出端口;
2)、对于UVM_ERROR级别的消息,默认消息处理方式为UVM_DISPLAY和UVM_COUNT,除了打印消息,还对消息进行计数,当计数值达到设定的quit_count时,会提前结束仿真,即使objection没有被撤销;
3)、对于UVM_FATAL级别的消息,默认消息处理方式为UVM_DISPLAY和UVM_EXIT,除了打印消息,还会立即结束仿真。
消息ID
消息id用来标记消息,消息id会随被打印出来,方便后期处理仿真结果。
冗余度
冗余度控制消息打印的开关,冗余度由低到高依次为UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH、UVM_FULL、UVM_DEBUG,通过设置一个冗余度阈值来控制消息的打印,如默认阈值为UVM_MEDIUM,冗余度小于UVM_MEDIUM(如UVM_LOW),就会被打印,反之冗余度大于阈值,则不会打印。
可以通过set_report_verbosity_level()和set_report_verbosity_level_hier()方法来改变某个component的消息冗余度阈值或某个component及以下层次component的冗余度阈值。
如改变agent的阈值:env.agent.set_report_verbosity_level(UVM_LOW)
,改变agent及其下所有的component阈值:env.agent.set_report_verbosity_level_hier(UVM_LOW)
文件名和行号
文件名和行号提供消息发生的文件和行号,用于定位消息的具体位置。
2、消息处理
1)、NO_ACTIVE:不做任何处理;
2)、UVM_DISPLAY:将消息输出到标准输出端口;
3)、UVM_LOG:将消息写入文件中;
4)、UVM_COUNT:增加退出计数变量quit_count;
5)、UVM_EXIT:立刻退出仿真;
6)、UVM_CALL_HOOK:调用对应的回调函数;
7)、UVM_STOP:停止仿真。
3、消息宏
4个消息方法分别对应4个消息宏uvm_info(ID,MESSAGE,VERBOSITY)、uvm_waring(ID,MESSAGE)、uvm_error(ID,MESSAGE)、uvm_fatal(ID,MESSAGE)