HDL et vérification
Dans la description de machine d'états ci-dessus, pourquoi écrit-on « next = state; » en tête du deuxième bloc always ?
always @(posedge clk)
state <= next;
always @(*) begin
next = state;
case (state)
IDLE: if (start) next = RUN;
RUN: if (done) next = IDLE;
endcase
end
- APour indiquer que l'état reste inchangé si aucune condition n'est remplie, et fixer next dans tous les cas afin d'éviter un verrou
- BPour ramener l'état à IDLE à chaque fois
- CPour arrêter l'horloge
Afficher la réponse et l'explication
Réponse : A. Pour indiquer que l'état reste inchangé si aucune condition n'est remplie, et fixer next dans tous les cas afin d'éviter un verrou
Décrire une machine d'états en séparant le bloc registre qui met à jour l'état et le bloc combinatoire qui détermine l'état suivant est une forme courante. Côté combinatoire, l'absence d'affectation de next lorsque start ou done valent 0 créerait un verrou. Écrire « next = state; » en tête exprime clairement l'intention de rester dans l'état courant si aucune condition n'est remplie, tout en évitant le verrou.