Forum: FPGA, VHDL & Co. asynchrone Anweisungen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Daniel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Vancouver (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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!

: Bearbeitet durch Moderator
von Vancouver (Gast)


Bewertung
0 lesenswert
nicht 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?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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...

von Daniel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OK. Vielleicht war das beispiel schlecht.
1
process(clk)
2
begin
3
pwm1 <= not pwm1;
4
end process;
5
pwm <=  pwm1;

Das trifft es wohl ehr...

von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
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.

von Vancouver (Gast)


Bewertung
0 lesenswert
nicht 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?

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.