Pré-requisito - Sistema Numérico e conversões de base

O sistema de código cinza é um sistema numérico binário no qual cada par sucessivo de números difere em apenas um bit. É usado em aplicações nas quais a sequência normal de números binários gerada pelo hardware pode produzir um erro ou ambigüidade durante a transição de um número para o próximo.
Por exemplo, os estados de um sistema podem mudar de 3 (011) para 4 (100) como 011 - 001 - 101 - 100. Portanto, há uma grande chance de um estado errado ser lido enquanto o sistema muda do estado inicial para o estado final.
Isso pode ter consequências graves para a máquina que usa as informações. O código Gray elimina esse problema, pois apenas um bit muda seu valor durante qualquer transição entre dois números.

Convertendo Binário em Código Gray -

Sejam b_0, \: b_1, \: b_2 \:, \: e \: b_3os bits que representam os números binários, onde b_0é o LSB e b_3é o MSB, e
Sejam g_0, \: g_1, \: g_2 \:, \: e \: g_3os bits que representam o código cinza dos números binários, onde g_0é o LSB e g_3é o MSB.
A tabela verdade para a conversão é-
\ begin {tabular} {|| c | c | c | c || c | c | c | c ||} \ hline \ multicolumn {4} {|| c ||} {Binário} & \ multicolumn {4} {| c ||} {Código cinza} \\ \ hline b_3 & b_2 & b_1 & b_0 & g_3 & g_2 & g_1 & g_0 \\ \ hline \ hline 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \ hline 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 \\ \ hline 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 1 \\ \ hline 0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 \\ \ hline \ hline 0 & 1 & 0 & 0 & 0 & 1 & 1 & 0 \\ \ hline 0 & 1 & 0 & 1 & 0 & 1 & 1 & 1 \\ \ hline 0 & 1 & 1 & 0 & 0 & 1 & 0 & 1 \\ \ hline 0 & 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ \ hline \ hline 1 & 0 & 0 & 0 & 1 & 1 e 0 &0 \\ \ hline 1 & 0 & 0 & 1 & 1 & 0 & 1 \\ \ hline 1 & 0 & 1 & 0 & 1 & 1 & 1 & 1 \\ \ hline 1 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\ \ hline \ hline 1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \\ \ hline 1 & 1 & 0 & 1 & 1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ \ hline \ hline \ end {tabular}1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ \ hline \ hline \ end {tabular}1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ \ hline \ hline \ end {tabular}
Para encontrar o circuito digital correspondente, usaremos a técnica K-Map para cada um dos bits de código cinza como saída com todos os bits binários como entrada.
K-map para g_0-

K-map para g_1-

K-map para g_2-

K-map para g_3-

Expressões booleanas minimizadas correspondentes para bits de código cinza -
 g_0 = b_0b_1 ^ \ prime + b_1b_0 ^ \ prime = b_0 \ oplus b_1 \\ g_1 = b_2b_1 ^ \ prime + b_1b_2 ^ \ prime = b_1 \ oplus b_2 \\ g_2 = b_2b_3 ^ \ prime + b_3b_2 ^ \ prime = b_2 \ oplus b_3 \\ g_3 = b_3
O circuito digital correspondente -

Convertendo Gray Code em Binário -

A conversão do código cinza em binário pode ser feita de maneira semelhante.
Sejam b_0, \: b_1, \: b_2 \:, \: e \: b_3os bits que representam os números binários, onde b_0é o LSB e b_3é o MSB, e
Sejam g_0, \: g_1, \: g_2 \:, \: e \: g_3os bits que representam o código cinza dos números binários, onde g_0é o LSB e g_3é o MSB.
Tabela da verdade
\ begin {tabular} {|| c | c | c | c || c | c | c | c ||} \ hline \ multicolumn {4} {|| c ||} {Gray Code} & \ multicolumn {4 } {| c ||} {Binário} \\ \ hline g_3 & g_2 & g_1 & g_0 & b_3 & b_2 & b_1 & b_0 \\ \ hline \ hline 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \ hline 0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 \\ \ hline 0 & 0 & 1 & 0 & 0 & 0 & 0 & 1 & 1 \\ \ hline 0 & 0 & 1 & 1 & 0 & 0 & 1 & 0 \\ \ hline \ hline 0 & 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ \ hline 0 & 1 & 0 & 1 & 0 & 1 & 1 & 0 \\ \ hline 0 & 1 & 1 & 0 & 0 & 1 & 0 & 0 \\ \ hline 0 & 1 & 1 & 1 & 0 & 1 & 0 & 1 \\ \ hline \ hline 1 & 0 & 0 & 1 & 1 e 1 &1 \\ \ hline 1 & 0 & 0 & 1 & 1 & 1 & 0 \\ \ hline 1 & 0 & 1 & 0 & 1 & 1 & 0 & 0 \\ \ hline 1 & 0 & 1 & 1 & 1 & 1 & 0 & 1 \\ \ hline \ hline 1 & 1 & 0 & 0 & 1 & 0 & 0 & 0 \\ \ hline 1 & 1 & 0 & 1 & 1 & 0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 1 & 0 \\ \ hline \ hline \ end {tabular}0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 1 & 0 \\ \ hline \ hline \ end {tabular}0 & 0 & 1 \\ \ hline 1 & 1 & 1 & 0 & 1 & 0 & 1 & 1 \\ \ hline 1 & 1 & 1 & 1 & 1 & 0 & 1 & 0 \\ \ hline \ hline \ end {tabular}

Usando K-map para recuperar os bits binários do código cinza -
K-map para b_0-

K-map para b_1-

K-map para b_2-

K-map para b_3-

Expressões booleanas correspondentes -

    \ begin {align *} b_0 & = g_3 ^ \ prime g_2 ^ \ prime g_1 ^ \ prime g_0 + g_3 ^ \ prime g_2 ^ \ prime g_1g_0 ^ \ prime + g_3 ^ \ prime g_2g_1 ^ \ prime g_0 ^ \ prime + g_3 ^ \ prime g_2g_1g_0 + g_3g_2 ^ \ prime g_1 ^ \ prime g_0 ^ \ prime + g_3g_2 ^ \ prime g_1g_0 \\ & \: \: \: + g_3g_2g_1 ^ \ prime g_0 + g_3g_2g_1g_0 ^ \ prime \\ & = g_3 ^ \ prime g_2 ^ \ prime (g_1 ^ \ prime g_0 + g_1g_0 ^ \ prime) + g_3 ^ \ prime g_2 (g_1 ^ \ prime g_0 ^ \ prime + g_1g_0) + g_3g_2 ^ \ prime (g_1 ^ \ prime g_0 ^ \ prime + g_1g_0) \\ & \: \: \: + g_3g_2 (g_1 ^ \ prime g_0 + g_1g_0 ^ \ prime) \\ & = g_3 ^ \ prime g_2 ^ \ prime (g_0 \ oplus g_1) + g_3 ^ \ prime g_2 ( g_0 \ odot g_1) + g_3g_2 ^ \ prime (g_0 \ odot g_1) + g_3g_2 (g_0 \ oplus g_1) \\ & = (g_0 \ oplus g_1) (g_2 \ odot g_3) + (g_0 \ odot g_1) (g_2 \ oplus g_3) \\ & = g_3 \ oplus g_2 \ oplus g_1 \ oplus g_0 \\ b_1 &= g_3 ^ \ prime g_2 ^ \ prime g_1 + g_3 ^ \ prime g_2g_1 ^ \ prime + g_3g_2g_1 + g_3g_2 ^ \ prime g_1 ^ \ prime \\ & = g_3 ^ \ prime (g_2 ^ \ prime g_1 + g_2g_1 ^ \ prime) + g_3 (g_2g_1 + g_2 ^ \ prime g_1 ^ \ prime) \\ & = g_3 ^ \ prime (g_2 \ oplus g_1) + g_3 (g_2 \ odot g_1) \\ & = g_3 \ oplus g_2 \ oplus g_1 \\ b_2 & = g_3 ^ \ prime g_2 + g_3g_2 ^ \ prime \\ & = g_3 \ oplus g_2 \\ b_3 & = g_3 \ end {align *}

Circuito digital correspondente -

Referências -

Design Digital, 5ª edição de Morris Mano e Michael Ciletti

Este artigo é uma contribuição de Chirag Manwani . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.

Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

Aprenda todos os conceitos do GATE CS com aulas gratuitas ao vivo em nosso canal do youtube.