Hardwarebeschreibungssprachen und Verifikation

Warum steht am Anfang des zweiten always-Blocks der obigen Zustandsautomatenbeschreibung „next = state;“?

always @(posedge clk)
    state <= next;
always @(*) begin
    next = state;
    case (state)
        IDLE: if (start) next = RUN;
        RUN:  if (done)  next = IDLE;
    endcase
end
  1. AUm anzuzeigen, dass bei nicht zutreffenden Bedingungen im aktuellen Zustand verblieben wird, und um Latches zu verhindern, indem next in allen Fällen einen Wert erhält
  2. BUm den Zustand jedes Mal auf IDLE zurückzusetzen
  3. CUm den Takt anzuhalten
Antwort und Erläuterung anzeigen

Antwort: A. Um anzuzeigen, dass bei nicht zutreffenden Bedingungen im aktuellen Zustand verblieben wird, und um Latches zu verhindern, indem next in allen Fällen einen Wert erhält

Es ist eine verbreitete Form, einen Zustandsautomaten in einen Registerblock zur Aktualisierung des Zustands und einen kombinatorischen Block zur Bestimmung des nächsten Zustands aufzuteilen. Gibt es auf der kombinatorischen Seite keine Zuweisung an next, wenn start oder done 0 sind, entsteht ein Latch. Mit „next = state;“ am Anfang wird die Absicht, bei keiner zutreffenden Bedingung im aktuellen Zustand zu bleiben, deutlich ausgedrückt und das Latch verhindert.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Hardwarebeschreibungssprachen und Verifikation

  1. Welche Aussage zu Zustandsautomaten vom Mealy-Typ ist korrekt?
  2. Welche Aussage zur One-Hot-Kodierung bei der Zustandskodierung eines Zustandsautomaten ist korrekt?
  3. Welche Kombination gibt die Zahl der zum Speichern des Zustands nötigen Flipflops für einen Zustandsautomaten mit drei Zuständen korrekt an (Binärkodierung / One-Hot-Kodierung)?
  4. Welchen Wert hat count beim obigen 4-Bit-Zähler, wenn bei count gleich 15 der Takt steigt?
  5. In Verilog werden die 8-Bit-Signale a und b addiert und das Ergebnis dem 8-Bit-Signal s zugewiesen (assign s = a + b;). Was ist zu beachten?

Vergleiche zu diesem Thema