sábado, 10 de abril de 2021

Circuitos lógicos (utilizando exercícios do livro de Ronald J. Tocci)

Olá a todos! Espero que estejam tendo um bom dia.

Como todos sabemos, este é um blog sobre circuitos lógicos. Porém, algumas pessoas podem se questionar o motivo de, até o presente momento, não termos montado nenhum circuito lógico propriamente dito. Já tivemos posts sobre as portas lógicas (que são a base dos circuitos lógicos), sobre codificadores, softwares para simulação e até sobre conversão numérica, mas não vimos como um circuito lógico realmente funciona. Por este motivo, hoje faremos a simulação de alguns circuitos básicos e iremos entender seu funcionamento. Antes de iniciar, é interessante recapitular alguns conceitos vistos em posts passados, pois estes conceitos são bastante importantes para a compreensão de algumas aplicações dos circuitos lógicos. Para isso, será usado como base o livro "Sistemas Digitais" (11ª edição) de Ronald J. Tocci.

Primeiramente, vamos relembrar como são feitas conversões de unidades. Sempre que temos um número binário, por exemplo, podemos convertê-lo para decimal, assim como podemos converter um número decimal em binário. Como já existe um post no blog detalhando essas conversões, irei apenas comentar sobre as conversões e mostrar alguns exemplos.

No exercício 2-1 a) do livro do Tocci, encontramos nosso primeiro desafio: Converter o número 10110 em decimal. Quando nos lembramos da forma utilizada para converter números binários em decimal, podemos perceber que esta é uma tarefa bastante simples. Basta lembrar que o bit menos significante (mais a direita) vale 2 (base do número binário) elevado a 0 (posição do bit) e o bit mais significante (mais a esquerda) vale 2 elevado a 4 (pois este é um número de 5 bits e, considerando que a primeira posição é o 0, a última posição fica sendo o 4).




Agora, basta multiplicar o número correspondente a potência pelo número binário:


Agora, somamos os resultados:



E pronto! O número 10110 corresponde ao número 22!

Agora, devemos nos lembrar que o contrário também é possível. Podemos converter número decimais em números binários. Para este exemplo, irei utilizar o exercício 2-1 b) do livro do Tocci, onde devemos converter o número 13 em binário. Observe que agora precisaremos fazer várias divisões sucessivas por 2 e observar sempre o valor do resto para chegar ao número binário correspondente. Lembrando que, caso haja alguma dúvida sobre esta conversão, o primeiro post deste blog explica com mais detalhes (e com um vídeo) sobre o processo de conversão.

Para começar, vamos dividir o número 13 por 2. Teremos como resultado o número 6 e resto 1:


Depois, faremos a divisão por 2 até encontrarmos o resultado 1 ou 0:


Pronto! Agora só precisamos pegar o último resultado (que no caso é 1), considerar ele o bit mais significativo e colocar os restos como bits menos significativos (respeitando a ordem em que eles aparecem):



Com todas essas informações, já podemos fazer algo um pouco mais diferenciado. Em um dos posts anteriores deste blog, foram mostrados alguns códigos diferenciados. Um deles foi o BCD, que representa números decimais de 0 a 9 utilizando grupos de 4 bits. Este código é muito utilizado em displays de 7 segmentos. Lendo o livro do Tocci, me deparei com um exercício muito interessante e que tem bastante relação com a postagem de hoje. O exercício 2-19 pede para que seja feita a conversão do número 47 para o código BCD. A primeira vista, este pode parecer um exercício muito complicado, visto que até agora foram feitas apenas conversões de binário para decimal e de decimal para binário. Porém, precisamos nos lembrar que o código BCD nada mais é do que a representação dos números decimais usando 4 bits, ou seja, esta conversão nada mais é do que uma conversão de decimal para binário. Porém, existe outro problema: o código BCD vai apenas de 0 a 9 e 47 é um número bem maior do que 9. Novamente, precisamos nos lembrar de como funciona o código BCD. Neste tipo de código, vamos representar cada algarismo como um número binário de 4 bits. Ou seja, vamos converter o 7 em um binário de 4 bits e depois o 4. A resolução é a seguinte:



Sendo assim, o número ficaria: 0100 0111. Lembrando que sempre precisamos representar os números em BCD com 4 bits, ou seja, precisamos adicionar zeros a esquerda caso o número tenha menos de 4 bits. Este exercício é interessante pois existem circuitos lógicos responsáveis por transformar números binários em BCD para a utilização em displays de 7 segmentos, que por sua vez mostram os números em decimal. Neste exercício vimos, matematicamente, como é feito o processo contrário e ao final deste post, deixarei um link para um vídeo (infelizmente em inglês) onde é possível ver com mais detalhes o funcionamento de um circuito deste tipo.

Agora, vamos finalmente para os circuitos lógicos. Os circuitos lógicos são circuitos que fazem uso de portas lógicas para executar certas tarefas. Para desenvolver circuitos lógicos é utilizada a álgebra de Boole. Na álgebra de Boole, as portas AND funcionam como uma multiplicação (caso um dos sinais recebidos seja 0, o resultado da operação é 0) e as portas OR funcionam como uma soma (caso um dos sinais seja 1, o resultado seria 1). Esta ferramenta é muito importante para facilitar a construção de circuitos lógicos. Para entender melhor este assunto, vamos começar com circuitos lógicos montados e iremos encontrar a expressão booleana correspondente ao circuito. Depois disso, iremos partir da expressão booleana e com isso teremos as informações necessárias para montar o circuito. Abaixo, podemos ver um exemplo utilizando o exercício 3-12 do livro do Tocci.


Circuito feito usando o programa Proteus

Devemos nos lembrar que as portas AND são consideradas multiplicações a as portas OR são consideradas somas. Sempre que tivermos um sinal invertido (com a porta NOT, por exemplo), o sinal será representado com uma barra em cima da letra correspondente. A primeira entrada deste circuito será chamada de A, a segunda de B e a terceira de C. Sendo assim, a expressão booleana para este circuito seria:


Com isso, se torna muito mais fácil analisar qual seria a saída se A, B ou C fossem 1 ou 0. Bastaria substituir na equação.

Agora, iremos fazer o oposto. O exercício 3-16 a) do livro do Tocci nos dá a seguinte expressão: 

A partir desta expressão, precisamos encontrar o circuito que a geraria. Para isso, inicialmente, vamos perceber que a expressão inteira está barrada (com a barra em cima, representando que ela está inteira invertida. Isso significa que temos que ter uma porta inversora na saída do circuito. Podemos perceber também que a expressão é uma multiplicação entre AB e (C+D). Sendo assim, sabemos que devemos usar uma porta AND no fim do circuito. É importante lembrar que existe uma porta lógica chamada NAND, que nada mais é do que uma porta AND com a saída barrada (invertida). Esta porta será perfeita neste caso, visto que precisamos de uma porta AND com a saída barrada:


Agora, vamos pensar no resto do circuito. Temos a soma C+D. Somas são feitas nas portas OR:


É importante notar que a saída desta porta OR não é barrada. A expressão final completa (AB*(C+D)) é barrada, porém as partes individuas neste caso não são. Para a soma C+D ser barrada, seria necessário que a expressão fosse a seguinte:
Dando continuidade, agora precisamos apenas multiplicar A e B e o resultado da operação feita na porta OR (C+D). Sendo assim, o circuito final ficaria assim:



Então já pudemos ver como é feita uma expressão booleana usando um circuito pronto e como é feito um circuito usando uma expressão booleana pronta. Porém, no segundo exemplo, de onde veio a expressão booleana? No primeiro exercício, ela veio do circuito, mas no segundo, não havia nenhum circuito para buscar a expressão. É aí que entra a tabela verdade. Em um post anterior deste blog, onde estudamos sobre portas lógicas, pudemos ver um pouco sobre as tabelas verdade, onde colocamos os valores de entrada em uma coluna e os valores desejados de saída em outra. A tabela verdade também é muito utilizada para desenvolvimento de circuitos lógicos. Para entender melhor, vamos usar mais um exemplo do livro do Tocci :



Para facilitar nosso trabalho, podemos fazer uma tabela verdade:

    



Podemos notar que temos apenas um ponto onde queremos que a saída seja 1. Para representar este ponto algebricamente, vamos representar as letras que irão assumir 1 como variáveis comuns (A e C) e vamos representar a letra B (que deverá ser 0) como B barrado:

   



Como podemos ver, apenas uma situação satisfaz a nossa saída, e ela é A*B'*C (B' sendo o B barrado). Caso mais de uma combinação fornecesse a saída desejada, deveríamos somar todas as combinações possíveis (usaríamos portas OR no circuito).

Usando a expressão que conseguimos com a tabela verdade, chegamos ao seguinte circuito:


Por hoje é isso. Como prometido, segue abaixo o vídeo do display de 7 segmentos, onde é desenvolvido um circuito que converte códigos binários em um código hexadecimal que é mostrado no display, para representar todos os 4 bits do código binário (diferente dos código BCD, que vai apenas de 0 a 9). Com este vídeo, é possível ver como podem ser desenvolvidos circuitos muito complexos utilizando apenas portas lógicas:

"Designing a 7-segment hex decoder": 


Enfim, este post foi bastante longo, mas este é um assunto bastante complexo e que exige um certo tempo para ser explicado em detalhes. Como sempre, espero que este post tenha sido útil. Até a próxima!

Nenhum comentário:

Postar um comentário

Projeto utilizando lógica sequencial e combinacional: Garra automática

Olá a todos! A postagem de hoje aqui no blog será um pouco diferenciada. Hoje iremos utilizar todos os nossos aprendizados para desenvolver ...