Blechbieger schrieb:
> Ausnahmslos jeder Prozess wird zu Beginn der Simulation gestartet und
> bis zum ersten impliziten oder expliziten Wait ausgeführt.
Ja, und dazu ist die Information sinnvoll, dass eben jede Sensitivliste
ein implizites "wait on" ist:
1 | process (a,b,c) begin -- implizites wait
|
2 | d <= a after 2 ns;
|
3 | e <= b and c:
|
4 | end process;
|
ist funktionell exakt dasselbe wie
1 | process begin
|
2 | wait on a,b,c; -- explizites wait
|
3 | d <= a after 2 ns;
|
4 | e <= b and c:
|
5 | end process;
|
Und so werden Prozesse mit Sensitivliste bei der Simulation erstmal
gestartet, um sofort danach wegen der Sensitivliste wieder angehalten zu
werden. "Von aussen" gesehen haben sie sich nicht mal den Bruchteil
einer Femtosekunde bewegt.
Die vermittelte Denkweise, dass mit der Änderung eines Signales in der
Sensitivliste ein Prozess von aussen "angetriggert" wird, ist also
eigentlich formell falsch. Sondern der von Simulationsbeginn an laufende
Prozess "wartet" implizit auf die Änderung eines Signals. Es "warten"
also in objektorientierter Denkweise alle Prozesse parallel aktiv auf
eine Änderung eines Signals in ihrer Sensitivliste.
Weil jetzt aber auf dem Simulationsrechner keine Prozesse gleichzeitig
"laufen" oder "warten" können, sondern sich der Simulator eine Liste mit
Zeitpunkten für irgendwelche Aktionen und Neuberechnungen aufbaut und
abarbeitet, kommt der ganze Formalismus ins Stolpern. Und mit ihm der
geneigte VHDL-Anfänger, der jetzt gar nicht mehr versteht, wer da passiv
oder aktiv am Warten teilnimmt oder gar irgendwie angestoßen wird...