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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.