Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais

Na Aldeia

Há 68 visitantes online

3308 registros
0 hoje
12 nesta semana
45 neste mês

Boas vindas: paulo

Estatística

Artigos: 1064
Leituras: 6041961
Arquivados: 21
Downloads: 533
Baixados: 172403
Glossário: 1208
Bibliografia: 25
Links: 90

Visitas de onde

Top 5:
Brasil flag 73%Brasil (49362)
Portugal flag 5%Portugal (3198)
EUA flag 3%EUA (2236)
Rússia flag 0%Rússia (265)
Holanda flag 0%Holanda (240)
67800 visitas de 101 países

Hoje:189
Ontem:2619
No mês:41985
Mês passado:25815
Total:67800
Recorde:3037
No dia:04.03.10
Leituras hoje:21630
Leituras Total:291058
Bots hoje:140
Dados desde:16.02.2010

Login



Kanji da hora




Faça contato






Sáb

24

Fev

2007


22:38

AoA - Laboratório Cap.2 PDF Imprimir Indique esta página
(3 votos, média 3.7 de 5)


Uma função booleana é uma representação matemática abstrata de um procedimento computacional ou de um circuito eletrônico. Um programa e um circuito eletrônico são matematicamente equivalentes. Neste laboratório vamos explorar esta equivalência.

A álgebra booleana

A álgebra booleana é um sistema matemático com dois valores (zero e um) e com três operadores lógicos (AND, OR e NOT). O sistema booleano é fechado em relação a estas três operações, isto é, dados operandos booleanos, estes operadores sempre produzem um resultado booleano. As operações lógicas AND e OR são comutativas, ou seja, os operandos podem trocar de posição que o resultado permanece o mesmo. As operações lógicas AND e OR são associativas, isto é, A AND (B AND C) é igual a (A AND B) AND C. O mesmo vale para o OR lógico. As operações lógicas AND e OR também são distributivas, o que quer dizer que A AND (B OR C) é igual a (A AND B) OR (A AND C). Da mesma forma, A OR (B AND C) é igual a (A OR B) AND (A OR C). O valor 1 é o elemento de identidade em relação ao AND lógico, o valor zero é o elemento de identidade em relação ao OR lógico. Para qualquer valor booleano A existe um outro valor A' que não é igual a A (é o inverso de A). A OR A' é 1 (ou A + A' = 1) e A AND A' é zero (ou A x A' = 0). Estas declarações formam os postulados básicos do sistema algébrico booleano. É possível provar todos os teoremas e fatos do sistema booleano usando este conjunto de postulados.

pergunta Q02.01 - Qual é a regra (postulado) que podemos usar para provar que A AND (B AND C) é igual a (A AND B) AND (A AND C)?

Fechar
A lei distributiva.

pergunta Q02.02 - Qual é a regra (postulado) que podemos usar para mostrar que A AND (B AND C) é igual a (A AND B) AND C?

Fechar
A lei associativa.

Usando os postulados acima podemos provar com facilidade vários teoremas importantes da álgebra booleana. Os teoremas mais importantes são:

T1: A + A = A          T8: (AB)' = A' + B'
T2: A x A = A          T9: A + AB = A
T3: A + 0 = A          T10: A x (A + B) = A
T4: A x 1 = A          T11: A + A'B = A + B
T5: A x 0 = 0          T12: A' x (A+B') = A'B'
T6: A + 1 = 1          T13: AB + AB' = A
T7: (A+B)' = A'B'      T14 (A' + B') x (A' + B) = A'

pergunta Q02.03 - No capítulo 1 você aprendeu que pode usar a operação lógica AND para zerar vários bits numa string de bits. Qual dos teoremas acima descreve esta operação?

Fechar
O teorema 5 (T5)

pergunta Q02.04 - No capítulo 1 você aprendeu que pode usar a operação lógica OR para forçar o valor um em vários bits numa string de bits. Qual dos teoremas acima descreve esta operação?

Fechar
O teorema 6 (T6)


Funções booleanas e Tabelas verdade

Uma função booleana, ou expressão, é um conjunto de literais combinadas com os operadores lógicos AND e OR. Uma literal é o valor zero ou 1, ou uma variável plicada (por exemplo, A') ou não plicada (por exemplo, A). A plica (ou linha, como falamos) indica uma negação lógica (NOT). Exemplos de funções booleanas típicas incluem:

F = AB + C          G = A(B + C)          H = A'B'C + ABC'

Dados os valores para A, B e C, podemos calcular os valores das funções acima. Por exemplo, se A=0, B=1 e C=1, então F = 0 x 1 + 1 = 0 + 1 = 1. Da mesma forma, G = 0 x (1 + 1) = 0 x 1 = 0. E, por último, podemos calcular H = 1 x 0 x 1 + 0 x 1 x 0 = 0 + 0 = 0. Entretanto, avaliar funções booleanas desta forma é chato e sujeito a erros. Como é provável que se confunda alguns valores fazendo cálculos mentais, uma solução melhor e mais segura é procurar a resposta numa tabela.

Como existem apenas dois valores booleanos, é possível relacionar todos os valores que uma função booleana possa produzir. Por exemplo, a função F acima usa três variáveis independentes, A, B e C. Dadas n variáveis, cada uma tendo dois valores distintos, há 2n combinações possíveis dos valores destas variáveis. Portanto, existem oito (23) combinações possíveis de A, B e C como entradas da função F. Sabendo disto, fica fácil criar uma tabela que mostre todas as entradas possíveis de uma dada função (ou funções) e colocar os resultados desta função na tabela. Uma tabela deste tipo é chamada de tabela verdade.

Para construir uma tabela verdade, comece listando todas as combinações possíveis das variáveis que aparecem na função. As três funções deste exemplo têm três variáveis de entrada. Neste caso, comece listando os oito valores binários de três bits, que vão de 0 a 7.

CBA Função FFunção GFunção H
000
001
010
011
100
101
110
111

Por convenção, trataremos a variável A como o bit menos significativo e a variável C como o bit mais significativo do número binário. O próximo passo é calcular os valores para cada função. Para a função F calculamos o seguinte:

F(C,B,A) = AB + C
------------------------
F(0,0,0) = 0 x 0 + 0 = 0
F(0,0,1) = 1 x 0 + 0 = 0
F(0,1,0) = 0 x 1 + 0 = 0
F(0,1,1) = 1 x 1 + 0 = 1
F(1,0,0) = 0 x 0 + 1 = 1
F(1,0,1) = 1 x 0 + 1 = 1
F(1,1,0) = 0 x 1 + 1 = 1
F(1,1,1) = 1 x 1 + 1 = 1

O próximo passo é inserir os valores encontrados na tabela verdade na coluna correspondente. Para a função F os valores são:

CBA Função FFunção GFunção H
0000
0010
0100
0111
1001
1011
1101
1111

pergunta Q02.05 - Para a função G, quais são os valores?

Fechar
G(C,B,A) = A(B + C)
--------------------------
G(0,0,0) = 0 x (0 + 0) = 0
G(0,0,1) = 1 x (0 + 0) = 0
G(0,1,0) = 0 x (1 + 0) = 0
G(0,1,1) = 1 x (1 + 0) = 1
G(1,0,0) = 0 x (0 + 1) = 0
G(1,0,1) = 1 x (0 + 1) = 1
G(1,1,0) = 0 x (1 + 1) = 0
G(1,1,1) = 1 x (1 + 1) = 1

pergunta Q02.06 - Para a função H, quais são os valores?

Fechar
H(C,B,A)=A'B'C + ABC'
--------------------------
H(0,0,0) = 0x1x1 + 0x0x1 = 0
H(0,0,1) = 0x1x0 + 1x0x1 = 0
H(0,1,0) = 1x0x0 + 0x1x1 = 0
H(0,1,1) = 0x0x0 + 1x1x1 = 1
H(1,0,0) = 1x1x1 + 0x0x0 = 1
H(1,0,1) = 0x1x1 + 1x0x0 = 0
H(1,1,0) = 1x0x1 + 0x1x0 = 0
H(1,1,1) = 0x0x1 + 1x1x0 = 0

Considere a função F = AB + C'D'. Como esta função usa quatro valores de entrada, existem 24 (16) possíveis combinações diferentes das entradas. Listando estes valores obtemos:

J(D, C, B, A) = AB + C'D'
J(0, 0, 0, 0) = 0x0 + 1x1 = 1
J(0, 0, 0, 1) = 0x1 + 1x1 = 1
J(0, 0, 1, 0) = 1x0 + 1x1 = 1
J(0, 0, 1, 1) = 1x1 + 1x1 = 1
J(0, 1, 0, 0) = 0x0 + 1x0 = 0
J(0, 1, 0, 1) = 0x1 + 1x0 = 0
J(0, 1, 1, 0) = 1x0 + 1x0 = 0
J(0, 1, 1, 1) = 1x1 + 1x0 = 1
J(1, 0, 0, 0) = 0x0 + 0x1 = 0
J(1, 0, 0, 1) = 0x1 + 0x1 = 0
J(1, 0, 1, 0) = 1x0 + 0x1 = 0
J(1, 0, 1, 1) = 1x1 + 0x1 = 1
J(1, 1, 0, 0) = 0x0 + 0x0 = 0
J(1, 1, 0, 1) = 0x1 + 0x0 = 0
J(1, 1, 1, 0) = 1x0 + 0x0 = 0
J(1, 1, 1, 1) = 1x1 + 0x0 = 1

pergunta Q02.07 - Construa a tabela verdade da função J.

Fechar
DCBAFunção J
00001
00011
00101
00111
01000
01010
01100
01111
10000
10010
10100
10111
11000
11010
11100
11111

Para funções booleanas complexas, com muitos termos e operações diferentes, é possível escrever um programa simples que gera automaticamente a tabela verdade. O programa LOGICEV é um bom exemplo, você verá adiante.


Manipulação algébrica de expressões booleanas

Não é surpresa nenhuma que as expressões booleanas possam ser manipuladas algebricamente. Usando os teoremas mostrados no tópico A álgebra booleana, podemos transformar uma expressão booleana numa outra expressão equivalente. Existem duas razões para proceder desta forma: para simplificar expressões complexas ou para transformá-las na forma canônica.

Para demonstrar como se usa transformações algébricas para simplificar uma expressão, o exemplo seguinte está ao contrário. Nele, uma equação simples é transformada algebricamente numa equação complexa. O processo de simplificação é apenas o inverso desta mesma sequência de transformações:

F = ab + c                              função original
  = ab*1 + c                            pelo T4
  = ab(c + c') + c                      lei dos inversos (P5)
  = abc + abc' + c                      lei distributiva (P4)
  = abc + abc' + c + 0                  pelo T3
  = abc + abc' + c + bc*0               pelo T5
  = abc + abc' + c + a'bca              lei dos inversos (P5)
  = a(bc + bc' + a'bc) + c              lei distributiva (P4)
  = a(bc + bc' + a'bc) + c*1            pelo T4
  = a(bc + bc' + a'bc) + c(b+b')        lei dos inversos (P5)
  = a(bc + bc' + a'bc) + cb + cb'       lei distributiva

Obviamente podemos continuar o processo e tornar esta expressão cada vez mais complexa. O importante é saber que esta complexidade pode ser reduzida usando os mesmos passos ao contrário. Infelizmente não existe uma algoritmo simples que descreva este procedimento. É uma questão habilidade que depende de experiência e de tentativa e erro. A seguir, vamos tentar simplificar a seguinte equação lógica para o segmento número quatro de um display de sete segmentos:

S4 = D'C'B'A' + D'C'BA + D'CBA' + DC'B'A'

Tentando otimizar a expressão, o truque é combinar termos que contenham versões plicadas e não plicadas da variável. Na expressão acima, podemos usar a lei distributiva para combinar D'C'B'A' e DC'B'A', obtendo (D+D')C'B'A'. Uma vez que a lei dos inversos diz que D + D' é 1, isto reduz estes dois termos para o termo único C'B'A'. Portanto, uma versão simplificada de S4 é:

S4 = C'B'A' + D'C'BA + D'CBA'

Depois, podemos usar a lei distributiva nos dois últimos termos para reduzí-la para:

S4 = C'B'A' + D'B(C'A + CA')

Este último passo aumentou o número de termos de três para quatro, mas reduziu o número total de operações necessárias para calcular o resultado da função. A versão anterior precisava de oito operações AND e de duas operações OR, a atual precisa apenas de seis operações AND e de duas operações OR.

pergunta Q02.08 - Indique as regras aplicadas em cada uma das etapas da simplificação de S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A.
A primeira etapa resultou em S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A' + DC'B'A.

Fechar
Equação original: S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A

Teorema 1: A = A + A ou D C' B' A' = D C' B' A' + D C' B' A'

Equação ampliada:
S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A' + DC'B'A

pergunta Q02.09 - S0 = C'B'A'(D + D') + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A

Fechar
A lei distributiva: DC'B'A' + DC'B'A' = (D + D')C'B'A'

Equação anterior:
S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A' + DC'B'A

Equação simplificada:
S0 = C'B'A'(D'+D) + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A

pergunta Q02.10 - S0 = C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A

Fechar
A lei dos inversos: D + D' = 1

pergunta Q02.11 - S0 = C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'(A' + A)

Fechar
A lei distributiva: DC'B'A' + DC'B'A = DC'B'(A' + A)

pergunta Q02.12 - S0 = C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'

Fechar
A lei dos inversos: A' + A = 1

pergunta Q02.13 - S0 = C'B'A' + D'C'B(A' + A) + D'CB'A + D'CBA' + D'CBA + DC'B'

Fechar
A lei distributiva: D'C'BA' + D'C'BA = D'C'B(A' + A)

pergunta Q02.14 - S0 = C'B'A' + D'C'B + D'CB'A + D'CBA' + D'CBA + DC'B'

Fechar
A lei dos inversos: A' + A = 1

pergunta Q02.15 - S0 = C'B'A' + D'C'B + D'CB'A + D'CB(A' + A) + DC'B'

Fechar
A lei distributiva: D'CBA' + D'CBA = D'CB(A' + A)

pergunta Q02.16 - S0 = C'B'A' + D'C'B + D'CB'A + D'CB + DC'B'

Fechar
A lei dos inversos: A' + A = 1

pergunta Q02.17 - S0 = C'B'A' + D'C'B + D'CB'A + D'CB + D'CB + DC'B'

Fechar
Teorema 1: A = A + A ou D'CB = D'CB + D'CB

pergunta Q02.18 - S0 = C'B'A' + D'B(C' + C) + D'CB'A + D'CB + DC'B'

Fechar
A lei distributiva: D'C'B + D'CB = D'B(C' + C)

pergunta Q02.19 - S0 = C'B'A' + D'B + D'CB'A + D'CB + DC'B'

Fechar
A lei dos inversos: C' + C = 1

pergunta Q02.20 - S0 = C'B'A' + D'B + D'C(B'A + B) + DC'B'

Fechar
A lei distributiva: D'CB'A + D'CB = D'C(B'A + B)

pergunta Q02.21 - S0 = C'B'A' + D'B + D'C(A + B) + DC'B'

Fechar
Teorema 11: B'A + B = A + B

pergunta Q02.22 - S0 = C'B'A' + D'B + D'CA + D'CB + DC'B'

Fechar
A lei distributiva: D'C(A + B) = D'CA + D'CB

pergunta Q02.23 - S0 = C'B'A' + D'B x 1 + D'CA + D'CB + DC'B'

Fechar
Teorema 4: A x 1 = A, ou seja, D'B = D'B x 1

pergunta Q02.24 - S0 = C'B'A' + D'B(1 + C) + D'CA + DC'B'

Fechar
A lei distributiva: D'B1 + D'CB = D'B(1 + C)

pergunta Q02.25 - S0 = C'B'A' + D'B(1) + D'CA + DC'B'

Fechar
Teorema 6: A + 1 = 1, ou seja, 1 + C = 1

pergunta Q02.26 - S0 = C'B'A' + D'B + D'CA + DC'B'

Fechar
Teorema 4: A x 1 = A, ou seja, D'B x 1 = D'B

pergunta Q02.27 - S0 = C'B'(A' + D) + D'B + D'CA

Fechar
A lei distributiva: C'B'A' + DC'B' = C'B'(A' + D)

pergunta Q02.28 - S0 = C'B'(A' + D) + D'(B + CA)

Fechar
A lei distributiva: D'B + D'CA = D'(B + CA)

Otimizar um circuito geralmente significa reduzir o número de operações ou os termos de uma expressão booleana. Entretanto, este não é sempre o caso. Algumas vezes uma operação de otimização acaba aumentando os termos ou as operações. Imagine um engenheiro que esteja projetando um circuito que precisa calcular A + B. O engenheiro pode usar uma porta OR, como o circuito integrado (CI) 74LS32. Este CI possui quatro portas OR. De forma semelhante, o chip 75LS08 possui quatro portas lógicas AND e o chip 74LS04 possui seis portas inversoras. Agora imagine que o engenheiro tenha um 74LS04 com três inversores não usados, um 78LS08 com uma porta AND livre e nenhuma porta OR disponível no circuito. Para obter a função OR necessária, ele poderia adicionar um 78LS32 no circuito, mas isto aumentaria o custo do mesmo. Se quiser reduzir o custo e o número de componentes (isto é, otimizar o custo ao invés do número de termos ou operações), ele poderia sintetizar a operação OR da seguinte maneira:

A + B = (A' x B')'

ou seja, o engenheiro poderia usar dois inversores para inverter os valores de A e B, depois usar uma porta AND e, finalmente, usar um terceiro inversor para inverter a saída da porta AND.

pergunta Q02.29 - Quais são os teoremas que apoiam a igualdade acima, ou seja, que A + B = (A' x B')'?

Fechar
Os teoremas de DeMorgan, ou seja, T7 e T8.

Quando se otimiza equações lógicas para criar um circuito eletrônico, a simples redução do número de termos e operadores nem sempre é a solução mais efetiva em termos de custo. Por outro lado, quando se implementa uma função lógica no software, a solução ótima provavelmente será aquela que usar o menor número de operações.

pergunta Q02.30 - Otimize a função F = AB + A' para minimizar o número de operações.

Fechar
F = A + B (pelo teorema 11)

Formas canônicas

Como existem infinitas funções booleanas equivalentes, usaremos a forma canônica da soma de mintermos para especificar funções lógicas. Para cada uma das funções lógicas existe uma soma de mintermos única. A soma de mintermos é conveniente porque é fácil criar uma tabela verdade a partir da equação lógica e, além do mais, é fácil construir a equação lógica com soma de mintermos a partir da tabela verdade.

Um mintermo é um termo no qual todas as variáveis de uma expressão booleana estão presentes na forma plicada ou não plicada. Numa função booleana de quatro variáveis o mintermo será composto por quatro literais (lembre-se, um literal é uma variável plicada ou não plicada). Como cada uma das variáveis pode assumir um de dois estados (plicada ou não plicada), existem 2n possíveis mintermos diferentes para uma função de n variáveis. Isto corresponde ao número de entradas da tabela verdade.

B'A'B'ABA'BA
C'0111
C0111

Cada mintermo na forma canônica corresponde a uma entrada de valor 1 na tabela verdade. A soma de mintermos é o OR lógico de todos os mintermos presentes numa tabela verdade (isto é, o "endereço" de cada entrada da tabela que contenha 1). Por exemplo, considere a tabela verdade ao lado. Esta tabela verdade contém uns nas casa endereçadas por C'B'A, C'BA', C'BA, CB'A e CBA'. Estes "endereços correspondem aos mintermos. A soma dos mintermos é o OR lógico destes mintermos, portanto, a função para a tabela verdade acima é C'B'A + C'BA' + C'BA + CB'A + CBA'.

B'A'B'ABA'BA
C'1000
C1001

pergunta Q02.31 - Qual é a forma canônica (soma de mintermos) da tabela verdade acima?

Fechar
C'B'A' + CB'A' + CBA

B'A'B'ABA'BA
C'1101
C1101

pergunta Q02.32 - Qual é a forma canônica da tabela verdade acima?

Fechar
C'B'A' + C'B'A + C'BA + CB'A'+ CB'A + CBA

B'A'B'ABA'BA
C'1000
C1111

pergunta Q02.33 - Qual é a forma canônica da tabela verdade acima?

Fechar
C'B'A' + CB'A'+ CB'A + CBA' + CBA

Criar uma tabela verdade a partir de uma forma canônica é tão fácil quanto. Só é preciso preencher todas as entradas da tabela verdade cujos endereços correspondam aos mintermos. A equação F = C'B'A' + C'BA + CBA + CB'A', por exemplo, dá a seguinte tabela verdade:

B'A'B'ABA'BA
C'C'B'A'C'BA
CCBA'CBA
B'A'B'ABA'BA
C'1001
C1001

pergunta Q02.34 - Construa a tabela para F = CBA + C'BA' + CBA' + C'BA

Fechar
B'A'B'ABA'BA
C'0011
C0011

pergunta Q02.35 - Construa a tabela para F = C'B'A' + C'B'A + C'BA' + C'BA + CBA

Fechar
B'A'B'ABA'BA
C'1111
C0001

pergunta Q02.36 - Construa a tabela para F = DC'BA + DC'B'A' + DCBA + D'CBA

Fechar
B\'A\'B'ABA'BA
D'C'0000
D'C0001
DC'1001
DC0001




Estas 50 questões referem-se a parte do conteúdo do capítulo 2. Como o assunto é extenso, os outros tópicos deste capítulo estão no módulo AoA - Laboratório Cap.2 II.

Última atualização ( Sáb, 27.02.2010 16:27 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons