Verilog. Unterschiedliche Zuweisungen. Blocking - vs Non Blocking Assignments. = oder <=

OP #4584557
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.
Angehängte Dateien:
#4584806
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.
OP #4589079
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.
Moderator (Firma: Titel) Persönliche Seite #4589130
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;

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