Mapa de Karnaugh
Transcrição
Mapa de Karnaugh
Mapa de Karnaugh João Paulo Cerquinho Cajueiro 24 de agosto de 2009 O chamado mapa de Karnaugh foi desenvolvido pelo matemático e fı́sico Maurice Karnaugh1 em 1953, enquanto trabalhava no grupo de pesquisas da empresa Bell. Este método é uma poderosa ferramenta para circuitos lógicos, pois permite simplificar equações booleanas apenas agrupando áreas comuns, o que nosso cérebro consegue fazer bem mais rapidamente do que aplicando postulados e teoremas a equações. 1 De diagramas de Venn a Mapas de Karnaugh Utilizar os teoremas e postulados da álgebra de Boole para simplificar equações é bastante tedioso, o que faz com que seja bem provável que hajam erros no processo. Mas já vimos que as equações da álgebra de Boole podem ser visualizadas através de um diagrama de Venn. Isto é exemplificado na figura 1, que apresenta um diagrama de Venn de 3 variáveis com os respectivos mintermos associados a cada uma das regiões. c abc abc abc abc a b abc abc abc abc (a) Regiões das variáveis (b) Sub-regiões dos mintermos Figura 1: Diagrama Venn com 3 variáveis. Utilizando os diagramas, é fácil obter a equação simplificada da função. Por exemplo, considere-se a função f1 = abc + abc + abc. Desenhando esta função num diagrama de Venn (figura 2), fica óbvio que podemos simplificá-la para f1 = (a + c)b. O problema aparece quando acrescentamos mais 1 variável. Como fazer um diagrama definindo todas as 16 possibilidades? A solução para isto é desenhar 1 Aparentemente ele atualmente (entre outras coisas), escreve o blog unclej0.blogspot.com. Esta informação depende em se acreditar ou não na wikipedia. 1 f1 Figura 2: Diagrama Venn definindo a região dada por f1 = abc + abc + abc = (a + c)b. as regiões como quadrados, e não como cı́rculos, assim como foi feito na figura 3. No lado direito desta figura temos até a representação do lado de fora do diagrama propriamente dito de que regiões correspondem a que variáveis. d abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd b abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd a abcd abcd abcd abcd c Figura 3: Diagrama Venn de 4 variáveis desenhado com regiões quadradas. Este diagrama de Venn modificado já é o próprio mapa de Karnaugh, onde no mapa as regiões em que a função é verdadeira são marcadas com 1, e em que a função é falsa são marcadas com 0. 2 Mapas de Karnaugh Cada região (quadrado) em um mapa de Karnaugh corresponde a uma linha na tabela verdade. Ou seja, cada região corresponde a um mintermo e a um maxtermo. A figura 4 mostra os mintermos correspondentes a cada uma das regiões. Nela também está presente o número correspondente a cada mintermo 2 ou maxtermo. d abcd abcd abcd abcd 0 1 3 2 abcd abcd abcd abcd 4 5 7 6 b abcd abcd abcd abcd a 12 13 15 14 abcd abcd abcd abcd 8 9 11 10 c Figura 4: Regiões correspondentes a mintermos de um mapa de Karnaugh Note na figura 4 que os vizinhos de cada casa em um mapa de Karnaugh são tais que apenas muda uma variável de cada vez. Por exemplo, da casa 5 para a casa 1 (acima) só muda o b, da 5 para a 7 (direita) só muda o c, da 5 para a 4 (esquerda) só muda o d e da 5 para a 13 (abaixo) só muda o a. Isto é válido para todas as casas. É possı́vel aplicar isto inclusive para as casas nas bordas e nas quinas, pois podemos considerar que o mapa dá a volta em si mesmo. Deste modo considerase a casa 6 como vizinha da 4 e só muda a variável c, e a casa 10 vizinha da 2 e só muda a variável a. Isto nos P permite agrupar termos visualmente. Por exemplo, considere a função f2 = m (3, 7, 12, 13) e seu respectivo mapa de karnaugh na figura 5. f2 = P m (3, 7, 12, 13) d abc a 00 01 13 02 04 05 17 06 112 113 015 014 08 09 011 010 acd b c Figura 5: Função f2 e simplificação por agrupamento de casas vizinhas. Analisando a função f2 por álgebra de Boole, vemos que podemos simplificála aplicando o teorema T6. E observando no mapa de Karnaugh, os termos que são unidos e simplificados são justamente os vizinhos. f2 = abcd + abcd + abcd + abcd | {z } | {z } T6 T6 f2 = acd + abc 3 Ou seja, o agrupamento de 2 casas vizinhas corresponde à simplificação de uma variável através da aplicação to teorema T6. Basta ver no próprio mapa quais são as variáveis que não mudam dentro do agrupamento. Para simplificar 2 ou mais variáveis basta aplicar o teorema repetidas vezes. Simplifiquemos a função f3 (vide figura 6), por exemplo. Basta agruparmos a função de duas em duas casas e 2 grupos vizinhos de duas casas viram um único grupo de 4 casas, retirando mais uma variável da função. f3 = abcd + abcd + abcd + abcd {z } | {z } | = abc + abc | {z } f3 = ac d f3 a d f3 00 01 03 02 04 05 07 06 112 113 015 014 18 19 011 010 b ⇒ a 00 01 03 02 04 05 07 06 112 113 015 014 18 19 011 010 c b c Figura 6: Agrupamento das casas da função f3 . Este mesmo procedimento pode ser mostrado para agrupamentos de 8 casas (simplificando então 3 variáveis) ou 16 casas (simplificando 4 variáveis. A figura 7 mostra algumas possibilidades de agrupamentos de 2, 4 e 8 casas2 , junto com o produto respectivo. Claro que num mapa de Karnaugh de 4 variáveis um agrupamento de 16 casas seria todo o mapa e corresponderia a função 1. 2 Exemplos utilizados também no artigo original de Karnaugh: “The map method for synthesis of combinational logic circuits”, de 1953. 4 bcd 0 0 a 0 0 d 0 1 1 0 abd 0 0 0 0 b 0 a 0 0 0 0 0 0 0 d 1 0 0 0 abd 0 1 0 0 b 0 a 0 0 0 1 0 0 0 c d 0 0 0 0 bcd 1 1 0 0 b 0 a 0 0 1 0 0 0 0 c d 0 0 0 0 0 0 0 0 c 0 0 b 0 0 c (a) agrupamentos de 2 casas cd 0 0 a 0 0 d 1 1 1 1 ab 0 0 0 0 b 0 a 0 0 1 0 0 0 0 d 0 0 0 1 ad 0 1 0 1 b 0 a 0 1 0 0 0 0 1 c d 0 0 0 0 bd 1 1 1 0 b 0 a 0 0 1 0 0 0 0 c d 0 0 0 0 0 0 0 0 c 1 0 b 0 1 c (b) Agrupamentos de 4 casas b 0 1 a 1 0 d 0 1 1 0 d d 0 1 1 1 b 1 a 1 0 1 0 1 1 0 c 0 0 0 0 c 0 0 0 0 1 0 1 0 b 1 a 0 1 0 c d 0 0 0 0 b 1 1 1 1 1 1 1 0 b 1 a 0 1 1 c d 1 0 0 1 1 0 0 1 1 0 b 0 1 c (c) Agrupamentos de 8 casas Figura 7: Exemplos de mapas de karnaugh com os correspondentes produtos algébricos. 5 2.1 Mapas de n variáveis Claro que um mapa de Karnaugh pode ser feito com um número menor de variáveis. Para tanto basta simplesmente sair dividindo o mapa. Tem-se apenas que lembrar que uma casa deve ter n vizinhas, já que a simplificação de uma variável corresponde a unir uma casa com a vizinha. Isto é mostrado na figura 8 para mapas de 2, 3 e 4 variáveis. d c a 0 1 2 3 b a 0 1 3 2 4 5 7 6 a b (a) Mapa de 2 (b) Mapa de 3 variáveis variáveis 0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10 b c (c) Mapa de 4 variáveis Figura 8: Mapas de Karnaugh de 2, 3 e 4 variáveis, mostrando que cada casa tem n vizinhas. Mas como aplicar este princı́pio para funções com mais de 4 variáveis? É impossı́vel fazer um mapa no plano onde cada uma das regiões tem 5 (ou mais) vizinhos. Uma maneira (não muito prática) é trabalhar com um mapa tridimensional como exemplifica a figura 9 que mostra um mapa de Karnaugh de 6 variáveis, note que cada casa tem 6 vizinhos: 4 no plano (como no mapa de 4 variáveis) e 2 verticais. Na prática, um mapa de 5 variáveis é desenhado como 2 de 4 variáveis, sendo um com uma variável (em geral a mais significativa) sendo 0 e o outro com a mesma variável sendo 1. Usa-se este mesmo princı́pio para mapas de 6 variáveis ou mais variáveis, como pode ser visto na figura 10. 6 f 0 4 c 12 1 5 13 8 9 3 7 15 11 10 16 c 28 24 f 17 21 19 23 29 25 31 27 60 56 49 51 55 61 57 63 59 44 40 f 33 37 35 39 45 41 d 58 32 c 50 54 62 e 36 b f 53 a d 26 48 c 18 22 30 e 52 d 14 e 20 2 6 47 43 34 38 d 46 42 e Figura 9: Mapa de Karnaugh tridimensional de 6 variáveis. b f c 0 1 3 2 4 5 7 6 12 13 15 14 8 a f 16 17 19 18 20 21 23 22 d c 9 11 10 28 29 31 30 24 25 27 26 e e b f f 48 49 51 50 1 3 2 16 17 19 18 32 33 35 34 4 5 7 6 20 21 23 22 36 37 39 38 12 13 15 14 8 9 11 10 c b 28 29 31 30 c a c 24 25 27 26 d e e 0 44 45 47 46 40 41 43 42 d 52 53 55 54 d c 60 61 63 62 56 57 59 58 e (b) 6 variáveis (a) 5 variáveis Figura 10: Mapas de Karnaugh de 5 e 6 variáveis. 7 d e d 3 Soma de produtos e produto de somas Até o momento trabalhamos com o mapa de Karnaugh agrupando os 1’s para gerar funções na forma soma de produtos, mas podemos agrupar os zeros também, gerando equações na forma produto de somas, como mostra a figura 11 para a funçãof4 = ac + a(b + cd). f4 (a, b, c, d) d a+b+c a 00 01 13 02 14 15 17 16 112 113 015 014 18 19 011 010 b+c+d b a+c c Figura 11: Mapa de Karnaugh com agrupamento de 0’s. Da mesma forma que na tabela verdade, um 0 no mapa de Karnaugh corresponde a um maxtermo. Logo o agrupamento de 2 casas com 0 corresponde a uma soma com n − 1 termos (onde n é o número de variáveis da função), o agrupamento de 4 casas equivale a uma soma de n − 2 variáveis e assim por diante. No caso de agrupamento de zeros, deve-se tomar cuidado com a relação entre uma região marcada e como a variável aparece na equação. Por exemplo, na figura 11 a região a + c ocorre onde está marcado a no mapa, e não onde está marcado a. A explicação para este fenômeno é a mesma dos maxtermos na tabela verdade terem as variáveis barradas em relação aos mintermos correspondentes. Isto torna a análise do mapa por agrupamento de 0’s bem menos intuitiva. d f5 1 0 0 1 1 4 1 1 7 6 1 13 1 8 2 0 0 1 0 3 5 12 a 0 1 1 15 14 1 9 b 1 11 10 c Figura 12: Exemplo de equação minimizada por agrupamento de 1’s e de 0’s. A partir do mapa de Karnaugh, podemos obter a equação na forma produto de somas, juntando os zeros; ou na forma soma de produtos, juntando os uns. 8 As duas formas obtidas da função f5 da figura 12 são mostradas abaixo e apesar de aparentarem ser diferentes, elas são, de fato, equivalentes. f5 = (a + b + c) a + b + d a + c + d a + b + c + d (1) f5 = a b + a c + b d + c d + a b c (2) Começando da equação na forma produto de somas, multiplicamos os dois primeiros parênteses e os dois últimos e obtemos: f5 = a + a b + a d + b + b d + b c + a d + c d · (3) · ab + ac + ad + ac + bc + cd + ad + bd + cd + d Retirando os vários termos redundantes, chega-se a: f5 = a + b + c d a b + a c + d + a c + b c (4) Multiplicando novamente, obtêm-se: f5 = a b + a c + a d + a b c + a b c + b d + a b c + a b c d + c d + a c d + b c d (5) Onde novamente temos vários termos redundantes que simplificam em: f5 = a b + a c + a d + b d + a b c + c d (6) Note que podemos usar o teorema do consenso nos segundo, terceiro e último termo, retirando então o terceiro termo. Com isso, obtém-se a equação (2) obtida por soma de produtos. Mostra-se então que a equação (1) é equivalente à (2), q.e.d.. 4 Equações e circuitos não-completamente especificados. É bastante comum a situação de que determinadas entradas de um circuito lógico nunca ocorram. Como exemplo imagine-se uma esteira carregando uma caixa de um lado para o outro, com sensores de fim de curso em ambas extremidades: se do lado esquerdo e sd do lado direito. No funcionamento normal do sistema estes dois sinais nunca serão acionados ao mesmo tempo; nesta situação não importa qual é o resultado do circuito para se = sd = 1, já que esta situação nunca vai existir, portanto não é necessário especificar um valor de saı́da para esta situação. Diz-se então que este circuito é não-completamente especificado. A tabela 1 mostra o exemplo de um sinal imaginário z determinado em função de a, se e sd . Neste exemplo, sempre que se = sd = 1 a saı́da z é nãoespecificada, ou seja, z não-importa nestas situações. Neste texto utilizaremos a notação ×3 para identificar as situações que um sinal não importa. Pode-se descrever uma função lógica não-completamente especificada na forma soma de mintermos ou produto de maxtermos utilizando a notação d(· · · ), que vem do inglês don’t care. Desta forma o sinal z pode ser descrito por: X Y z= (2, 4, 6) + d(3, 7) = (0, 1, 5) + d(3, 7) (7) m 3“dontchiquer, M bicho.” 9 a 0 0 0 0 1 1 1 1 se 0 0 1 1 0 0 1 1 sd 0 1 0 1 0 1 0 1 z 0 0 1 × 1 0 1 × Tabela 1: Exemplo de uma função não completamente especificada. As saı́das não especificadas são identificadas por ×. Outras notações comumente usadas são *, - ou d. Um × na saı́da pode ser implementado como um 1 ou um 0, e não se sabe a princı́pio qual destes dois valores gerará uma solução mais minimizada, logo para obter o menor circuito possı́vel o engenheiro deveria obter as equações considerando que cada × pode ser 1 ou 0 e checar qual é o menor circuito final. Obviamente para problemas com muitos ×’s isto se torna impraticável, pois seria necessário implementar 2k circuitos, onde k é o número de ×’s presentes. Felizmente o mapa de Karnaugh facilita bastante a implementação de circuitos não-completamente especificados, pois podemos considerar se determinado × é 1 ou 0 visualmente, na hora da implementação. sd z 0 × 0 0 a 1 1 1 3 × 0 4 5 2 1 7 6 se Figura 13: Mapa de Karnaugh da função z. Ao minizarmos a função z pelo mapa de Karnaugh (figura 13) obtemos 2 funções: z 0 = se + sd a z 00 = sd (se + a) (pelos 1’s) (pelos 0’s) (8) (9) Note que, neste caso, estas duas equações não são equivalentes; ou seja, não é possı́vel sair de uma delas e chegar na outra por álgebra de Boole, como já foi feito na seção 3 para f5 . Isto porque na minimização por soma de produtos foi considerado que os ×’s eram 1, enquanto que em produto de somas eles foram considerados como sendo 0. Esta situação é bastante comum ao minimizar funções não completamente especificadas, porém, apesar de estranho, não causa nenhum problema, já que as diferenças nas saı́das ocorrem justamente quando não importa o valor da saı́da, seja por que aquela entrada nunca ocorre ou por outra razão qualquer. 10