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
  1. 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
  2. BPour ramener l'état à IDLE à chaque fois
  3. 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.

S'entraîner sur ce thème Retour au thème

Autres questions sur HDL et vérification

  1. Quelle est la caractéristique d'une machine d'états de type Mealy ?
  2. Quelle est la caractéristique du codage one-hot des états d'une machine d'états ?
  3. Pour une machine d'états à trois états, quelle combinaison donne le nombre de bascules nécessaires pour mémoriser l'état (codage binaire / codage one-hot) ?
  4. Avec le compteur 4 bits ci-dessus, si count vaut 15 au front montant d'horloge, que devient count ?
  5. En Verilog, on additionne les signaux a et b de 8 bits et l'on affecte le résultat au signal s de 8 bits (assign s = a + b;). À quoi faut-il prendre garde ?

Comparatifs sur ce thème