Codificação Binária, Gray e One-Hot: Guia Prático para Máquinas de Estado em FPGA
Este artigo fornece uma comparação detalhada de codificações binária, Gray e one-hot ao implementar máquinas de estado finitas (FSMs) em FPGAs. Entender como ferramentas de síntese avaliam e potencialmente transformam estas codificações é essencial para alcançar performance e eficiência de potência ótimas.
Máquinas de estado finitas são onipresentes em design digital. Ferramentas de síntese rotineiramente analisam seu RTL para detectar FSMs e podem reescrever codificações de estado para atender metas de timing, área ou potência. Mesmo se você atribuir manualmente códigos de estado, a ferramenta pode substituir valores diferentes — às vezes com largura de bit diferente — baseada em sua estratégia de otimização.
Para uma revisão sobre construção de FSMs em Verilog, veja meu artigo Criando Máquinas de Estado Finitas em Verilog.
Opções de Codificação: Binária, Gray e One-Hot
As três codificações de FSM mais comuns são binária, Gray e one-hot. Cada uma oferece trade-offs distintos.
Codificação Binária
Codificação binária atribui o menor número possível de bits para representar todos os estados. É a escolha mais eficiente em espaço, mas transições de estado podem envolver múltiplas mudanças de bit, o que pode aumentar potência dinâmica.

Um exemplo de codificação binária. Imagem por Steve Arar
Codificação Gray
Código Gray garante que apenas um bit mude entre estados consecutivos. Quando o FSM segue uma sequência previsível, codificação Gray pode reduzir atividade de comutação e baixar potência dinâmica.

A roda do código Gray. Imagem de Marie Christiano
Codificação One-Hot
Codificação one-hot representa cada estado com um bit dedicado de flip-flop. Embora consuma mais recursos lógicos e introduza muitas combinações inválidas, elimina a necessidade de decodificação de estado, simplificando lógica combinacional e frequentemente melhorando timing em altas frequências de clock.

Um exemplo de codificação one-hot. Imagem por Steve Arar
Para insights mais profundos sobre codificação de estado em VHDL, consulte Codificando os Estados de uma Máquina de Estado Finita em VHDL por Steve Arar.
Escolhendo a Codificação Certa
Determinar a codificação ótima é dependente de contexto e envolve balancear área, timing e potência. Diretrizes gerais incluem:
- Se seu design é pequeno e diferenças de performance são negligenciáveis, retenha a codificação original que você especificou.
- Para FSMs que percorrem estados em ordem fixa e sequencial — como contadores — código Gray é frequentemente vantajoso.
- Quando um FSM tem transições arbitrárias ou deve operar em altas frequências, codificação one-hot pode fornecer o melhor fechamento de timing.
Como os trade-offs são matizados, recomendo permitir que a ferramenta de síntese escolha a codificação. No entanto, conduzi experimentos comparativos através de três ferramentas de desenvolvimento principais e três máquinas de estado distintas para ilustrar como cada codificação performa na prática. Os resultados são discutidos no meu próximo artigo.
Integrado
- Entendendo Aços das Séries 300, 400 e 500: Composição, Propriedades e Aplicações
- Numeração Octal e Hexadecimal: Guia Prático para Engenheiros
- Adição Binária Explicada: Regras, Exemplos e Papel em Computadores Digitais
- Subtração Binária Usando Complemento de Dois
- Estruturas vs Classes em C++: Guia Prático para Desenvolvedores Embarcados
- Six Sigma vs. Manufatura Enxuta: Guia Claro para Escolher a Estratégia Certa
- Escolhendo a Codificação Certa para FPGA: Estudo Prático com Jogo da Vida de Conway
- Código Morse e Extorsão Dupla: Cenário Atual de Ameaças Avançadas de Malware
- Estratégias de Proteção contra Incêndio para Oficinas EDM e CNC: Proteja Produtividade e Segurança
- Ferro Cinzento Desmistificado: Propriedades, Graus e Aplicações Industriais