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
- 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
- BUm den Zustand jedes Mal auf IDLE zurückzusetzen
- 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.