Comparando codificação binária, cinza e One-Hot
Este artigo mostra uma comparação das implementações que resultam do uso de codificações binárias, Gray e one-hot para implementar máquinas de estado em um FPGA. Essas codificações são frequentemente avaliadas e aplicadas pelas ferramentas de síntese e implementação, por isso é importante saber por que o software toma essas decisões.
As máquinas de estado finito (FSMs) são uma parte muito comum de quase todos os sistemas digitais. É por isso que as ferramentas de síntese costumam inspecionar seu código para detectar FSMs e realizar otimizações que podem modificar a codificação dos estados. Não importa se você selecionou e especificou cuidadosamente os valores que implementam seus estados em seu código-fonte, a ferramenta de síntese pode substituir esses valores por outros que podem até ter um comprimento de bits diferente do que sua codificação original.
Se você quiser se atualizar na implementação de máquinas de estado em Verilog, deve ler meu artigo intitulado Criando máquinas de estado finito em Verilog.
Codificação de estados:cinza vs. binário vs. One-Hot
As três codificações mais populares para os estados FSM são binárias, cinza e one-hot.
Codificação binária
A codificação binária é o método direto que você pode usar intuitivamente ao atribuir valores sequencialmente aos seus estados. Dessa forma, você está usando o mínimo de bits possível para codificar seus estados.
Um exemplo de codificação one-hot. Imagem de Steve Arar
Codificação cinza
O código cinza consiste em uma sequência em que apenas um bit muda entre um valor e o próximo. Além de usar também o número mínimo de bits, essa codificação minimiza o consumo de energia dinâmica se a sequência de estados for seguida de maneira ideal.
A roda de código Gray. Imagem de Marie Christiano
Codificação One-Hot
Finalmente, a codificação one-hot consiste em usar um bit que representa cada estado, de forma que em qualquer momento, um estado seja codificado como 1 no bit que representa o estado atual e 0 em todos os outros bits. Isso pode não parecer muito eficiente no início devido ao número de bits usados e ao número excessivo de estados inválidos. No entanto, a codificação one-hot é muito boa para simplificar a lógica de estímulo para os flip-flops porque não há necessidade de decodificar os estados. Os bits são os Estados.
Um exemplo de codificação one-hot. Imagem de Steve Arar
Para obter mais informações sobre codificação de estado, você pode querer verificar o artigo Codificando os estados de uma máquina de estados finitos em VHDL, de Steve Arar.
Qual codificação é a melhor?
Essa é uma pergunta difícil, principalmente porque cada codificação tem suas vantagens e desvantagens, então se resume a um problema de otimização que depende de um grande número de fatores.
- Se um sistema muito simples produz resultados muito semelhantes nas codificações, a codificação original é a melhor escolha.
- Se o FSM percorrer seus estados em um caminho (como um contador), o código Gray é uma escolha muito boa.
- Se o FSM tem um conjunto arbitrário de transições de estado ou espera-se que funcione em altas frequências, talvez a codificação one-hot seja o caminho a percorrer.
Agora, todas essas afirmações são apenas suposições fundamentadas, e encontrar a atribuição de estado ideal é um problema complicado. Por causa disso, meu conselho oficial é deixar o compilador decidir por você. Dito isso, decidi fazer uma comparação dos resultados para essas três codificações em três ferramentas de desenvolvimento diferentes e três máquinas de estado diferentes.
No próximo artigo, discutiremos os resultados de meus experimentos.
Integrado
- Comparando o aço das séries 300, 400 e 500
- Numeração octal e hexadecimal
- Adição binária
- Subtração binária
- Estruturas e classes em C ++
- Comparando Six Sigma e manufatura enxuta
- Qual tipo de codificação devo usar? Aplicativos FPGA de exemplo
- Código Morse e extorsão dupla:o estado do malware hoje
- Proteção contra incêndio de máquinas CNC e EDM:comparando suas opções
- Propriedades e graus do ferro cinzento explicados