测试台时钟不前进

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

问题出在包含 ledalways 块中。由于没有时间控制,它会阻止时间前进(时间停留在 0)。它创建了一个无限的零时间循环。

一种修复方法是使用:

always @*

这只会在 led 变化时触发块。