VHDL进程闪烁导致

时间:2016-11-11 17:42:00

标签: vhdl modelsim

我想有一个让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有更大的频率,所以这样下一个进程就会在前一个进程完成之前开始(它会让一些非常讨厌......)。

如果我所写的内容是正确的,那么解决方案可以使用时钟来播放请求的时间段,但我希望找到更快更轻的解决方案。

1 个答案:

答案 0 :(得分:0)

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

如果你想要像LED一样的其他“阶段”闪烁3秒钟,然后它不会再闪烁3秒钟,那么你需要一个以上的计数器。每个阶段都应该有一个计数器。