Machine de Mealy vs machine de Moore : sorties, temporisation, nombre d’états et style HDL

Une machine à états se compose d’un registre qui mémorise l’état courant, d’une logique combinatoire qui détermine l’état suivant et d’une logique combinatoire qui détermine les sorties. Les machines de Mealy et de Moore diffèrent par ce qui détermine les sorties. Dans une machine de Mealy, les sorties dépendent à la fois de l’état courant et des entrées courantes : un changement d’entrée apparaît en sortie dans le même cycle. Dans une machine de Moore, les sorties ne dépendent que de l’état courant : un changement d’entrée n’atteint la sortie qu’après la mise à jour de l’état par l’horloge, un cycle plus tard. Les machines de Mealy demandent moins d’états et réagissent plus vite ; les machines de Moore donnent des sorties stables et une temporisation plus prévisible.

CritèreMachine de MealyMachine de Moore
Ce qui détermine la sortieL’état courant et les entrées courantesL’état courant seulement
Sortie dans un diagramme d’étatsÉcrite sur les flèches de transition sous la forme « entrée/sortie »Écrite dans le cercle de l’état, avec le nom de l’état
Réaction aux entréesQuand une entrée change, la sortie change dans le même cycle sans attendre l’horlogeLa sortie change après la mise à jour de l’état au front d’horloge suivant, un cycle plus tard qu’avec une machine de Mealy
Nombre d’états (détecteur de « 101 » avec recouvrement)3 états (aucune correspondance, 1 reconnu, 10 reconnu)4 états (un état supplémentaire « 101 détecté » est nécessaire pour sortir 1)
Nombre d’états (en général)Égal ou inférieur à celui d’une machine de Moore pour le même comportementLes états de Mealy doivent être scindés selon la sortie de leurs transitions entrantes, d’où en général davantage d’états
Glitchs et bruitLes glitchs et le bruit des entrées traversent la logique combinatoire jusqu’à la sortieLe bruit des entrées n’atteint pas la sortie ; coder les états pour que les sorties soient directement des bits du registre d’état supprime aussi les glitchs en sortie
Chemins de temporisationLa logique combinatoire relie les entrées aux sorties, ce qui allonge les chemins incluant la logique environnante ; connecter des machines de Mealy entre elles peut créer des boucles combinatoiresLes sorties ne dépendent que de l’état après le front d’horloge : les chemins sont coupés par des registres et la temporisation est plus facile à analyser
Style HDLLe bloc combinatoire des sorties lit les entrées en plus de l’étatLes expressions de sortie ne lisent que l’état (par exemple une instruction case qui fixe les sorties pour chaque état) ; les sorties sont souvent pilotées par des registres
Cas d’usageContrôle qui doit réagir sans un cycle de retard, ou quand on veut moins d’étatsSignaux de contrôle qui exigent des sorties propres (vers un autre domaine d’horloge ou hors de la puce, par exemple), ou quand une temporisation prévisible compte

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Machine de Mealy
Adaptée pour réagir aux entrées dans le même cycle ou limiter le nombre d’états. Synchronisez d’abord les entrées sur l’horloge, et utilisez les sorties là où un bref glitch est sans conséquence, par exemple en les capturant dans des bascules sur la même horloge. Placer des registres en sortie supprime les glitchs, mais ajoute le même retard d’un cycle qu’une machine de Moore.
Machine de Moore
Adaptée aux conceptions qui privilégient la stabilité des sorties et une temporisation prévisible. Le bruit des entrées n’atteint pas les sorties, ce qui convient bien aux signaux de contrôle importants et aux signaux qui sortent de la puce. Tenez compte de la réaction un cycle plus tard et de la tendance à demander plus d’états. Dans les conceptions réelles, on choisit souvent Mealy ou Moore sortie par sortie, ou on combine les deux.

Questions fréquentes

Que signifie concrètement « un cycle plus tard » ?

Prenons un détecteur de « 101 ». Une machine de Mealy dans l’état « 10 reconnu » met sa sortie à 1 pendant le cycle même où l’entrée passe à 1. Une machine de Moore ne met sa sortie à 1 qu’après avoir capturé ce 1 au front d’horloge et être passée dans l’état « 101 détecté » : la sortie vaut donc 1 au cycle suivant. Les deux détectent les mêmes séquences d’entrée, mais la sortie de Moore est décalée d’un cycle par rapport à celle de Mealy.

Peut-on convertir une machine de Mealy en machine de Moore et inversement ?

Oui. Scinder chaque état de Mealy selon la sortie des transitions qui y entrent donne une machine de Moore de même comportement entrée-sortie, même si le nombre d’états peut augmenter et si les sorties apparaissent un cycle plus tard. Inversement, écrire la sortie de chaque état de Moore sur les transitions qui entrent dans cet état donne une machine de Mealy dont les sorties apparaissent un cycle plus tôt, et il est parfois possible de fusionner ensuite des états.

Dans le code HDL, qu’est-ce qui fait d’une machine une machine de Mealy ou de Moore ?

Les expressions de sortie. Quand le code est séparé en un bloc qui met à jour le registre d’état et un bloc combinatoire qui détermine l’état suivant et les sorties, la machine est de Mealy si les expressions de sortie contiennent des entrées, et de Moore si elles ne dépendent que de l’état. Dans le bloc combinatoire, affectez chaque sortie dans toutes les conditions pour éviter de créer des latchs involontaires.

Une machine de Moore n’a-t-elle jamais de glitchs en sortie ?

Les changements et le bruit des entrées n’atteignent pas les sorties, mais si une logique combinatoire décode l’état pour produire les sorties, plusieurs bits d’état qui changent en même temps peuvent provoquer un glitch. Coder les états pour que les sorties viennent directement des bits du registre d’état, ou placer des registres en sortie, donne des sorties sans glitch.

Vérifier vos connaissances

Quelle est la caractéristique d'une machine d'états de type Mealy ?

  1. ALes sorties ne dépendent que de l'état courant et ne changent pas avant le cycle suivant même si les entrées changent
  2. BLes sorties dépendent à la fois de l'état courant et des entrées, si bien qu'un changement d'entrée apparaît en sortie dans le même cycle
  3. CC'est un circuit combinatoire sans état
Afficher la réponse et l'explication

Réponse : B. Les sorties dépendent à la fois de l'état courant et des entrées, si bien qu'un changement d'entrée apparaît en sortie dans le même cycle

Dans une machine de Mealy, la logique de sortie observe les entrées en plus de l'état courant ; un changement d'entrée modifie la sortie sans attendre l'horloge, ce qui permet de réagir un cycle plus tôt. Le nombre d'états peut aussi être réduit. En revanche, un chemin combinatoire relie les entrées aux sorties, si bien que le bruit d'entrée peut apparaître en sortie et que les chemins temporels s'allongent. On recapture parfois les sorties dans des bascules avant de les utiliser.

Quel type de circuit séquentiel (machine à états) a une sortie déterminée uniquement par l'état actuel ?

  1. AType Mealy
  2. BType Moore
  3. CType Harvard
Afficher la réponse et l'explication

Réponse : B. Type Moore

Dans le type Moore, la sortie dépend uniquement de l'état actuel ; dans le type Mealy, elle dépend à la fois de l'état et de l'entrée. Le type Moore, dont la sortie ne change qu'après un front d'horloge et ne subit pas directement les variations ni les glitchs de l'entrée, est stable et a un comportement temporel prévisible, mais sa réaction à l'entrée est retardée d'un cycle et le nombre d'états tend à augmenter. Le type Mealy réduit le nombre d'états et réagit immédiatement à l'entrée, mais les variations de l'entrée se répercutent directement sur la sortie. En pratique, on combine les deux.

Quelle est la structure de base d'une machine d'états décrite en HDL ?

  1. ASeulement une mémoire conservant l'état, sans logique
  2. BSeulement le circuit déterminant les sorties, sans mémorisation d'état
  3. CUn registre mémorisant l'état courant, un circuit combinatoire déterminant l'état suivant et un circuit combinatoire déterminant les sorties
Afficher la réponse et l'explication

Réponse : C. Un registre mémorisant l'état courant, un circuit combinatoire déterminant l'état suivant et un circuit combinatoire déterminant les sorties

Une machine d'états mémorise l'état courant dans un registre de bascules, détermine l'état suivant par un circuit combinatoire à partir de l'état courant et des entrées, et met à jour l'état sur front d'horloge. Les sorties sont déterminées par un circuit combinatoire à partir de l'état courant (et des entrées). La plupart des circuits suivant une procédure, comme le contrôle de protocoles de communication, les distributeurs automatiques ou les feux de circulation, sont décrits comme des machines d'états.

  1. Quelle est la caractéristique du codage one-hot des états d'une machine d'états ?
  2. 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) ?
  3. Quelle description d'un circuit séquentiel est correcte ?

Questions d'entraînement sur HDL et vérification

Termes clés expliqués

Machine de Mealy
Machine à états dont la sortie dépend à la fois de l'état courant et des entrées. Un changement d'entrée apparaît en sortie dans le même cycle, mais le bruit d'entrée s'y propage aussi plus facilement. Si la sortie ne dépend que de l'état, c'est une machine de Moore.
Circuit séquentiel
Circuit logique qui mémorise un état à l'aide de bascules, etc., et dont la sortie dépend à la fois des entrées et des états passés. Exemples : compteurs, registres.
Circuit combinatoire
Circuit logique dont la sortie dépend uniquement des entrées présentes. Exemples : additionneurs, multiplexeurs, décodeurs.
Bascule (flip-flop)
Élément de base des circuits séquentiels qui mémorise un bit d'information. La bascule D capture son entrée sur un front d'horloge.
Glitch (impulsion parasite)
Impulsion indésirable et brève apparaissant en sortie, due par exemple aux différences de délai entre chemins. En logique combinatoire, on parle aussi d'aléa ; dans un CNA, elle survient lors des changements de code.
Codage one-hot
Codage qui attribue une bascule à chaque état d'une machine à états, une seule étant à 1 à tout moment. La logique est simple et tend à être rapide ; très utilisé sur FPGA.
Boucle combinatoire
Structure où la sortie d'un circuit combinatoire revient sur sa propre entrée sans passer par une bascule. Elle peut osciller ou ne pas se stabiliser et empêche l'analyse temporelle ; elle est donc à éviter.
Latch involontaire
Latch mémorisant une valeur, créé par la synthèse logique dans une description censée être combinatoire, parce que la sortie n'est pas affectée dans certaines conditions.

Comparatifs associés