Ciências da computação dia 30

representação e simplificação de circuitos lógicos

Representação de funções lógicas

até agora representamos uma função lógica com tabela verdade, expressões matemáticas e circuitos lógicos, vamos agora ver mais algumas maneiras de se representar uma função lógica.

formas canônicas

nessas duas representações temos os conceitos de maxtermos e mintermos

maxtermos → linhas de uma tabela verdade das quais o resultado é 0

mintermos → linhas de uma tabela verdade das quais o resultado é 1

soma de produtos

adicione uma AND (*) entre as variáveis para todos os mintermos, depois faça adicione negado onde for necessário para o resultado desse AND ser 1

exemplo tabela da porta OR

x y

0 0 → 0

0 1 → 1 → x * y → x' * y

1 0 →1 → x * y → x * y'

1 1 → 1 → x * y → x * y

agora pegue as expressões que resultaram e junte-as com uma operação or

f(x,y) = (x' * y) + (x * y') + (x * y)

essa é a expressão final

lembrando que você também pode usar os axiomas para reduzi-la

produto de somas

adicione uma OR (+) entre as variáveis para todos os maxtermos, depois faça adicione negado onde for necessário para o resultado desse OR ser 0

exemplo tabela da porta AND

x y

0 0 → 0 → x + y → x + y

0 1 → 0 → x + y → x + y'

1 0 →0 → x + y → x' + y

1 1 → 1

agora pegue essas expressões e junte-as com uma porta AND

f(x, y) = (x + y) * (x + y') *(x' + y)

essa é a expressão resultante e você também pode reduzi-la usando os axiomas

Somatório

o somatório é uma técnica da qual você armazena a informação de quais linhas possuem maxtermos

exemplo tabela AND

i | x y

0 | 0 0 → 0

1 | 0 1 → 0

2 | 1 0 →0

3 | 1 1 → 1

obs: o i nesse caso está representando o numero da linha

sendo assim o somatório dessa função é:

f(x, y) = Σ(0, 1, 2)

dessa forma quando você for montar a tabela verdade, você preenche tudo usando aquela técnica de numero de linhas / 2, numero de linhas /2.... e na hora de adicionar os resultados com o somatório você já sabe quais os resultados serão 0

Produtório

O produtório tem uma ideia semelhante a do somatório, mas nesse caso você fará para os mintermos

exemplo tabela OR

i | x y

0 | 0 0 → 0

1 | 0 1 → 1

2 | 1 0 →1

3 | 1 1 → 1

sendo assim o produtório disso é:

f(x, y) = π(1, 2, 3)

o mesmo pode ser usado para saber quais linhas vão ter o valor 1 na hora de montar a tabela verdade

Mapas de Karnaugh

aparência do mapa de karnaugh para 3 variavéis

Vamos imaginar que temos uma tabela verdade com 3 variáveis a, b, c

a b c | f(a,b,c)

0 0 0 | 0

0 0 1 | 0

0 1 0 | 0

0 1 1 | 0

1 0 0 | 0

1 0 1 | 1

1 1 0 | 1

1 1 1 | 1

para começar adicionaremos um código cíclico na parte de cima com dois bits

passo 1 --- mapa de Karnaugh

depois o valor 0 e 1 para o lado esquerdo

passo 2 --- mapa de Karnaugh

agora juntaremos a parte de cima com a do lado, lembrando que a de cima vem sempre primeiro, então, dessa forma, teremos:

passo 3 --- mapa de Karnaugh

agora associaremos como região 'a' tudo aquilo que possui 1 no primeiro valor, como região b tudo aquilo que tem 1 no 'b' e região 'c' tudo que tem 1 no c

passo 4 --- mapa de Karnaugh

região a

região b

região c

antes de continuar devemos saber o que significa vizinhança no mapa de karnaugh

vizinhança nada mais é do que os valores que estão em volta de uma certa célula

exemplo:

vizinhos de 111

veja que tudo que está em rosa é vizinho de 111

repare também que a distância entre o valor 111 para os demais é sempre 1

distancia 111--110 → 1

distancia 111--011 → 1

distancia 111--101 → 1

sendo assim, no mapa de karnaugh todos os 3 vizinhos de um número possuem distância para ele de 1 e estarão sempre a sua volta, até mesmo do outro lado como no exemplo abaixo

vizinhos distantes

isso acontece pois, alem de seguir o padrão da distância 1, o mapa é pensando em 3 dimensões

continuando com a montagem

valores

coloque nas células os valores correspondentes aos binários que cada célula continha com o valor da tabela verdade

agora você deve utilizar a regra do implicante primo

essa regra consiste em você pegar um fator de 2

nesse caso como temos os seguintes fatores de 2

2⁰ → 1

2¹ → 2

2² → 4

2³ → 8

ou seja podemos pegar até oito células de uma vez, já que temos 3 variáveis

e juntar células que possuem valores iguais sempre em quantidades desses fatores

obs: nesse caso pegaremos os valores 1

primeiro implicante

segundo implicante

agora pegue esses dois implicantes e lembre de cada posição da tabela

tabela

obs: ignore os ' que estão ali em a b c

primeiro implicante

segundo implicante

agora temos algo dessa forma

(6, 7) = a * b * c

(5,7) = a * b * c

obs: como pegamos apenas o valor 1 usamos a soma de produtos, caso contrário usaríamos o produto de somas

agora eliminaremos dessas expressões as variáveis em que sua região não contem o implicante inteiro

ficando dessa forma:

(6,7) = a * b

(5,7) = a * c

por fim, fazemos a soma dos produtos

f(a,b,c) = (a * b) + (a * c)

e caso você queira, você pode usar de novo os axiomas e simplificar

ficando:

f(a,b,c) = a(b * c)

repare que este foi o mesmo resultado que teríamos se fizéssemos com os axiomas

observações

as simplificações além de ajudarem a diminuir circuitos e expressões, também podem ser usadas na programação para diminuir expressões lógicas usadas em if e similares