在 Verilog 中使用任务使 LED 闪烁

Using Tasks to Blink an LED in Verilog

我第一次在 Verilog 中使用任务,试图实现代码重用。我有两个任务,led_on 和 led_off。我可以通过这些任务单独点亮或关闭 LED。问题是当我尝试 运行 led_blink,一个结合了 led_on 和 led_off 任务的任务时,输出 led 保持未定义状态,直到闪烁任务完成,离开 led 状态匹配函数中的最后一次调用(led_off,在我下面的示例中)。

这是我的 led_on 和 led_blink 任务,以及我的任务调用:

// LED On
task led_on;
  inout  led;

  begin
    #10000
    led = 1;
  end
endtask

// LED Blink
task led_blink;
  inout led;

  begin
    led_on  (led);
    led_off (led);
    led_on  (led);
    led_off (led);
  end
endtask

// Task Call(s)
initial begin
  led_blink     (led_out);
end

我怀疑您 运行 遇到了 inout 端口的问题。我通过使用名为 ledreg 简化了您的代码,它可以在您的任务中设置和清除:

module tb;

reg led;

task led_on;
    #10000 led = 1;
endtask

task led_off;
    #10000 led = 0;
endtask

task led_blink;
    begin
        led_on ;
        led_off;
        led_on ;
        led_off;
    end
endtask

initial begin
    $monitor($time, " ", led);
    led_blink;
end

endmodule

输出:

           0 x
       10000 1
       20000 0
       30000 1
       40000 0