$monitor系统任务提供了监控和输出参数列表中的表达式和变量值的功能,其参数列表中输出控制格式字符串和输出表列的规则和$display一样,
当启动一个带有一个或多个参数的$monitor任务时,每当参数列表中的变量或表达式的值发生变化时整个参数列表中变量或表达式的值都将输出显示。
如果同一时刻有两个或多个表达式的值发生变化,只输出一次。 参数可以是$time,用于标明变化时刻。
如$monitor ($time,,"rxd=%b txd=%b",rxd,txd);这里的“,,”用来表示空格参数在输出时显示为空格
$monitor的打开和关闭分别用$monitoron和$monitoroff表示,用来控制任务的启动和停止,使得很容易控制任务何时发生,何时结束。
$monitor用于initial块中,只要不调用$monitoroff,该任务就可以不间断的对所设定信号进行监视。
例子如下(对一个4位加法计数器counter信号进行监控):
`timescale 1ns/1ns
module moni_test();
reg[3:0]counter;
reg clk;
reg rst;
initial
begin
rst=0;
#10 rst=1;
$monitor ($time,,"counter=%d",counter);
$monitoron;
end
initial
begin
clk=0;
forever #5 clk=~clk;
end
always@(negedge rst or posedge clk)
if(!rst)
counter<=4'd0;
else
counter<=counter+1;
endmodule
主要观察transcript对话框,可见每经过10ns,counter就会变化一次,此时参量时间也会输出。
注意1. 仅监测$time是不会每次都输出的,必须是除了时间之外的参量变化才可以做到参量变化就输出
2 .,,符号输出的是一个空格符,输出结果中得到了验证。