2016-11-11 80 views
0

3回点滅する(1秒ごとに点灯する必要があります)、点灯するまでの間隔を1秒にするプロセスが必要です。LEDの点滅のためのVHDLのプロセス

最も簡単な方法は、次のようになります。それをコンパイルして

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

これはハードウェアに合成するためのもので、私の例では "after"を使うことはできません。 – pittuzzo

答えて

0

すでに書いたように、clkは1秒より速いです。 1クロックサイクル(1ns)で、 "... 1秒後"の行数に応じて5-6秒待機します。 このようにしないでください。本当に速いクロックが必要な場合は、カウンタを1秒間十分に広くします。プロセス(clk)では、このカウンタをインクリメントしてカウンタ値と1秒間の値を比較し、カウンタ値がこの値に達するとカウンタをリセットしてLEDをトグルします。

LEDのような他の「フェーズ」を3秒間点滅させ、さらに3秒間点滅しない場合は、複数のカウンタが必要です。各フェーズにはカウンタが必要です。

関連する問題