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?