In vielen Prüfständen sehe ich das folgende Muster für die Taktgenerierung:
process
begin
clk <= '0';
wait for 10 NS;
clk <= '1';
wait for 10 NS;
end process;
In anderen Fällen sehe ich:
clk <= not clk after 10 ns;
Letzteres gilt als besser, da es geplant wird, bevor ein Prozess ausgeführt wird, und somit Signale, die synchron zur Clk-Kante geändert werden, ordnungsgemäß behandelt werden. Die folgenden Abschnitte des LRM scheinen diese Theorie zu unterstützen:
Seite 169: 12.6.4 Der Simulationszyklus Ein Simulationszyklus besteht aus folgenden Schritten:
- b) Jedes aktive explizite Signal im Modell wird aktualisiert. (Infolgedessen können Ereignisse auf Signalen auftreten.)
Dies sollten die Signale mit einem neuen projizierten Wert sein, wie z. B. Signale, die durch die verzögert werden after
.
- d) Wenn P für jeden Prozess P derzeit für ein Signal S empfindlich ist und in diesem Simulationszyklus ein Ereignis auf S aufgetreten ist, wird P fortgesetzt.
Das wäre der größte Teil der zu simulierenden Logik
- e) Jeder nicht verschobene Prozess, der im aktuellen Simulationszyklus fortgesetzt wurde, wird ausgeführt, bis er angehalten wird.
Und jetzt werden alle Prozesse ausgeführt, die von a angehalten wait for
werden.
TL; DR:
- Ist die
after
Methode der Methode immer überlegenwait for
? - Hilft es, die Probleme beim synchronen Setzen von Eingangssignalen zu vermeiden?
wait for
s) ändern, oder Signale, die von der Flanke des Clk ausgelöst werden und daher einen Delta-Zyklus später sind?
after
Version besser ist? Mir wurde noch nie beigebracht, dass es besser ist, ich bevorzuge es einfach, da es eine einzelne Zeile ist :)
wait until
oder ändern wait for
.