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.
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.
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.
A. S. schrieb: > Ich verstehe aber noch nicht richtig wiso das den parallel abgearbeitet > wird ? (<=) Weil du in Verilog keinen Programmablauf schreibst
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.