Hardwarebeschrijvingstalen en verificatie
Wat is de juiste reden waarom in de bovenstaande beschrijving van een toestandsmachine aan het begin van het tweede always-blok 'next = state;' wordt geschreven?
always @(posedge clk)
state <= next;
always @(*) begin
next = state;
case (state)
IDLE: if (start) next = RUN;
RUN: if (done) next = IDLE;
endcase
end
- AOm aan te geven dat bij niet van toepassing zijnde voorwaarden in de huidige toestand wordt gebleven, en om latches te voorkomen door in alle gevallen next een waarde te geven
- BOm de toestand telkens terug te zetten naar IDLE
- COm de klok te stoppen
Antwoord en toelichting tonen
Antwoord: A. Om aan te geven dat bij niet van toepassing zijnde voorwaarden in de huidige toestand wordt gebleven, en om latches te voorkomen door in alle gevallen next een waarde te geven
Het is een gangbare vorm om een toestandsmachine te splitsen in een registerblok dat de toestand bijwerkt en een blok met een combinatorische schakeling dat de volgende toestand bepaalt. Aan de combinatorische kant ontstaat een latch als er geen toekenning aan next is wanneer start of done 0 is. Met 'next = state;' aan het begin wordt duidelijk aangegeven dat bij geen enkele voorwaarde in de huidige toestand wordt gebleven, en wordt tegelijk een latch voorkomen.
Verder: nog 9 vragen over Hardwarebeschrijvingstalen en verificatie