在 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
端口的问题。我通过使用名为 led
的 reg
简化了您的代码,它可以在您的任务中设置和清除:
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
我第一次在 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
端口的问题。我通过使用名为 led
的 reg
简化了您的代码,它可以在您的任务中设置和清除:
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