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 >>
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.

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

Séries



Outros da Série

Menu

EVENTO ONLINE

Simplificando seus projetos de Internet das coisas com o iMCP HT32SX Sigfox

DATA: 18/05 às 15:00h