Baixe o app para aproveitar ainda mais
Prévia do material em texto
CIRCUITOS DIGITAIS Eduardo Scheffer Saraiva Conversores de códigos Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Identificar códigos com e sem pesos posicionais. � Conceituar conversores de código. � Descrever o processo de conversão entre códigos. Introdução Para que exista a comunicação, um processo que envolve a troca de infor- mações entre dois ou mais interlocutores, é preciso haver a intenção de se comunicar, a construção da mensagem a ser comunicada, a codificação dessa mensagem e a sua transmissão. E isso é válido não somente para as comunicações humanas, mas também para as comunicações entre humanos e máquinas. Os sistemas digitais nos mais diversos setores de nossa sociedade trabalham com linguagens próprias, para melhorar suas capacidades de processamento de sinais e armazenamento de informações. Essas linguagens se baseiam no sistema binário, no qual as quantidades são representadas por valores de 0 e 1. Porém, apesar de todas as facilidades atreladas ao uso de sistemas digitais, ainda são de suma importância representações facilitadas, para que os usuários e operadores desses sistemas consigam entender a informação que está sendo entregue. Para resolver esse problema de comunicação, existem os conversores de códigos, ferramentas que tornam possível a “tradução” da linguagem em formato decimal para o formato binário, e vice-versa. Neste capítulo, você aprenderá a identificar codificações nas quais o peso posicional é essencial, assim como entenderá codificações em que não existe a necessidade desse artifício. Por fim, aprenderá os conceitos que envolvem os conversores de código e descreverá o processo de conversão entre diferentes codificações. 1 Códigos e pesos posicionais Circuitos digitais fazem uso de representações nas quais toda informação precisa ser expressa em apenas dois valores 0 e 1, conhecidas como represen- tações de base binária (DE; GHATAK, 2003; FLOYD, 2009). Assim como representações na base decimal, elas apresentam uma notação posicional, isto é, o dígito apresenta um “peso” que depende de sua posição em determinado número. Na base decimal, esses “pesos” serão dados pela potência de base 10 que o algarismo estará multiplicando, aumentando o valor da potência conforme avançamos no número da direita para a esquerda. Para representações de base binária, o bit mais à direita é chamado de bit menos significativo [do inglês, least significant bit (LSB)], e o bit mais à esquerda, bit mais significativo [most significant bit (MSB)] (FLOYD, 2009). Nesse tipo de representação, a posição dos bits tem pesos que variam multi- plicando o bit pela potência de base 2, em que a potência aumenta iniciando da direita para a esquerda. Para entendermos melhor esse conceito, considere o exemplo apresentado a seguir. Converta o número 127 na base decimal em seu equivalente em base binária. Para representarmos esse valor na base decimal, precisamos estabelecer uma relação de soma de produtos. O dígito à esquerda apresenta maior peso 1 72 O dígito à direita apresenta menor peso 1x102 2x101 7x100 127 O equivalente binário para esse número é: 01111111. 0 × 27 + 1 × 26 + 1 × 25 + 1 × 24 + 1 × 23 + 1 × 22 + 1 × 21 + 1 × 20 = 127 Conversores de códigos2 O código posicional mais facilmente encontrado em aplicações é o BCD (do inglês, binary coded decimal), que estabelece uma relação simples entre o valor decimal e um equivalente de base 2. Apesar de simples, tal codificação é largamente utilizada (Quadro 1). Dígito decimal Código BCD A3 A2 A1 A0 0 0 0 0 0 1 0 0 0 1 2 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 Quadro 1. Código BCD Outra codificação posicional normalmente encontrada é o código binário em excesso-3, ou XS3 (Quadro 2), muito comum, por exemplo, em alguns computadores mais antigos, bem como em caixas registradoras e calculadoras eletrônicas portáteis da década de 1970. Sua principal vantagem consiste no fato de que um número decimal pode ser complementado por 9 tão facilmente quanto um número binário pode ser complementado: apenas invertendo todos os bits. Além disso, as operações de soma e subtração são facilitadas por essa codificação (GHOSH; BHANJA, 2014). 3Conversores de códigos Decimal XS3 –3 0000 –2 0001 –1 0010 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100 10 1101 11 1110 12 1111 Quadro 2. Codificação excesso-3 Outra vantagem dessa codificação é que os códigos 0000 e 1111 não são usados para representar os valores entre 0 e 9; assim, uma falha na memória ou na linha de transmissão básica poderá resultar nesses códigos sem maiores problemas de codificação. Conversores de códigos4 Codificações com pesos posicionais são largamente utilizadas, porém alguns problemas podem não ser tão facilmente resolvidos por meio delas. Para isso, existem codificações que não fazem uso de pesos posicionais, apresentando propósitos diferentes, como o código Gray, um sistema de código binário inventado por Frank Gray. Esse código surgiu para corrigir problemas associados ao ruído gerado por sistemas que necessitavam de grandes potências, como os primeiros circuitos lógicos digitais realizados por meio de válvulas e contatores de alta potência: ao variarem, diversos bits simultaneamente ocasionavam problemas relacionados ao ruído. O uso desse código permitiu que qualquer mudança de estado do sistema variaria apenas um bit por vez. Apesar de os problemas de ruídos já não serem mais tão frequentes, ainda se utiliza o código Gray para determinados problemas (Quadro 3), como no caso de sensores de orientação para juntas rotativas, facilitando a obtenção do ângulo da junta. Decimal Código Gray A B C D 0 0 0 0 0 1 0 0 0 1 2 0 0 1 1 3 0 0 1 0 4 0 1 1 0 5 0 1 1 1 6 0 1 0 1 7 0 1 0 0 8 1 1 0 0 9 1 1 0 1 Quadro 3. Código Gray 5Conversores de códigos Outro exemplo muito utilizado de codificação sem peso condicional refere- -se à codificação para display de sete segmentos, um tipo de display aplicado em circuitos digitais por seu custo reduzido em relação a alternativas como o display de matriz de pontos. Ele utiliza a informação em base binária para criar uma combinação de saídas luminosas para representar uma informação alfanumérica; assim, a informação poderá ser compreendida de maneira facilitada pelo usuário que deseja saber sobre determinado estado do sistema. Os segmentos de um display de sete segmentos são definidos pelas letras de “a” a “g”, conforme apresentado no Quadro 4. Decimal Código display de 7-segmentos a b c d e f G 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 2 1 1 0 1 1 0 1 3 1 1 1 1 0 0 1 4 0 1 1 0 0 1 1 5 1 0 1 1 0 1 1 6 1 0 1 1 1 1 1 7 1 1 1 0 0 0 0 8 1 1 1 1 1 1 1 9 1 1 1 1 0 1 1 Quadro 4. Código display de 7-segmentos considerando sinal luminoso ativo com nível alto Conversores de códigos6 Além disso, existem aplicações que exigem garantias para a segurança da co- dificação. Para isso, podemos fazer uso do conceito de bit de paridade (Quadro 5), que funciona de maneira a detectar erros entre diferentes sinais. O princípio é simples: independentemente da forma de codificação (posicional ou não), podemos determinar que cada grupo de bits deve conter um número par ou ímpar de 1s. Pelo conceito de paridade, é possível criar lógicas que forcem o grupo de 1s a ser par ou ímpar em determinado conjunto de bits. A falha então será verificada caso haja um número incorreto de 1s dentro da lógica adotada. Paridade Par Paridade Ímpar BCD 0 1 0000 1 0 0001 1 0 0010 0 1 0011 1 0 0100 0 1 0101 0 1 0110 1 0 0111 1 0 1000 0 1 1001 Quadro 5. Codificação de paridade Como o bit de paridade não é posicional, pode ser alocado no início ou no final da codificação, o que dependerá da maneira como a codificação está sendo construída. Observe que o número total de 1s, incluindo o bit de pari- dade, é sempre par para a paridadepar e sempre ímpar para a paridade ímpar. 7Conversores de códigos Um conjunto de 8 bits com valor binário “10101111” deve ser codificado com a utilização de um código de paridade par. Qual será o valor binário depois da codificação? Para resolvermos esse problema, o bit de paridade deverá ser calculado e, depois, enviado junto ao conjunto de bits “10101111x”. Assim, pode-se perceber que exis- tem seis bits “1”, tornando esse valor par; assim, o bit de paridade recebe o valor “0”. Ao fim da codificação, teremos o valor do conjunto codificado com paridade “101011110”. Você deve se atentar ao fato de que há diversas outras formas de codificações de informação, como o código ASCII, muito utilizado para representar textos em com- putadores, e os códigos em base octal ou hexadecimal. Até agora, apresentamos diferentes tipos de codificações, tanto códigos que dependem de seu peso posicional quanto codificações não ponderadas, que solucionam diferentes problemas, cabendo ao profissional de engenharia elétrica identificar corretamente sua aplicação. A seguir, abordaremos mais sobre os conversores de códigos. 2 Conversores de códigos Um código é um conjunto de bits organizados em um padrão único usado para representar uma informação específica. Já um conversor de código converte uma informação codificada de uma maneira em outra forma de código, por exemplo, as conversões entre binário e outros códigos, como decimal codificado em binário (BCD) e código Gray. Conversores de códigos8 Em circuitos digitais, um codificador compreende o dispositivo responsável por fazer a conversão de um código em outro, como um número decimal de 0 a 9 em seu respectivo valor binário. Como vemos na Figura 1, um nível alto em uma das entradas representa o valor em decimal que queremos codificar — por meio do circuito codificador, é apresentado na saída o sinal em seu valor binário. Figura 1. Exemplo de codificador de código decimal para BCD. De maneira oposta ao codificador, quando queremos que um sinal codi- ficado volte para a representação original, podemos usar os decodificadores, circuitos que têm a característica de receber a informação codificada e a transformar em uma informação não codificada, como um decodificador que recebe uma entrada em código BCD e a transforma em seu equivalente em decimal. 9Conversores de códigos Considere que recebemos os valores de 1 a 6 em codificação binária que indicam, respectivamente, os lados de um dado. Para entendermos essa informação de maneira prática, devemos usar um decodificador para transformar a informação binária em uma representação conhecida. Para isso, estabelecemos a tabela verdade: Entrada codificada Saída 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 Assim, o decodificador terá como entrada o valor do lado do dado de maneira codificada e terá o nível alto ativo apenas na saída que corresponde à lateral correta do dado. Neste tópico, foram apresentados os principais tipos de conversores de códigos para circuitos digitais, os codificadores e os decodificadores, além de um exemplo de aplicação de uma entrada codificada e de sua relação com o decodificador, de modo que sua saída possa ser interpretada facilmente pelo usuário. A seguir, vamos conhecer métodos de conversão entre códigos e a sua aplicação em circuitos digitais. Conversores de códigos10 3 Processo de conversão entre códigos Um método de conversão entre códigos muito conhecido dos engenheiros e estudantes de engenharia é o mapa de Karnaugh, uma poderosa ferramenta que nos possibilita estabelecer as relações entre diferentes linguagens por meio de sua tabela verdade. Trata-se de um método de simplificação de expressões de álgebra booleana: por meio do reconhecimento de padrões nos mapas, podemos evitar cálculos extensivos para a obtenção de uma representação simplificada do circuito. Para implementar o mapa de Karnaugh, é preciso transferir os valores desejados da tabela verdade para uma grade bidimensional de modo que as células dessa grade sejam ordenadas pelo código Gray. Assim, cada célula representará uma combinação das entradas, em que o valor a preencher a célula corresponde ao valor da saída atribuído a essa combinação de entradas. Identificam-se grupos ótimos de 1s ou 0s, termos que serão utilizados para escrever uma expressão booleana mínima representando a lógica necessária. Ao implementarmos esse método, estabelecemos como entrada da tabela verdade os valores em determinada linguagem, enquanto a saída da tabela será o valor equivalente para a linguagem na qual desejamos a conversão. Se queremos converter um código Gray em um código XS3, precisamos construir a seguinte tabela verdade, considerando as demais combinações de entrada como valores que não nos interessam (don’t care): Decimal Código Gray XS3 E3 E2 E1 E0 S3 S2 S1 S0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 0 0 2 0 0 1 1 0 1 0 1 3 0 0 1 0 0 1 1 0 4 0 1 1 0 0 1 1 1 11Conversores de códigos Decimal Código Gray XS3 E3 E2 E1 E0 S3 S2 S1 S0 5 0 1 1 1 1 0 0 0 6 0 1 0 1 1 0 0 1 7 0 1 0 0 1 0 1 0 8 1 1 0 0 1 0 1 1 9 1 1 0 1 1 1 0 0 Para realizarmos a conversão entre os códigos, devemos estabelecer uma relação entre as saídas e as entradas com o auxílio do mapa de Karnaugh, de modo que cada uma das saídas terá um mapa relacionado à combinação de entradas: Para S3, teremos o seguinte mapa: onde as entradas que apresentam valor alto na saída são agrupadas em conjuntos de 2n. Cada conjunto representa uma parcela da equação responsável pela conver- são. Uma vez que todos os bits de interesse foram agrupados, obtém-se a equação para a saída. Essa operação deverá ser repetida para todas as saídas do sistema que desejamos converter. Porém, existem métodos de conversão entre determinados códigos que não necessitam do mapa de Karnaugh, que podem ser vantajosos, uma vez que não necessitam da tabela verdade que descreve o comportamento da codificação. Além disso, há situações em que desejamos saber a informação que está sendo transmitida de apenas um número, quando ferramentas de conversão direta se tornam muito úteis. Conversores de códigos12 Um método de conversão direta é possível quando desejamos, por exemplo, converter o código BCD em seu equivalente em binário. Para isso, devemos estabelecer algumas premissas: cada dígito de determinado peso no código BCD deverá ser representado por um conjunto de 4 bits, e os valores em nível alto da representação binária do código BCD precisarão ser convertidos em seu valor binário considerando seu peso. A adição dos valores binários de todos os elementos que apresentam nível alto resultará no equivalente binário do valor BCD. Converta o número BCD 0101 0111 (decimal 57) em seu equivalente binário. Os 4 bits mais à esquerda representam 5 em binário, porém apresentam peso maior que o conjunto da direita. O conjunto de 4 bits à direita representa 7 em base binária. Desse modo, o grupo à esquerda apresenta um peso de 10, enquanto da direita tem peso unitário. Assim, somando as representações binárias para cada um dos valores que aparecem em nível alto na representação BCD, obtemos o equivalente em binário para o número 57, dado por: 0011 1001. Outro método de codificação direta corresponde à conversão de binário em código Gray, para o qual devemos somar cada par de bits da esquerda para a direita descartando os carries de modo a obter o próximo bit na representação Gray. Para convertermos de código Gray para binário, fazemos uma operação semelhante à de conversão de binário em Gray — somamos o bit do código binário ao próximo bit do código Gray e descartamos os carries. Para enten- dermos melhor um exemplo de conversão é apresentado a seguir. 13Conversores de códigos Converta o número binário 111011 em sua representação em código Gray. Para executarmos essa conversão, é necessário somarmos os pares de bits da repre- sentação bináriada esquerda para a direita, o que gerará o bit da representação em Gray. Para casos em que a soma apresente um carry, este será descartado. Para retornarmos à representação original, devemos fazer uma pequena modifi- cação no método. Em vez de somarmos os pares de bits da representação em Gray, somaremos o bit em binário com o próximo bit da representação Gray, novamente descartando os carries Neste capítulo, apresentamos os conversores de códigos, importante ferramenta que propiciou a comunicação entre máquinas da maneira como conhecemos hoje. Ao longo do capítulo, abordamos diferentes tipos de códigos e métodos para implementá-los em circuitos digitais. E, por fim, mostramos exemplos didáticos do uso desses códigos em aplicações práticas. DE, D.; GHATAK, K. P. Basic electronics. Delhi: Pearson, 2003. FLOYD, T. Sistemas digitais: fundamentos e aplicações. 9. ed. Porto Alegre: Bookman, 2009. GHOSH, D.; BHANJA, N. Design of digital arithmetic circuit using excess-3 code and 9's complement method. IOSR-JECE, Gurugram, v. 9, p. 15-18, 2014. Conversores de códigos14 Leituras recomendadas DORAN, R. W. The Gray code. J. UCS, [s. l.], v. 13, n. 11, p. 1573-1597, 2007. HOLDER, M. E. A modified Karnaugh map technique. IEEE Transactions on Education, New York, v. 48, n. 1, p. 206-207, 2005. YOU, Y.; JEON, J. Design of extendable BCD-EXCESS 3 code convertor using quantum- -dot cellular automata. Journal of Advanced Navigation Technology, Seul, v. 20, n. 1, p. 65-71, 2016. 15Conversores de códigos
Compartilhar