Verilog 如何在没有初始块或始终块的情况下使用$display

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

我试图调试一个Verilog模块,它不使用initial或始终使用$display语句。但是,在初始块或始终块之外,这些似乎是非法的。为什么呢?我的选择是什么?

为什么?因为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实例内的信号名称。实例名称和信号名称之间有一个句点分隔。

为什么?因为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实例内的信号名称。实例名称和信号名称之间有一个句点