Seja mais um amigo Cadastre seu RSS Siga-me no twitter Entre em contato
Lição 5 - COMBINANDO FUNÇÕES LÓGICAS Imprimir E-mail
Escrito por Newton C. Braga   


Nas duas lições anteriores estu­damos as famílias lógicas CMOS e TTL, analisando suas características elétricas principais e a maneira como os componentes são fabricados atra­vés de alguns circuitos típicos.
Nesta lição continuaremos a es­tudar as funções lógicas, agora de uma forma mais completa. Analisare­mos o que ocorre quando juntamos diversas funções lógicas, prevendo o que acontece com suas saídas. Os circuitos complexos, como os usados nos computadores, por exemplo, se aproveitam das operações complica­das que muitas portas lógicas podem realizar em conjunto. Assim, é de fun­damental importância para nosso es­tudo saber analisar estas funções.

As tabelas verdade
Os diversos sinais de entrada apli­cados a uma função lógica, com to­das as suas combinações possíveis, e a saída correspondente podem ser colocados numa tabela.
Nas colunas de entradas coloca­mos todas as combinações possíveis de níveis lógicos que as entradas po­dem assumir. Na coluna correspon­dente à saída colocamos os valores que esta saída assume em função dos níveis lógicos correspondentes na entrada.


Figura 1

Vimos, desta forma, que a tabela verdade para uma função AND de duas entradas, como a representada na figura 1, pode ser dada por:
A B S
0 0 0
0 1 0
1 0 0
1 1 1

Veja que nas colunas de entrada (A e B) para termos todas as combi­nações possíveis, fazemos o equiva­lente à numeração binária de 0 a 3, já que:
00 = 0
01 = 1
10 = 2
11 = 3

Para uma tabela verdade feita para uma porta AND de 3 entradas tere­mos:
A B C S
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1

Neste caso, as combinações de níveis lógicos na entrada correspon­dem à numeração binária de 0 a 7 já que:
000 = 0 001 = 1 010 = 2 011 = 3 100 = 4 101 = 5 110 = 6 111 = 7
O conhecimento da contagem bi­nária facilita bastante a elaboração de tabelas verdades, quando todas as combinações possíveis de níveis ló­gicos em 2, 3 ou 4 entradas devam ser estudadas.
Assim, uma vez que o leitor conhe­ça o comportamento das principais funções, sabendo o que ocorre na saída de cada uma quando temos determinadas entradas e sabendo elaborar tabelas verdades, fica fácil combinar funções e saber o que acon­tece em suas saídas. 

Lógica Combinacional
Vamos partir de um exemplo sim­ples de lógica combinacional usando tabelas verdades para saber o que ocorre na sua saída, com o circuito da figura 2.


Figura 2

Este circuito faz uso de uma porta AND, um inversor e uma porta OR. O resultado desta configuração é uma função combinacional com três entra­das e uma saída.
Para elaborar a tabela verdade para este circuito e assim determinar­mos todas as saídas possíveis em função das entradas, devemos levar em conta que ele é formado por duas etapas.
Na primeira etapa temos a porta AND e o inversor, enquanto que na segunda etapa temos a porta OR. Isso significa que as saídas dos circuitos da primeira etapa, que chamaremos de S1 e S2 são a entrada da segunda etapa.
Temos então de levar em conta estas saídas na elaboração da tabe­la verdade que terá no seu topo as seguintes variáveis:

A  B  C  S1 S2 S

A,B e C são as entradas dos cir­cuitos. S1 e S2 são pontos intermediá­rios do circuito que precisam ser ana­lisados para a obtenção de S, que é a saída final do circuito.
Começamos por colocar em A, B e C todas as suas condições possí­veis, ou todas as combinações de ní­veis lógicos que podem ser aplicadas ao circuito:
A B  C  S1  S2  S 
0  0  0 
0  0  1 
0  1  0 
0  1  1 
1  0  0 
1  0  1 
1  1  0 
1  1  1 

O passo seguinte é colocar os va­lores possíveis de S1, que corres­ponde à saída do inversor.

Sabemos que a tabela verdade para o inversor é:
A S
0 1
1 0

Ora, como em nosso caso A é a entrada do inversor e S1 é sua saída, podemos partir para a determinação de toda a coluna S simplesmente in­vertendo os valores de A, da seguin­te forma:

A  B  C  S1 S2 S
0  0  0  1
0  0  1  1
0  1  0  1
0  1  1  1
1  0  0  0
1  0  1  0
1  1  0  0
1  1  1  0
 
Para encontrar os valores da co­luna S2 devemos observar que ela corresponde à tabela verdade da fun­ção AND onde as entradas são B e C e a saída é S2.

B  C  S2
0  0  0 
0  1  0
1  0  0
1  1  1


Temos então:
A  B  C  S1  S2  S 
0  0  0   1   0 
0  0  1   1   0 
0  1  0   1   0 
0  1  1   1   1 
1  0  0   0   0 
1  0  1   0   0 
1  1  0   0   0 
1  1  1   0   1

Finalmente, levando em conta que S1 e S2 são entradas de uma por­ta OR de duas entradas cuja saída é S, podemos elaborar a coluna final de saídas (S)
S1  S2  S 
0   0   0 
0   1   1
1   0   1
1   1   1

Resultando na seguinte tabela:
A  B  C  S1 S2 S
0  0  0   1  0  1
0  0  1   1  0  1
0  1  0   1  0  1
0  1  1   1  1  1
1  0  0   0  0  0
1  0  1   0  0  0
1  1  0   0  0  0
1  1  1   0  1  1

Trata-se de uma função bastante interessante que pode ser definida como “a que fornece uma saída alta somente quando a entrada A estiver no nível baixo, não importando as demais entradas ou ainda quando as três entradas estiverem no nível alto”. 

Como Projetar Um Circuito Combinacional
O problema de saber o que acon­tece com a saída de um circuito for­mado por muitas funções lógicas quando suas entradas recebem diver­sas combinações de sinais não é o mais importante para o projetista de equipamentos digitais. Na verdade, muito mais importante que este pro­cedimento é justamente fazer o con­trário, ou seja, projetar um circuito que, em função de determinados si­nais de entrada, forneça exatamente na saída o que se deseja.
O projeto de um circuito que te­nha uma determinada função envol­ve um procedimento de síntese em algumas etapas.
Na primeira etapa deve ser defini­do o problema, estabelecendo-se exa­tamente qual a função a ser executa­da, ou seja, quais as entradas e quais as saídas.
Numa segunda etapa, coloca-se o problema numa tabela verdade ou ainda na forma de equações lógicas.
O procedimento que abordaremos neste curso será basicamente o da obtenção das funções a partir das ta­belas verdade e das equações lógi­cas.
Finalmente, numa terceira etapa, obtemos o circuito que exercerá as funções desejadas.
Na terceira etapa, um ponto impor­tante consiste na minimização do cir­cuito, já que na maioria dos casos pode-se implementar a mesma fun­ção de muitas formas diferentes como atesta o circuito simples apresentado na figura 3.


Figura 3

Veja que podemos ter o mesmo circuito com quantidades de portas diferentes, na prática devemos sem­pre levar este fato em conta. Não é apenas o número de portas que de­terminará a configuração final, mas sim, seu custo e a eventual utilização em outras partes do circuito.
Por exemplo, se o circuito já esti­ver usando dois inversores dos seis disponíveis num circuito integrado e a nossa função tiver uma solução um pouco maior, mas que use estes in­versores, será interessante adotá-la para aproveitar os inversores ociosos.
A seguir daremos um exemplo de como obter os circuitos a partir de uma tabela verdade.

a) Passo 1 - Determinação das equações lógicas
Lembramos que para as funções estudadas temos as seguintes repre­sentações:

Função E (AND)
Y=A.B

Função Não E (NAND)
    ___
Y=A.B

Função OU (OR)
Y=A+B

Função Não OU (NOR)
    ____
Y=A+B

Função Não (NOT) ou inversor
    __
Y=A

Função ou exclusivo
(Exclusive OR)
Y=A(+)B


Vamos tomar como exemplo a ta­bela verdade abaixo para determinar a função lógica correspondente:
A B C Y linha
0 0 0 0 1
1 0 0 1 2
0 1 0 1 3
1 1 0 0 4
0 0 1 1 5
1 0 1 0 6
0 1 1 0 7
1 1 1 1 8
 
Indicamos a linha na última colu­na de modo a facilitar as explicações seguintes.
Observamos que temos saídas no nível 0 para as linhas 0, 3, 5 e 6, en­quanto para as linhas 1, 2, 4 e 7 te­mos saídas 1.
Isso quer dizer que teremos a fun­ção OU para as linhas cuja saída é 1 que podem ser encaradas como ope­rações OR com tabelas que teriam 1 na saída apenas nas linhas 1, 2, 4 e 7, conforme mostrado a seguir:

A B C Y    A  B  C  S1    A B C S2    A  B C  S3    A B C S4 
0 0 0 0     0  0  0  0      0 0  0 0    0  0  0  0      0 0  0 0 
0 0 1 1     0 0   0  1      0 0  1 0    0  0  1  0      0 0  1 0 
0 1 0 1     0 1   0  0      0 1  0 1    0  1  0  0      0 1  0 0 
0 1 1 0  = 0 1  1   0  +  0 1 1  0 + 0  1  1  0  +  0 1  1 0 
1 0 0 1     1 0  0   0      1 0  0 0    1  0  0  1      1 0  0 0 
1 0 1 0     1 0  1   0      1 0  1 0    1  0  1  0      1 0  1 0 
1 1 0 0     1 1  0   0      1 1  0 0    1  1  0  0      1 1  0 0 
1 1 1 1     1 1  1   0      1 1  1 0    1  1  1  0      1 1  1 1 

Isso nos permite escrever as equa­ções lógicas para cada uma das qua­tro tabelas da seguinte forma:
        _   _
S1 = A . B . C que corresponde a A=0, B=0 e C=1
        _
S2 = A . B . C que corresponde a A=0, B=1 e A=0
             _   _
S3 = A . B . C que corresponde a A=1, B=0 e C=0
S4 = A . B . C que corresponde a A=1, B=1 e C=1

Como a saída S é a combinação das quatro funções temos:
S = S1 + S2 + S3 + S4

Substituindo pelos valores encon­trados teremos:
      _ _       _             _ _
S = A.B.C + A.B.C + A.B.C + A.B.C
Esta é então a função lógica que representa a tabela verdade que pro­pusemos como parte inicial do pro­blema e para a qual devemos encon­trar um circuito equivalente.


Passo 2 - Implementação dos Circuitos Combinacionais
Conforme estudamos em lições anteriores, é possível usar as portas NAND e NOR como blocos lógicos universais a partir dos quais podemos elaborar qualquer outra função ou mesmo funções mais complexas.
Para exemplificar vamos analisar uma função um pouco mais simples do que a obtida no passo anterior. Tomemos a expressão:
                  _    _   _
S = A . B . C + A . B . C Podemos tentar implementá-la usando portas NAND e eventualmente inversores, já que a barra sobre cada letra indica sua negativa, con-forme estudamos.
A operação (.) pode ser realizada utilizando-se uma porta NAND que li­gada a um inversor nos fornece uma porta AND.
Assim, conforme a figura 4, po­demos implementar A.B.C usando uma porta NAND de 3 entradas e um inversor.


Figura 4

Veja na figura 5 como a opera­ção A.B.C pode ser implementada.


Figura 5

A soma (+) pode ser implementa­da com uma porta OR ligada a dois inversores, figura 6.


Figura 6


Combinando os três circuitos po­demos chegar à configuração final desejada, figura 7.


Figura 7

Veja que a inversão da inversão usada no circuito anterior nos leva ao circuito original. Isso significa que po­demos simplificar a configuração eli­minando as duplas inversões em sé­rie. Isso nos leva à configuração final do circuito mostrada na figura 8.


Figura 8

Logo, quando temos uma expres­são formada pela soma de produtos, podemos usar portas NAND sem a necessidade de inversores, bastando apenas lembrar duas propriedades:
As combinações de entrada po­dem ser aplicadas a portas NAND.
As saídas das portas NAND po­dem ser aplicadas à entrada de uma segunda porta NAND obtendo-se na saída a função desejada.
Vamos agora fazer uma tentativa de implementar uma função usando portas NOR, o que será escolhido quando tivermos um produto de so­mas.
Tomemos como exemplo a função:
        _   _                        _
S = (A + B + C) . (A + B + C) As somas podem ser obtidas fa­cilmente a partir de portas NOR com as saída aplicadas a um inversor. A negação de NOR é OR. O circuito equivalente para três entradas é mos­trado na figura 9.


Figura 9

O produto das duas somas é obti­do com dois inversores aplicando os sinais a uma outra porta OR, ou seja, a uma outra configuração NOR.
Como nas duas linhas de sinais temos inversores em série, e o inver­sor do inverso de um nível lógico é ele mesmo, podemos simplificar o cir­cuito eliminando todos os inversores.


Figura 10  - Implementação  quase final da função


Isso nos permite chegar à confi­guração final que é mostrada na figura 11.


Figura 11 - Implementação final da função.

Assim, se quisermos implementar uma função que consiste num produ­to de somas, basta seguir dois proce­dimentos básicos:
Aplicar as entradas corresponden­tes a cada soma a uma porta OR que pode ser obtida associando-se uma porta NOR a uma inversor.
Aplicar as saídas obtidas nas fun­ções que devem ser multiplicadas a inversores que são ligados às entra­das de uma porta OR final, também obtida com a associação de um in­versor a uma porta NOR.
Como os inversores em série se anulam, eles podem ser eliminados e o circuito implementado utilizando-se apenas portas NOR.
É possível resolver o problema de implementar circuitos combinacionais reduzindo as funções a produtos de somas ou ainda a soma de produtos, casos em que podemos trabalhar com funções NAND ou NOR.
Como as duas soluções levam aos mesmos resultados, num projeto prá­tico é interessante analisar as confi­gurações obtidas para um problema nos dois casos. Adota-se então a so­lução que utilizar menos circuitos ou que for mais conveniente, por exem­plo, aproveitando portas ociosas de um circuito integrado já utilizado no mesmo projeto com outras finalida­des. 


SIMPLIFICANDO E MINIMIZANDO
Uma consequência da possibilida­de de construir funções complexas a partir de portas básicas como OR e AND (OU e E) é a otimização de um projeto aproveitando poucos tipos de circuitos integrados básicos.
Assim, se tivermos uma função que seja obtida utilizando-se portas AND e OR como a mostrada na figu­ra 12, ela terá o inconveniente de pre­cisar de dois tipos diferentes de cir­cuitos integrados.


 Figura 12.

Se quisermos esta função com cir­cuitos TTL, por exemplo, aproveitare­mos três das três portas de três en­tradas de um circuito 7411 e também precisaremos aproveitar uma das qua­tro portas OR de duas entradas de um circuito integrado 7432.
Evidentemente, estaremos usan­do dois circuitos integrados, desper­diçando 1/3 de um e 3/4 do outro.
Podemos simplificar consideravel­mente este circuito se usarmos ape­nas portas NAND com a configuração equivalente mostrada na figura 13.


Figura 13

Este circuito, que apresenta a mesma função do anterior, usa as três portas de um circuito integrado 7410. Utilizamos apenas um circuito inte­grado que é totalmente aproveitado, sem nenhuma parte ociosa. 


DIAGRAMAS DE KARNAUGH
Um processo bastante interessan­te para representar uma tabela ver­dade e a partir dela obter uma simpli­ficação dos circuitos utilizados para sua implementação é o que faz uso dos chamados diagramas ou mapas de Karnaugh.
O diagrama de Karnaugh consis­te numa tabela retangular com núme­ro de quadros que corresponde a 2 elevado ao expoente N, onde N é o número de variáveis do circuito.
Cada variável lógica ocupa no grá­fico metade da sua extensão e seu complemento ocupa a outra metade.
Na figura 14 temos o modo como são elaborados os diagramas de Karnaugh para 1, 2 e 3 variáveis, com as expressões lógicas corresponden­tes a cada caso.


Figura 14

Estas expressões são obtidas de uma forma muito semelhante à usa­da no conhecido joguinho de “bata­lha naval” onde a posição de cada “tiro” é dada por duas coordenadas, uma correspondente às linhas e ou­tra às colunas.
Na figura 15 mostramos, como exemplo, de que modo um diagrama de Karnaugh de 4 variáveis pode ser obtido com a inclusão dentro de cada quadro da expressão corresponden­te. No diagrama (b) da figura 14 os quadros foram preenchidos com os valores 0 e 1 correspondentes às en­tradas. Este diagrama é chamado também de diagrama de Veitch. Uma observação importante em relação a esta representação por 0 e 1 é que cada quadro difere do adjacente em apenas um dígito.


Figura 15

Dizemos que são adjacentes os termos que estão à direita e à esquer­da de cada quadro e também os que estão acima e abaixo. Também são adjacentes os que estiverem na mes­ma fila, mas um na primeira coluna e outro na última.
Na figura 16 temos um mapa com a identificação das adjacências.



Figura 16

Assim, o que fazemos é plotar a tabela verdade da função que dese­jamos implementar num mapa de Karnaugh com o que será possível identificar melhor as adjacências e assim fazer as simplificações.
Para que o leitor entenda como “funciona” o mapa de Karnaugh numa simplificação de uma função, vamos tomar como exemplo a função que é dada pela seguinte tabela verdade:
A  B  S
0  0  1
0  1  1
1  0  0
1  1  1 

Desejamos expressar esta tabela como a soma de produtos, o que sig­nifica que os valores adjacentes que devemos procurar na tabela são os “1”. Se fôssemos expressar esta fun­ção como o produto de uma soma, os valores considerados seriam os “0” e o procedimento final seria o mes­mo.
Construímos então o Diagrama de Karnaugh para esta tabela conforme a figura 17.


Figura 17

A partir deste diagrama nosso pró­ximo passo consiste em tentar fazer simplificações que possam levar a cir­cuitos mais simples na implemen­tação.
A idéia é agrupar os termos adja­centes iguais, havendo para isso di­versas possibilidades que são apre­sentadas na figura 18.


Figura 18

A primeira possibilidade mostrada em (a) nos leva a uma soma de três produtos, cada qual obtido pela intersecção da linha com a coluna em que está o “1” correspondente.
Assim, o primeiro está na coluna que intercepta A-0 com B-0. Ora, o valor zero na indexação indica inver­são, portanto, isso significa que o pri­meiro fator de nosso produto será:
_ _
A.B
O segundo “1” a ser considerado está na coluna A=1 e B=0, portanto, temos A invertido e B sem inversão, o que nos leva ao segundo fator de nos-so produto:
_
A.B
Finalmente, o terceiro “1” a ser considerado está na linha A=1 e B=1,
o que significa um fator com A multi-plicado por B sem inversões ou:

A.B
Como devemos expressar a fun­ção na forma de uma soma de produ­tos fazemos:
      _ _       _
S = A.B + A.B + A.B
Para o segundo caso (b) temos uma simplificação maior, já que agru­pamos os dois “1” da primeira linha de modo que podemos adotar para ele:
_
A
Para o outro valor “1” que está na casa que corresponde à intersecção de A-1 com B-1 vale a soma (sem in­versão):

A + B

A expressão final na forma de um produto de somas será então:
_
S = A + B.A
Da mesma forma chegamos à sim­plificação (b) que permite a expres­são mais simples, pois conseguimos juntar três casas adjacentes.
Raciocinando da mesma forma chegamos à expressão:
 _
S = A + B

O procedimento que vimos como exemplo envolveu uma função sim­ples com apenas duas variáveis de entrada.
No entanto, o mesmo procedimen-to é válido para qualquer número de variáveis. Os leitores interessados em aprofundar-se neste estudo devem procurar treinar os procedimentos in­dicados, trabalhando com funções cada vez mais complexas.


CONCLUSÃO
O espaço disponível para nosso curso não permite um aprofun­damento maior neste assunto e um certo treino se faz necessário para  o domínio das técnicas envolvidas. As­sim, para os leitores interessados no tema, sugerimos a procura de litera­tura complementar. Mostramos os procedimentos lógicos que permitem trabalhar com as funções de modo a chegar aos circuitos.
Assim, uma tabela verdade que tenha qualquer combinação de entra­das que nos leve a qualquer combi­nação de saída pode ser elaborada na prática com funções básicas (NOR e NAND) e isso não exige que se “que­bre a cabeça”.
Conhecendo os procedimentos para resumir tudo em produto de so­mas e soma de produtos e também o uso dos mapas de Karnaugh para simplificação, obteremos configura­ções simples que facilitam qualquer projeto.

QUESTIONÁRIO
1. Os valores combinados de to­das as entradas e a saída correspon­dente podem ser colocados numa tabela denominada:
a) Mapa de Karnaugh
b) Diagrama de Veitch
c) Tabela verdade
d) Produto de somas

2. A tabela verdade abaixo,
corresponde à qual função:
A B S
0 0 1
0 1 1
1 0 1
1 1 0

a) AND (E)
b) NAND (Não-E)
c) OR (OU)
d) NOR (Não-OU)

3. Qualquer circuito lógico pode ser implementado utilizando-se que funções básicas?
a) NAND e inversores
b) NAND e NOR
c) OR e Inversores
d) AND e Inversores

4. Para implementar um circuito que corresponda a uma função dada por uma soma de produtos usamos quais funções lógicas?
a) Portas NAND
b) Inversores
c) Portas OR
d) Não é possível fazer isso

5. Se numa implementação lógica precisarmos usar inversores em sé­rie, o que podemos fazer com eles?
a) Ligá-los à portas AND
b) Colocá-los em paralelo
c) Inverter suas saídas
d) Eliminá-los


Respostas: 1-C, 2-B, 3-B, 4-A, 5-D