Forum: FPGA, VHDL & Co. reihenfolge always block


von Sina A. (sinapse)


Lesenswert?

Hallo,

bin gerade bei
http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf

auf seite 16. da kann man wohl folgende funktion
1
module nbex2 (q, a, b, clk, rst_n);
2
 output q;
3
 input clk, rst_n;
4
 input a, b;
5
 reg q;
6
 always @(posedge clk or negedge rst_n)
7
 if (!rst_n) q <= 1'b0;
8
 else q <= a ^ b;
9
endmodule

in zwei always blöcke teilen.
1
module nbex1 (q, a, b, clk, rst_n);
2
 output q;
3
 input clk, rst_n;
4
 input a, b;
5
 reg q, y;
6
 always @(a or b)
7
 y = a ^ b;
8
 always @(posedge clk or negedge rst_n)
9
 if (!rst_n) q <= 1'b0;
10
 else q <= y;
11
endmodule

Jedoch koennte doch ein anderes ergebnis rauskommen beim zweiten, weil 
nicht festgelegt ist, welcher always block zuerst ausgeführt wird, oder?

Daher meine frage. falls sich a und clk gleichzeitig ändern
- kommt zwar etwas unterschiedliches raus, aber das ist nicht so 
schlimm, weil dann eben die änderung von a so gewertet wird, dass diese 
kurz vor oder kurz nach der clk änderungn stattgefunden hat. was in 
beiden fällen richtig ist. stimmt das?
- oder können sich im simulator zwei variablen nie wirklich gleichzeitig 
ändern? weils eben ein simulator ist, der alles im hintergrund 
sequentiell abarbeitet?

von Andreas H. (ahz)


Lesenswert?

Sry für die sehr späte Antwort. Hatte den Post vorher übersehen :/

Sina A. schrieb:
> Jedoch koennte doch ein anderes ergebnis rauskommen beim zweiten, weil
> nicht festgelegt ist, welcher always block zuerst ausgeführt wird, oder?

Nö, da kommt in beiden Fällen das Gleiche raus.
Schau Dir evtl nochmal an, warum da "y = a ^ b" und nicht "y <= a ^ b" 
steht (und vor allem: warum: Hint: "=" meint ja wirklich "ist gleich"

/regards

Nachtrag:
Sina A. schrieb:
> - oder können sich im simulator zwei variablen nie wirklich gleichzeitig
> ändern? weils eben ein simulator ist, der alles im hintergrund
> sequentiell abarbeitet?
Der Simulator kann beliebig viele Signale gleichzeitig ändern. Da wird 
eine Liste mit TimeSteps geführt und jeder TimeStep hat eine Liste der 
Signaländerungen. Diese wird dann zum entsprechenden Zeitpunkt 
sequentiell abgearbeitet. Darum ist ja auch bei mehreren "x <= ..." in 
einem Prozess nur die letzte gültig.
Ok, real ist das etwas aufwendiger. Aber das ist das Konzept ;)

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.