Escolhendo a Codificação Certa para FPGA: Estudo Prático com Jogo da Vida de Conway
Siga três experimentos que ilustram como escolher a codificação mais adequada para um design FPGA.
Ao projetar lógica FPGA, a ferramenta de síntese tipicamente seleciona a codificação; geralmente é melhor confiar em sua decisão. No entanto, entender as nuances de representações binária, Gray e one-hot pode ajudar a antecipar quando o compilador pode favorecer uma sobre as outras.
Este artigo percorre um experimento prático que usa o Jogo da Vida de Conway como testbench, destacando os trade-offs que emergem quando cada codificação é aplicada a um grande array de máquinas de estado finito.
Nesta série cobrimos construção de FSM em Verilog, impacto de estados iniciais e memória na codificação, e uma comparação de alto nível de esquemas binário, one-hot e Gray.
O Sistema Sob Teste
Para amplificar diferenças de hardware, instanciei uma máquina de estado dezenas de vezes através de uma grade 23×23, permitindo comparação direta de codificações binária, Gray e one-hot.
O Jogo da Vida de Conway é um autômato celular clássico que modela nascimento, sobrevivência e morte de células em uma rede 2D retangular. Cada célula segue três regras simples em cada ciclo:
- Células vivas com dois ou três vizinhos vivos sobrevivem.
- Células mortas com três vizinhos vivos tornam-se vivas.
- Todas as outras células morrem ou permanecem mortas.
Estas regras dão origem a uma rica variedade de padrões emergentes, e fornecem uma carga de trabalho limpa e bem entendida para avaliar estratégias de codificação.
Abaixo está um GIF da Glider Gun de Bill Gosper, um padrão popular no Jogo da Vida.

Uma variação do Jogo da Vida de Conway, conhecida como Glider Gun de Bill Gosper. Gif criado por Lucas Vieira [CC BY-SA 3.0]
Código Verilog
A lógica da célula é modelada como um FSM de 8 estados. Embora o cálculo por célula do Jogo da Vida complete em um único ciclo, o design de 8 estados cria diferença notável entre codificações. O seguinte módulo Verilog demonstra a codificação binária original.
`define STATE_0 3'b000
`define STATE_1 3'b001
`define STATE_2 3'b010
`define STATE_3 3'b011
`define STATE_4 3'b100
`define STATE_5 3'b101
`define STATE_6 3'b110
`define STATE_7 3'b111
module LifeCell( input clk, input nrst, input seed, input [7:0] neighbors, output reg alive); reg [2:0] state; always @ (posedge clk) if (nrst == 0) state <= `STATE_0; else case(state) `STATE_0: begin // ... state <= `STATE_1; end `STATE_1: begin // ... state <= `STATE_2; end // ... `STATE_7: begin // ... state <= `STATE_1; end endcase endmodule
Se você gostaria de um mergulho mais profundo no código, o projeto completo está disponível no GitHub.
Implementações de Codificação FPGA
O design foi sintetizado em uma grade de 23×23 células, resultando em 27 implementações distintas: três variantes de FSM, cada uma compilada com codificações binária, Gray e one-hot, através de três FPGAs alvo.
FSM #1: Modelo Original
Este FSM executa um estado inicial uma vez, então cicla pelos sete estados restantes — uma sequência que sugeria que codificação Gray poderia ser vantajosa.

FSM #2: Uma Sequência
Atuando como um simples contador de 3 bits, este FSM reforçou ainda mais minha expectativa de que codificação Gray dominaria.

FSM #3: Um Emaranhado Arbitrário
Esta variante compartilha o caminho crítico do FSM #1 mas toma uma rota não-linear quando a contagem de vizinhos excede três. Codificação one-hot parecia o ajuste natural para tais transições irregulares.

Arquiteturas Alvo
As implementações foram construídas com toolchains dos fornecedores para os seguintes dispositivos:
- Xilinx Vivado Suite em FPGA Artix-7
- Intel Quartus Prime em FPGA Cyclone-V
- Lattice Diamond em FPGA LatticeXP2
Comparando os Resultados
Benchmarking de designs FPGA é inerentemente orientado a métricas. Escolhi quatro indicadores-chave — uso de recursos lógicos, contagem de registradores, frequência máxima estimada e potência on-chip — e atribui pesos a cada um. O melhor desempenho em cada métrica ganhou +1 (ou +2 para métricas ponderadas), o pior recebeu -1 (ou -2), e o intermediário recebeu 0.
- Unidades Lógicas: LUTs (Xilinx/Lattice) ou ALMs (Intel). Peso 1.
- Registradores: Peso 1.
- Frequência Máxima: Peso 2.
- Potência On-Chip: Peso 2.
As pontuações cumulativas para cada uma das 27 implementações são mostradas abaixo.

Tabela de resultados para todas as 27 implementações. Verde destaca a melhor codificação, vermelho a pior, e amarelo a mediana (sem empates).
Em todos os casos, codificação one-hot aparece nas duas últimas linhas, com apenas duas instâncias de paridade com outros esquemas. Em contraste, codificação Gray consistentemente emerge como top performer, especialmente quando frequência e potência são ponderadas mais pesadamente.
Para destacar os vencedores, a tabela abaixo isola a codificação líder para cada variante.

O Veredito
Embora os dados inclinem para codificação Gray para esta carga de trabalho particular do Jogo-da-Vida, o resultado depende de quais métricas você prioriza. Se você valoriza uso de recursos sobre desempenho, um ranking diferente pode surgir. Meu objetivo aqui não é prescrever uma regra única para todos, mas ilustrar como evidência empírica pode guiar escolhas de codificação.
Sinta-se à vontade para explorar o código fonte, as 27 implementações sintetizadas, ou a simulação ao vivo do Jogo-da-Vida no repositório GitHub do projeto.
Integrado
- Swissbit Lança U-50n Nano USB 3.1 Flash Drive — Armazenamento Rugged High-Performance para Industrial e IoT
- AAEON COM‑CFHB6: Módulo Type‑6 Compacto de Alto Desempenho com CPUs Intel, 48 GB DDR4 ECC e 24 Lanes PCIe para Edge, AIOT e Aplicações Industriais
- Escolhendo o Controlador Certo: CLP, CAP, SCD ou IPC Explicados
- Quando Usar Teste de Placa Nua para Desenvolvimento Confiável de PCB
- Proteja Seus Motores: Os Benefícios Essenciais dos Reatores de Linha
- Guia Prático: Quando Utilizar um Guindaste Cabeça-de-Martelo
- Indústrias que Aproveitam o Kevlar: Da Aeroespacial à Proteção Pessoal
- Maximize a Eficiência com Soluções de Especialista Remoto na Indústria 4.0
- Escolhendo a Liga de Alumínio Certa para Seu Projeto
- Titânio vs. Alumínio: Escolhendo o Melhor Metal Não-Ferroso para Resistência e Peso