Baixe o app para aproveitar ainda mais
Prévia do material em texto
9-1 Capítulo NOVE Elementos básicos de organização 9.1 Introdução Um computador pode ser projetado e/ou descrito em diversos níveis de abstração. Assim, pode-se descrever inteiramente um computador através de equações booleanas ou o seu equivalente em portas lógicas E, OU e NOT. Devido à complexidade dos computadores atuais, entretanto, tal nível de abstração não é prático, por envolver milhares de equações. Uma das soluções empregadas para diminuir o número de elementos a serem manipulados envolve o uso de níveis de abstração mais elevados, tal como o nível de transferência entre registradores (em inglês Register Transfer, ou RT). Este capítulo aborda os principais elementos utilizados neste nível. 9.2 Portas lógicas e equações booleanas A álgebra booleana é definida sobre um conjunto de dois elementos, denominados de verdadeiro e falso, ou 0 e 1. Em sistemas digitais, estes dois valores são dois níveis de tensão pré-fixados aos quais são associados os nomes 0 e 1. O complemento de uma variável booleana é definido pela tabela-verdade indicada na Tabela 9.1. Basicamente tem-se uma alternância entre os dois valores. Entrada a Saída s 0 1 1 0 Tabela 9.1 - Tabela-verdade da operação de complemento Em termos de portas lógicas, esta operação é realizada por uma porta NOT (ou NÃO), com a representação gráfica lustrada na Figura 9.1. Nas equações a serem utilizadas neste livro será usado o símbolo de apóstrofe (’) para indicar a operação de complementação. Assim, a’ indica o complemento da variável a. aa s Figura 9.1 - Porta NOT Existem duas operações básicas na álgebra booleana, que são chamadas de AND (E) e OR (OU). As tabelas-verdade destas duas operações podem ser vistas nas Tabelas 9.2 e 9.3, respectivamente. Nas equações utiliza-se o símbolo ‘.’ para a operação AND e o símbolo ‘+’ para a operação OR. Assim, a equação (a e b) ou c será descrita como a.b + c, ou até de forma mais simples como ab + c (omitindo o ‘.’ da operação AND e simplesmente escrevendo-se as duas variáveis juntas). 9-2 Entrada a Entrada b Saída s 0 0 0 0 1 0 1 0 0 1 1 1 Tabela 9.2 - Tabela verdade da operação AND Entrada a Entrada b Saída s 0 0 0 0 1 1 1 0 1 1 1 1 Tabela 9.3 - Tabela verdade da operação OR Em termos de portas lógicas, as operações de AND e OR são representadas pelas portas mostradas nas Figuras 9.2 e 9.3, respectivamente. As portas lógicas implementam exatamente a função booleana correspondente, mas possuem um atributo adicional: elas não são instantâneas, mas necessitam de um certo tempo para operar. Isto faz que uma mudança em uma das entradas não se reflita instantaneamente na saída, mas somente vá ocorrer após um determinado tempo, denominado de tempo de propagação. Quanto menor for este tempo, mais rápido o circuito irá responder às mudanças nas suas entradas, e por conseqüência maior será sua freqüência de operação. Note-se que nas Figuras 9.2 e 9.3 considerou-se somente portas de duas entradas. Na realidade, o número de entradas de uma porta pode ser variável. O número de portas é aumentado simplesmente usando-se a propriedade associativa das operações AND e OR. a b s Figura 9.2 - Porta lógica AND de duas entradas a b s Figura 9.3 - Porta lógica OR de duas entradas Um determinada expressão lógica pode ser expressa em termos de uma tabela-verdade, de uma equação booleana ou até mesmo em termos de portas lógicas. A Tabela 9.4 ilustra a tabela-verdade e as portas lógicas para a equação booleana a + b.c’. a b c s 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 Tabela 9.4 - Tabela-verdade da função a+bc’ 9-3 c c’ b a s b.c’ Figura 9.4 - Portas lógicas para a função a+bc’ A construção de uma tabela-verdade é bem simples. Constrói-se inicialmente uma tabela, considerando-se todas as combinações possíveis das variáveis de entrada (a, b e c na Tabela 9.4). A seguir, para cada linha calcula-se o valor booleano da saída (ou saídas, se existirem mais de uma). Note-se que o número de linhas de uma tabela é a potência de dois do número de variáveis de entrada. Assim, no caso da Tabela 9.4, tem-se 3 entradas e, consequentemente, 8 linhas. A obtenção de um diagrama de portas lógicas a partir de uma equação booleana também é simples. Para cada operador da equação (e, ou, complemento) existe uma relação direta em termos de portas lógicas (AND, OR, NOT). Note-se que, quanto mais simples for a equação booleana, menor o número de portas lógicas necessárias. Portanto, é muito importante simplificar uma equação antes de transformá-la em portas lógicas. A Tabela 9.5 e a Figura 9.5 ilustram este processo. Para facilitar a compreensão, foram adicionadas colunas à tabela- verdade, que representam os valores intermediários (parciais) da equação. a b a’ b’ a’+b’ b(a’+b’) a+b(a’+b’) 0 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 Tabela 9.5 - Tabela verdade da função a+b(a’+b’) a a’ b’b b(a’+b’) a’+b’ a+b(a’+b’) Figura 9.5 - Portas lógicas para a função a+b(a’+b’) Tanto por observação da tabela-verdade da Tabela 9.5 como por simplificação da equação booleana chega-se na equação a+b, que pode ser implementada através de uma única porta OR e representa uma grande economia de portas em relação à implementação. Existem inúmeras técnicas de simplificação de equações booleanas, o que, entretanto, não será tratado neste livro. A minimização de uma equação booleana é importante em sistemas digitais por diversos motivos. Entre os principais destacam-se: • redução do número de portas lógicas necessárias para implementação da função – quanto menos portas lógicas forem utilizadas, mais econômico será o circuito. 9-4 • redução do número de entradas de uma porta lógica – portas com menor número de entradas são mais econômicas; assim, por exemplo, uma porta AND de três entradas é melhor que uma porta AND de quatro entradas (e uma de duas entradas é melhor ainda!). • redução da potência consumida pelo circuito. • redução da área física necessária para o circuito. • diminuição do tempo necessário para que uma mudança em um ou mais entradas se manifeste na saída do circuito (tempo de propagação). Além das portas tradicionais (AND, OR, NOT), ainda são utilizadas diversas outras. De especial interesse são as portas NAND (não-e), NOR (não-ou), XOR (ou exclusivo) e XNOR (não-ou exclusivo). As tabelas-verdade para estas portas estão mostradas nas Tabelas 9.6 a 9.9, respectivamente. Entrada a Entrada b Saída s 0 0 1 0 1 1 1 0 1 1 1 0 Tabela 9.6 - Tabela-verdade da operação NAND Entrada a Entrada b Saída s 0 0 1 0 1 0 1 0 0 1 1 0 Tabela 9.7 - Tabela-verdade da operação NOR Entrada a Entrada b Saída s 0 0 0 0 1 1 1 0 1 1 1 0 Tabela 9.8 - Tabela-verdade da operação XOR Entrada a Entrada b Saída s 0 0 1 0 1 0 1 0 0 1 1 1 Tabela 9.9 - Tabela-verdade da operação XNOR Em termos de portas lógicas, a porta NAND é simplesmente uma porta AND seguida de um inversor, como ilustrado na Figura 9.6, assim como uma porta NOR é uma porta OR seguida de um inversor, como mostrado na Figura 9.7. Estas duas portas possuem grande interesse na área de sistemas digitais porque, dependendo da tecnologia empregada para a fabricação de circuitos integrados, elas podem ser implementadas de forma mais simples e econômica que as portas AND e OR. b a a.b s=(a.b)’ b a s=(a.b)’ Figura 9.6 - Porta lógica NAND de duas entradas e seu equivalente em termos de AND e NOT 9-5 b a a+b s=(a+b)’ b a s=(a+b)’ Figura 9.7 - Porta lógica NOR de duas entradas e seu equivalente em termos de OR e NOT A operação de ou-exclusivo (Figura 9.8) é derivada do ou, mas com saída em zero no caso das duas entradas terem valor um. Esta pequena diferença torna o ou-exclusivo uma porta com características únicas. Sua função pode ser interpretada como soma em módulo2 (onde o carry-out é desprezado), ou como gerado de paridade par, ou simplesmente como o operador diferença. b a a¯ b b a s=(a ¯ b)’ Figura 9.8 - Porta lógica XOR de duas entradas e porta lógica XNOR de duas entradas 9.3 Equivalência de portas lógicas Uma porta lógica pode ser substituída por um conjunto de portas equivalentes, ou seja, um conjunto de portas que desempenha exatamente a mesma função booleana. Assim, por exemplo, uma porta NAND é equivalente a uma porta AND seguida de um inversor (porta NOT). A Tabela 9.10 ilustra algumas destas equivalências. Expressão ou porta Expressão equivalente a + b (a’ . b’)’ a’ nand b’ a . b (a’+ b’)’ a’ nor b’ a xor b a.b’ + a’.b a’ (a.a)’, a nand a (a+a)’, a nor a a xor 1 a xnor b a.b + a’.b’ Tabela 9.10 - Equivalência de funções booleanas e portas lógicas Estas equivalências permitem que uma equação booleana qualquer possa ser descrita somente com o uso de AND e NOT, por exemplo. Onde fosse necessário utilizar o operador OR, ele seria substituído pelo seu equivalente. Com isto obtêm-se os vários conjuntos mínimos de funções. Entre eles podem ser citados: • somente portas NAND - a partir do NAND pode-se obter um inversor, e a partir deste uma porta AND e posteriormente uma porta OR. • somente portas NOR - a partir do NOR obtém-se o inversor, o OR e o AND, pelo mesmo raciocínio utilizado para as portas NAND acima. • somente portas AND e NOT • somente portas OR e NOT • somente portas AND e XOR Dependendo de quais portas lógicas são utilizadas, existem várias formas de representação de uma mesma equação booleana. Duas formas são particularmente úteis, por serem facilmente minimizáveis utilizando-se álgebra booleana, e por produzirem uma estrutura de portas lógicas bem regular: a soma de produtos e o produto de somas. 9-6 Na soma de produtos, as variáveis de entrada são agrupadas inicialmente em termos-produto (portas AND), e estes termos são posteriormente somados (portas OR) para compor a equação final. No produto de somas, as variáveis de entrada são agrupadas em termos-soma (portas OR) e depois multiplicadas (portas AND) para formar a equação final. Tanto nos termos-produto como nos termos-soma, as variáveis de entrada podem aparecer ou na forma normal ou na forma complementada. A forma de soma de produtos, assim como a de produto de somas, pode ser facilmente derivada de uma tabela verdade, como ilustra o procedimento abaixo: 1. Construir a tabela-verdade com as entradas e saídas do circuito. 2. Acrescentar uma coluna que contenha, para cada uma das linhas das possíveis combinações de entrada, um termo-produto formado pelo ‘e’ lógico de todas as variáveis de entrada. Se o valor da variável de entrada for igual a zero (naquela linha da tabela), ela aparece complementada no termo-produto. Se o valor da variável de entrada for igual a um, ela aparece na forma normal (sem ser complementada) no termo-produto. 3. Construir uma soma de produtos, na qual aparecem todos os termos-produto correspondentes a valores de saída iguais a 1. 4. Simplificar a expressão obtida, aplicando as propriedades da álgebra booleana. O procedimento para a formação de um produto de soma é análogo, conforme pode ser visto no procedimento abaixo: 1. Construir a tabela-verdade com as entradas e saídas do circuito. 2. Acrescentar uma coluna que contenha, para cada uma das linhas das possíveis combinações de entrada, um termo-soma formado pelo ‘ou’ lógico de todas as variáveis de entrada. Se o valor da variável de entrada for igual a zero (naquela linha da tabela), ela aparece na forma normal no termo-soma. Se o valor da variável de entrada for igual a um, ela aparece complementada no termo-soma. 3. Construir um produto de somas, na qual aparecem todos os termos-soma correspondentes a valores de saída iguais a 0. 4. Simplificar a expressão obtida, aplicando as propriedades da álgebra booleana. A Tabela 9.11 apresenta um exemplo ao qual são aplicados os dois procedimentos descritos acima. a b c s termos-produto termos-soma 0 0 0 1 a’.b’.c’ a+b+c 0 0 1 0 a’.b’.c a+b+c’ 0 1 0 1 a’.b.c’ a+b’+c 0 1 1 0 a’.b.c a+b’+c’ 1 0 0 1 a.b’.c’ a’+b+c 1 0 1 0 a.b’.c a’+b+c’ 1 1 0 1 a.b.c’ a’+b’+c 1 1 1 0 a.b.c a’+b’+c’ Tabela 9.11 - Exemplo de formação de soma de produtos e produto de somas Formando-se a soma de produtos, obtém-se: s = a’.b’.c’ + a’.b.c’ + a.b’.c’+ a.b.c’ Para o produto de somas, obtém-se: s = (a+b+c’).(a+b’+c’).(a’+b+c’).(a’+b’+c’) Ambas equações podem agora ser simplificadas, e em ambos os casos chega-se a mesma forma mínima: s = c’ 9-7 Observe-se que a forma soma de produtos pode ser implementada utilizando-se somente portas NAND no lugar das portas AND e OR, como pode ser visto na Figura 9.9. Da mesma forma, o produto de somas pode ser implementado com portas NOR no lugar das portas AND e OR. a c d b s a c d b s Figura 9.9 - Soma de produtos através de portas NAND 9.4 Circuitos combinacionais Circuitos combinacionais são aqueles que não possuem memória ou quaisquer outros elementos de armazenamento. Suas saídas são função única e exclusivamente das entradas. São construídos por portas lógicas sem realimentação, isto é, o valor das saídas não é utilizado em qualquer outra parte do circuito. Dois circuitos combinacionais bem simples, bastante utilizados em sistemas digitais, são os multiplexadores e os decodificadores. Uma unidade lógica e aritmética (ULA ou UAL), por outro lado, é bem mais complexa, e será vista em seções posteriores. Um multiplexador (ou seletor) é um circuito combinacional que possui m entradas e uma saída. A cada instante de tempo, o valor da saída é igual ao valor de uma das entradas, conforme determinado por um conjunto de linhas de controle (ou linhas de seleção). A Tabela 9.12 ilustra alguns casos de multiplexadores. Multiplexador Número de entradas Número de linhas de seleção 2-para-1 2 1 4-para-1 4 2 8-para-1 8 3 16-para-1 16 4 Tabela 9.12 - Multiplexadores típicos Um multiplexador pode ser descrito através de um comando case: case seleção of 0: saída := entrada0; 1: saída := entrada1; 2: saída := entrada2; . . . m: saída := entradam; end; No caso mais simples de um multiplexador de 2-para-1, a descrição também pode ser feita através de um comando if-then-else: if seleção=0 then saída := entrada0 else saída := entrada1; 9-8 Em termos de equação booleana ou portas lógicas, um multiplexador é bem simples. A seguir é ilustrado o caso de um multiplexador de 2-para-1; os demais podem ser construídos utilizando-se exatamente a mesma metodologia. Entrada0 (a) Entrada1 (b) Seleção (sel) Saída (s) 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 Tabela 9.13 - Tabela-verdade de um multiplexador de 2-para-1 Extraindo-se da Tabela 9.13 a equação booleana através de uma soma de produtos, obtém- se: s = a’.b.sel + a.b’.sel’ + a.b.sel’ + a.b.sel A implementação através de portas lógicas iria necessitar de 3 inversores, quatro ANDs de três entradas e um OR de quatro entradas. Simplificando-se a equação, entretanto, obtém-se: s = (a’.b + a.b).sel + (a.b’ + a.b).sel’ s = a.sel’ + b.sel Esta equação pode ser implementada através de 2 postas AND de duas entradas, 1 porta OR de duas entradas e 1 inversor, conforme mostra a Figura 9.10. a sel b s Figura 9.10 - Portas lógicas de um multiplexador de 2-para-1 É interessante notar que uma tabela-verdade pode ser simplificada se for utilizado um novo valor – o don’t care, ou “não interessa”, representado por um ‘X’. Uma linha da tabela onde uma variável apresenta o valor X indica que, para o caso desta linha, o valor da variável não interessa para a saída, ou seja, a variável não influencia o valor da saída neste caso. A Tabela 9.14 mostra a tabela-verdade de um multiplexador 2-para-1 utilizando-se estenovo valor. Entrada0 (a) Entrada1 (b) Seleção (sel) Saída (s) 0 X 0 0 1 X 0 1 X 0 1 0 X 1 1 1 Tabela 9.14 - Tabela-verdade de um multiplexador de 2-para-1 9-9 Variáveis com X não participam de um termo-produto quando a soma de produtos é extraída da tabela. Note-se que, no caso ilustrado na Tabela 9.14, a equação booleana derivada da tabela já é diretamente a equação booleana simplificada. Um multiplexador é representado como indicado na Figura 9.11. As duas representações são possíveis; a literatura especializada usa inclusive outras representações. Neste livro serão utilizadas indistintamente qualquer uma destas duas representações. a b sel s a b sel s Figura 9.11 - Representação simbólica de um multiplexador de 2-para-1 Um multiplexador pode ser expandido para trabalhar com entradas de n bits, ao invés de entrada de 1 bit como foi o caso até agora. Basta utilizar n multiplexadores em paralelo, com a linha de seleção sendo comum a todos os multiplexadores. O desenho utilizado é o mesmo, mas agora as linhas de entrada e saída representam n bits, ao invés de um só. Para melhor compreensão, a dimensão de cada linha, em bits, é indicada na figura. A Figura 9.12 ilustra o caso de um multiplexador de 4-para-1 para dados de 8 bits. sel s b 8 a 8 c 8 d 8 2 8 sel s a 8 b 8 c 8 d 8 2 8 Figura 9.12 - Representação de um multiplexador de 4-para-1, de 8 bits Outro circuito combinacional de interesse para a organização de computadores é o decodificador. Na sua forma mais geral, é um circuito com n entradas e 2n saídas. Se o valor codificado nas entradas é b, então todas as saídas estão em nível zero e somente a saída de índice b está em nível um. Um decodificador aparece mais comumente nas formas de 2-para- 4, 3-para-8 e 4-para-16. A Tabela 9.15 mostra a tabela-verdade de um decodificador de 2- para-4, e a Figura 9.13 mostra uma possível implementação. Entrada 0 Entrada 1 Saída 0 Saída 1 Saída 2 Saída 3 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 0 0 0 1 Tabela 9.15 - Tabela-verdade de um decodificador de 2-para-4 9-10 entrada 1 entrada 0 saída 0 saída 1 saída 2 saída 3 Figura 9.13 - Implementação de um multiplexador de 2-para-4 Um decodificador é comumente empregado para transformar informação codificada em 1, 2, 3 ou 4 bits em 2, 4, 8 ou 16 linhas, respectivamente. O exemplo mais típico do seu emprego é na decodificação de uma instrução. 9.5 Circuitos seqüenciais Circuitos seqüenciais são aqueles que possuem memória. Suas saídas são função tanto das entradas como dos valores da saída. Dito de outra maneira, nos circuitos seqüenciais o novo valor da saída dependo do estado atual destas saídas. Dois circuitos seqüenciais bastante utilizados são os registradores e os contadores. Ambos são construídos com flip-flops, ou seja, registradores capazes de armazenar um único bit. Dependendo da maneira exata como é controlado, um flip-flop recebe várias denominações distintas. O flip-flop mais simples é o tipo RS. Possui duas entradas, R (de reset, ou desligar) e S (de set, ou ligar). A ativação do sinal S coloca a saída do flip-flop em nível 1, e a ativação do sinal R leva a saída ao nível lógico 0. A Figura 9.14 mostra duas possíveis implementações de um flip-flop RS, uma com portas NOR e outra com portas NAND. Note-se que para portas NOR a ativação de R e de S se faz com nível lógico 1, enquanto que com portas NAND a ativação de R e de S se faz com nível lógico 0 (o que é indicado pelo uso de R’ e S’). S’ Q R Q S Q’R’ Q’ Figura 9.14 - Flip-flop RS com portas NAND e portas NOR 9-11 A Tabela 9.16 mostra a variação dos valores dos sinais de saída (Q e Q’) de acordo com os sinais de entrada (R e S) ao longo de nove intervalos de tempo. A Figura 9.15 reproduz a mesma informação em um diagrama de tempos. t R S Q Q’ 1 0 0 0 1 2 0 1 1 0 3 0 0 1 0 4 1 0 0 1 5 0 0 0 1 6 1 0 0 1 7 0 0 0 1 8 0 1 1 0 9 0 0 1 0 Tabela 9.16 - Variação de sinais em um flip-flop RS R S Q Q’ t 1 2 3 4 5 6 7 8 9 Figura 9.15 - Diagrama de tempos em um flip-flop RS Observe-se que, quando as entradas não estão ativas, um flip-flop RS mantém seu estado anterior, ou seja, memoriza o último valor lógico que foi armazenado nele, seja via um comando S (set) ou R (reset). Note-se também que a ativação de ambas as entradas simultaneamente leva a resultados imprevisíveis. Assim, o funcionamento de um flip-flop RS pode ser resumido de acordo com a Tabela 9.17, onde Qt indica o estado atual e Qt+1 indica o próximo estado. R S Qt+1 Resultado 0 0 Qt Estado fica inalterado 0 1 1 Estado passa para 1 1 0 0 Estado passa para 0 1 1 Indeterminado Condição de erro Tabela 9.17 - Tabela de um flip-flop RS Um flip-flop RS pode armazenar um valor, mas o seu controle é complicado pelo fato de ser sempre sensível a qualquer variação de valor nas entradas R e S. Isto levou à criação de um flip-flop que pudesse ser insensível às entradas em determinados momentos. Para isto foi introduzida uma terceira entrada, denominada de controle, clock (relógio) ou carga. Enquanto a entrada de controle estiver desabilitada (C=0), o estado do flip-flop ficará indiferente às entradas R e S. A idéia deste flip-flop é sincronizar a mudança do seu estado, isto é, restringi-la a certos instantes. Uma implementação possível para este flip-flop pode ser vista na Figura 9.16. 9-12 S Q Q’R C Figura 9.16 - Flip-flop RS com controle Para eliminar a situação não permitida de R e S ativos simultaneamente, pode-se interligá-los através de um inversor, como mostra a Figura 9.17. Neste caso R e S sempre terão sentidos opostos. Elimina-se a situação de R e S ativos simultaneamente, mas também se elimina a situação de R e S ambos estarem inativos. O resultado é um flip-flop que copia o valor lógico da entrada D (de Dado) quando o controle estiver ativo. D Q Q’ C Figura 9.17 - Flip-flop D sensível ao nível Com o flip-flop D tem-se o elemento básico de armazenamento, que copia o valor da entrada (D) quando o sinal de controle ou carga (C) é ativado. No caso do flip-flop da Figura 9.17, enquanto o valor da entrada de controle C for igual a 1, o valor da entrada D é copiado (ou armazenado) para o flip-flop. Se a entrada D variar enquanto C=1, o valor armazenado também varia. Quando C=0, o flip-flop mantém seu valor, independente de variações em D. Com isto tem-se um flip-flop sensível ao nível, ou um latch. Considerando o instante de ativação do sinal de controle, podem ser definidos quatro tipos distintos: • Sensível ao nível 1 - o sinal de controle é ativo enquanto apresentar nível 1, e por todo o tempo que permanecer neste nível. • Sensível ao nível 0 - o sinal de controle é ativo enquanto apresentar nível 0, e por todo o tempo que permanecer neste nível. • Sensível à borda de subida - o sinal de controle é ativo quando realizar uma transição do nível 0 para o nível 1, e somente neste instante de tempo. • Sensível à borda de descida - o sinal de controle é ativo quando realizar uma transição do nível 1 para o nível 0, e somente neste instante de tempo. 9-13 Flip-flops sensíveis à borda são mais complexos que os sensíveis ao nível. A Figura 9.18 ilustra o caso de um flip-flop D sensível à borda de subida. Q Q’ D C Figura 9.18 - Flip-flop D sensível à borda Além do flip-flop tipo D, também são bastante utilizados o flip-flop tipo T (toggle), que muda de estado a cada ativação do sinal de controle, e o flip-flop JK, que possui duas entradas (J e K). A Tabela 9.18 ilustra o comportamento de cada um destes três flip-flops. Note-se que o sinal de controle “ativo” pode significar qualquer uma das quatro situações analisadas acima. Tipo D Tipo T Tipo JK D C Qt+1 C Qt+1 J K C Qt+1 X inativo Qt inativo Qt X X inativo Qt D ativo D ativo Qt’ 0 0 ativo Qt0 1 ativo 1 1 0 ativo 0 1 1 ativo Qt’ Tabela 9.18 - Flip-flops D, T e JK Um conjunto de n flip-flops pode ser interconectado para formar um registrador de n bits, ou seja, um registrador capaz de armazenar n bits. Um registrador deste tipo é obtido usando entradas D independentes para cada bit e um sinal de controle comum para todos os bits, como mostra a Figura 9.21. Neste caso denomina-se este registrador de registrador de carga e saída paralelas. 9-14 Dn-1 Dn-2 Qn-1 Qn-2 C ... . . . . . . . . . . . Flip-flop D Flip-flop D D1 Q1... . . . . Flip-flop D D0 Q0 Flip-flop D Figura 9.19 Registrador de n bits de carga e saída paralelas Um registrador, além de armazenar um conjunto de bits, também pode ser utilizado para efetuar algumas operações sobre estes dados. Para isto existem registradores especiais, como o registrador de deslocamento (shift-register) e o registrador contador (counter). Eles podem ser facilmente implementados com flip-flops. Para isto basta interligar-se adequadamente as entradas e saídas dos flip-flops, ou no máximo adicionar-se alguma lógica combinacional na entrada dos flip-flops. A Figura 9.20 ilustra um registrador de deslocamento que a cada ativação do sinal de controle desloca todos os bits de uma posição para a direita. O novo valor do bit mais significativo é fornecido pela entrada E. Este tipo de registrador também é conhecido como um registrador de entrada e saída seriais. Um registrador de deslocamento para a esquerda seria construído de maneira análoga a da Figura 9.20, basta ligar a saída de cada flip-flop na entrada do flip-flop imediatamente à esquerda. E C ... . . . .Flip-flop D Flip-flop D S Flip-flop D Flip-flop D Figura 9.20 - Registrador de n bits de carga e saída seriais Também é extremamente fácil fazer um registrador de deslocamento de entrada serial e saída paralela; basta disponibilizar as saídas de todos os flip-flops internos do registrador. Para um registrador de deslocamento com entrada paralela, é necessário acrescentar um multiplexador na entrada de cada flip-flop, que selecionaria entre o dado a ser deslocado e o dado a ser carregado no registrador. Um registrador contador, ou simplesmente contador, é um registrador que, com a ativação do sinal de controle, incrementa (ou decrementa) o seu valor de uma unidade. Dependendo do tipo de contagem desejada (binária, BCD, etc) o contador apresenta uma estrutura interna particular. Além disto, o contador pode ser projetado de tal forma que, ao atingir o valor n-1, ele volta a zero no controle seguinte. Neste caso, diz-se que o contador é módulo n , ou seja, ele divide por n. 9-15 Para contadores é útil o uso de flip-flop sensíveis à borda, para que a contagem se realize em um instante de tempo bem preciso. A Figura 9.21 ilustra um contador binário de n bits utilizando flip-flops tipo T. A contagem binária é obtida conectando-se a saída de um bit na entrada do flip-flop seguinte. Observe-se que, para facilitar o desenho, o bit menos significativo está a esquerda e o mais significativo a direita. Q0 Q1C ... . . . . Flip-flop T Flip-flop T Qn-2 Qn-1... . . . . Flip-flop T Flip-flop T Figura 9.21 - Contador binário de n bits Se os flip-flops do contador da Figura 9.21 fossem sensíveis à borda de subida, teríamos um contador decrescente. Sendo eles sensíveis à borda de descida, tem-se um contador crescente. Assim como os registradores de deslocamento, os contadores também podem apresentar entrada de dados paralela. Neste caso também é necessário adicionar-se na entrada de cada flip-flop um multiplexador para selecionar entre a carga de dados e a contagem. Observe-se que, para contadores complexos, os flip-flops tipo JK são os mais utilizados, por apresentarem controle mais complexo e assim possibilitarem contagens mais complexas. 9.6 Unidade Aritmética e Lógica Uma das partes essenciais de um computador é a Unidade Aritmética e Lógica, abreviada comumente para UAL ou ULA. Esta unidade é responsável pela execução de somas, subtrações, funções booleanas, comparações, etc. Sua complexidade é diretamente proporcional à complexidade do conjunto de instruções do computador. Computadores simples possuem ULAs simples, com cerca de 4 funções distintas. Computadores complexos possuem ULAs complexas, com 8 a 16 funções distintas. Operações booleanas podem ser implementadas com portas lógicas simples, do tipo AND, OR e NOT. Além disto, elas não apresentam nenhuma interdependência entre os bits vizinhos, o que permite que uma operação lógica sobre n bits seja implementada por n operadores independentes. Operações aritméticas, por outro lado, requerem uma implementação mais complexa. Um somador binário simples (meio-somador), de um bit, soma dois operandos de um bit (A e B) e produz um bit de resultado (S) e um bit de carry-out (C). O meio-somador possui a tabela- verdade mostrada na Tabela 9.19, e pode ser implementado através de um ou-exclusivo (para a soma) e uma porta AND (para o carry-out), como é mostrado na Figura 9.22. A B S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Tabela 9.19 - Tabela-verdade de um meio-somador 9-16 B A S = a ¯ b C = a.b A B S C Meio Somador Figura 9.22 - Meio-somador O somador completo possui uma terceira entrada (carry-in), que corresponde ao carry out do bit menos significativo. Sua tabela-verdade pode ser vista na Tabela 9.20. A Figura 9.23 mostra a implementação em termos de portas lógicas, e uma implementação através de meio- somadores pode ser vista na Figura 9.24. A B Ci S Co 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Tabela 9.20 - Tabela-verdade de um somador completo B A Co = AB+Ci(A¯ B) Ci S = A¯ B¯ Ci A Figura 9.23 - Somador completo implementado com portas lógicas A B S C Meio Somador Co Ci S C Meio Somador S Figura 9.24 - Somador completo implementado com meio-somadores 9-17 Um somador completo realiza a soma de um bit. Para somar n bits, é necessário agrupar n somadores completos, onde o carry-out de cada um é transportado para o carry-in do somador imediatamente à esquerda, conforme pode ser visto na Figura 9.25. Sn-1 Sn-2 .. . . . . . Somador completo Somador completo .. . . . . . C An-1 Bn-1 An-2 Bn-2 S1 S0 Ci=0 ... . . . . Somador completo Somador completo A1 B1 A0 B0 Figura 9.25- Somador binário de n bits O somador de n bits da Figura 9.25 é relativamente simples, mas apresenta um grande problema: o grande atraso provocado pela propagação do carry entre os vários somadores. O somador de índice j deve esperar que todos os j somadores anteriores (j= 0,1,... i-1) terminem de calcular os bits de soma de carry-out, antes de que possa considerar o sinal de carry-in como válido. Com n somadores, o tempo de propagação é n vezes maior do que o tempo de um somador de um bit. Esta interconexão entre somadores recebe o nome de ripple carry. Somadores mais complexos diminuem este atraso usando técnicas de carry look- ahead. A operação de subtração pode ser efetuada implementando-se o circuito de um subtrator completo, ou então utilizando-se a técnica de complemento do subtraendo (a-b = a + not(b) + 1). BA A + B A and B Ci=0 S Sel Somador not(A) A or B 2 Figura 9.26 - ULA com 4 operações 9-18 Se uma ULA realiza diversas funções, uma forma simples de realizar sua implementação é projetar individualmente cada uma destas funções, e depois simplesmente reuni-las através de um multiplexador, que seleciona qual o valor a ser apresentado na saída. Por exemplo, suponha-se que uma ULA deva realizar as operações de ADD, AND, OR e NOT. A implementação desta ULA com um multiplexador de 4-para-1 pode ser vista na Figura 9.26. Todas as linhas, com exceçãode Ci e Sel, são de n bits. Assim como qualquer outro circuito, também para a ULA vale o compromisso entre desempenho e custo. Embora a ULA da Figura 9.26 tenha baixo custo, pois só utiliza elementos padrões, não tem alto desempenho, pois não foi otimizada para isto. 9.7 Memória Assim como um registrador de n bits pode ser visto como um array de n flip-flops, uma memória de m posições pode ser vista como um array de m registradores. Logicamente, o funcionamento de uma memória pode ser visto na figura 1.27. Observe-se, entretanto, que este é um modelo lógico, e não um modelo da estrutura física da memória. Na operação de escrita as linhas de endereço selecionam, através de um circuito decodificador, em qual registrador o dado deve ser escrito. A saída de decodificador, juntamente com o sinal de Write, formam o sinal de carga nos registradores. Na operação de leitura as mesmas linhas de endereço selecionam, através de um multiplexador, qual o registrador que terá o seu conteúdo levado até a saída. A habilitação do dado na saída é realizada pelo sinal Read. A implementação dos circuitos de memória atuais é diferente do modelo apresentado na Figura 9.27. Este modelo é muito simplificado, e visa somente explicar o funcionamento geral da memória. Observe-se inclusive que os tempos necessários para a realização de uma operação de escrita ou leitura não estão modelados na figura. 8 2 Endereço Write Dado de Entrada Posição 0 Posição 1 Posição 2 Posição 3 8 8 8 8 2 Leitura Dado de Saída 8 8 8 8 carga carga carga carga Figura 9.27 - Estrutura lógica de uma memória de 4 posições
Compartilhar