2016-11-11 5 views
0

Ich möchte einen Prozess haben, die eine LED dreimal blinken lassen (jedes Mal sollte das Licht für eine Sekunde eingeschaltet sein) und das Intervall zwischen dem Einschalten sollte 1 Sekunde betragen.VHDL-Prozess für blinkende LED

Der schnellste und einfachste Weg, sollte folgende sein:

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; 

Durch das Kompilieren gibt es keine Fehler ... aber die Uhr hat seine eigene Arbeitsfrequenz (zum Beispiel 1 ns). Durch Tring diesen Code mit Modelsim wird es den folgenden Fehler geben:

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

Die Reihe ist genau auf den Prozess (CLK) Reihe.

Ich denke, das Problem ist, weil der CLK größere Frequenz hat, so auf diese Weise ein nächster Prozess beginnt vor dem vorherigen fertig (es macht etwas wirklich fies ...).

Wenn das, was ich geschrieben habe, korrekt ist, kann eine Lösung mit der Uhr spielen, um den gewünschten Zeitraum zu haben, aber ich würde gerne eine schnellere und leichtere Lösung finden.

+0

Oh Schatz. Ist das nur für die Simulation oder Synthese in Hardware? –

+0

Es wird für die Synthese in Hardware und so kann ich nicht das "nach" wie in meinem Beispiel verwenden. – pittuzzo

Antwort

0

Wie Sie bereits geschrieben haben, ist CLK schneller als 1 Sek. In einem Taktzyklus (1ns) versuchen Sie 5-6 Sekunden zu warten, abhängig von der Anzahl der Zeilen "... nach 1 Sekunde". Sie sollten diesen Weg nicht machen. Wenn Sie wirklich so schnelle Uhr wollen, dann machen Sie einige Zähler breit genug für eine Sekunde. In Prozess (clk) inkrementieren Sie diesen Zähler und vergleichen den Zählerwert mit dem vordefinierten Wert für eine Sekunde. Wenn der Zählerwert diesen Wert erreicht, setzen Sie den Zähler zurück und schalten die LED um.

Wenn Sie möchten, dass einige andere "Phasen" wie LED blinken 3 Sekunden lang, und dann sollte es nicht weitere 3 Sekunden lang blinken, dann benötigen Sie mehr als einen Zähler. Jede Phase sollte einen Zähler haben.