asynchrone Anweisungen

Moderator (Firma: Titel) Persönliche Seite #4949783
Lesenswert?

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:
1
process (pwm)
2
begin
3
   pwm <= not pwm;
4
end process;
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!
Gast #4949818
Lesenswert?

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?
Moderator (Firma: Titel) Persönliche Seite #4949830
Lesenswert?

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...
Gast #4950031
Lesenswert?

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?
Moderator (Firma: Titel) Persönliche Seite #4950055
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren