闪烁 LED 的 VHDL 过程

VHDL process for blinking led

我想要一个让 LED 灯闪烁 3 次的过程(每次灯应该亮一秒)并且亮灯之间的间隔应该是 1 秒。

最快最简单的方法如下:

process(CLK)
begin
....
led <= '0';
led <= '1' after  1 sec,
 '0' after 1 sec,
 '1' after 1 sec,
 '0' after 1 sec,
 '1' after 1 sec,
 '0' after 1 sec;
....
end process;

通过编译它没有错误...但是时钟有自己的工作频率(例如1ns)。通过使用 Modelsim 测试此代码,将出现以下错误:

run
# Cannot continue because of fatal error.
# HDL call sequence:
# Stopped at C:/User...rm.vhd 50 Process line__41
# 

该行正好在 PROCESS(CLK) 行上。

我认为问题是因为 CLK 的频率更高,所以在这种情况下,下一个过程会在上一个过程完成之前开始(这让事情变得非常讨厌......)。

如果我写的是正确的,一个解决方案可以是玩时钟以获得请求的周期,但我想找到一个更快更轻的解决方案。

如您所写,clk 比 1 秒快。在一个时钟周期 (1ns) 中,您尝试 "wait" 5-6 秒,具体取决于“... 1 秒后”行的数量。 你不应该这样做。如果你真的想要这么快的时钟,那么让一些计数器足够宽一秒钟。在 process(clk) 中,您增加此计数器并将计数器值与预定义值比较一秒钟,如果计数器值达到此值,则重置计数器并切换 LED。

如果你想要一些其他的"phases",比如LED应该闪烁3秒,然后不再闪烁3秒,那么你需要一个以上的计数器。每个阶段都应该有一个计数器。