Tutoriais e Programação
AoA - Cap.2 - Circuitos eletrônicos e funções booleanas
Qui 22 Fev 2007 21:26 |
- Detalhes
- Categoria: Art of Assembly
- Atualização: Domingo, 19 Abril 2009 20:04
- Autor: vovó Vicki
- Acessos: 17832
Afinal de contas, o que é que as funções booleanas têm a ver com os computadores?
Embora haja uma discreta relação entre funções e expressões booleanas e as linguagens de programação como C ou Pascal, você deve estar admirado com o tempo que foi dedicado a este tema. Entretanto, a relação entre lógica booleana e sistemas de computador é muito grande - na verdade há uma relação direta (de um-para-um) entre as funções booleanas e os circuitos eletrônicos. Engenheiros eletrônicos que desenvolvem CPUs e outros circuitos de computador precisam dominar este assunto. Mesmo que você nunca pretenda desenvolver seus próprios circuitos eletrônicos, entender esta relação é importante caso você queira tirar maior proveito de qualquer sistema computacional.
Correspondência entre Circuitos Eletrônicos e Funções Booleanas
Para toda e qualquer função booleana é possível desenvolver um circuito eletrônico e vice-versa. Como as funções booleanas precisam apenas dos operadores booleanos AND, OR e NOT, podemos construir qualquer circuito eletrônico usando exclusivamente essas operações. As funções booleanas AND, OR e NOT correpondem aos seguintes circuitos eletrônicos: portas lógicas AND e OR e inversores (NOT). Veja a Fig.1.
Um fato interessante é que precisamos apenas de um único tipo de porta lógica para implementar qualquer circuito. Esta porta é a NAND, mostrada na Fig.2 à esquerda.
Para provar que se pode construir qualquer função booleana usando apenas portas NAND, precisamos mostrar como construir um inversor (NOT), a porta AND e a porta OR usando-se um NAND (já que podemos criar qualquer função booleana usando apenas AND, NOT e OR). Construir um inversor é fácil, basta conectar as duas entradas (veja a Fig.3 à direita).
Já que criamos um inversor usando uma NAND, construir uma porta AND não é nenhum bicho de sete cabeças - basta inverter a saída de uma porta NAND. Afinal de contas, NOT (NOT (A AND B)) é equivalente a A AND B
É claro que isto consome duas portas NAND para se construir uma única porta AND, mas ninguém disse que circuitos construídos apenas com portas NAND seriam ótimos - foi dito apenas que isto seria possível de ser feito.
A última porta que precisamos compor é a porta OR. Podemos construir sem nenhuma dificuldade uma porta OR a partir de portas NAND aplicando os teoremas de DeMorgan.
(A or B)' = A' and B' Teorema de DeMorgan. A or B = (A' and B')' Inverta os lados da equação. A or B = A' nand B' Definição da operação NAND.
Aplicando essas transformações, obtém-se o circuito da Fig.5. Agora você poderia estar se perguntando porque estamos nos preocupando com isto. Afinal de contas, porque não usar simplesmente as portas AND, OR e inversora? Existem duas razões para isto. Primeiro, portas NAND são geralmente mais baratas de se construir do que outras portas. Segundo, é também muito mais fácil construir circuitos integrados complexos usando blocos básicos iguais do que construir um circuito integrado usando as diferentes portas básicas.
A propósito, note que é possível construir qualquer circuito lógico usando apenas portas NOR (NOT (A or B)). A correspondência entre a lógica NAND e NOR é ortogonal à correspondência entre as duas formas canônicas mostradas neste capítulo (soma de mintermos vs. produto de maxtermos). Apesar da lógica NOR ser útil em muitos circuitos, a maioria dos projetos eletrônicos usam a lógica NAND.
Circuitos combinatórios
Um circuito combinatório é um sistema composto por operações booleanas básicas (AND, OR e NOT), algumas entradas e um conjunto de saídas. Uma vez que para cada saída corresponde uma função lógica individual, um circuito combinatório geralmente implementa diversas funções booleanas diferentes. É muito importante que você se lembre deste fato - cada saída representa uma função booleana diferente.
A CPU de um computador é composta por vários circuitos combinatórios. Por exemplo, podemos implementar um circuito de soma usando funções booleanas. Suponha que você tenha dois números de um bit, A e B. Você pode produzir a soma de um bit, e o "vai um" (carry) de um bit desta adição, usando as duas funções booleanas a seguir:
S = AB' + A'B Soma de A e B. C = AB "Vai um" da adição de A e B.
Estas duas funções booleanas implementam um meio-somador. Os engenheiros o chamam de meio-somador porque ele soma dois bits, mas não adiciona o "vai um" de uma operação anterior. Um somador completo adiciona três entradas de um bit (dois bits mais um "vai um" da soma anterior) e produz duas saídas: a soma e o novo "vai um". As duas equações lógicas para um somador completo são:
S = A'B'Cin + A'BC'in + AB'C'in + ABCin Cout = AB + ACin + BCin
Embora estas equações lógicas produzam apenas um único bit como resultado (ignorando o "vai um"), não é difícil construir uma soma de n bits combinando circuitos somadores (veja a Fig.6). Assim, como este exemplo ilustra claramente, podemos usar funções lógicas para implementar operações booleanas e aritméticas.
Um outro circuito combinatório muito comum é o decodificador de sete segmentos. Este é um circuito combinatório que aceita quatro entradas e determina quais dos sete segmentos de um display luminoso de sete segmentos deverá ser ativado (1 lógico) ou desligado (zero lógico). Como um display de sete segmentos contém sete valores de saída (um para cada segmento), existirão sete funções lógicas associadas ao display (do segmento zero até o segmento seis). Veja a identificação dos sete segmentos na Fig.7. A Fig.8 mostra a quais segmentos correspondem a cada um dos dez valores decimais.
As quatro entradas para cada uma das sete funções booleanas são os quatro bits de um número binário no intervalo de 0 a 9. Considere a variável D como o bit mais significativo deste número e a variável A como o bit menos significativo deste número. Cada função lógica produz um segmento ativado (resulta em 1) para uma dada entrada se aquele segmento em particular deve ser iluminado. Por exemplo, o S4 (segmento quatro) deve estar ativado para os valores binários 0000, 0010, 0110 e 1000 (que correspondem aos decimais 0, 2, 6 e 8). Para cada valor que acende este segmento, temos um mintermo na equação lógica:
S4 = D'C'B'A' + D'C'BA' + D'CBA' + DC'B'A'
S0, como um segundo exemplo, está ativo para os valores zero, dois, três, cinco, seis, sete, oito e nove. Então, a função lógica para S0 é:
S0 = D'C'B'A' + D'C'BA' + D'C'BA + D'CB'A + D'CBA' + D'CBA + DC'B'A' + DC'B'A
Você pode gerar as outras cinco funções lógicas de forma semelhante.
Circuitos combinatórios são a base para muitos dos componentes de um sistema de computação básico. Podemos construir circuitos para soma, substração, comparação, multiplicação, divisão e muitas outras operações usando a lógica combinatória.
Fonte
- Art of Assembly de Randall Hyde.
- Tradução meio que livre da vovó Vicki.