Notas de aula 3 - Computer Vision Research Group

Transcrição

Notas de aula 3 - Computer Vision Research Group
39
Notas de aula de MAC0329 (2004)
6
Circuitos de chaveamentos e Circuitos Lógicos
Esta seção contém uma breve introdução a circuitos digitais (lógicos), sua relação com a álgebra
booleana, e alguns problemas relacionados ao projeto de circuitos lógicos. Mais detalhes podem
ser encontrados em quaisquer livros sobre projeto de circuitos lógicos (exemplo: [Mendelson, 1977,
Hill and Peterson, 1981, Katz, 1994, Micheli, 1994]).
6.1
Circuitos de chaveamentos
Na vida diária deparamos com dispositivos fı́sicos de dois estados tais como interruptores, contatos, diodos, transistores, etc. Dependendo do dispositivo em questão, eles podem tomar os estados ligado/desligado, conduzindo/não conduzindo, fechado/aberto, carregado/descarregado, magnetizado/não magnetizado, alto-potencial/baixo-potencial, etc. Vários circuitos podem ser formados com
esses dispositivos tais como circuitos de computadores eletrônicos, sistemas de chaveamento telefônico,
dispositivos ou sistemas de controle em geral (elevador, display digital, etc), etc.
Em um circuito elétrico, uma chave é um dispositivo ligado a um ponto do circuito e que pode tomar
um dos dois estados, fechado ou aberto. No estado fechado, a chave permite que a corrente passe
através do ponto, enquanto que no estado aberto nenhuma corrente passa através do ponto. O estado
fechado (respec., aberto) pode ser referenciado por 1 (respec., 0) e as chaves podem ser representadas
por letras como x, y, z, etc.
Dois pontos P e Q (inicial e final) estão ligados por um circuito de chaveamento se estes estão ligados
por um circuito (linhas) no qual está localizado um número finito de chaves.
A disposição dos fios e das chaves no circuito determina alguns tipos de circuitos. Os possı́veis tipos
estão ilustrados a seguir:
6.1.1
Circuitos em série
A corrente flui de P a Q se e somente se todas as chaves estiverem fechadas.
a
P
b
c
Q
Figura 1: Exemplo de um circuito em série.
6.1.2
Circuitos em paralelo
A corrente flui de P a Q se pelo menos uma das chaves estiver fechada.
a
b
P
c
Q
d
Figura 2: Exemplo de um circuito em paralelo.
40
Notas de aula de MAC0329 (2004)
6.1.3
Circuitos em série-paralelo
Envolvem ligações em série e em paralelo. Em geral, pode-se trocar uma chave de um circuito por um
circuito em série ou em paralelo para se obter novos circuitos série-paralelos.
b
c
a
a
P
Q
b
d
c
Figura 3: Exemplo de um circuito em série-paralelo.
6.1.4
Circuitos ponte
São circuitos que não são série-paralelo.
a
P
d
Q
c
b
e
Figura 4: Exemplo de um circuito-ponte.
Com relação aos circuitos de chaveamento, podemos observar que:
• Duas chaves com o mesmo nome operam de forma idêntica (ou seja, se uma está aberta, a outra
está necessariamente aberta e vice-versa). Chaves com nomes complementados operam de forma
complementar (se a chave x está aberta então a chave x está fechada e vice-versa).
• Denotando os circuitos em série como o produto das chaves (por exemplo, x y se as chaves são
x e y) e os circuitos em paralelo pela soma das chaves (por exemplo, a + b + c se as chaves
são a, b e c), podemos ver que qualquer circuito em série-paralelo corresponde a uma expressão
booleana com n variáveis, onde n é a quantidade de chaves com nomes distintos (a menos de
complementação) presentes no circuito. No caso do exemplo em série-paralelo acima, a expressão
correspondente é:
a(bc + a) + bdc
As chaves (com nomes distintos) correspondem às variáveis booleanas, a posição das chaves
define o valor dessas variáveis, e o estado do circuito estar ou não conduzindo corrente de P a
Q corresponde ao valor (1 ou 0, respectivamente) da função.
Analogamente, qualquer expressão envolvendo +, · e complementação de variáveis corresponde
a um circuito em série-paralelo.
Podemos dizer que uma função representa um circuito e que um circuito realiza uma função.
• Dois circuitos envolvendo as mesmas chaves são equivalentes se para as mesmas posições das
chaves a corrente flui ou não flui de P a Q em ambos. Obviamente, as expressões correspondentes
a circuitos equivalentes são também equivalentes (e vice-versa).
41
Notas de aula de MAC0329 (2004)
• Da mesma forma que podemos simplificar expressões booleanas, podemos também simplificar os
circuitos.
• Considerando-se que as chaves podem tomar apenas dois estados, que o circuito ou está ou não
está conduzindo corrente (mas não ambos), e ignorando-se questões fı́sicas como voltagem, resistência, quantidade de corrente elétrica, os circuitos de chaveamento podem ser modelados pela
álgebra booleana. A menos das diferenças de terminologia e de significado, trata-se exatamente
da lógica proposicional (ou da álgebra booleana hB, +, ·, , 0, 1i).
• Para cada circuito-ponte também corresponde uma função. A expressão correspondente pode
ser obtida tomando-se todos os caminhos que conduzem corrente de P a Q. Porém, dada uma
função qualquer, determinar um circuito-ponte correspondente não é fácil.
No exemplo da figura 4, o circuito em série-paralelo correspondente é:
d
a
c
P
e
Q
e
b
c
6.2
d
Circuitos lógicos
Usando a convenção 1 para presença de sinal e 0 para ausência de sinal, podemos olhar circuitos
de chaveamento do ponto de vista lógico (funcional). Por exemplo, no caso de circuitos em série, a
corrente só flui com todas as portas fechadas, isto é, com sinais de entrada presentes em todas as
chaves. Então, um circuito em série com n chaves pode ser representado por um dispositivo com
n entradas (correspondendo cada uma delas a uma chave), e uma saı́da que vale 1 se há sinal em
todas as entradas e 0 se há pelo menos uma entrada sem sinal. Da mesma forma, podemos ter
dispositivos representando um circuito em paralelo, ou algum outro circuito simples. Tais dispositivos
são chamados portas lógicas.
As principais portas lógicas estão ilustradas a seguir:
Porta E
Porta OU
Inversor NÃO
Porta XOR
Porta NÃO-E
Porta NÃO-OU
Figura 5: Representação gráfica de algumas portas lógicas.
As ilustrações acima mostram portas com duas entradas, mas são usuais também as portas E, OU,
NÃO-E e NÃO-OU com mais de duas entradas. As funções representadas por estas portas (para duas
entradas x1 e x2 ) estão descritas a seguir:
42
Notas de aula de MAC0329 (2004)
x1
0
0
1
1
x2
0
1
0
1
E
x1 x2
0
0
0
1
OU
x1 + x2
0
1
1
1
NÃO
x1
1
1
0
0
XOR
x1 ⊕ x2
0
1
1
0
NÃO-E
x1 x2
1
1
1
0
NÃO-OU
x1 + x2
1
0
0
0
Circuitos lógicos são circuitos construı́dos a partir da interconexão de portas lógicas. Comparado
aos circuitos de chaveamento, as entradas das portas lógicas em um circuito lógico correspondem às
chaves enquanto uma saı́da corresponde a indicar se a corrente está passando de um ponto ao outro
no circuito de chaveamento.
Fisicamente, as entradas e a saı́da são quantidades fı́sicas (por exemplo, nı́vel de voltagem). Adotase uma convenção para distinguir dois estados (0 e 1) dependendo da quantidade fı́sica corrente. A
implementação fı́sica de portas lógicas é altamente dependente de tecnologia e não será considerada
nesta disciplina.
Uma vez que entradas e saı́das são sempre 0s ou 1s, podemos pensar em circuitos lógicos como formas
de se expressar funções booleanas de B n em B. Portanto, a álgebra booleana constitui um fundamento
teórico para o projeto de circuitos digitais (ou seja, uma das razões para se estudar álgebra booleana
é justamente para podermos entender e projetar circuitos digitais!).
6.3
Completude funcional
Conforme já vimos anteriormente, qualquer expressão booleana é obtida compondo-se subexpressões
com os operadores + (disjunção), · (conjunção) e . Em particular, vimos que qualquer função de B n
em B pode ser expressa por uma expressão booleana. Isto significa que qualquer função de B n em B
pode ser implementada com circuitos que utilizam apenas as portas E, OU e o inversor NÃO.
Mais ainda, vimos que o sistema algébrico continua completo mesmo restrito aos operadores + e (ou
· e ), pois o outro pode ser expresso em função desses dois.
No caso de portas lógicas, temos os dois casos a seguir:
6.3.1
Portas E e NÃO
a + b = a + b = (a b)
Figura 6: Realização do operador OU com E e NÃO.
6.3.2
Portas OU e NÃO
a b = a b = (a + b)
43
Notas de aula de MAC0329 (2004)
Figura 7: Realização do operador E com OU e NÃO.
6.3.3
Portas NÃO-E / Portas NÃO-OU
Além dos dois casos acima, portas NÃO-E e portas NÃO-OU sozinhas também constituem sistemas
completos. A figura 8 ilustra a expressão de NÃO, E e OU em termos de NÃO-E e em termos de
NÃO-OU.
a
a
a
a
ab
a
a
b
ab
b
a
a+b
a
b
b
a+b
Figura 8: Realização do operador NÃO, E e OU com NÃO-E e com NÃO-OU.
De fato, com respeito à porta NÃO-E temos:
a = a + a = aa
a b = a b + a b = a b + a b = ab ab
a + b = aa + bb = a a + b b = (a a)(b b)
e com respeito à porta NÃO-OU, temos
a = aa = a + a
ab = (a + a)(b + b) = (a + a)(b + b) = (a + a) + (b + b)
a + b = (a + b)(a + b) = (a + b)(a + b) = (a + b) + (a + b)
Notas de aula de MAC0329 (2004)
44
Exemplo: Dada a função f (a, b, c, d) = a+bc+cd, expresse f de forma que sua realiazação corresponda
a um circuito dois-nı́veis utilizando apenas as portas especificadas. Suponha que as entradas da portas
lógicas podem ser variáveis com ou sem complementação.
a) portas NÃO-E
b) portas OU e NÃO-E
c) portas NÃO-OU e OU
No caso (a) basta utilizarmos o fato de que f = f . Assim temos f = f = a + bc + cd = a · b c · cd
No caso (b), basta aplicarmos DeMorgan em cada um dos termos do resultado anterior. Assim temos
f = a · (b + c) · (c + b).
Finalmente, no caso (c) basta aplicarmos DeMorgan novamente. Assim temos f = a+(b + c)+(c + b).
Exercı́cio: Desenho os circuitos correspondentes a cada uma das expressões do exemplo acima.
6.4
Circuitos combinacionais e seqüenciais
Os circuitos combinacionais são aqueles nos quais as saı́das são determinadas em função apenas das
entradas atuais. Os circuitos seqüenciais são aqueles nos quais as saı́das dependem não apenas das
entradas atuais mas também de dados prévios nos instantes anteriores. Pode-se dizer que circuitos
seqüenciais envolvem realimentação, ou seja, eles possuem “memória”.
6.5
Projeto de circuitos combinacionais
Projetar um circuito consiste em especificar um circuito que implementa uma certa funcionalidade
desejada. No projeto de circuitos digitais, várias questões devem ser levadas em consideração tais
como tecnologia, custo, quantidade de portas lógicas a serem utilizadas, eficiência computacional, etc.
A seguir discorremos brevemente sobre alguns aspectos a serem considerados neste curso.
A velocidade de computação é afetada por diversos fatores. Dentre eles, o caminho mais longo (em
termos de quantidade de portas lógicas) que o sinal deve percorrer até produzir o resultado define o
número de nı́veis do circuito. Assim, podemos ter
• circuitos 2-nı́veis
• circuitos multi-nı́veis
Encontrar uma representação compacta 2-nı́veis é um problema que já foi bastante estudado e existem vários algoritmos/técnicas para este problema (Mapa de Karnaugh, método tabular de QuineMcCluskey, Espresso, etc).
Em termos funcionais, os processamentos efetuados pelo computador correspondem à realização de
várias funções (a composição das saı́das de várias funções corresponde ao resultado de um certo processamento). Em vez de especificar um circuito para cada uma das funções, muitas vezes pode-se reduzir
a quantidade de portas lógicas necessárias para implementar todas as funções compartilhando-se subcircuitos entre as várias funções. Portanto, podemos também pensar em circuitos com múltiplas
saı́das.
No caso de simplificação 2-nı́veis de funções booleanas além de algoritmos especı́ficos para simplificar (ou minimizar) funções individualmente, são também importantes os algoritmos para minimizar
Notas de aula de MAC0329 (2004)
45
uma coleção de funções (que não necessariamente resulta em minimização individual, mas resulta em
minimização coletiva). No caso de projeto multi-nı́veis, o problema de simplificação é mais complexo.
A tecnologia a ser utilizada para a realização das funções pode influenciar o tipo de otimização em
questão. Por exemplo, pode-se desejar utilizar apenas um conjunto de portas lógicas (por exemplo
NÃO-E), ou então, pode-se querer utilizar dispositivos programáveis com uma certa estrutura, ou
ainda utilizar circuitos comerciais disponı́veis no mercado.
Os passos básicos para se projetar um circuito são:
• Entender o problema: Identificar os dados de entrada, de controle e de saı́da, e de que forma
o controle age sobre os dados de entrada para produzir a saı́da desejada; assumir hipóteses
razoáveis; dar nomes aos elementos.
• Formular o problema em alguma representação padrão: descrever formalmente a relação entradasaı́da (por exemplo, através de tabelas-verdade ou expressões booleanas).
• Escolher uma implementação: na implementação, a descrição formal (abstrata) deve ser mapeada para algo concreto como portas lógicas. Assim, deve-se decidir a implementação em
termos concretos: lógica 2-nı́veis, lógica multi-nı́veis, lógica NÃO-E, lógica NÃO-OU, PLA, usar
componentes disponı́veis comercialmente, etc.
• Aplicar um procedimento de projeto: uma vez escolhida a implementação, deve-se fazer o mapeamento propriamente dito. No caso de implementação por portas lógicas, um dos objetivos
pode ser a minimização do número total de portas lógicas em uma implementação dois-nı́veis.
Neste caso pode-se aplicar técnicas de minimização dois-nı́veis.
Exemplo: Deseja-se projetar um sistema de alarme contra roubos em um banco. Este sistema será
alimentado por sinais provenientes de 4 linhas. A linha A está conectada a uma chave secreta de
controle, a linha B a um sensor sob um cofre de aço no depósito, a linha C a um relógio a bateria, e a
linha D à fechadura do depósito que abriga o cofre de aço. As seguintes situações produzem voltagem
correspondente ao valor lógico 1 em cada uma das linhas:
A: A chave secreta de controle está fechada
B: O cofre está em sua posição normal
C: O relógio está entre 10:00 e 15:00 horas (horário de atendimento do banco).
D: A porta do depósito que abriga o cofre está fechada
O alarme deve soar (saı́da igual ao valor lógico 1) se a chave secreta de controle está fechada e o cofre
foi movido, ou quando a sala é aberta após o expediente bancário, ou quando o depósito é aberto com
a chave secreta de controle aberta.
Podemos ver que as entradas consistem dos sinais provenientes das 4 linhas e a saı́da será o soar ou
o não soar do alarme. Assim, podemos expressar a saı́da através de uma função f (A, B, C, D). A
função toma valor 1 (isto é, o alarme soa) nos seguintes casos:
A chave secreta de controle está fechada e o cofre foi movido: AB
O depósito é aberta após o expediente bancário: C D
O depósito é aberto com a chave secreta de controle aberta: A D
46
Notas de aula de MAC0329 (2004)
Logo, a função pode ser escrita como f (A, B, C, D) = AB + C D + A D. Esta expressão pode ser
substituı́da por outra equivalente mais adequada à implementação escolhida.
Exercı́cio: Desenhe o circuito de chaveamento e o circuito digital correspondente à função f (a, b, c, d, e) =
(a + b)cd + e.
Exercı́cio: Qual é a função correspondente ao circuito de chaveamento a seguir ?
b
a
d
c
e
f
Exercı́cio: Desenhe circuitos de chaveamento correspondentes às seguintes expressões:
x y z + x (y + y)
x [y (z + w) + z (u + v)]
(a + b + c)(a + bc) + c d + d (b + c)
Exercı́cio: Qual é a função correspondente ao circuito lógico a seguir ?
a
d
c
f
a
b
c
Expresse a função na forma SOP e desenhe o circuito correspondente.
Exercı́cio: Em alguns casos, simplificar a expressão dual é muito mais fácil do que simplificar a
expressão original. Simplifique a função f = cb + abcd + cd + ac + abc + b c d. Dica: considere
g = cb + abcd + cd e h = ac + abc + b c d. Simplifique g ∗ e h∗ e use o fato de que g = (g ∗ )∗ e h = (h∗ )∗ .
Exercı́cio: Suponha que as entradas das portas lógicas podem ser variáveis com ou sem complementação. Dada uma função na forma produto de somas, desenhe circuitos dois-nı́veis utilizando
apenas:
a) portas OU e E
b) portas NÃO-OU
c) portas E e NÃO-OU
d) portas NÃO-E e E
Notas de aula de MAC0329 (2004)
47
Exercı́cio: Uma sala tem duas portas e ambas podem ser utilizadas tanto como entrada como saı́da.
Deseja-se instalar interruptores perto das duas salas de forma que ao entrar na sala seja possı́vel
acendermos a luz da sala e ao saı́rmos da sala seja possı́vel apagarmos as luzes, independentemente
da porta utilizada para entrar ou sair da sala. Podemos pensar nos interruptores como sendo as
entradas do sistema e a lâmpada como sendo a saı́da do sistema. O funcionamento lógico deste sistema
(acender/apagar da lâmpada) pode ser descrito por uma função. Derive a função e em seguida descreva
como implementar o circuito lógico correspondente.
Exercı́cio: No exercı́cio anterior, como ficaria a sua função se a sala fosse imensa e tivesse três portas
?
Exercı́cio: Quais dos seguintes contém circuitos combinacionais e quais contém circuitos seqüênciais?
Justifique a sua reposta.
a) Uma máquina de lavar automática com etapas de molho, lavagem, enxágue e centrifugação.
b) Um circuito de três entradas que produz saı́da 1 sempre que ao menos duas das entradas têm valor
1.
c) Um circuito que divide dois números de dois bits e devolve o quociente e o resto da divisão.
d) Uma máquina que aceita uma cédula de um real e devolve três moedas de 25 centavos, duas moedas
de 10 centavos e uma de 5 centavos.
e) Um relógio digital que toca um alarme quando um determinado horário é atingido.
Exercı́cio: Antônio e Bia têm dois filhos, Carlos e Dina. Quando comem fora, eles sempre vão ou
a um restaurante que serve hamburgueres ou então a outro que serve frangos. Antes de sair de casa,
a famı́lia vota para decidir em qual dos restaurantes irá. O restaurante que recebe maior número de
votos ganha, exceto quando Antônio e Bia votam pelo mesmo restaurante, e neste caso o restaurante
escolhido por eles ganha. Em todas as outras situações de empate, a famı́lia vai ao restaurante de
frangos. Projete um circuito lógico que automaticamente seleciona um restaurante quando a famı́lia
vota.
Notas de aula de MAC0329 (2004)
7
48
Lógica combinacional dois-nı́veis
Objetivo: encontrar expressões mı́nimas na forma soma de produtos ou produto de somas, que podem
ser implementados em circuitos com dois nı́veis de portas lógicas.
Referências para esta parte: capı́tulo 6 de [Hill and Peterson, 1981], capı́tulo 7 de [Micheli, 1994],
capı́tulo 4 de [Mendelson, 1977], etc.
7.1
Revisão
Os dados nos computadores digitais são representados em binário e os processamentos nada mais são
do que mapeamentos de dados binários em dados binários, ou seja, funções que mapeiam n dı́gitos
binários em m dı́gitos binários.
Seja A(n) o conjunto de todas as funções booleanas em A com n variáveis e seja ≤ uma relação definida
em A(n) da seguinte forma:
f ≤ g ⇐⇒ f (a) ≤ g(a), ∀a ∈ An .
Seja (f · g)(a) = f (a) · g(a), (f + g)(a) = f (a) + g(a), e f (a) = f (a), ∀a ∈ An . Fazendo 0(a) = 0 e
1(a) = 1 para todo a ∈ An , o conjunto (A(n), +, ·, , 0, 1) também é uma álgebra booleana.
Daqui em diante consideremos a álgebra booleana hB(n), +, ·, , 0, 1i.
Uma função booleana f : {0, 1}n → {0, 1} pode ser caracterizada em termos de seu conjunto-um,
f h1i = {b ∈ {0, 1}n : f (b) = 1}, bem como em termos do seu conjunto-zero, f h0i = {b ∈ {0, 1}n :
f (b) = 0}.
As funções booleanas que tomam valor 1 em exatamente um elemento de {0, 1}n são denominados
mintermos. Um mintermo em n variáveis é uma conjunção (produto) de exatamente n literais, os
quais envolvem diferentes variáveis. Uma conjunção em que uma Q
variável aparece no máximo uma
vez é usualmente denominada de produto, e expresso como p = ni=1 σi , σi ∈ {xi , xi , 0 0 }, com 0 0
denotando o caractere vazio. Por exemplo, para n = 4, x1 x3 e x2 x3 x4 são exemplos de produtos.
Mintermos (aqueles em que todas as variáveis aparecem exatamente uma vez, ou na forma barrada
ou na forma não-barrada) são também chamados de produtos canônicos.
Os átomos de hB(n), +, ·, , 0, 1i são os 2n mintermos. Portanto, toda função booleana pode ser escrita
como uma disjunção (soma) de mintermos distintos. Mais ainda, tal representação é única a menos
da ordem dos mintermos e será denominada soma canônica de produtos (SOP canônica).
7.2
Simplificação de notação
O conjunto de todas as seqüências de n bits correspondem à representação binária dos números entre 0
e 2n − 1. Com base neste fato, podemos caracterizar os produtos canônicos, e as somas canônicas (que
serão denominadas maxtermos) através da notação decimal correspondente. A tabela 1 apresenta
os mintermos e maxtermos para três variáveis e a notação associada a cada um deles.
Observe que x1 x2 x3 = 1 se e somente se x1 = 1, x2 = 0 e x3 = 1. Portanto, a SOP canônica de uma
expressão booleana pode ser diretamente obtida através da soma dos mintermos correspondentes aos
1’s da sua tabela-verdade. Analogamente, (x1 + x2 + x3 ) = 0 se e somente se x1 = 0, x2 = 1 e x3 = 0,
49
Notas de aula de MAC0329 (2004)
x1 x2 x3
000
001
010
011
100
101
110
111
maxtermos
x 1 + x 2 + x 3 = M0
x 1 + x 2 + x 3 = M1
x 1 + x 2 + x 3 = M2
x 1 + x 2 + x 3 = M3
x 1 + x 2 + x 3 = M4
x 1 + x 2 + x 3 = M5
x 1 + x 2 + x 3 = M6
x 1 + x 2 + x 3 = M7
mintermos
x 1 x 2 x 3 = m0
x 1 x 2 x 3 = m1
x 1 x 2 x 3 = m2
x 1 x 2 x 3 = m3
x 1 x 2 x 3 = m4
x 1 x 2 x 3 = m5
x 1 x 2 x 3 = m6
x 1 x 2 x 3 = m7
Tabela 1: Tabela de maxtermos e mintermos
e portanto, a POS canônica pode ser obtida pelo produto dos maxtermos correspondentes aos 0’s da
tabela-verdade.
Exemplo: Dada a tabela-verdade
x1 x2 x3
000
001
010
011
100
101
110
111
f1
1
1
0
0
1
1
1
0
a forma SOP canônica da função é
f (x1 , x2 , x3 ) = x1 x2 x3 + x1 x2 x3 + x1 x2 x3 + x1 x2 x3 + x1 x2 x3
e sua notação simplificada é dada por :
f (x1 , x2 , x3 ) =
X
m(0, 1, 4, 5, 6).
A forma POS canônica é f (x1 , x2 , x3 ) = (x1 + x2 + x3 )(x1 + x2 + x3 )(x1 + x2 + x3 ) =
7.3
Q
M (2, 3, 7).
Minimização de funções booleanas
Quando pensamos em minimização, devemos estabelecer um critério de custo que desejamos minimizar.
O seguinte critério é bastante utilizado.
Definição: Uma expressão booleana escrita como soma de produtos é minimal se (1) não existe
nenhuma outra expressão equivalente com um número menor de termos e (2) não existe nenhuma
outra expressão equivalente com igual número de termos mas com menor número de literais.
Definição: Um implicante primo (ou simplesmente primo) de uma função booleana f é um
produto p tal que p ≤ f , e não há outro produto p0 , p ≤ p0 , tal que p0 ≤ f .
50
Notas de aula de MAC0329 (2004)
Dada uma expressão minimal, se um literal de qualquer um dos produtos da expressão é removida, a
expressão resultante não mais representa a mesma função.
Teorema: Qualquer produto em uma expressão minimal do tipo soma de produtos é um implicante
primo.
7.3.1
Representação cúbica (ou via intervalos)
Um conceito utilizado com bastante freqüência no contexto de manipulação de funções booleanas é o
de cubos.
As seqüências de n bits, correspondentes a todas as possı́veis combinações de valores que as n variáveis
de uma função Booleana podem tomar, podem ser representadas por pontos no n-espaço. A coleção
de todos os 2n pontos possı́veis formam os vértices de um n-cubo. A figura 9 mostra um 3-cubo.
111
011
101
110
001
010
100
000
Figura 9: Diagrama do 3-cubo.
Os vértices de um n-cubo são denominados 0-cubos. Dois 0-cubos formam um 1-cubo se eles diferem
em apenas uma coordenada. Quatro 0-cubos formam um 2-cubo se eles são iguais a menos de duas
coordenadas. De modo geral, 2k 0-cubos formam um k-cubo se eles são exatamente iguais a menos de
k coordenadas.
Mais formalmente, um cubo é um conjunto de elementos em {0, 1}n para os quais um produto toma
valor 1, i.e., se p é um produto então o cubo correspondente é o conjunto ph1i = {b ∈ {0, 1}n : p(b) =
1}. Portanto, existem tantos cubos contidos em {0, 1}n quanto produtos envolvendo as variáveis
x1 , x 2 , . . . , x n .
Cubos não são subconjuntos arbitrários de {0, 1}n . No contexto de reticulados, cubos são subreticulados do reticulado {0, 1}n , denominados intervalos.
Um intervalo é caracterizado por dois extremos: o menor e o mair elementos contidos nele. Assim, o
intervalo de extremo inferior 100 e extremo superior 101 é denotado [100, 101] e definido por [100, 101] =
{x ∈ {0, 1}3 : 100 ≤ x ≤ 101}.
Denotamos um k-cubo colocando um X nas coordenadas que não são iguais. Assim, o 1-cubo
{000, 100}, que corresponde ao intervalo [000, 100], é representado por X00. O 2-cubo {000, 001, 100, 101},
que corresponde ao intervalo [000, 101], é representado por X0X.
NOTA: Daqui em diante utilizaremos arbitrariamente os termos produto, cubo ou intervalo
quando nos referirmos a um produto.
Uma função booleana com poucas variáveis (tipicamente 3 ou 4) pode ser graficamante ilustrada
através do diagrama de Hasse. Usaremos a convensão de desenhar elementos de f h1i como cı́rculos
preenchidos, enquanto os elementos de f h0i serão representados por cı́rculos não preenchidos. A
51
Notas de aula de MAC0329 (2004)
representação via diagrama de Hasse da função f1 (x1 , x2 , x3 ) = x1 x2 x3 + x1 x2 x3 + x1 x2 x3 + x1 x2 x3
é mostrada na figura 10.
111
011
101
001
010
110
100
000
Figura 10: Representação via diagrama de Hasse da função f1 .
Exemplo: A figura 11 mostra alguns cubos. Dizemos que o 0-cubo 000 está contido no (ou é coberto
pelo) 1-cubo X00, ou ainda, que o 1-cubo X00 cobre o 0-cubo 000. Analogamente, dizemos que o
1-cubo X00 está contido no 2-cubo X0X ou que o 2-cubo X0X cobre o cubo X00.
X00
X0X
000
a
b
c
Figura 11: Os cubos 000, X00 e X0X.
Dada uma função f e um produto p, dizemos que o conjunto ph1i é um cubo de f se p ≤ f (ou,
equivalentemente, se ph1i ⊆ f h1i). Neste sentido, mintermos são cubos de tamanho unitário e primos
são cubos maximais contidos em f h1i (i.e., um cubo de f que não é totalmente contido em outro cubo
de f ).
Os dois primeiros cubos da Fig. 12 (em negrito) são cubos da função f1 mas os dois últimos não são.
Figura 12: Exemplos de um 0-cubo (intervalo 011), um 1-cubo (intervalo 0X1), um 2-cubo (intervalo
0XX) e um 3-cubo (intervalo XXX), respectivamente (em negrito).
P
Exemplo: A função Booleana f =
m(0, 1, 4, 5, 6) é representada pelos vértices 000, 001, 100, 101
e 110. Os mintermos (ou intervalos triviais) de f e os implicantes primos (ou cubos ou intervalos
maximais) de f são mostrados respectivamente nas figura 13a e 13b.
A forma SOP canônica de f pode ser entendida como sendo a coleção de 0-cubos de f ou, equivalentemente, como a coleção de intervalos triviais (intervalos com apenas um elemento), cada um deles
correspondendo a um elemento em f h1i. Em geral, qualquer expressão na forma SOP corresponde a
uma coleção de cubos (ou intervalos) onde nenhum deles está propriamente contido em outro.
52
Notas de aula de MAC0329 (2004)
101
110
1X0
001
100
X0X
000
a
b
Figura 13: (a) Mintermos e (b) implicantes primos de f =
7.4
P
m(0, 1, 4, 5, 6).
Mapas de karnaugh
A minimização de uma expressão Booleana pode ser realizada algebricamente aplicando-se os axiomas
e leis da álgebra Booleana. Entretanto, a manipulação algébrica, além de ser uma tarefa cansativa,
pode facilmente induzir uma pessoa a cometer erros, principalmente quando o número de variáveis
envolvidas é grande. Mapas de Karnaugh são diagramas que são utilizados para auxiliar este processo.
Qualquer livro que cobre funções booleanas (funções de chaveamento), projeto de circuitos lógicos ou
minimização lógica apresenta a minimização de funções booleanas utilizando mapas de Karnaugh (ou
K-maps). Mapas de Karnaugh podem ser utilizadas para minimização (manual) de funções com até 6
variáveis. (Este tópico será coberto em sala de aula, mas não haverá notas de aula sobre este tópico1 ).
7.5
Minimização Tabular de Quine-McCluskey
Mapas de Karnaugh representam uma maneira visual e intuitiva de se minimizar funções booleanas.
No entanto, elas só se aplicam a funções com até 6 variáveis e não são sistemáticos (adequados para
programação). O algoritmo tabular de Quine-McCluskey para minimização de funções Booleanas é um
método clássico que sistematiza este processo de minimização para um número arbitrário de variáveis.
O algoritmo de Quine-McCluskey (QM) requer que a função booleana a ser minimizada esteja na
forma SOP canônica. A idéia básica deste algoritmo consiste em encarar os mintermos da SOP
canônica como pontos no n-espaço, ou seja, como vértices de um n-cubo. A partir do conjunto destes
vértices (ou 0-cubos) procura-se gerar todos os 1-cubos possı́veis combinando-se dois deles (equivale
a gerar as arestas do cubo que ligam dois 0-cubos considerados). A partir da combinação de dois
1-cubos procura-se gerar todos os possı́veis 2-cubos e assim por diante, até que nenhum cubo de
dimensão maior possa ser gerado a partir da combinação de dois cubos de dimensão menor. Os cubos
resultantes (aqueles que não foram combinados com nenhum outro) ao final de todo o processo são os
implicantes primos.
Este processo de minimização pode ser facilmente associado ao processo algébrico de simplificação. Os
mintermos da expressão na forma canônica inicial correspondem aos 0-cubos. Combinar dois 0-cubos
para gerar um 1-cubo corresponde a combinar dois mintermos para eliminar uma variável e gerar um
termo com menos literais para substituı́-los, como mostramos no seguinte exemplo :
x1 x2 x3 + x1 x2 x3 = x1 x2 (x3 + x3 ) = x1 x2 · 1 = x1 x2
Quando considerados no 3-espaço, o processo mostrado na expressão algébrica acima corresponde ao
processo de agruparmos os 0-cubos 111 e 110 para geração do 1-cubo 11X, como ilustra a figura 14.
1
A não ser que alguém se dispunha a desenhar os mapas ou digitalizar os mapas de algum livro.
53
Notas de aula de MAC0329 (2004)
111
11X
110
Figura 14: Passo elementar do algoritmo de Quine-McCluskey
7.5.1
Cálculo de implicantes primos
A primeira parte do algoritmo QM consiste de um processo para determinação de todos os implicantes
primos. A seguir descrevemos os processos queP
constituem esta parte e, ao mesmo tempo, mostramos
a sua aplicação sobre a função f (x1 , x2 , x3 ) =
m(0, 1, 4, 5, 6).
• Primeiro passo : converter os mintermos para a notação binária.
000, 001, 100, 101, 110
• Segundo passo : Separar os mintermos em grupos de acordo com o número de 1’s em sua
representação binária e ordená-los em ordem crescente, em uma coluna, separando os grupos
com uma linha horizontal.
000
001
100
101
110
• Terceiro passo : combinar todos os elementos de um grupo com todos os elementos do grupo
adjacente inferior para geração de cubos de dimensão maior. Para cada 2 grupos comparados
√
entre si, gerar um novo grupo na próxima coluna e colocar os novos cubos. Marcar com
os
cubos que foram usados para gerar novos cubos.
√
√
√
√
√
000
001
100
101
110
=⇒
00X
X00
X01
10X
1X0
Observação : o novo cubo gerado será inserido no novo conjunto se e somente se ele ainda não
estiver contido nele.
Repetir o processo para cada nova coluna formada, até que nenhuma combinação mais seja
possı́vel.
√
√
√
√
√
000
001
100
101
110
=⇒
√
√
√
√
00X
X00
X01
10X
1X0
=⇒
X0X
54
Notas de aula de MAC0329 (2004)
• Quarto passo : Listar os implicantes primos. Os implicantes primos são aqueles que não foram
√
combinados com nenhum outro, ou seja, aqueles que não estão com a marca .
1X0 e X0X
À primeira vista, poderı́amos afirmar que a soma de todos os implicantes primos corresponde à expressão minimal da função Booleana. No entanto, existem casos em que a soma de dois ou mais
implicantes primos cobre um outro. Neste caso, este último termo é redundante, no sentido de que
ele pode ser eliminado do conjunto de implicantes primos, sem que a expressão resultante deixe de ser
equivalente à expressão original. Podemos ilustrar esta situação no seguinte exemplo.
P
Exemplo: Considere a expressão Booleana f (a, b, c) =
m(0, 1, 3, 7). Pelo algoritmo QM obtemos
os seguintes implicantes primos:
00X, 0X1 e X11.
Graficamente, estes implicantes primos (ou cubos) correspondem respectivamente aos intervalos [000, 001],
[001, 011] e [011, 111] ilustrados na figura 15(a). Note, porém, que o intervalo [001, 011] é redunX11
0X1
00X
a
b
Figura 15: Os (a) implicantes primos e uma (b) cobertura mı́nima .
dante, ou seja, a mesma expressão pode ser expressa apenas pelos implicantes primos 00X e X11
(figura 15(b)).
Portanto, o ponto central da segunda parte do algoritmo QM é o cálculo de um menor subconjunto
do conjunto de implicantes primos suficientes para cobrir2 todos os mintermos da função Booleana.
Tal conjunto é denominado uma cobertura mı́nima.
7.5.2
Cálculo de uma cobertura mı́nima
Uma cobertura mı́nima pode ser calculada com a ajuda de uma tabela denominada Tabela de Implicantes
Primos, conforme descrito a seguir (com exemplos para para a função f (x1 , x2 , x3 , x4 , x5 ) =
P
(1, 2, 3, 5, 9, 10, 11, 18, 19, 20, 21, 23, 25, 26, 27)).
1. Construir a Tabela de Implicantes Primos : no topo das colunas deve-se colocar os mintermos
de f e, à esquerda de cada linha, os implicantes primos. Os implicantes primos devem ser listados
em ordem decrescente de acordo com a sua dimensão, isto é, em ordem crescente de acordo com
o número de literais. Deve-se acrescentar uma coluna à esquerda e uma linha na parte inferior.
√
Em cada linha, marcar as colunas com quando o implicante primo da linha cobre o mintermo
da coluna.
2
Um conjunto de implicantes primos (cubos maximais) cobre um mintermo (0-cubo) se este é coberto por pelo menos
um dos implicantes primos.
55
Notas de aula de MAC0329 (2004)
1
XX01X
X10X1
0X0X1
00X01
X0101
1010X
10X11
101X1
2
√
√
√
3
√
5
9
10
√
√
√
√
11
√
√
√
18
√
19
√
20
21
23
25
26
√
√
√
√
√
27
√
√
√
√
√
√
√
√
2. Selecionar os implicantes primos essenciais : deve-se procurar na tabela as colunas que contém
√
√
apenas uma marca . A linha na qual estas colunas contém a marca
corresponde a um
implicante primo essencial. Em outras palavras, este implicante primo é o único que cobre
o mintermo da coluna e, portanto, não pode ser descartado. Então, deve-se marcar com um
asterisco (*) esta linha na coluna mais à esquerda, para indicar que este é um implicante primo
essencial. A seguir, deve-se marcar, na última linha da tabela, todas as colunas cujo mintermo
é coberto pelo implicante primo selecionado.
1
*
XX01X
X10X1
0X0X1
00X01
X0101
1010X
10X11
101X1
2
√
√
√
3
√
5
9
10
√
√
√
√
11
√
√
√
18
√
19
√
20
21
√
√
√
√
26
√
27
√
√
√
√
√
√
√
√
25
√
√
√
√
23
√
√
√
√
Deve-se repetir este processo enquanto existir uma coluna cujo mintermo não está coberto pelo
conjunto de implicantes primos selecionados até o momento e que satisfaz as condições descritas.
1
*
*
*
XX01X
X10X1
0X0X1
00X01
X0101
1010X
10X11
101X1
2
√
√
√
3
√
5
9
10
√
√
√
√
11
√
√
√
18
√
19
√
20
21
√
√
√
√
√
√
√
√
√
√
√
25
26
√
27
√
√
√
√
√
√
√
√
23
√
√
√
√
√
3. Reduzir a tabela : manter apenas as colunas correspondentes aos mintermos não cobertos pelos
implicantes primos essenciais, e as linhas correspondentes aos implicantes primos que não foram
selecionados e que cobrem pelo menos um mintermo ainda não coberto.
0X0X1
00X01
X0101
10X11
101X1
1
√
√
5
23
√
√
√
√
56
Notas de aula de MAC0329 (2004)
4. Selecionar os implicantes primos secundariamente essenciais : eliminar as linhas dominadas e as
colunas dominantes e, em seguida, selecionar os essenciais.
Eliminar colunas dominantes: Diz-se que uma coluna β na Tabela de Implicantes Primos
√
√
domina uma coluna α se e somente se β tem um
em todas as linhas em que α tem . Se β
domina α, então ela pode ser removida da tabela.
Eliminar linhas dominadas: Diz-se que uma linha A na Tabela de Implicantes Primos domina
uma outra linha B se e somente se o número de literais em A é menor que o de B, e A tem
√
√
em pelo menos todas as colunas em que B tem . Se A domina B, então existe uma forma
minimal que não utiliza o termo da linha B, ou seja, a linha B pode ser removida da tabela.
A seguir, deve-se repetir o mesmo processo do passo 2, porém os implicantes primos essenciais
serão chamados secundariamente essenciais e marcados com dois asteriscos (**), e em seguida
fazer a redução da tabela (passo 3).
**
**
0X0X1
00X01
10X11
1
√
√
5
√
√
√
23
√
√
Deve-se repetir o processo descrito neste passo até que não seja mais possı́vel fazer qualquer
eliminação ou até que a tabela fique vazia. Se a tabela não ficar vazia, a tabela restante é
chamada tabela cı́clica.
5. Aplicar o método de Petrick : este método (de busca exaustiva) pode ser utilizado para resolver
a tabela cı́clica. Ele fornece todas as possı́veis combinações dos implicantes primos restantes
que são suficientes para cobrir os mintermos restantes. Deve-se escolher dentre elas, aquela que
envolve o menor número de termos. Caso existam mais de uma nestas condições, deve-se escolher
a de custo mı́nimo (aquela que envolve menor número de literais).
Exemplo: Considere a tabela cı́clica a seguir:
0
a
b
c
d
e
f
g
0X10X
011XX
01X1X
1X0X0
00X00
X1010
X0000
√
4
√
13
√
√
15
10
√
√
√
16
√
√
√
√
√
26
√
√
Para que todos os mintermos da tabela cı́clica sejam cobertos, a seguinte expressão deve ser
verdadeira.
(e + g)(a + e)(a + b)(b + c)(c + f )(d + f )(d + g) = 1
Transformando esta expressão em soma de produtos, obtemos todas as possı́veis soluções (cada
produto é uma solução viável). Dentre os produtos, deve-se escolher aquele(s) de menor custo
(menor número de implicantes primos e implicantes com menor número de literais). (Se eu não
errei nos cálculos, as soluções são {a, c, d, e}, {b, c, d, e} e {a, c, d, g} (outros tem custo maior).
Notas de aula de MAC0329 (2004)
7.5.3
57
Pontos fracos do algoritmo QM
• o algoritmo requer que a função esteja na forma SOP canônica
• o número de implicantes primos de uma função booleana com n variáveis pode ser de ordem
exponencial. Um dos pontos fracos do algoritmo de QM é que ele calcula todos os implicantes
primos explicitamente.
7.6
Funções incompletamente especificadas
Em algumas situações, o valor de uma função para algumas entradas não são relevantes (tipicamente
porque tais entradas nunca ocorrerão na prática). Em tais situações, tanto faz se a função toma valor
0 ou 1 nessas entradas, que serão denominadas de don’t cares.
Para minimizar pelo algoritmo QM uma função incompletamente especificada, é interessante considerarmos todos os don’t cares na etapa de cálculo dos implicantes primos, pois isto aumenta a chance
de eliminarmos a quantidadde de produtos.
De forma mais genérica do que a vista anteriormente, podemos então caracterizar uma função booleana
f através dos seus conjuntos um, zero e dc (de don’t care), definidos respectivamente por f h1i = {b ∈
{0, 1}n : f (b) = 1}, f h0i = {b ∈ {0, 1}n : f (b) = 0} e f h∗i = {0, 1}n \ (f h1i ∪ f h0i).
Na parte de cálculo dos implicantes primos devem ser utilizados todos os elementos de f h1i ∪ f h∗i.
Na parte de cálculo de uma cobertura mı́nima devem ser considerados apenas os elementos de f h1i.
7.7
O algoritmo ISI
Podemos dizer que o algoritmo QM utiliza uma abordagem bottom-up para gerar todos os implicantes
primos. Outra possı́vel abordagem é a top-down, utilizada pelo ISI (Inremental splitting of intervals).
O ISI inicia o processo a partir do n-cubo e, sucessivamente, elimina os zeros da função, tomando
cuidado em representar os elementos que restam após uma eliminação através do conjunto de seus
intervalos maximais. Assim, depois de eliminar todos os zeros, os elementos restantes correspondem
aos uns (mintermos) da função, os quais estarão representados pelos intervalos maximais, ou seja,
pelos implicantes primos da função.
Para fazer paralelo com algo mais concreto, podemos pensar que o QM é aquele processo em que o
fulano constrói uma parede juntando os tijolos, enquanto o ISI é aquele em que o fulano esculpe uma
tora de madeira para obter a obra desejada.
7.7.1
Passo básico do ISI
Remover um elemento de um cubo (intervalo) e representar os elementos restantes pelos subintervalos
maximais contidos neles é a chave do algoritmo ISI.
Sejam [A, B] e [C, D] dois intervalos em {0, 1}n . A diferença de [A, B] e [C, D] é o conjunto
[A, B] \ [C, D] = {x ∈ {0, 1}n : x ∈ [A, B] e x 6∈ [C, D]}
que pode também ser expresso por [A, B] \ [C, D] = [A, B] ∩ [C, D]c .
(1)
58
Notas de aula de MAC0329 (2004)
Proposição: Sejam [A, B] e [C, D] dois intervalos de {0, 1}n cuja interseção é não-vazia. Então,
[A, B] \ [C, D] =
(2)
n
o
0
0
[A, B ] : B é elemento maximal daqueles que não contém nenhum elemento de [C, D] ∪
n
o
[A0 , B] : A0 é elemento minimal daqueles que não estão contidos em nenhum elemento de [C, D] .
A equação acima mostra como a diferença de intervalos pode ser expressa em termos da coleção de
intervalos maximais contidos na diferença.
Se dim([A, B]) = k, qualquer intervalo maximal contido na diferença tem dimensão k − 1. O número
de intervalos maximais contidos na diferença é dado por dim([A, B]) − dim([A, B] ∩ [C, D]).
Exemplo: Mostramos a seguir algumas diferenças representadas pelos intervalos maximais contidos
na diferença.
Sejam [A, B] = [000, 111] e [C, D] = [001, 111]. O número de intervalos em [A, B]\[C, D] é dim([A, B])−
dim([A, B] ∩ [C, D]) = 3 − 2 = 1 e a dimensão dos intervalos resultantes é dim([A, B]) − 1 = 3 − 1 = 2.
Veja Fig. 16.
111
111
011
101
001
010
110
100
011
001
000
101
110
010
100
000
Figura 16: [000, 111] \ [001, 111] = {[000, 110]}.
Sejam [A, B] = [000, 111] e [C, D] = [001, 011]. O número de intervalos em [A, B]\[C, D] é dim([A, B])−
dim([A, B] ∩ [C, D]) = 3 − 1 = 2 e a dimensão dos intervalos resultantes é dim([A, B]) − 1 = 3 − 1 = 2.
Veja Fig. 17.
110
111
010
011
101
110
100
011
000
111
001
010
100
001
101
110
000
100
Figura 17: [000, 111] \ [001, 011] = {[000, 110], [100, 111]}.
Sejam [A, B] = [000, 111] e [C, D] = [011, 011]. Este é o caso em que apenas um ponto do cubo é
removido. O número de intervalos em [A, B] \ [C, D] é dim([A, B]) − dim([A, B] ∩ [C, D]) = 3 − 0 = 3
e a dimensão dos intervalos resultantes é dim([A, B]) − 1 = 3 − 1 = 2. Veja Fig. 18.
59
Notas de aula de MAC0329 (2004)
110
010
100
000
111
111
011
101
001
010
110
011
101
110
100
100
000
101
001
100
000
Figura 18: [000, 111] \ [011, 011] = {[000, 110], [100, 111], [000, 101]}.
7.7.2
Um exemplo completo
Consideremos a minimização da função f (x1 , x2 , x3 ) = x1 x2 x3 + x1 x2 x3 + x1 x2 x3 + x1 x2 x3 + x1 x2 x3 .
Temos f h0i = {111, 011, 010}. A figura 19 mostra os elementos que permanecem após as sucessivas
remoções dos elementos em f h0i. Cada seta indica um passo de remoção (note que não mostramos
os intervalos maximais resultantes individualmente, mostramos os elementos restantes em negrito). A
figura 20 mostra o mesmo processo em uma estrutura de árvore. Cada nı́vel da árvore corresponde ao
resultado após um passo de remoção. Note que alguns intervalos podem ser descartados por estarem
contidos em outros.
111
011
101
110
011
101
110
001
010
100
001
010
100
000
000
001
101
110
010
100
001
110
100
000
Figura 19:
Cálculo de implicantes primos de f (f h0i
{000, 001, 100, 101, 110}). Ordem de remoção: 111, 011 e 010.
7.7.3
101
000
=
{010, 011, 111} e f h1i
=
ISI: Minimização de funções incompletamente especificadas
O algoritmo ISI remove sucessivamente os zeros do cubo inicial de forma a obter, ao final do processo,
o conjunto de todos os intervalos maximais de f h1i (i.e., implicantes primos). Se a função possui don’t
cares, então ao final do processo serão obtidos os intervalos maximais de f h1i ∪ f h∗i. No entanto,
intervalos que são formados inteiramente por elementos de f h∗i não serão necessários na etapa de
cálculo de uma cobertura mı́nima. Portanto, estes podem ser descartados, assim que são detectados
durante o processo de remoção dos zeros.
Mostramos a idéia através da sua aplicação na minimização de f , com f h0i = {010, 111}, f h1i =
{000, 001, 101} e f h∗i = {100, 011, 110}, cujo processo é ilustrado nas figuras 21 and 22.
60
Notas de aula de MAC0329 (2004)
XXX
0XX
00X
a
X0X
0X0
XX0
X0X
b
XX0
X0X
c
X00
1X0
d
Figura 20:
Cálculo de implicantes primos de f (f h0i = {010, 011, 111} e f h1i =
{000, 001, 100, 101, 110}). (a) intervalo inicial; (b) após remoção de 111 ; (c) após remoção de 011; (d)
resultado final, após remoção de 010.
Os elementos que são don’t cares são representados no diagrama de Hasse como vértices sem os cı́rculos;
cı́rculos preenchidos representam elementos de f h1i enquanto os não preenchidos representam os de
f h0i. As arestas em negrito indicam que os elementos adjacentes a ela fazem parte de um intervalo.
No inı́cio do processo, todos os elementos fazem parte do intervalo XXX. Após a remoção de 111,
três intervalos são gerados: 0XX, X0X and XX0. Nenhum deles pode ser descartado pois todos eles
contém pelo menos um elemento de f h1i. Em seguida, o elemento 010 é removido dos intervalos 0XX,
and XX0, produzindo os intervalos 00X, 0X1 and X00, 1X0, respectivamente. Os intervalos 00X and
X00 podem ser descartados pois estão contidos em X0X. O intervalo 1X0 pode ser descartado pois
não cobre nenhum elemento de f h1i. Assim, os intervalos que restam são X0X and 0X1. O segundo
será eliminado no processo de cálculo de cobertura mı́nima.
Note que a função resutante é consistente com a inicial; dos elementos em f h∗i, 011 e 110 são mapeados
para 0, e somente 100 é mapeado para 1.
111
011
101
110
001
010
100
000
011
101
110
001
010
100
000
011
101
110
100
001
011
101
100
001
000
000
Figura 21: Cálculo de implicantes primos de f (f h0i = {010, 111}, f h1i = {000, 001, 101} e f h∗i =
{100, 011, 110}).
7.8
Diferença entre QM e ISI
Ambos calculam todos os implicantes primos e depois uma cobertura mı́nima. No entanto, quando a
função possui don’t cares, o ISI tem a vantagem de não manipular explicitamente os don’t cares.
7.9
Outros algoritmos de minimização lógica 2-nı́veis
Muito esforço ocorreu nas décadas de 1980 e inı́cio da década de 1990 no sentido de se desenvolver
programas para minimização de funções com várias variáveis. O algoritmo QM é um processo de-
REFERÊNCIAS
61
XXX
0XX
00X
0X1
a
X0X
X0X
XX0
X00
b
1X0
c
Figura 22: Cálculo de implicantes primos de f (f h0i = {010, 111}, f h1i = {000, 001, 101} e f h∗i =
{100, 011, 110}).
morado e além disso utiliza muita memória, o que limita sua utilidade na prática para funções com
relativamente poucas variáveis (poucas dezenas).
Os esforços realizados foram no sentido de achar alternativas nos quais os implicantes primos não
precisassem ser calculados explicitamente, formas eficientes para se calcular uma cobertura mı́nima e
heurı́sticas eficientes.
Um dos programas mais utilizados atualmente é o ESPRESSO (desenvolvido por um grupo da Universidade de Berckley) [Brayton et al., 1984, McGreer et al., 1993]. Depois do ESPRESSO, foram
propostas outras melhorias (como o uso de BDD — Binary Decision Diagrams) por Coudert e outros [Coudert, 1994, Coudert, 1995], e mais recentemente o BOOM [Fis̃er and Hlavicka, 2003].
Referências
[Brayton et al., 1984] Brayton, R. K., Hachtel, G. D., McMullen, C. T., and Sangiovanni-Vincentelli,
A. L. (1984). Logic Minimization Algorithms for VLSI Synthesis. Kluwer Academic Publishers.
[Coudert, 1994] Coudert, O. (1994). Two-level Logic Minimization: an Overview. Integration, the
VLSI Journal, 17(2):97–140.
[Coudert, 1995] Coudert, O. (1995). Doing Two-level Minimization 100 Times Faster. In Proc. of
Symposium on Discrete Algorithms (SODA), San Francisco CA.
[Fis̃er and Hlavicka, 2003] Fis̃er, P. and Hlavicka, J. (2003). Boom - a heuristic boolean minimizer.
Computers and Informatics, 22(1):19–51.
[Hill and Peterson, 1981] Hill, F. J. and Peterson, G. R. (1981). Introduction to Switching Theory and
Logical Design. John Wiley, 3rd edition.
[Katz, 1994] Katz, R. H. (1994). Contemporary Logic Design. Benjamin Cummings.
[McGreer et al., 1993] McGreer, P. C., Sanghavi, J., Brayton, R. K., and Sangiovanni-Vincentelli,
A. L. (1993). Espresso-Signature : A New Exact Minimizer for Logic Functions. IEEE trans. on
VLSI, 1(4):432–440.
[Mendelson, 1977] Mendelson, E. (1977). Álgebra Booleana e Circuitos de Chaveamento. Mcgraw-Hill.
[Micheli, 1994] Micheli, G. D. (1994). Synthesis and Optimization of Digital Circuits. McGraw-Hill.

Documentos relacionados