WAIT

Sequentielle Anweisungen – WAIT

PROCESS
BEGIN
a <= bit_vector'("01100101");
WAIT;

END PROCESS;


PROCESS
BEGIN
clk <= NOT clk;
WAIT FOR 10 ns;

END PROCESS;
Der erste Prozess wird mit der WAIT-Anweisung dauerhaft unterbrochen, d.h. er wird nur einmal durchlaufen.

Der zweite Prozess wartet eine bestimmte Zeit (10 ns) und wird dann erneut durchlaufen. Somit wird ein symmetrisches Taktsignal a mit Periodendauer von 20 ns (entspricht 50 MHz) erzeugt.

PROCESS (d, clk)
BEGIN
IF clk = '1' THEN
q <= d;
END IF;
END PROCESS;


PROCESS
BEGIN
IF clk = '1' THEN
q <= d;
END IF;
WAIT ON d, clk;

END PROCESS;
Hier handelt es sich um zwei äquivalente Prozess-Anweisungen, die einmalig bei der Initialisierung bis zum Ende durchlaufen werden und erst dann wieder aktiviert werden, wenn auf d oder clk ein Event auftritt.

Realisiert wird damit je ein auf den positiven Taktpegel sensitives D-Latch.

PROCESS
BEGIN
WAIT ON d, clk UNTIL clk = '1';

q <= d;
END PROCESS;
Hierbei wird mit einer einzelnen WAIT-Anweisung das D-Latch-Verhalten modelliert. Bei einer derart gemischten WAIT-Anweisung muß sowohl die Bedingung (clk = '1') erfüllt sein als auch mindestens ein Signal aus der Liste (clk, d) einen Event aufweisen.
PROCESS
BEGIN
WAIT ON a UNTIL b = '1' FOR 100 ns;

c <= d AFTER 20 ns;
END PROCESS;
Wird eine Zeitbedingung angegeben, so wird maximal die angegebene Zeit gewartet. D.h. spätestens nach 100 ns wird die Signalzuweisung erneut ausgeführt, wenn die Bedingung nicht erfüllt ist und gleichzeitig a keinen Event aufweist.