Hardwarebeschreibungssprachen und Verifikation

Bei der obigen Beschreibung war unmittelbar vor der steigenden Taktflanke a=0 und b=1. Welche Werte haben a und b nach der steigenden Flanke?

always @(posedge clk) begin
    a <= b;
    b <= a;
end
  1. Aa=1, b=0 (vertauscht)
  2. Ba=1, b=1
  3. Ca=0, b=0
Antwort und Erläuterung anzeigen

Antwort: A. a=1, b=0 (vertauscht)

Bei nichtblockierenden Zuweisungen werden zuerst die beiden rechten Seiten (alter Wert von b = 1 und alter Wert von a = 0) ausgewertet und danach a=1 und b=0 gleichzeitig geschrieben, sodass die Werte vertauscht werden. Als Schaltung sind die Ausgänge zweier Flipflops mit den Eingängen des jeweils anderen verbunden. Bei blockierender Zuweisung (=) würde a in der ersten Zeile 1, in der zweiten Zeile erhielte b den neuen Wert 1 von a, und beide wären 1.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Hardwarebeschreibungssprachen und Verifikation

  1. Ein zweistufiges Schieberegister sollte entstehen, wurde aber wie oben mit blockierenden Zuweisungen (=) geschrieben. Welches Problem tritt auf?
  2. Welche Richtlinie zur Verwendung der Zuweisungsarten in Verilog ist allgemein korrekt?
  3. Was bedeutet „always @(*)“ in Verilog?
  4. Die obige Beschreibung sollte eine kombinatorische Schaltung sein. Welches mögliche Problem ist korrekt beschrieben?
  5. Was entsteht bei der Logiksynthese, wenn wie oben als kombinatorische Schaltung gedachter Code geschrieben wird?

Vergleiche zu diesem Thema