Hallo, um den unterschied zwischen blocking and non-blocking assignments zu verstehen, lese ich gerade http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf da ist auf seite 4 folgender satz zu finden: Nonblocking assignments are only made to register data types and are therefore only permitted inside of procedural blocks, such as initial blocks and always blocks. Nonblocking assignments are not permitted in continuous assignments. kann mir jemand mehr dazu sagen? der nonblocking assignment registriert doch nicht nur datentypen, sondern weist einer variable einen wert zu... und warum reicht das als grund um nur im prozeduralen sinn zu ergeben?
Gast
#6935153
Hi Sina, gleich vorweg ich bin kein Verilog- oder FPGA-Experte ;) Aber vielleicht hilft das ja. Was mir damals wirklich geholfen hat Blocking und Non-Blocking zu verstehen sich klarzumachen wer treibt das Signal? Ein Beispiel für ein And-Gatter mit Blocking und Non-Blocking: Blocking:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
In diesem Fall wird out durch kombinatorische Logik getrieben sprich a and b wird out zugewiesen. Die Änderung von a oder b hat "sofort" Auswirkung auf out. D.h. out ist ein Wire was den Wert von a oder b annimmt. Non-Blocking:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Der Unterschied hier ist das out ein reg (Flipflop) ist. Ein Flipflop treibt das Signal selbst. Damit ein Flipflop den neuen Wert übernimmt braucht es eine Clock. Und das ist genau der Punkt warum man für ein Non-Blocking einen Always-Block braucht. Nur hier weiss die Synthesesoftware auf welche Clock bezieht sich die Zuweisung. Der Unterschied zum Non-Blocking ist zudem, dass out sich erst bei der nächsten Clock ändert. VG egon
Gast
#6935167
Ops... kleine Korrektur ganz unten: Der Unterschied zum >>Blocking<< ist zudem, dass out sich erst bei der nächsten Clock ändert.
Gast
#6935769
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Immer noch Non-Blocking. Die o.g. Begründung ist schon etwas spezifisch. Es geht auch allgemeiner. Hier geht es um Signalzuweisung. Blocking Zuweisungen (der Name ist für mich immer wieder sehr irreführend) sind hilfreich um noch Werte während des Prozesses zuzuweisen. Z.B. für Zwischwerte:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.