我正在尝试调试不使用initial或始终使用$ display语句的Verilog模块。但是,这些在初始或总是块之外似乎是非法的。这是为什么?我有什么选择?
答案 0 :(得分:1)
为什么呢?因为这就是IEEE标准规定的方式。
另一种方法是从测试平台向下扩展到模块实例。您的测试平台将有initial
或always
块,将调用$display
。另一个有用的系统任务是$monitor
:
module tb;
reg a = 0;
dut dut ( .a(a) );
initial begin
$monitor("time=%0t, a=%b, b=%b", $time, a, dut.b);
#5 a = 1;
#5 a = 0;
#5 $finish;
end
endmodule
module dut (input a);
wire b = ~a;
endmodule
运行模拟时应该得到这种输出:
time=0, a=0, b=1
time=5, a=1, b=0
time=10, a=0, b=1
更新:
dut.b
信号是一个分层说明符,允许您从顶层模块(tb
)向下查看另一个模块。 dut
是实例名称,b
是dut实例中的信号名称。句点将实例名称与信号名称分开。