Encodages binaire, Gray et one-hot : guide pratique pour machines d'état FPGA
Cet article fournit une comparaison détaillée des encodages binaire, Gray et one-hot lors de l'implémentation de machines d'état finis (FSM) sur FPGA. Comprendre comment les outils de synthèse évaluent et transforment potentiellement ces encodages est essentiel pour atteindre une performance et une efficacité énergétique optimales.
Les machines d'état finis sont omniprésentes dans la conception numérique. Les outils de synthèse analysent régulièrement votre RTL pour détecter les FSM et peuvent réécrire les encodages d'état pour répondre aux objectifs de timing, de surface ou de puissance. Même si vous assignez manuellement des codes d'état, l'outil peut substituer différentes valeurs — parfois avec une largeur de bits différente — basée sur sa stratégie d'optimisation.
Pour un rappel sur la construction de FSM en Verilog, voir mon article Création de machines d'état finis en Verilog.
Options d'encodage : binaire, Gray et one-hot
Les trois encodages de FSM les plus courants sont binaire, Gray et one-hot. Chacun offre des compromis distincts.
Encodage binaire
L'encodage binaire assigne le nombre minimal de bits pour représenter tous les états. C'est le choix le plus économe en espace, mais les transitions d'état peuvent impliquer plusieurs changements de bits, ce qui peut augmenter la puissance dynamique.

Exemple d'encodage binaire. Image de Steve Arar
Encodage Gray
Le code Gray assure qu'un seul bit change entre états consécutifs. Lorsque le FSM suit une séquence prévisible, l'encodage Gray peut réduire l'activité de commutation et abaisser la puissance dynamique.

La roue du code Gray. Image de Marie Christiano
Encodage one-hot
L'encodage one-hot représente chaque état avec un bit de bascule dédié. Bien qu'il consomme plus de ressources logiques et introduise de nombreuses combinaisons invalides, il élimine le besoin de décodage d'état, simplifiant la logique combinatoire et améliorant souvent le timing à hautes fréquences d'horloge.

Exemple d'encodage one-hot. Image de Steve Arar
Pour des insights plus profonds sur l'encodage d'état en VHDL, consultez Encodage des états d'une machine d'état finie en VHDL par Steve Arar.
Choisir le bon encodage
Déterminer l'encodage optimal dépend du contexte et implique d'équilibrer surface, timing et puissance. Les lignes directrices générales incluent :
- Si votre conception est petite et les différences de performance négligeables, conservez l'encodage original que vous avez spécifié.
- Pour les FSM qui parcourent les états dans un ordre fixe et séquentiel — comme les compteurs — le code Gray est souvent avantageux.
- Lorsqu'un FSM a des transitions arbitraires ou doit fonctionner à hautes fréquences, l'encodage one-hot peut offrir la meilleure fermeture de timing.
Comme les compromis sont nuancés, je recommande de laisser l'outil de synthèse choisir l'encodage. Néanmoins, j'ai mené des expériences comparatives sur trois outils de développement majeurs et trois machines d'état distinctes pour illustrer comment chaque encodage performe en pratique. Les résultats sont discutés dans mon prochain article.
Embarqué
- Comprendre les aciers séries 300, 400 et 500 : composition, propriétés et applications
- Numération octale et hexadécimale : guide pratique pour ingénieurs
- Soustraction binaire par complément à deux
- Structures C++ vs Classes : guide pratique pour développeurs embarqués
- Six Sigma vs Lean Manufacturing : Guide clair pour choisir la bonne stratégie
- Choisir le bon encodage FPGA : étude pratique avec le Jeu de la Vie de Conway
- Code Morse et double extorsion : paysage actuel des menaces de logiciels malveillants avancés
- Stratégies de protection incendie pour ateliers EDM & CNC : sauvegarder productivité et sécurité
- Fonte grise démystifiée : propriétés, nuances et applications industrielles