Hallo,
die Zuweisungen in Verilog sind als Anfänger schwer zu verstehen und
bereiten oft Probleme. Ich glaube, ich habe non blocking und blocking
verstanden. Was ich jedoch nicht verstanden habe ist der Unterschied
zwischen einem Ausdruck als wire und einem als blocking assignment in
einem always block. Und da komme ich nun zu meiner absoluten Noobfrage.
Beispiel:
1 | wire a = sigA & sigB & sigC;
|
vs
1 | reg a;
|
2 | always @(posegde clk) a = sigA & sigB & sigC;
|
Wäre die Anweisung eine non blocking Zuweisung, dann würde nach der
rising Edge von clk das Ergebnis in a landen. So weit so gut. Aber jetzt
ist es eine blockierende Zuweisung. Das heißt, wie bei einem wire würde
dem Register a kontinuierlich der neue Wert zugewiesen werden wenn sich
eines der Signale ändert, ganz gleich was mit clk passiert?
Wenn ich jetzt auf a von außen zugreife, wann kann ich erwarten das a
den Wert zugewiesen bekommt? Wie verhält sich das Konstrukt?
Grüße
Tobias