在Verilog中使用任务来闪烁LED灯

问题描述 投票:0回答:1

我是第一次在Verilog中使用Tasks,试图实现代码重用。我有两个任务,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
function syntax task verilog led
1个回答
2
投票

我怀疑你在使用 inout 端口。 我已经简化了你的代码,使用了一个 reg 名为 led 可在任务中设置和清除。

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
© www.soinside.com 2019 - 2024. All rights reserved.