1 | process(clk, rst) |
2 | begin
|
3 | ...
|
4 | end process; |
5 | pwm <= not pwm; |
Wann genau wird
1 | pwm <= not pwm; |
ausgeführt? Sofort? Wann ist sofort?
|
Forum: FPGA, VHDL & Co. asynchrone Anweisungen
Wann genau wird
ausgeführt? Sofort? Wann ist sofort? Da das Statement außerhalb des Prozesses steht, wird es immer ausgeführt, beginnend mit dem Start der Simulation. In der Hardware ebenso, aber hier sollten die Tools erkennen, dass es eine kombinatorsuche Schleife ist und einen Fehler ausgeben. Daniel schrieb: > Wann genau wird pwm <= not pwm; ausgeführt? Du denkst falsch! Da wird nicht irgendwie "ausgeführt", sondern daraus wird Hardware gemacht. Siehe http://www.lothar-miller.de/s9y/categories/36-Kombinatorische-Schleife > Sofort? Wann ist sofort? Nach Anlegen der Versorgung, Laden des FPGAs und deaktivieren des globalen Reset (wenn es sowas in deinem FPGA gibt). Vancouver schrieb: > Da das Statement außerhalb des Prozesses steht, wird es immer ausgeführt Das ist "gefühlt" richtig. Aber natürlich berechnet der Simulator die Anweisung nur, wenn sich eine Änderung ergab. Man kann aus jeder einzelnen nebenläufigen Anweisung auch ganz einfach einen funktionsgleichen Prozess machen, indem man die Signale rechts der Zuweisung in die Sensitivliste aufnimmt:
Und jetzt kommt die Regel zum Tragen, die sagt, dass ein Prozess immer dann neu berechnet werden muss, wenn sich ein Signal in der Sensitivliste ändert. Man merkt schnell: Deadlock! :
Bearbeitet durch Moderator
Lothar M. schrieb: > Man merkt schnell: Deadlock! Deadlock oder Livelock, je nachdem, wie man es sieht :-) Ich meine, der Prozess wird ständig aufgerufen und hungert damit alle anderen Simulatoroperationen aus. (Das gleiche müsste ohne den Prozess drumherum passieren, aber ich habe es noch nicht ausprobiert. ) Was würde eigentlich passieren, wenn die Zuweisung im prozess stehen würde, aber ohne rising_edge(clk) bzw. clk'event? Vancouver schrieb: > Ich meine, der Prozess wird ständig aufgerufen und hungert damit alle > anderen Simulatoroperationen aus. (Das gleiche müsste ohne den Prozess > drumherum passieren, aber ich habe es noch nicht ausprobiert. ) So ist es, und während der andauerenden Toggelei die Simulationszeit nicht weiterläuft, kommt irgendwann die Meldung "maximum number of iterations reached" o.ä. Vancouver schrieb: > Was würde eigentlich passieren, wenn die Zuweisung im prozess stehen > würde, aber ohne rising_edge(clk) bzw. clk'event? Und was "würde" in diesem Fall in der Sensitivliste stehen? Wenn es nicht "pwm" ist, dann ist die Sensitivliste falsch und die Simulation auch. An der erzeugten Hardware ändert sich nichts: ein rückgekoppelter Inverter... OK. Vielleicht war das beispiel schlecht.
Das trifft es wohl ehr... Da ist es genauso. Die Zuweisung kannst Du Dir als Draht vorstellen. Sobald da eine Spannung ans eine Ende gelegt wird ist die auch am anderen Ende. Sprich sobald sich pwm1 ändert, übernimmt pwm diesen Wert, sofort. Also im FPGA ist das eine Leitung, pwm ist da mit pwm1 direkt verbunden. Daniel schrieb: > OK. Vielleicht war das beispiel schlecht. Tja, so ist das eben... > Das trifft es wohl ehr... Da gibt es in der finalen Schaltung das Signal pwm gar nicht mehr. Es wird direkt das Flipflop pwm1 auf den Ausgang geroutet. Lothar M. schrieb: > Und was "würde" in diesem Fall in der Sensitivliste stehen? Wenn es > nicht "pwm" ist, dann ist die Sensitivliste falsch und die Simulation > auch. Die SensListe soll genau so aussehen wie oben im Beispiel, also clk und rst. Klar dass die Simulation dann falsch ist, aber was würde sie tun? pwm invertieren bei beiden clk-Flanken? Auch habe ich mich schon gefragt, warum man in einem synchronen prozess immer clk'event und clk='1' abfragen muss. clk'event ist doch automatisch erfüllt, wenn clk alleine in der Sensliste steht. Warum kann man clk'event nicht weglassen, wenn nur clk in der Sensliste steht? Vancouver schrieb: > aber was würde sie tun? pwm invertieren bei beiden clk-Flanken? Ja. Probiers einfach mal aus. Vancouver schrieb: > Warum kann man clk'event nicht weglassen, wenn nur clk in der Sensliste > steht? Siehe http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html Oder kurz: das 'event ist das Schlüsselwort für den Synthesizer, ein Flipflop zu erzeugen. Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
|
|