测试台时钟不前进
Testbench clk not advancing
我的测试台试图做的就是验证 LED 信号是否变高,但是当我在 Modelsim 上尝试模拟它时,时钟甚至没有启动,但它初始化为零。我还可以逐步完成我的设计,这样我就不会出现无限循环或类似的情况。这里有什么明显的错误吗,尤其是在时钟初始化和生成方面?
`timescale 1ns/100ps
module fir_filter_tb();
reg clk, reset_n;
reg led;
top top_level (
.clk(clk),
.reset_n(reset_n),
.led(led)
);
initial
begin
$display($time, " << Starting the Simulation >>");
clk = 1'b0; // at time 0
reset_n = 0; // reset is active
led = 0; // output is low
#10 reset_n = 1'b1; // at time 20 release reset
end
always #10 clk = ~clk;
always
begin
if (led == 1'b1) begin
$write($time, "Filter Successful");
end else begin
$write($time, "bleh you suck");
end
end
endmodule : fir_filter_tb
问题出在包含 led
的 always
块中。由于没有时间控制,它会阻止时间前进(时间停留在 0)。它创建了一个无限的零时间循环。
一种修复方法是使用:
always @*
这只会在 led
变化时触发块。
我的测试台试图做的就是验证 LED 信号是否变高,但是当我在 Modelsim 上尝试模拟它时,时钟甚至没有启动,但它初始化为零。我还可以逐步完成我的设计,这样我就不会出现无限循环或类似的情况。这里有什么明显的错误吗,尤其是在时钟初始化和生成方面?
`timescale 1ns/100ps
module fir_filter_tb();
reg clk, reset_n;
reg led;
top top_level (
.clk(clk),
.reset_n(reset_n),
.led(led)
);
initial
begin
$display($time, " << Starting the Simulation >>");
clk = 1'b0; // at time 0
reset_n = 0; // reset is active
led = 0; // output is low
#10 reset_n = 1'b1; // at time 20 release reset
end
always #10 clk = ~clk;
always
begin
if (led == 1'b1) begin
$write($time, "Filter Successful");
end else begin
$write($time, "bleh you suck");
end
end
endmodule : fir_filter_tb
问题出在包含 led
的 always
块中。由于没有时间控制,它会阻止时间前进(时间停留在 0)。它创建了一个无限的零时间循环。
一种修复方法是使用:
always @*
这只会在 led
变化时触发块。