1.$monitor
的作用
$monitor
是 Verilog 中的一个系统任务,用于在仿真过程中持续监控变量的变化,并将结果输出到控制台。
2.例程说明
$monitor("a=%b b=%b cin=%b | cout=%b sum=%b", a, b, cin, cout, sum);
每当列表中的变量(a
, b
, cin
, cout
, sum
)发生变化时,$monitor
会自动执行并输出当前值。
其中
%b
:以二进制形式打印变量值;
竖线 |
用于分隔输入和输出,提高可读性。
输出结果:
0: a=0 b=0 cin=0 | cout=0 sum=0
10: a=0 b=0 cin=1 | cout=0 sum=1
20: a=0 b=1 cin=0 | cout=0 sum=1
3.与 $display
的区别
$display
:只在执行到该行代码时输出一次
$monitor
:持续监控变量,只要变量变化就会输出
4.注意事项
性能影响:过多使用$monitor会降低仿真速度
变量范围:只能监控当前作用域内的变量
多驱动问题:如果变量由多个源驱动,可能导致输出异常
对于复杂设计,可以使用$dumpvars
配合波形查看工具(如 GTKWave):
initial begin
$dumpfile("waveform.vcd"); // 指定波形文件
$dumpvars(0, tb_full_adder); // 转储所有信号
end
这种方式可以在仿真后交互式查看信号变化,适合调试大型设计。