aritmética - inf.ufpr.br · 130 capítulo 5. aritmética exemplo 5.2 pode o resultado de 7 + 6 ser...
TRANSCRIPT
Capítulo 5
Aritmética
He who refuses to do arithmetic is doomed to talk nonsense.John McCarthy
Computadores foram inventados, e são usados, para efetuar operações arit-méticas sobre números em aplicações tão diversas como o processamento dafolha de pagamentos de uma empresa, na simulação de trajetórias de planetase de partículas subatômicas, na simulação de paisagens em jogos, no cálculo dopreço a pagar pelo etanol num posto de combustíveis.Neste capítulos estendemos nossa abstração para bits, permitindo agora quetuplas de bits representem números naturais e números inteiros. Circuitos dearitmética normalmente empregam a representação para inteiros chamada decomplemento de dois porque esta é simples e eficaz, e resulta em circuitostambém simples, portanto eficazes. Esta representação é definida na Seção 5.1.Deslocamentos são operações interessantes: um deslocamento para a esquerdaequivale a uma multiplicação por uma potência de dois, enquanto que umdeslocamento para a direita, tomados os cuidados necessários, equivale a umadivisão por uma potência de dois. Estes circuitos são apresentados na Seção 5.2.Neste capítulo estudamos os circuitos usados para computar a soma, a diferençae o produto de dois números representados por sequências de bits. Os circuitosque efetuam estas operações, mais as operações lógicas sobre vetores de bits,são agrupadas em Unidades de Lógica e Aritmética, descritas na Seção 5.3.O algoritmo que usamos para somar dois números implica na propagação dovai-um, potencialmente através de todos os dígitos dos operandos. Num so-mador com operandos de 32 ou 64 bits, o tempo de propagação do vai-um éexcessivo, e nas Seções 5.6 e 5.7 veremos dois somadores que otimizam o tempode propagação do vai-um.
125
126 Capítulo 5. Aritmética
Na Seção 5.8 são apresentados três circuitos combinacionais que efetuam a mul-tiplicação. Na multiplicação, como na soma, a cadeia de propagação do vai-umé problemática e seus efeitos no tempo de propagação devem ser minimizados.
5.1 Sequências de Bits Representam Números
Números devem ser representados internamente ao computador por sequênciasde bits, uma vez que os bits são as menores unidades de informação que podemser usadas num computador digital. Vejamos então como números naturais enúmeros inteiros podem ser representados como sequências de bits. Iniciamosa exploração pela adição, que é operação aritmética mais simples, e a maispopular nos programas que escrevemos.
5.1.1 Adição na base 2
A soma s de dois números a e b, representados em um único dígito binário é:
a + b = s N0 + 0 = 0 00 + 1 = 1 11 + 0 = 1 11 + 1 = ? 2
A coluna da direita mostra o número natural que representa o resultado. Naquarta linha, a soma 1 + 1 = 2 não é representável por um único dígito, eportanto a tabela verdade da soma deve ser aumentada com uma coluna parao vai-um.Se incluímos o vai-um no resultado, que incluamos também o vem-um nasparcelas. O resultado da soma é representado pelo número de dois bits 〈vai, s〉:
vem + a + b = vai s N0 + 0 + 0 = 0 0 00 + 0 + 1 = 0 1 10 + 1 + 0 = 0 1 10 + 1 + 1 = 1 0 21 + 0 + 0 = 0 1 11 + 0 + 1 = 1 0 21 + 1 + 0 = 1 0 21 + 1 + 1 = 1 1 3
Como o resultado da adição de três bits (1 + 1 + 1 = 3) é representável emdois dígitos (3 = 112), todas as oito combinações das entradas produzem osresultados esperados.
5.1. Sequências de Bits Representam Números 127
5.1.2 Sequências de Bits Que Representam Inteiros
Qual seria então uma representação para números, usando bits? Uma primeirarestrição, que deriva de custo e da tecnologia disponível, é que os númerossejam representados por sequências de bits com tamanho fixo, cujas largurastípicas são de 8, 16, 32 ou 64 bits. Isso é necessário porque os circuitos queefetuam operações aritméticas devem ter tamanho finito, assim como deve serfinita a memória que armazena os números.Felizmente, a forma mais óbvia é também a mais simples e eficaz: emprega-sea mesma notação posicional que usamos com números na base 10, na qual cadadígito, ou posição, é multiplicada por uma potência de 10. Como a represen-tação é com bits, a base dos números é 2.Considere uma representação para números naturais com um campo fixo com8 bits de largura, como a mostrada abaixo. A posição de cada dígito bináriocorresponde a uma potência de dois; o dígito à direita tem peso 20 = 1 en-quanto que o dígito mais significativo tem peso 27 = 128. A faixa de valoresrepresentáveis é de 0 a 255. O número 99 é representado em binário, numcampo de 8 bits, por 011000112 = 26 + 25 + 21 + 20 = 64 + 32 + 2 + 1.
peso → 27 26 25 24 23 22 21 20
99 0 1 1 0 0 0 1 1
Para uma representação com k bits de largura, o valor do número natural Nrepresentado por uma sequência de k bits é obtido com a Equação 5.1, e é asoma ponderada dos bits bi, i ∈ [0, k).
N =k−1∑i=0
2i · bi (5.1)
Qual seria uma representação igualmente eficiente para números inteiros? Dadaa conveniência da representação para os naturais, expressa na Equação 5.1, arepresentação para zero, em 8 bits, deve ser
0000.0000 .
Os oito bits estão separados em dois grupos de quatro bits, por um pontoque tem a mesma função do separador de milhares. Assim como para zero, arepresentação óbvia para o número +1 é
0000.0001 .
Qual seria então a representação para −1? Esta representação deve ser tal que−1 + 1 = 0 . Se somarmos +1 ao número M que representa −1, obtemos:
0 0 0 0 0 0 0 1+ m7 m6 m5 m4 m3 m2 m1 m0
0 0 0 0 0 0 0 0
128 Capítulo 5. Aritmética
Lembre que, na base 2, 1 + 1 = 0 e vai-um para a próxima posição. A soma1 + m0 só pode ser zero se m0 = 1. A soma vem-um + 0 + m1 = 0 somente sem1 = 1. Continuando até m7, descobrimos que a representação em 8 bits para−1 é 1111.1111 .Qual seria a representação para os demais números negativos, de tal forma queA + (−A) = 0?
(+A) + (−A) = 0−A = 0−A
= (1− 1)−A
= 1 + (−1−A)
Considerando somente o termo (−1−A), qual o valor de R = (−1−A):
1 1 1 1 1 1 1 1 −1− a7 a6 a5 a4 a3 a2 a1 a0 −A
r7 r6 r5 r4 r3 r2 r1 r0 R
e computando a subtração bit a bit, iniciando por a0, temos dois casos:
(i) se a0 = 0, então r0 = 1− a0 = 1 = a0 ;
e(ii) se a0 = 1, então r0 = 1− a0 = 0 = a0 .
Aplicando o mesmo raciocínio aos demais bits, percebe-se que R = (−1−A) éo complemento bit a bit de A, e é representado por R = A. Assim,
−A = 1 + A
que é a maneira simples, embora tediosa, de obter a representação de númerosnegativos: basta complementar bit a bit o número positivo e somar 1 ao valorcomplementado.Esta representação é chamada de complemento de dois, e nela o dígito maissignificativo é sempre multiplicado por −2m para algum m. Em números re-presentados em k bits, o bit bk−1 é multiplicado por −2k−1. Se k = 3, então onúmero +3 é representado por 011 = (0 · −22) + 1 · 21 + 1 · 20, enquanto que−3 é representado por 101 = (1 · −22) + 0 · 21 + 1 · 20.O conjunto de números inteiros representados em k bits é [−2k−1, 2k−1 − 1].Por causa da representação para zero, os 2k valores distintos são divididos em2k−1 números negativos e 2k−1 − 1 números positivos.A Equação 5.2 mostra os pesos dos dígitos de um número representado em8 bits. O dígito mais significativo é multiplicado por −27, e os demais dígitossão multiplicados por potências decrescentes positivas de 2.
X = (x7 · −27) + x6 · 26 + x5 · 25 + · · ·+ x2 · 22 + x1 · 21 + x0 · 20 (5.2)
5.1. Sequências de Bits Representam Números 129
Se o dígito mais significativo é zero, então o número representado é positivo,do contrário é negativo, e por isso este dígito é chamado de bit de sinal.
Exemplo 5.1 Alguns exemplos de números representados em complemento dedois, em 8 bits, são mostrados na Tabela 5.1. A posição mais significativa é multipli-cada por 1 nos números negativos e portanto esta parcela vale −128 do valor repre-sentado. Para representar um número maior do que −128, outras parcelas positivasdevem ser adicionadas para descontar a diferença do valor desejado para−128. Comomostra a segunda linha da tabela, −1 = −128 + 127. /
Tabela 5.1: Exemplos de representação em complemento de dois.
posição b7 b6 b5 b4 b3 b2 b1 b0valor peso −128 64 32 16 8 4 2 1+1 = +0 + 1 0 0 0 0 0 0 0 1−1 = −128 + 127 1 1 1 1 1 1 1 1−125 = −128 + 3 1 0 0 0 0 0 1 1−4 = −128 + 124 1 1 1 1 1 1 0 0
Considerando que num circuito digital as operações são efetuadas em circuitoscom largura fixa e finita, o que ocorre quando somamos dois números grandes?Se somarmos o maior número representável a si próprio, ele dobra de tamanho:
N + N = 2N, log2(N) = k, log2(2N) = k + 1.
A soma de dois números de k bits tem k + 1 bits por causa da possibilidadede ocorrer vai-um no dígito mais significativo. Isso significa que o resultado deuma soma pode ser maior do que o maior número que pode ser representadoem k bits. Esta situação indica a ocorrência de overflow porque um bit doresultado ‘transborda’ para além do limite máximo da representação.Felizmente, o algoritmo para a detecção de overflow é simples. Para númerosrepresentados em k bits e operação A + B = R:
1. replique o dígito mais significativo das duas parcelas, representando osoperandos em k + 1 bits (ak = ak−1 e bk = bk−1);
2. adicione os dois operandos de k + 1 bits e ignore o vai-um para a posi-ção rk+1;
3. ocorre overflow se, e somente se, os dois bits mais significativos do resul-tado diferem (rk−1 6= rk); do contrário, a resposta é o número represen-tado corretamente em k bits.
130 Capítulo 5. Aritmética
Exemplo 5.2 Pode o resultado de 7 + 6 ser representado corretamente em 4 bits?
Na operação abaixo, o dígito replicado está sublinhado, e o vai-um é mostrado à es-querda do dígito que o recebe.
0 1+0 1+1 1 1 7+ 0 0 1 1 0 +6
0 1 1 0 1 13r4 r3 r2 r1 r0
Os bits r3 e r4 diferem e portanto 7 + 6 não pode ser representado em 4 bits porque omaior número representado corretamente com k = 4 é 24−1 − 1 = 7. /
A Figura 5.1 mostra o círculo da representação em complemento de dois paracampos de três bits. Os números binários 0002, 0012, 0102, e 0112 representamos inteiros 0, 1, 2 e 3, respectivamente, enquanto que os binários 1112, 1102,1012, e 1002 representam os inteiros -1, -2, -3, e -4, respectivamente.
.......
.......
.......
.......
.......
............................................................................................................
....................
.......................
...............................
.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
.....................................................................................................................................................................................................................
..........................
..........................
..................
........
..................
........
-2
-4
2
3-3
-1 1
0
000
001
011
111
101
110 010
100
Figura 5.1: Círculo da representação em complemento de dois.
Duas somas são mostradas na Figura 5.2. A primeira, no arco externo, é a somade +2 com +3, que resulta em +5 e portanto não é representável em comple-mento de dois com três bits, porque o binário 1012 representa o inteiro −3.Na segunda soma, no arco interno, +2 + −3 produz o resultado correto queé −1. Daqui se extrai uma regra: a soma de dois inteiros positivos pode produ-zir resultado incorreto, enquanto que a soma de dois inteiros de sinais trocadosproduz resultados corretos. A regra equivalente para a subtração é: a diferençade números com sinais diferentes pode produzir resultados incorretos, enquantoque a diferença de números com sinais iguais produz resultados corretos.
5.1. Sequências de Bits Representam Números 131
.......
.......
.......
.......
.....................................................................
......................
........................................
........................................................................................
.......
.......
.......
.......
.......
.......
......................................................................
......................
......................................
........................
........................................................................................................................................
........................................................................................................................... .......
.......
.......
.......
.......
............................................................................................................
....................
.......................
...............................
.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
.....................................................................................................................................................................................................................
..........................
.......................... ..................
........
..........................
...................
..................
........
-4
0
000
3
2-3
100
-1 1111 001
101 011
010110-2
-3 3
2
Figura 5.2: Representação em complemento de dois e overflow.
A representação para inteiros em complemento de dois é usada na imensa mai-oria dos dispositivos que efetuam computação com números inteiros. Umarepresentação com k bits têm as seguintes propriedades interessantes:
• o intervalo dos naturais representados é Nk : [0, 2k − 1] ;
• o intervalo dos inteiros representados é Zk : [−2k−1, 2k−1 − 1] ;
• uma única representação para zero, com todos os k bits em 0;
• na representação de inteiros, o bit mais significativo é o bit de sinal: senk−1 = 1, o número é negativo;
• o mesmo circuito efetua adições de naturais e de inteiros; e
• −A = A + 1.
Exercícios
Ex. 5.1 Efetue as operações abaixo, com números em complemento de dois,representados em 4 bits. Os resultados são representados corretamente?(a) 0100+0011 (b) 0110+1010 (c) 1001+0110(d) 1010+1110 (e) 1101+0111 (f) 1111+0111
Ex. 5.2 Efetue as operações abaixo, com números em complemento de doisrepresentados em 5 bits. Os resultados são representados corretamente?(a) 11011–01101 (b) 11010–01110 (c) 10110+01010 (d) 10100–10110
132 Capítulo 5. Aritmética
5.2 Deslocamentos
Quando uma tupla de bits é interpretada como um número, segundo a notaçãoposicional, um deslocamento pode ser utilizado para efetuar uma multiplicaçãoou divisão por uma potência de dois. Considere um número binário represen-tado em quatro bits. Se este número é deslocado de uma casa para a direita,o resultado é o quociente da divisão inteira por dois. Se o número é deslocadopara a esquerda, e a posição menos significativa preenchida com 0, o resultado éo número original multiplicado por dois, como mostrado abaixo. Os operadores e são aqueles da linguagem C: o operando à esquerda é deslocado donúmero de posições indicado pelo operando à direita.
0110 seis0110 1 = 0011 três0110 1 = 1100 doze
Para representação em complemento de dois, o deslocamento para a direitade números negativos deve garantir que o número permaneça negativo. Paratanto, o bit mais à esquerda, que é o bit de sinal, deve ser replicado. Se odeslocamento é para a esquerda, um número positivo pode tornar-se negativo.Por conta da diferença no tratamento de números com e sem sinal empregam-se os termos deslocamento lógico e deslocamento aritmético. No primeiro, obit de sinal é ignorado e os bits inseridos são sempre zero, enquanto que nodeslocamento aritmético o bit de sinal é replicado nos deslocamentos à direita.
Exemplo 5.3 Vejamos dois exemplos, com números de complemento de doisrepresentados em 4 bits. Um deslocamento para a direita deve preservar o bit de sinal,e produzir resultado negativo com operando negativo: −2/2 = −1.
1110 1 = 1111 − 2 1 = −1 certo
Um deslocamento para a esquerda pode alterar o sinal de um operando positivo, re-sultando em erro: 6× 2 = 12 6= −4.
0110 1 = 1100 + 6 1 = −4 errado
O deslocamento inverte o sinal e produz resultado errado: 6× 2 6= −4. /
A Figura 5.3 mostra os três bits menos significativos do circuito que efetua odeslocamento de uma posição para a esquerda. Seu comportamento é definidopela Equação 5.3.
Espaço em branco proposital.
5.2. Deslocamentos 133
n : NB : Bn
S : Bn+1
d : Bdesl : B 7→ Bn 7→ Bn+1
desl(n, d, B, S) ≡
i = 0, (s0 = 0) / d . (s0 = b0)1 ≤ i < n, (si = bi−1) / d . (si = bi)i = n, (sn = bn−1) / d . (sn = 0)
(5.3)
rrrr
..........................................................................
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
..........................................................................
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
..........................................................................
..........................................................................
b0
0s0
0
1
s1b1 0
1
s2b2 0
1
s3b3 0
1
s40
1
0
d
Figura 5.3: Deslocador de uma posição, com quatro bits de entrada.
5.2.1 Deslocador Exponencial
Deslocamentos de uma posição são úteis, mas deslocamentos de um númeroarbitrário de posições são um tanto mais úteis. Vejamos como a combinaçãoapropriada de deslocadores simples nos permite deslocar um vetor de bits deaté N − 1 posições, quando N = 2n.Iniciemos com um deslocador com 4 bits de largura, que é a extensão óbvia docircuito da Figura 5.3. O circuito da Figura 5.4 desloca sua entrada B de umaposição se d2 = 1, ou sua saída é igual à entrada: C = (21 ×B) / d2 . (20 ×B).
134 Capítulo 5. Aritmética
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
....................
....................
.........
.........
b3 b0b2 b1
c0c1c2c3c4
d2 ×20, 21
Figura 5.4: Deslocador de 4 bits, uma posição.
A composição de um deslocador de uma posição, com um deslocador de duasposições nos permite deslocar nenhuma, uma, duas, ou três posições, comomostrado na Figura 5.5, e se D = num(d4d2), então C = 2D ×B.
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.............................................
.
.
.
.
.
.
.
.
.
.........
.........
.........
.........
...................................
b3 b0b2 b1
d4
d2×20, 21
×20, 21, 22, 23
c0c1c2c3c5c6 c4
Figura 5.5: Deslocador de 4 bits, três posições.
Adicionando mais um deslocador de quatro posições, como mostra a Figura 5.6,o que se obtém é um deslocador idêntico ao de três posições quando d16 = 0,ou um deslocador que desloca de 4 + 0, 1, 2, 3 posições quando d16 = 1. Denovo, se D = num(d16d4d2), então C = 2D ×B.
Espaço em branco proposital.
5.2. Deslocamentos 135
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
...................................
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.............................................
.
.
.
.
.
.
.
.
.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.........
.........
.
.
.
.
.
.
.
.
.
......................................................................
.........
.........
b3 b0b2 b1
d2
d4
d16
×20, 21, 22, 23
c0c1c2c5 c3c6 c4c7c8c9c10
×20, 21, 22, 23, 24, 25, 26, 27
Figura 5.6: Deslocador de 4 bits, sete posições.
Se adicionarmos um deslocador de oito posições ao circuito da Figura 5.6, oresultado é idêntico ao do deslocador de sete posições quando d256 = 0, ouum resultado deslocado de 8 + 0, 1, 2, 3, 4, 5, 6, 7 posições quando d256 = 1.Neste caso, o circuito efetua deslocamentos de qualquer número de posições nointervalo [0, 15]. O deslocador de 15 posições é mostrado na Figura 5.7.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
...................................
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.............................................
.
.
.
.
.
.
.
.
.
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
......................................................................
..........................................................................................................................................
b3 b0b2 b1
d2
d4
d256
d16
c0c1c2c5 c3c6 c4c7c8c9c13c17 c12c11c10c16 c14c15c18
Figura 5.7: Deslocador de 4 bits, 15 posições.
Adiante teremos uso para deslocadores de até 31 posições. Este circuito é aextensão, agora possivelmente óbvia do deslocador de 15 posições: adicionamosum deslocador de 16 posições ao projeto da Figura 5.7, e assim é possível efetuarqualquer deslocamento no intervalo [0, 31].
136 Capítulo 5. Aritmética
O deslocamento da saída é definido pelas entradas de controle dos deslocadoresintermediários: em cada deslocador, ou a entrada não se altera, se dn=0, oué deslocada de log2 n posições, se dn=1. A Figura 5.7 mostra cinco das 16possibilidades de deslocamento para o bit b0, e estas são indicadas na Tabela 5.2.
Tabela 5.2: Deslocamentos no deslocador exponencial.
posições D ligação S0 0000 b0 7→ c0 B × 20
1 0001 b0 7→ c1 B × 21
3 0011 b0 7→ c3 B × 22+1
7 0111 b0 7→ c7 B × 24+2+1
15 1111 b0 7→ c15 B × 28+4+2+1
5.2.2 Rotação
Um deslocador rotacional (barrel shifter) é um circuito similar ao deslocadorexponencial, mas a saída do deslocador rotacional é sua entrada com umarotação de d posições. Após uma rotação de uma posição para a esquerda,si = bi−1 se i ∈ [1, n), e s0 = bn−1. A Tabela 5.3 e a Equação 5.4 especificamo comportamento de um deslocador rotacional com quatro bits de largura. Ooperador mod computa o resto da divisão inteira.
∀i, d ∈ 0, 1, 2, 3 • si = b(i−d)mod 4 (5.4)
Tabela 5.3: Comportamento de um deslocador rotacional de quatro bits.
d1d0 s3 s2 s1 s000 b3 b2 b1 b001 b2 b1 b0 b310 b1 b0 b3 b211 b0 b3 b2 b1
Exercícios
Ex. 5.3 Estenda o circuito da Figura 5.3 para que ele permita deslocamentospara a esquerda e para a direita. Atenção com os dois extremos s0 e sn.
Ex. 5.4 Estenda o circuito obtido no exercício anterior para que ele mantenhao sinal correto de números representados em complemento de dois.
5.2. Deslocamentos 137
Ex. 5.5 Estenda o circuito obtido no exercício anterior para que ele possaser usado com números com e sem sinal. É necessária a adição de um sinal decontrole para definir o tratamento do sinal.
Ex. 5.6 Altere o circuito do deslocador exponencial na Figura 5.3 paratransformá-lo num deslocador rotacional.
Ex. 5.7 Implemente um deslocador rotacional de 8 bits usando multiplexadorescom o número apropriado de entradas.
Ex. 5.8 Prove que o circuito da Figura 5.7 satisfaz à sua especificaçãoS = B × 2D, D ∈ [0, 15] .
Ex. 5.9 Projete um circuito combinacional que produz em sua saída umaversão deslocada da entrada, conforme a especificação na Equação 5.5. Vocêdeve determinar o valor de N .
E : B4
S : BN
d : B3
circ : (B4 × B3) 7→ BN
circ(E, S, d) ≡ S = E × 2d , 2d ∈ 1, 4, 16, 64, 256, 1024, 4096, 16384
(5.5)
Ex. 5.10 Projete um circuito combinacional que produz em sua saída umaversão deslocada da entrada, conforme a especificação na Equação 5.6. Vocêdeve determinar o valor de N . Qual a posição de E em S para d = 0 ?
E : B8
S : BN
d : B3
m : Bcirc : (B× B8 × B3) 7→ BN
circ(m, E, S, d) ≡ [S = E × 2d] / m . [S = E ÷ 2d]
(5.6)
Ex. 5.11 Considere que N e M são vetores de 32 bits e representam inteirossem sinal. Explique os valores atribuídos aos sinais P e Q como resultado daavaliação dos comandos C listados abaixo.unsigned int L, M, N, P, Q, R;P = (L >> 6) << 12;Q = (M & 0 xffffffc0 ) * 4096;R = N & (1024 - 1);
138 Capítulo 5. Aritmética
5.3 Unidade de Lógica e Aritmética
A Unidade de Lógica e Aritmética (ULA) é a unidade funcional de um proces-sador na qual as operações sobre os dados são efetuadas. A ULA é um circuitocombinacional com duas entradas de dados, uma de controle, e uma ou duassaídas de resultados. A Equação 5.7 define seu comportamento e a Figura 5.8mostra o símbolo usado para representá-la. A operação é selecionada pelo si-nal F e pode ser uma dentre soma, subtração, deslocamento de uma posição,complemento, conjunção, ou-exclusivo ou disjunção.
A, B, R : B4
F, T : B3
ULA-4x8 : [
A,B︷ ︸︸ ︷(B4 × B4)×
F︷︸︸︷B3 ] 7→
R,T︷ ︸︸ ︷(B4 × B3)
ULA-4x8(A, B, F, R, T ) ≡ (R, T ) = ΩF (A, B)Ω ∈ +,−,,,¬,∧,⊕,∨
(5.7)
..............
..............
..............
..............
..............
4
3BTR
A
4
4
3
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppF
Figura 5.8: Unidade de Lógica e Aritmética.
Os operandos A e B são apresentados às entradas e o resultado R é obtidona saída da ULA. A saída T (sTatus) contém bits com informação sobre oresultado, indicando se aquele é zero ou negativo, por exemplo. O sinal Fdefine qual é a operação efetuada sobre os operandos. As entradas A e B ea saída R são representadas por sinais de 4 bits; a escolha da função F e ostatus do resultado T são representados por sinais de 3 bits. Os operandos têmapenas 4 bits para simplificar a descrição do circuito. A Tabela 5.4 mostra osresultados das oito operações da ULA sobre o par de operandos A = 0011 eB = 1100; o significado das três colunas da direita é explicitado adiante.Uma ‘fatia’ da ULA com largura de um bit é mostrada na Figura 5.9. Oscircuitos para as outras fatias são idênticos; para construir uma ULA comN bits de largura, emprega-se N cópias da fatia de um bit. As extremidadessão especiais por causa dos deslocamentos. O sinal F escolhe uma das oitoentradas do multiplexador, que é a operação a realizar sobre as entradas ai e bi.
5.3. Unidade de Lógica e Aritmética 139
Tabela 5.4: Operações de lógica e aritmética sobre A = 0011 e B = 1100.
statusF operação resultado n z v
0 + R = A + B 0011+1100 = 1111 1 0 01 − R = A – B 0011–1100 = 0111 0 0 02 R = A 1 00111 = 0110 0 0 03 R = A 1 00111 = 0001 0 0 04 ¬ R = A 0011 = 1100 1 0 05 ∧ R = A ∧ B 0011∧1100 = 0000 0 1 06 ⊕ R = A ⊕ B 0011⊕1100 = 1111 1 0 07 ∨ R = A ∨ B 0011∨1100 = 1111 1 0 0
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppp ppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
1 −
0 +
2 3
ai
bi
F
ai−1ai+1
soma
inv vemi
6 ⊕
7 ∨
5 ∧
4 ¬ ri
vaii
Figura 5.9: Fatia para o i-ésimo bit da ULA.
As operações de soma e subtração demandam explicação mais extensa, que éoferecida adiante. Os circuitos computam todas as oito funções simultanea-mente e o sinal F determina qual resultado é apresentado à saída ri. No casodos deslocamentos, as entradas são os bits vizinhos, da esquerda e da direita,
140 Capítulo 5. Aritmética
e a0 = 0 no deslocamento à esquerda, e a3 = 0 no deslocamento à direita.
Status O circuito completo da ULA é obtido pela justaposição de quatrocópias do circuito da Figura 5.9, com as ligações apropriadas. O status daoperação da ULA é obtido do sinal T , que indica se o resultado é negativo (t2 =1), se é zero (t1 = 1), ou se ocorreu um vai-um do bit mais significativo (t0 =vai3). O uso de um mnemônico facilita lembrar o significado dos bits de status:T=〈t2, t1, t0〉=〈n,z,v〉, para ‘negativo’, ‘zero’ e ‘vai-um’. A implementação doscircuitos dos bits de status é discutida nos Exercícios 5.14 a 5.16.
5.4 Soma
O circuito que efetua a soma de dois bits mais o vem-um é chamado de somadorcompleto de um bit, e tem entradas a, b e vem-um (vem), e saídas s e vai-um(vai). O relacionamento entre estes sinais é definido na Tabela 5.5. A colunaintitulada N mostra o valor da soma na base 10. As equações para computar se vai são facilmente derivadas da Tabela 5.5, e são mostradas na Equação 5.8.Estas duas equações definem o circuito do bloco chamado ‘soma’ na Figura 5.9.
s = a⊕ b⊕ vemvai = (a ∧ b) ∨ (a ∧ vem) ∨ (b ∧ vem) (5.8)
Tabela 5.5: Tabela verdade do somador completo de um bit.
a b vem vai s N0 0 0 0 0 00 1 0 0 1 11 0 0 0 1 11 1 0 1 0 20 0 1 0 1 10 1 1 1 0 21 0 1 1 0 21 1 1 1 1 3
O circuito que efetua a soma de números representados em mais de um bitreplica o algoritmo usado nas operações que efetuamos manualmente, que éindicado na Figura 5.10. Iniciando da direita, na posição menos significativa,um dígito de cada parcela é adicionado, e o vai-um desta adição é incluído nasoma do próximo par de dígitos. Isso se repete até o dígito mais significativodos operandos.O circuito que efetua a soma de dois números de quatro bits é obtido com aligação de quatro somadores de um bit, como mostrado na Figura 5.11. O sinal
5.5. Subtração 141
a3 + b3+ a1 + b1+ a0 + b0+a2 + b2+
0vai0vai1vai2
vai3
Figura 5.10: Adição de dois números representados em 4 bits.
vaii de um somador é ligado à entrada vemi+1 do somador do próximo bit maissignificativo. O sinal vem0 é ligado a 0 nas somas.
...................... ..................................................................
s3
a3 b3
s
vai3
a bvai vem 0
vai1 vai0vai2
s0
a0 b0
svemvaiba
s1
a1 b1
s
a bvai vem
s2
a2 b2
s
a bvai vem
Figura 5.11: Circuito somador de quatro bits.
5.5 Subtração
O complemento de dois de um número, e portanto o negativo daquele número,é obtido complementando-se todos os bits do número e somando-se 1 ao com-plemento: −B = B +1. O circuito para efetuar a subtração é o mesmo circuitousado para efetuar a soma, como o da Figura 5.11, desde que a entrada B sejacomplementada, e seja adicionado 1 à B:
A−B = A + (B + 1).
O circuito para complementar B é controlado pelo sinal inv: B / inv . B . Aadição do 1 é obtida ligando-se 1 à entrada de vem-um do bit menos significa-tivo, vem0.O circuito que efetua somas e subtrações é mostrado na Figura 5.12. Repareque o sinal inv é também ligado à entrada vem0: se a operação é uma soma,então inv = vem0 = 0 e o circuito computa A + B + 0; se é uma subtração,então inv = vem0 = 1 e o circuito computa A + B + 1. No circuito da ULA,na Figura 5.9, o sinal inv deve ser ativado quando F = 1.O circuito que subtrai tem uma ligeira idiosincrasia: se efetuarmos A − A, oresultado é 0 com vai3 = 1. Isso decorre da implementação do circuito dasoma, conforme a Equação 5.8. Ao efetuar A−A obtemos
142 Capítulo 5. Aritmética
ppppppppppppp ppppppppppppp
ppppppppppppp
ppppppppppppp
s0
s1
s2
s3
a0
a1
a2
a3
b0
b1
b2
b3
vaib
assoma
vem
vaib
assoma
vem
vaib
assoma
vem
vaib
assoma
vem
inv
inv
inv
inv
vem0inv
vai3
Figura 5.12: Circuito que efetua somas e subtrações.
si = (ai ⊕ ai)⊕ vemi definição ⊕= 1⊕ vemi definição ⊕= vemi
vaii = (ai ∧ ai) ∨ (ai ∧ vemi) ∨ (ai ∧ vemi) complemento ∧= 0 ∨ (ai ∧ vemi) ∨ (ai ∧ vemi) identidade ∨= (ai ∧ vemi) ∨ (ai ∧ vemi) distributiva= (ai ∨ ai) ∧ vemi complemento ∨= 1 ∧ vemi identidade ∧= vemi
(5.9)
A Equação 5.9 mostra que a cadeia dos vai-um repassa, sem alteração, obit vem0 = 1 para vai3, enquanto que todos os bits da diferença são geradoscorretamente: si = vemi = vem0 = 0. Para que o circuito produza o resultadoesperado, que é A − A = 0 e vai3 = 0, o bit vai3 deve ser complementadona subtração.
5.6. Somador com Adiantamento de Vai-um 143
Exercícios
Ex. 5.12 Desenhe um diagrama com o circuito completo da ULA com as4 fatias e todas as ligações entre elas. Use uma folha A3 para que os circuitosdos exercícios abaixo possam ser incluídos no mesmo diagrama.
Ex. 5.13 Mostre como o circuito para inverter a entrada B do somador(B / inv . B ) pode ser implementado com uma porta de duas entradas.
Ex. 5.14 Projete os circuitos que computam os dois sinais de status da ULA:(i) um circuito para verificar se o resultado é negativo; (ii) um circuito paraverificar se o resultado é zero.
Ex. 5.15 Estenda o somador para detectar a ocorrência de overflow e acres-cente um bit de status à ULA. Pista: cuidado com a subtração.
Ex. 5.16 Mostre como implementar comparações de igualdade (A=B) e demagnitude (A<B). Pista: use subtrações.
Ex. 5.17 Adicione os circuitos e ligações adicionais à ULA para permitirrotações de uma posição, além de deslocamentos de uma posição.
Ex. 5.18 Em “deslocamentos lógicos”, os bits que são inseridos nos extremossão sempre 0. Em “deslocamentos aritméticos”, o sinal do número deve serpreservado. Modifique o circuito do Exercício 5.17 para permitir deslocamentoslógicos e aritméticos. Note que estas adições implicam em aumentar o númerode sinais de controle fazendo com que |F | > 3.
5.6 Somador com Adiantamento de Vai-um
Considere o somador de 4 bits mostrado na Figura 5.11. Supondo que as entra-das A e B e vem0 estabilizem no instante t, o sinal vai3 somente estabilizaráapós a propagação dos sinais através dos quatro somadores de um bit:
s0 ; s1 ; s2 ; s3 .
Supondo que o tempo de propagação de uma porta lógica seja de uma unidadede tempo, então cada somador contribui com 2 unidades de tempo porque osinal de vai-um é definido por
vai = a ∧ b ∨ a ∧ vem ∨ b ∧ vem ,
e implementado com uma porta or de três entradas, mais três portas and deduas entradas. Dessa forma, para um somador de quatro bits, o sinal vai3
144 Capítulo 5. Aritmética
estabiliza em 8 unidades de tempo. Para um somador de 16 bits, o sinal vai15estabiliza após 32 unidades de tempo.É possível reduzir o tempo de propagação da cadeia de vai-um quando se ob-serva que todos os bits das entradas estão disponíveis ao mesmo tempo, eportanto é possível computar todos os bits de vai-um em paralelo: o vai3 de-pende das entradas a3 e b3 e de vai2, que por sua vez depende de a2 e b2 e devai1, e assim sucessivamente.Uma otimização que reduz de forma substancial o tempo de propagação dacadeia de vai-um consiste em computar em paralelo, e então adiantar, o valorde todos bits intermediários da cadeia de vai-um. Este somador otimizado échamado de somador com adiantamento de vai-um.A Tabela 5.6 mostra a tabela verdade de um somador completo de dois bits.A sexta coluna (n10) mostra o valor da soma na base 10. As colunas g e pmostram as funções gera vai-um: g(a, b); e propaga vai-um: p(a, b). A funçãog(a, b) = 1 sempre que o vai-um é 1, enquanto que a função p(a, b) = 1 sempreque o valor do vem-um é propagado para o vai-um. O nome em Inglês para o‘vai-um’ é carry-out, e por isso, no que segue, ci é usado para os bits de vai-umnas cadeias de propagação.
Tabela 5.6: Soma de dois bits.
a b vem vai s n10 g p0 0 0 0 0 0 0 00 1 0 0 1 1 0 11 0 0 0 1 1 0 11 1 0 1 0 2 1 10 0 1 0 1 1 0 00 1 1 1 0 2 0 11 0 1 1 0 2 0 11 1 1 1 1 3 1 1
Considere um somador de 4 bits. O vai-um do bit i pode ser computado comas funções gi e pi:
ci = gi ∨ (pi ∧ ci−1) . (5.10)
O vai-um é 1 se é gerado nos bits da posição i, se gi = 1, ou então seu valor épropagado desde a posição i− 1, se pi = 1 ∧ ci−1 = 1.A Equação 5.11 define a cadeia de geração de vai-um para um somador dequatro bits, na qual a conjunção é denotada por um ponto, e o vem-um daposição menos significativa é denotado por vem. Esta equação reflete a intuiçãosobre o comportamento da cadeia de propagação do vai-um: ou o vai-um égerado localmente, ou ele é propagado desde uma posição menos significativa.
5.6. Somador com Adiantamento de Vai-um 145
c0 = g0 ∨ (p0 · vem)c1 = g1 ∨ (p1 · g0) ∨ (p1 · p0 · vem)c2 = g2 ∨ (p2 · g1) ∨ (p2 · p1 · g0) ∨ (p2 · p1 · p0 · vem)c3 = g3 ∨ (p3 · g2) ∨ (p3 · p2 · g1) ∨ (p3 · p2 · p1 · g0)
∨ (p3 · p2 · p1 · p0 · vem)
(5.11)
Um somador de 4 bits com cadeia de adiantamento de vai-um é mostrado naFigura 5.13. Os sinais de vai-um adiantados são gerados nos trapézios.
........................................................................................
............................................ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
............................................ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
s0
a0 b0
s3
a3 b3
s2
a2 b2
s1
a1 b1
ssss c0c1c2vem
c3
p0g0
p1,0g1,0
vem
p3,2,1,0g3,2,1,0
p2,1,0g2,1,0
vem vem vem vema ba ba ba b
Figura 5.13: Propagação e geração na cadeia de vai-um.
O circuito do somador pode ser simplificado porque a geração do vai-um nãoé efetuada como no circuito da Figura 5.11. Um somador, que computa ossinais de gera vai-um e propaga vai-um é mostrado na Figura 5.14. O sinal ppode ser implementado com um ou-exclusivo, ao invés de ou-inclusivo porque,quando as entradas a e b são 1, ambos p e g são 1. O valor da soma fica estávelapós 2 unidades de tempo, e os sinais p e g estabilizam em 1.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp pppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppp ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
qqqqqqqqqqqqq pi = ai ⊕ bi
gi = ai ∧ bi
ci−1
bi
bi
ai
ai
si = (ai ⊕ bi)⊕ ci−1
Figura 5.14: Circuito otimizado do somador para adiantamento de vai-um.
Supondo que as entradas A, B, vem estabilizam no instante t, podemos com-putar o tempo de propagação do somador de 4 bits otimizado.
146 Capítulo 5. Aritmética
s0 estabiliza em t + 2 porque se propaga somente através de dois xor;
s1 estabiliza em t + 4 porque se propaga através de portas and e or que geramp e g, mais um and seguido de um or para computar c0, e finalmente oxor de c0 e a1 ⊕ b1;
c0, c1, c2, c3 estabilizam em t + 3 porque se propagam através de uma soma deprodutos – dois ou mais and seguidos de um or;
s2, s3 estabilizam em t + 4 porque se propagam através de um xor de ci−1 eai ⊕ bi.
Comparando-se com o somador original, o somador de 4 bits com adiantamentode vai-um produz resultados na metade do tempo. Este ganho de desempenhoé ligeiramente superestimado porque o tempo de propagação das portas é pro-porcional ao número de entradas – o seu fan-in. Assim, o tempo de propagaçãode c3 é algo mais longo do que o de c1. Uma estimativa precisa do tempo de pro-pagação depende dos detalhes da implementação, e temporização, das portaslógicas. Para circuitos de tamanho realista, emprega-se simulações detalhadaspara determinar o tempo de propagação.O circuito do somador de 16 bits com adiantamento de vai-um é mostrado naFigura 5.15. Os somadores são agrupados em blocos de quatro, e o vai-um decada bloco é computado pelo circuito de adiantamento de vai-um, mostradocomo um trapézio na figura. Cada bloco de adiantamento implementa a Equa-ção 5.11 e os sinais vem4 = c3, vem8 = c7, vem12 = c11, e vai = c15 sãogerados em paralelo pelos quatro circuitos de adiantamento. Há uma cadeia dedependência entre os quatro circuitos de adiantamento: c3 ; c7 ; c11 ; c15 .A mesma ideia do adiantamento de 4 bits pode ser empregada para adiantaro vai-um em somadores de 16 bits, considerando-se agora grupos de 4 bits. AsEquações 5.12 e 5.13 definem a propagação do vem-um através de um quarteto,e a geração do vai-um em qualquer posição do quarteto, respectivamente.
P0 = p3 · p2 · p1 · p0P1 = p7 · p6 · p5 · p4P2 = p11 · p10 · p9 · p8P3 = p15 · p14 · p13 · p12
(5.12)
G0 = g3 ∨ p3 · g2 ∨ p3 · p2 · g1 ∨ p3 · p2 · p1 · g0G1 = g7 ∨ p7 · g6 ∨ p7 · p6 · g5 ∨ p7 · p6 · p5 · g4G2 = g11 ∨ p11 · g10 ∨ p11 · p10 · g9 ∨ p11 · p10 · p9 · g8G3 = g15 ∨ p15 · g14 ∨ p15 · p14 · g13 ∨ p15 · p14 · p13 · g12
(5.13)
5.6. Somador com Adiantamento de Vai-um 147
ppppppppppppp
ppppppppppppp
ppppppppppppp
ppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
bvema sa8
b8
bvema sa9
b9
bvema sa10
b10
bvema sa11
b11
s8
s9
s10
s11
a8b8
a9b9
a10b10
a11b11
vem
c3C2
c0
c1
c2
vem12
bvema sa12
b12
bvema sa13
b13
bvema sa14
b14
bvema sa15
b15
s12
s13
s14
s15
a12b12
a13b13
a14b14
a15b15
vem
c3C3
c0
c1
c2
bvema sa4
b4
bvema sa5
b5
bvema sa6
b6
bvema sa7
b7
s4
s5
s6
s7
a4b4
a5b5
a6b6
a7b7
vem
c3C1
c0
c1
c2
vem8
bvema s
bvema s
bvema s
bvema s
b0
a1b1
a2b2
a3b15
s0
s1
s2
s3
a0b0
a1b1
a2b2
a3b3
vem
C0c3
c0
c1
c2
a0
vem4
vem
vai
Figura 5.15: Somador de 16 bits com adiantamento de 4 bits.
A Equação 5.14 define a geração dos sinais de vai-um do quarteto. O sinal P0indica que ocorre a propagação de vai-um através dos quatro somadores dos
148 Capítulo 5. Aritmética
bits menos significativos, enquanto que o sinal G0 indica que aqueles somadoresproduzem vai-um. O sinal C3 é o vai-um adiantado do somador na posição maissignificativa: C3 = c15 = vai.
C0 = G0 ∨ P0 · vemC1 = G1 ∨ P1 ·G0 ∨ P1 · P0 · vemC2 = G2 ∨ P2 ·G1 ∨ P2 · P1 ·G0 ∨ P2 · P1 · P0 · vemC3 = G3 ∨ P3 ·G2 ∨ P3 · P2 ·G1 ∨ P3 · P2 · P1 ·G0
∨P3 · P2 · P1 · P0 · vem
(5.14)
Para tirar proveito desta otimização, no circuito da Figura 5.15, os sinaisC0, C1, C2 devem ser ligados, respectivamente a vem4, vem8, vem12, e o sinalC3 passa a ser o vai-um do somador de 16 bits, sendo portanto ligado a vai. Umdiagrama com a otimização dos quartetos incluiria os circuitos que computamos Pi, Gi e Ci nos trapézios.
5.7 Somador com Seleção de Vai-um
Uma alternativa para a implementação de somadores rápidos é indicada naFigura 5.16, que mostra um somador de 8 bits construído com três somadoresde 4 bits. A parte menos significativa do resultado é obtida pela soma dos doisoperandos:
〈V3S3..0〉 = A3..0 + B3..0 + v0 .
A parte mais significativa da soma é obtida em paralelo com a parte menossignificativa, computando-se simultaneamente duas alternativas para o vai-umda parte menos significativa, uma com v4 = 0, e a outra com v4 = 1. Quandoos sinais se propagam através do somador da parte menos significativa, e ovalor de V3 = v3 fica estável, este é usado para escolher um dos dois resultadosparciais, através do multiplexador de 4 bits de largura.O vai-um da soma em 8 bits depende do valor de V3, e é dado por
V8 = (V7z ∨ V3) ∧ V7u .
Este circuito é chamado de “somador com seleção de vai-um” (carry selectadder) porque a metade mais significativa do resultado é determinada pelovai-um da metade menos significativa.Infelizmente o tempo de propagação do somador de 8 bits é um tanto maior doque o de um somador de 4 bits por causa do multiplexador de duas entradas.O sinal V3, que seleciona o valor final da saída, é um sinal com um fan-outelevado. Quanto maior a largura do somador, maior é o fan-out de V3, e maisdemorada a seleção da metade mais significativa do resultado.
5.7. Somador com Seleção de Vai-um 149
...............................................................................................................................................................................................................................................................................................
..........................................................................................................................................................................................................................................................................................
....................................................................................................................................................................................................................................................................................
...............................................................................................................................................................................................................................................................................
.............................................................................................................
...........................................................................................................
........................................................................................................ pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
................................................................................................................
S7..4
somador4vai vem v0
S3..0
b3 b0b1b2 a0a1a2a3
s3 s2 s1 s0
A3..0B3..0
V3
vai vem 1V7u
b3 b0b1b2 a0a1a2a3
s3 s2 s1 s0
somador4
V7z somador4vai vem
A7..4B7..4
0b3 b0b1b2 a0a1a2a3
s3 s2 s1 s0
B7..4 A7..4
4 × mux21 0
Figura 5.16: Somador com seleção de vai-um.
Se o número de bits do somador da parte mais significativa for maior do que oda parte menos significativa, então o tempo de propagação deste somador podecompensar a propagação através do multiplexador. Por exemplo, se implemen-tarmos o somador da parte menos significativa com 3 bits e o da parte maissignificativa com 5 bits, então o tempo de propagação deste novo projeto seriamais curto que aquele do circuito da Figura 5.16.
Exercícios
Ex. 5.19 Estime o tempo de propagação do somador de 16 bits com o adian-tamento de vai-um definido na Equação 5.14, considerando que cada entradaalém da segunda adiciona ao tempo de propagação da porta lógica 20% do seutempo original. Considere que Tp = 1 para todas portas de duas entradas.
Ex. 5.20 Estime o tempo de propagação de um somador de 32 bits comseleção de vai-um, implementado com três somadores de 16 bits iguais ao quevocê avaliou para responder ao Ex. 5.19. Considere que o fan-out não influenciao tempo de propagação das portas lógicas. Considere que Tp = 1 para todasportas lógicas de duas entradas.
Ex. 5.21 Repita o Ex. 5.20, agora considerando que cada saída adicional,além da primeira, piora o tempo de propagação da porta lógica em 10% do seu
150 Capítulo 5. Aritmética
tempo original – cada incremento no fan-out da porta aumenta o seu tempo depropagação em 10%. Considere que Tp = 1 para todas portas lógicas de duasentradas, quando ligadas a uma única saída – com fan-out de 1.
5.8 Multiplicação
Efetue a multiplicação indicada abaixo sem nenhuma das simplificações quefazemos automaticamente ao multiplicar a mão.
1 0 1 1× 1 0 0 1
Espaço em branco proposital.
5.8. Multiplicação 151
A multiplicação, sem simplificações, é mostrada na Figura 5.17. A coluna dadireita indica o dígito do multiplicador que multiplica cada parcela do resultadoparcial. As parcelas multiplicadas por 0 são mostradas em itálico, e normal-mente as ignoramos ao somar as parcelas do produto parcial.
11 1 0 1 1×9 × 1 0 0 1
1 0 1 1 ×1+ 11 0 1 1 ×0+ 11 0 1 1 ×0+ 1 0 1 1 ×1
99 1 1 0 0 0 1 1
Figura 5.17: Exemplo de multiplicação: 11× 9.
O resultado da multiplicação da Figura 5.17 é o mesmo, se os números repre-sentam valores na base 10, ou na base 2. Se consideramos a base 2, então11× 9 = 99 é o resultado, como mostra a Figura 5.17.Se multiplicarmos dois números de n bits, o produto será representado em,no máximo, 2n bits porque 2n × 2n = 22n. Números com n bits representamvalores no intervalo [0, 2n − 1], e
22n−1 < (2n − 1)2 < 22n .
O produto de dois números de n bits é sempre menor que 22n, e portanto amultiplicação não provoca overflow.
5.8.1 Acumulação de Produtos Parciais – Versão 1
Nossa primeira tentativa de implementar um multiplicador combinacional éuma reprodução exata do algoritmo da Figura 5.17, para um multiplicando X,multiplicador Y , e produto Z.Cada parcela da soma é computada por um bloco que efetua o produto domultiplicando X pelo dígito correspondente àquela parcela do multiplicador, yi.O bloco contém um somador que acrescenta o produto X × yi à soma queacumula as parcelas ‘anteriores’ do produto.Este bloco é especificado pela Equação 5.15. A soma dos dois operandos de4 bits produz um resultado em 5 bits. Se s = 0, então o produto parcial destaparcela é zero; como a saída R tem 5 bits, um 0 é concatenado à esquerda daentrada A – o ‘&’ denota a concatenação. Do contrário, s = 1, e à soma dasparcelas anteriores (A) é acrescentado mais um multiplicando (B).
152 Capítulo 5. Aritmética
s : BA, B : B4
R : B5
mp1 : B× (B4 × B4) 7→ B5
mp1(s, A, B, R) ≡ num(R) = [num(A) + num(B)] / s . [0&A]
(5.15)
A entrada A do primeiro bloco mp1 é zero porque a primeira parcela é, nomáximo, y0 × X. De cada uma das parcelas extrai-se um bit definitivo doproduto: da primeira resulta o bit z0, da segunda z1, da terceira z2, e daquarta z3 – reveja a Figura 5.17. Da quarta parcela resultam ainda os quatrobits mais significativos do produto, 〈z7, z6, z5, z4〉. A Figura 5.18 mostra omultiplicador de 4×4 bits, com os multiplicando X e multiplicador Y no topo,e o produto Z na base.
..............
..............
..............
.............. ..............
...............
ppppppppppppp
ppppppppppppp
ppppppppppppp
...................
4
4
4
4 4
4
ABsR
0
ABsR
ABsR
ABsR
y0
y1
y2
y3
YX
z0z1z2z7 z6 z5 z4 z3
mp1
mp1
mp1
mp1
Figura 5.18: Primeira implementação da multiplicação em 4× 4 bits.
5.8. Multiplicação 153
O bloco que computa a primeira parcela consiste somente de quatro mux-2,que selecionam 0 se y0 = 0, ou o multiplicando se y0 = 1. Os demais blocoscontém um somador seguido de um multiplexador. Se o tempo de propagaçãode um somador completo é TS , e o de um multiplexador Tx, então o tempo depropagação deste circuito é de
Tm1 = 3× 4× TS + 4× Tx
porque a saída de cada mp1 atravessa um mux-2 e o valor do bit z7 depende dapropagação do vai-um através dos quatro somadores completos de cada umadas três últimas parcelas.A Equação 5.15 parece indicar um multiplexador para selecionar um dentre adi-cionar uma nova parcela (si = 1), ou adicionar zero (si = 0). A leitora atentacertamente percebeu a otimização: ao invés de um multiplexador basta umaporta and para efetuar a multiplicação por 1, ou por 0, e com isso removemosduas portas lógicas do caminho critico de cada parcela.Para operandos com n bits, o tempo de propagação deste circuito é
Tm1 ∝ n× (n− 1)
enquanto que seu custo é
Cm1 ∝ n× (n− 1) ≈ n2
porque são necessários n× (n− 1) somadores e n2 portas and.
5.8.2 Acumulação de Produtos Parciais – Versão 2
Circuitos multiplicadores combinacionais que implementam diretamente o al-goritmo da Figura 5.17 são chamados de multiplicadores com acumulação deprodutos parciais.A tabela abaixo mostra a multiplicação de 1 × 1 bits, e esta função é imple-mentada pela função ∧.
× 0 10 0 01 0 1
(5.16)
A Figura 5.19 explicita as posições dos dígitos dos operandos para que possamosconstruir um circuito multiplicador. O bit menos significativo do produto, p0 éobtido diretamente da conjunção dos bits menos significativos dos operandos,a0 e b0 – para simplificar a figura, a conjunção é indicada pela justaposição dedois bits. O bit p1 é a soma de duas conjunções e o vai-um desta soma é usado
154 Capítulo 5. Aritmética
a3 a2 a1 a0b3 b2 b1 b0
a3b0 a2b0 a1b0 a0b0 A× b0+ a3b1 a2b1 a1b1 a0b1 A× b1+ a3b2 a2b2 a1b2 a0b2 A× b2+ a3b3 a2b3 a1b3 a0b3 A× b3p7 p6 p5 p4 p3 p2 p1 p0
Figura 5.19: Multiplicação de operandos de 4 bits.
para computar o valor de p2. O valor do bit p7 depende da soma de todas asparcelas, exceto p0.Uma implementação direta da multiplicação é mostrada na Figura 5.20. Osblocos ‘ss’ são somadores simples, e os blocos ‘sc’ são somadores completos. Aconjunção é indicada pela justaposição dos bits. Somadores simples são usadosnas somas de dois bits, e completos nas somas de três. O caminho mais longo,e que portanto determina o tempo de propagação deste circuito, é o somadorcom seis bits de largura, que computa p7.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...................
..................................
..
..................
..................
.................. ................
..
..................
..................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..................
..................
....................................................................................................
............................................................
..................
..................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...................
.................. ................
..
..................
.....................................................................................
..................
........................................................................
..................
..................
..................
..................
..................
..................................
..
..................
......................
..................
..................
..................
..................
..................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..................
.................. ................
.. .................. ................
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a0b0a1b0
a0b1
a2b0
a1b1
a0b2
a3b0
a2b1a0b3
a1b2a3b1
a2b2
a1b3
a3b2
a2b3
a3b3
p1 p0p2p6 p3p4p5p7
sc sc
sc
sc
ss
sc
sc sc
ssss
sc ss
Figura 5.20: Implementação irregular da multiplicação em 4× 4 bits.
Esta implementação ingênua da multiplicação é um circuito correto porém ir-regular – sua implementação num circuito integrado causaria desperdício deespaço porque o leiaute do multiplicador não se presta facilmente a uma geo-metria regular e retangular. Uma consequência da falta de regularidade é quea extensão deste circuito para operandos de 8 bits é intuitiva, embora nadada versão de 4 bits possa ser reaproveitado. Vejamos como a reorganização dasoma nos ajuda a projetar um circuito com leiaute regular.
5.8. Multiplicação 155
5.8.3 Acumulação de Produtos Parciais – Versão 3
Vejamos uma segunda implementação de um circuito multiplicador com acumu-lação de produtos parciais. Este circuito combinacional é eficiente em termosde forma e área, e seu tempo de propagação é proporcional a 2n para operandosde n bits.Sejamos um pouco mais ambiciosos e tentemos multiplicar de dois em dois bits,como mostrado abaixo para 3× 2 = 6.
3 1 1×2 × 1 0
1 1 ×0+ 1 1 ×1
6 1 1 0
Se chamamos o multiplicando de A e o multiplicador de B, e indicamos os bitsmais e menos significativos pelos subscritos H e L respectivamente, podemosreescrever as quatro multiplicações separadamente:
AL 1 AH 1 AL 1 AH 1BL ×0 BL ×0 BH ×1 BH ×1
00 00 01 01
Repetindo a soma das parcelas, agora usando os resultados dos pares de bits,obtemos o mesmo resultado, 6:
0 0 ALBL
0 0 AHBL
0 1 ALBH
0 1 AHBH
0 1 1 0
Agora o “pulo do gato”: se reordenarmos as parcelas desta soma, obtemosum bloco funcional que pode ser replicado na implementação de multiplicado-res com operandos mais largos do que dois bits, e este bloco é mostrado naFigura 5.21.Vejamos como se dá o próximo passo na construção do multiplicador. Tentemosmultiplicar dois números de 4 bits, da mesma forma que fizemos com operandosde 2 bits. Efetuemos 8×9 = 72, agora usando AL,H e BL,H para representarpares de bits:
810 = 10002, AH = 10, AL = 00
910 = 10012, BH = 10, BL = 01
156 Capítulo 5. Aritmética
.
.
.
.
................................................
................................................
................................................
................................................
AHBH
AHBL
ALBL
ALBH
a0a1
b0
b1
p0p1p2p3
Figura 5.21: Bloco que multiplica dois operandos de 2 bits.
AL 00 AH 10 AL 00 AH 10BL ×01 BL ×01 BH ×10 BH ×10
0000 0010 0000 0100
Cada um destes produtos pode ser quebrado em quatro produtos de pares debits, cada novo quarteto reordenado como na Figura 5.21, e os quatro blocosagrupados como indicado na Figura 5.22. O conteúdo de cada bloco indica osdígitos dos operandos de A e de B.
................................................
................................................
................................................
................................................
................................................
................................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
................................................
................................................
AHBH ALBL
ALBH
AHBL
a3b3
a3b2
a2b2
a2b3
a3b1
a3b0
a2b0
a2b1
a1b3
a1b2
a0b2
a0b3
a1b1
a1b0
a0b1
b1
b2
b3
a1a2
a3
p0p1p2p3p4p5p6p7
b0
a0
a0b0
Figura 5.22: Implementação eficiente da multiplicação em 4× 4 bits.
Os bits dos operandos atravessam o circuito na diagonal, enquanto que osdígitos do produto são computados nas verticais.Falta-nos projetar o bloco que efetua o produto de um par de bits e o soma como produto parcial. Este bloco é mostrado na Figura 5.23. Os dois somadoresdevem efetuar a soma do produto aj ∧bi com o vem-um do bloco à direita (vk),dois bits do produto parcial da parcela de cima (sm,k+1) e (sm,k), e produzem
5.9. Teste de Circuitos Aritméticos 157
três bits do resultado parcial: (sn,k+1) e (sn,k) são encaminhados para a parcelade baixo, e vk+2 é o vai-um para o próximo bloco.
ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
..............................................................................................
..................
..................
..........................................
..................
..................
......................................................................................................................
.....................................................................
..................
........................................
..................
....................................
..................
.................. ................
..
..................................
..
..................
..................
...... ..................
............................................................
..................scvk+2 ss
sn,k+1 sn,k
sm,k+1 sm,k bi
vk
aj
Figura 5.23: Bloco que multiplica e acumula os produtos parciais.
Com operandos com n bits, são necessários n2 portas and para efetuar asmultiplicações, mais 2n2 somadores, e portanto o custo C desde circuito é
Cm3 ∝ n2.
Os somadores são distintos: ‘sc’ é um somador completo e ‘ss’ é um somadorsimples. Algumas otimizações são possíveis nas bordas do multiplicador: osblocos na borda direita não fazem uso da entrada vk e o somador completo podeser simplificado nestes blocos. O bit p0 do produto não usa o somador completo.Note ainda que as maiores colunas (p3 e p4) têm somente sete parcelas.Quanto ao tempo de propagação, o maior somador tem largura 2n. Para qual-quer bit do produto, os sinais se propagam através de até n blocos na horizontal,seguidos de até n blocos na vertical, e portanto o tempo de propagação destecircuito é proporcional a 2n:
Tm3 ∝ 2n.
5.9 Teste de Circuitos Aritméticos
É necessário um trabalho de detetive para localizar erros em circuitos queimplementam as operações aritméticas. Usaremos somadores para exemplificar,mas as mesmas técnicas podem ser usadas para testar multiplicadores.No que segue, usaremos a notação de VHDL para a base dos números: b0101indica que a sequência é representada em binário (prefixo b), x89AB indica quea sequência é representada em hexadecimal (prefixo x).A Figura 5.24 mostra um somador de 4 bits. Quais padrões de bits, nas entra-das A e B são necessários para evidenciar erros na implementação do circuito,ou no modelo que descreve o circuito?
158 Capítulo 5. Aritmética
........................................
....
......................
........................................
.... ........................................
....
......................
........................................
....
............................................ ......................
..........................................................................................................................................................................................................................................................................................................................................................................
a3 b3
v3
a2 b2
v2
a1 b1
v1
a0 b0
v4 v0
Figura 5.24: Circuito de testes do somador.
São necessários, ao menos, três tipos de testes: (i) testes para verificar sesomas ‘simples’ produzem resultados corretos – quais os resultados esperadospara a soma das parcelas b0001+b0000 e b0010+b0000? (ii) testes para verificar apropagação do vai-um – quais os resultados esperados para a soma das parcelasb0001+b0001 e b0010+b0010? (iii) testes para verificar se o modelo exibe aspropriedades aritméticas da soma, no caso a comutatividade, operações com oelemento neutro, e operações que provocam overflow.A operação do circuito nos extremos das faixas de valores deve ser examinadacom cuidado: operações com valores pequenos e valores grandes devem produziros resultados corretos.Vejamos alguns padrões de teste para somadores de 16 bits. Como diria Orwell,alguns números são mais úteis do que outros: x5555 e xAAAA são particular-mente úteis – o que se descobre somando x5555 com x5555?
5555 0101 0101 0101 0101+5555 +0101 0101 0101 0101AAAA 1010 1010 1010 1010
O que se descobre somando xAAAA com xAAAA?
AAAA 1010 1010 1010 1010+AAAA +1010 1010 1010 1010
1 5554 1 0101 0101 0101 0100
Que tal x1111 com x1111?
1111 0001 0001 0001 0001+1111 +0001 0001 0001 0001
2222 0010 0010 0010 0010
Além deste par, outros pares de operandos são úteis: x2222, x4444, x8888. Oque se descobre com xFFFF+x0001?Estes operandos nos ajudam a localizar a posição dos bits em que ocorremos erros; uma vez localizados, examina-se o modelo para encontrar o erro, ouempregam-se novos testes até que o problema seja encontrado.
5.9. Teste de Circuitos Aritméticos 159
Cada padrão usado nos testes deve ser o mais simples possível, para evidenciarum determinado tipo de erro. Nos exemplos mostrados acima, somente porçõesbem delimitadas do somador são exercitadas em cada um dos testes.Uma vez que acreditemos que o circuito, ou seu modelo, esteja correto, os testesdevem ser repetidos para garantir que todos os erros foram sanados – sempreexiste o risco de que nossas correções possam ter introduzidos novos erros.
Exercícios
Ex. 5.22 Escreva uma lista de pares de valores para capturar erros emsomadores para operandos de 16 bits. Sua lista deve ser a mais curta possível– tempo é dinheiro – ao mesmo tempo em que a cobertura – variedade de errosdescobertos – seja máxima.
Ex. 5.23 Escreva uma lista de pares de valores para capturar erros emmultiplicadores para operandos de 16 bits. Sua lista deve ser a mais curtapossível ao mesmo tempo em que sua cobertura seja máxima.
Ex. 5.24 Complete o circuito da Figura 5.22, acrescentando todas as ligaçõesque faltam na periferia. Pista: veja o bloco da Figura 5.23.
Ex. 5.25 Efetua todas as otimizações no circuito da sua resposta ao Ex. 5.24.