我是第一次在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
我怀疑你在使用 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