Forum: FPGA, VHDL & Co. Verilog. Unterschiedliche Zuweisungen. Blocking - vs Non Blocking Assignments. = oder <=


von A. S. (agor)



Lesenswert?

Wie arbeitet das Verilog Programm in Bezug auf die Zuweisungen.

Blocking Assignments (=)

das bedeutet für mich eine Kombinierte Logik. Ich verstehe das so das in 
einer Zeiteinheit der Clock alle Zuweisungen in Reihenfolge Ausgeführt 
werden.
Dadurch kann es zu Timing Problemen kommen. Wenn die jeweiligen 
Zuweisungen(eventuell Rechnung) so lange dauert das sie es nicht in 
einer Zeiteinheit der Clock schaffen das Ergebniss zu berechnen.

Non Blocking Assignments (<=)

bedeutet eine Sequentielle Logik. Das heißt das Rechnungen Parallel 
ausgeführt werden. Diese die rechts von der Zuweisung stehen. Aber erst 
am ende der Zeiteinheit. Werden die Zuweisungen in die register 
geschrieben. Das bedeutet das es keine Timingprobleme geben kann.

Ich weiß nicht wie die einzelnen Punkte Abgearbeitet werden. Damit ich 
mir vorstellen kann wie mein Quelltext funktioniert. Ich weiß nägmlich 
nie so wirklich ob ich einen Logik fehler habe weil ich nicht weiß wie 
der Verilog code verarbeitet wird.

von Torben K. (tokuhila)


Lesenswert?

Die rechte Grafik erklärt das doch prima. Kombinatorische Logik "immer" 
mit =, sequentielle Logik (sobald ein reg im Spiel ist) mit <=

Die Grundregel habe ich irgendwo mal gelesen, mich seitdem daran 
gehalten und noch keine Probleme gehabt.

Denk bei einem FPGA nicht an sequentielle Abläufe in der Reihenfolge 
sondern an parallelen Anweisungen wie die Logikschaltung aussieht.

von A. S. (agor)


Lesenswert?

Torben K. schrieb:
> Denk bei einem FPGA nicht an sequentielle Abläufe in der Reihenfolge
> sondern an parallelen Anweisungen wie die Logikschaltung aussieht.

Ich verstehe aber noch nicht richtig wiso das den parallel abgearbeitet 
wird ? (<=)


Heißt das das jeder Block. Gleichzeitig abgearbeitet wird und den 
ermittelten wert weiter gibt ? Deswegen parallel ?

Also ich verstehe das so das man mit <= sequentieller Zuweisung einfach 
keine Timing Probleme bekommt. Weil jede einzelne Rechenung in 
verschiedene Clk Signale Aufgeteilt wird.

von Torben K. (tokuhila)


Lesenswert?

A. S. schrieb:
> Ich verstehe aber noch nicht richtig wiso das den parallel abgearbeitet
> wird ? (<=)

Weil du in Verilog keinen Programmablauf schreibst

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

A. S. schrieb:
> Heißt das das jeder Block. Gleichzeitig abgearbeitet wird und den
> ermittelten wert weiter gibt ?
Es heißt zuallererst, dass damit Hardware beschrieben wird. Und die 
einzige Hardware, die du auf diese Art beschreiben kannst, ist Logik und 
Fipflops. Damit muss deine Verilog-Beschreibung aufgebaut werden.

> Also ich verstehe das so das man mit <= sequentieller Zuweisung einfach
> keine Timing Probleme bekommt. Weil jede einzelne Rechenung in
> verschiedene Clk Signale Aufgeteilt wird.
Und wie geschieht diese "Aufteilung" in der Realität? Mit Logik und 
Flipflops?

> Ich verstehe aber noch nicht richtig wiso das den parallel abgearbeitet
> wird ? (<=)
Ganz einfach: deine ganze Verilog-Beschreibung wird in Hardware 
umgesetzt. Und diese Hardware der gesamten Beschreibung ist immer da. 
Parallel und gleichzeitig. Nur ändern sich zeitweise manche Zustände 
bzw. Pegel nicht, weil die Eingangswerte ihrer Logik konstant sind...

Und das "blocking" bzw. "non blocking" Konstrukt ist lediglich ein 
Sprachkonstrukt von Verilog. Hier entscheidet sich, ob eine Zuweisung 
"sofort" geschieht, oder erst "am Ende" eines Blocks. Nehmen wir mal die 
Werte a=1, b=2, c=3, d=10. Was würde für d und e herauskommen?
Fall 1:
1
   d = a+b;
2
   e = c+d;
Fall 2:
1
   d <= a+b;
2
   e <= c+d;

Lösungen:
Fall 1 -> d=3, e=6
Fall 2 -> d=3, e=13

Man könnte den Fall 2 übrigens ohne Funktionsänderung auch so schreiben:
1
   e <= c+d;
2
   d <= a+b;

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.