uvm的report机制,主要涉及uvm_report_object,uvm_report_handle,uvm_report_server这三个类:
uvm_report_object主要是提供uvm_report的接口函数,
uvm_report_handle主要根据message的configuration,来将message传输到显示模块,
uvm_report_server主要实现具体的显示功能,文件读写功能,
一个report的组成部分:id string,severity(四种severity,来区分不同的action),verbosity(决定打印log的层次),message,action
log的显示可以直接输出到display或者直接输入到某个指定的文件中,文件的descriptors符合SV的标准。
uvm_report_object中的对象和function:
包含一个report_handle,来与之传递message。
主要的Function:
uvm_report_enabled(verbosity,id);供上层调用;
子函数:uvm_process_report_message(uvm_report_message),将message传递给相应的handle。
uvm_report(severity,id,message,verbosity,filename,line,context_name,report_enabled_checked);最重要的函数;
filename是一个宏定义:`__filename__,line是一个宏定义:`__line__
context_name是一个string,表示comp的路径,可以用%m来sformat产生。
report_enabled_checkd,表示已经经过判断,不在内部进行verbosity的判断。
四种调用uvm_report的function,只是将相应severity替换
verbosity的设置:(根据id和verbosity)
verbosity按数值计算,predefine的从低到高依次是UVM_NONE,UVM_LOW,UVM_MEDIUM,UVM_HIGH,UVM_FULL
uvm_action的设置:包括UVM_NO_ACTION,UVM_DIAPLAY,UVM_LOG,UVM_COUNT,UVM_STOP,UVM_EXIT,UVM_CALL_HOOK
输出file的设置:
severity的override的设置:
自己report_handle的设置:
hook操作,只有在uvm_action是UVM_HOOK的时候,才会执行,先调用report_hook,然后根据severity在进行调用,只要有一个function返回
0,report就不会有后续的操作:
report_header:打印一些copyright的信息,在run_test执行时,先于其他component的phase执行,file为0时,输出到display,否则输出到指定文件
report_summarize:由report_server里report summarize:file为0时,输出到display,run_test在顶层结束时,调用:
die function,在uvm_count计数到一定的值,自动调用die函数,先输出summary再调用$finish:
uvm_report_message是UVM中message的类型类,其中包括(int,string,object)container,已经add操作,已经对handle和object的接口操作
重要的方法有:new和message的set: