Verilog: Verhalten zwischen begin und end

Gast #2976091
Lesenswert?

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!
#2976321
Lesenswert?

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.
Persönliche Seite #2978443
Lesenswert?

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

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