Hallo zusammen, ich habe hier http://sus.ziti.uni-heidelberg.de/Lehre/DSTVorlesung06/DST06_09_Verilog.pdf auf Seite 26 gelesen, das Verilog zwischen begin und end, alle Anweisung sequentiell ausführt. Andererseits heißt es das a <= b; nicht blockierend (parallel) und a = b; blockierend (sequentiell) ist. Was also passiert, wenn ich z.B. always @ (clk) begin a <= b; c <= d; end schreibe? Werden die Zusweisungen nun parallel oder sequentiell ausgeführt? Danke euch und guten Rutsch!
Marc85 schrieb: > Werden die Zusweisungen nun parallel oder sequentiell ausgeführt? Die Anweisungen sind doch voneinander unabhängig, so dass es keinen Unteschied macht, in welcher Reihenfolge diese ausgeführt werden.
Lattice User schrieb: > Schau dir Seite 29 deines Links an. Hm, da sachste was ;) Aber irgendwie hätte man sich das "Die Anweisungen zwischen „begin“ und „end“ werden sequentiell ausgeführt" dann sparen können, ziemlich verwirrend. Danke euch
Hätte man sich nicht sparen können, da es für sofortige Zuweisung mit = schon wichtig ist, in welcher Reihenfolge das abläuft. Aus der Sicht eines C-Programmierers arbeitet das = eben ganz "normal". Das <= ist die Besonderheit beim HW-Entwurf, weil das @always ja einen "Triggerpunkt" definiert, der quasi beliebig (infinitesimal) kurz ist. In quasi Nullzeit gibt es aber kein vorher und kein nachher, und genau das Verhalten wird vom <= nachgebildet.
Marc85 schrieb: > "Die Anweisungen zwischen „begin“ und „end“ werden sequentiell > ausgeführt" dann sparen können, ziemlich verwirrend. Ohne hier Haare spalten zu wollen, werden die Anweisungen tatsächlich sequentiell ausgeführt. Das folgende führt dazu, dass die Variable a immer den Wert '0 zugewiesen bekommt, da das zugehörige Statement dem das '1 zuweist nachfolgt.
1 | always @ (clk) |
2 | begin |
3 | a <= '1; |
4 | a <= '0; |
5 | end |
Anders wäre das bei echter Parallelität:
1 | always @ (clk) |
2 | fork |
3 | a <= '1; |
4 | a <= '0; |
5 | join |
Hier ist der Zustand von a nach jeder Taktflanke unbekannt. Viele Grüße Marcus
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.