reihenfolge always block

OP #6929591
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?
#6972398
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 ;)

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