我想有一个让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有更大的频率,所以这样下一个进程就会在前一个进程完成之前开始(它会让一些非常讨厌......)。
如果我所写的内容是正确的,那么解决方案可以使用时钟来播放请求的时间段,但我希望找到更快更轻的解决方案。
答案 0 :(得分:0)
正如你已经写过的那样,clk超过1秒。在一个时钟周期(1ns)中,你会尝试“等待”5-6秒,具体取决于“... 1秒后”线的数量。 你不应该这样做。如果你想要真正如此快速的时钟,那么让一些计数器足够宽一秒钟。在进程(clk)中,您递增此计数器并将计数器值与预定义值进行比较一秒,如果计数器值达到此值,则重置计数器并切换LED。
如果你想要像LED一样的其他“阶段”闪烁3秒钟,然后它不会再闪烁3秒钟,那么你需要一个以上的计数器。每个阶段都应该有一个计数器。