Verilog 如何在没有初始块或始终块的情况下使用$display
我试图调试一个Verilog模块,它不使用initial或始终使用$display语句。但是,在初始块或始终块之外,这些似乎是非法的。为什么呢?我的选择是什么?为什么?因为IEEE标准就是这样规定的 另一种方法是从测试台向下扩展到模块实例。您的测试台将有一个Verilog 如何在没有初始块或始终块的情况下使用$display,verilog,Verilog,我试图调试一个Verilog模块,它不使用initial或始终使用$display语句。但是,在初始块或始终块之外,这些似乎是非法的。为什么呢?我的选择是什么?为什么?因为IEEE标准就是这样规定的 另一种方法是从测试台向下扩展到模块实例。您的测试台将有一个初始或始终块,它将调用$display。另一个有用的系统任务是$monitor: module tb; reg a = 0; dut dut ( .a(a) ); initial begin $monitor("tim
初始
或始终
块,它将调用$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实例内的信号名称。实例名称和信号名称之间有一个句点分隔。为什么?因为IEEE标准就是这样规定的
另一种方法是从测试台向下扩展到模块实例。您的测试台将有一个初始
或始终
块,它将调用$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实例内的信号名称。实例名称和信号名称之间有一个句点