Tutorial de Verilog: Conversor de Código Binário para Código Gray

Código Gray

Neste post dou sequência à série de artigos sobre sistemas digitais implementados em HDL, em especial Verilog. Vou abordar neste post o Código Gray, uma codificação inventada há muito tempo pelo físico americano Frank Gray, que trabalhou no Bell Labs, empresa famosa na história da Eletrônica, conforme pode conferir no post sobre a história do transistor por Francesco Sacco. Frank Gray inventou o código Gray em 1953, e o equipamento que fazia uso desse tipo de codificação que foi patenteada no mesmo ano. Podemos acessar o documento da patente nesse link e também conhecer mais sobre o código Gray e como a máquina foi desenvolvida. 

Abaixo está explicada a ideia de Frank, em uma imagem retirada de sua patente. Para que se possa entender a ideia de Frank é necessário lembrar que ele patenteou um sistema mecânico e que o custo mecânico de uso de uma máquina com o código binário acabava sendo mais custoso para transições pequenas de sinais digitais transmitidos e recebidos por esses sistemas mecânicos. A ideia então com o Código Gray era fazer com que transições entre números adjacentes apenas impactassem apenas um bit.

Código Gray em Verilog: Patente de Frank Gray que representa a conversão de Código Binário para Código Gray.
Figura 1: Patente de Frank Gray que representa a conversão de Código Binário para Código Gray.

Abaixo está disposta uma tabela que mostra um conversor de codificação binária para Código Gray, para 4-bits. Veja que nas transições entre números adjacentes, apenas uma modificação é feita. Por exemplo, o número 2, decimal, é representado como 11 e não como 10 no código Gray. Isso tem um porque. Se o número 2 fosse 10, ele modificaria dois bits, pois o número anterior era 01, mudando de 1 para zero no bit 1 e de zero para 1 no bit 0.

gray-1

Representação do Circuito Conversor de Código Binário 4-bits para Código Gray com portas lógicas simples

Para representar o circuito conversor de binário para Gray, basta utilizarmos portas XOR em bits adjacentes. Abaixo está disposto o circuito que é capaz de converter de binário para Gray.

Código Gray em Verilog
Figura 2: Representação do Circuito Conversor de Código Binário 4-bits para Gray

Representação do Conversor de Código Binário 4-bits para Código Gray em Verilog:

Comentários sobre o código

Implementei o código com formato comportamental (behavioral), que diz que o código representa as ações que ele deseja tomar. No bloco de always usei o Asterisco, que indica que na mudança de qualquer sinal de entrada, o bloco always executaria. O circuito foi desenvolvido com operações ^, mas poderia ser escrito com portas logicas xor. 

Testbench para o Conversor de Código Binário 4-bits para Código Gray:

Forma de Onda resultante do teste:

A forma de onda resultante foi de acordo com o esperado, conforme a primeira imagem, que ilustra a conversão entre código Binário para Código Gray.

Código Gray em Verilog: Conversor de Código Binário 4-bits para Gray - Forma de Onda resultante
Figura 3: Conversor de Código Binário 4-bits para Gray – Forma de Onda resultante
Código Gray em Verilog: Conversor de Código Binário 4-bits para Gray - Forma de Onda resultante
Figura 4: Conversor de Código Binário 4-bits para Gray – Forma de Onda resultante

Caso queira reproduzir o teste feito acima, faça Download do Projeto para o Quartus da Altera e aperte o play:

download_proteus_arduino_lcd

Representação do Circuito Conversor de Código Binário 8-bits para Código Gray com portas lógicas simples:

Da mesma forma que fizemos com o circuito anterior, basta acrescentar mais quatro entradas e saídas e continuar com as lógicas XOR até que se tenha o circuito abaixo:

Código Gray em Verilog
Figura 5: Representação do Circuito Conversor de Código Binário 8-bits para Gray

 

Representação do Conversor de Código Binário 8-bits para Código Gray em Verilog:

Comentários sobre o código

Implementei o código com formato comportamental (behavioral), que diz que o código representa as ações que ele deseja tomar. No bloco de always usei o Asterisco, que indica que na mudança de qualquer sinal de entrada, o bloco always executaria. O circuito foi desenvolvido com operações ^, mas poderia ser escrito com portas logicas XOR.

Testbench para o Conversor de Código Binário 8-bits para Código Gray:

Forma de Onda resultante do teste:

A forma de onda resultante foi de acordo com o esperado. A inspeção do resultados foi totalmente visual. Isso é impraticável para grandes projetos. Vou explicar nos próximos posts como utilizar um arquivo com diversos sinais de entrada para que se possa aplicar esse vetor de testes ao circuito e se possa obter uma saída também comparável a um arquivo de entrada que possui esses resultados. Esse arquivo pode ser feito com qualquer software de alto nível e a vida do desenvolvedor muito mais prática.

Código Gray em Verilog
Figura 6: Conversor de Código Binário 8-bits para Gray – Forma de Onda resultante

Caso queira reproduzir o teste feito acima, faça Download do Projeto para o Quartus da Altera e aperte o play:

download_proteus_arduino_lcd

Baixe também a tabela com os resultados dessa conversão. Ela está disponível na planilha abaixo.

download_proteus_arduino_lcd

Outros artigos da série

<< Tutorial de Verilog: Somador Completo (full adder)Tutorial de Verilog: Conversor de Código Gray para Código Binário >>
Website | Veja + conteúdo

Sou formado em Engenharia Elétrica na USP Sao Carlos, com mestrado em Engenharia Elétrica no Rochester Institute of Technology pelo CsF. Tenho 17 anos de experiência em projetos de circuitos eletrônicos. Escrevo regularmente para o Embarcados, adoro eventos sobre tecnologia, onde posso rever amigos e conhecer pessoas do ramo.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu