vmm_log 类用于实现消息服务的接口。创建时指定接口名以及实例名。与特定接口名和实例名匹配的所有消息服务接口都受到这种方法的影响。
function new(string name, string instance)
在vmm_xactor, vmm_channel, vmm_env这些组件中都有vmm_log这一公共成员,可以说基本所有的基类都有。缺省的是vmm_log在这些基类构造时根据new的参数(name和instance)自动生成了相应的log实例。一般来说不需要将log句柄重新指向外部的某个log实例。因为这样做反而不容易分辨是哪个实例发出的消息。
而vmm_data是个特例,和transactor等组件不同transaction descriptor可以有千千万个,它们只需要共用一个vmm_log句柄就可以了,所以vmm_data不产生自己的log,在transaction descriptior中通常会如下指定一个静态log实例
static vmm_log log=new("Packet","class"); //一般通用俗程规定"class“ 代表只有一个实例
分析vmm_data基类我们知道vmm_log 在vmm_data中是个private属性的成员,显然只有在new的时候通过参数将static vmm_log 句柄实例传入。如下
class Packet extends vmm_data;
static vmm_log log=new("Packet","class");....
function new();
super.new(this.log)
endfunction
....
endclass
vmm_log 的通常运用形式是`vmm_error, `vmm_fatal,等宏多见于
`vmm_error(this.log, $psprintf("....%s,%h....", var1,var2,..)
在实际的仿真过程中会产生海量的消息,VMM提供了两种控制输出的消息的方法,一种是控制严重性,一种是控制消息类型。
在env build之后,可以通过
env.log.set_verbosity(vmm_log::DEBUG_SEV, "/./", "/./");
来控制仅仅显示severity高于debug的消息服务。
在env build之后,也可以通过
env.log.disable_types(vmm_log::INTERNAL_TYP, "/./", "/./");
来控制不显示vmm library 自身的 INTERNAL_TYP 的消息服务。
通过命令行我们也能实现对serverity的控制
+vmm_log_default=DEBUG
关于vmm_notify 和 vmm_data的介绍请看下两章