1. 1
Circuitos Aritméticos Combinacionais
Tiago de Oliveira
2
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
2. 3
Projeto de Circuitos Aritméticos
– Uma forma intuitiva de implementação de operações
aritméticas é através do uso de tabelas-verdade
descrevendo tais operações.
– Uma vez definida a tabela-verdade com as operações
aritméticas, basta implementar as respectivas funções
lógicas.
– Esta estratégia não é eficiente quando os vetores de
entrada (operandos A e B, por exemplo), têm um grande
número de bits, pois sabe-se que o tamanho da tabela-
verdade aumenta exponencialmente com o número de
sinais de entrada
4
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
3. 5
Somador – Half-Adder (Meio Somador)
– Problema:
0 0 0 1
0 1 0 1
0 1 1 0
– Solução: Full-Adder (Somador Completo)
1011
0101
0110
0000
CoutSBA
+
1
S = A Ө B
Cout = A . B
6
Full-Adder (Somador Completo)
01011
11111
01101
10001
1
1
0
0
Y
0110
1000
1010
0000
SCarr
y
ZX
4. 7
Full-Adder (Somador Completo) (continuação)
01011
11111
01101
10001
1
1
0
0
Y
0110
1000
1010
0000
SCarryZX
X Y Z
X Y Z
X Y Z
X Y Z
+
+
+
Carry = X Y Z + X Y Z +
X Y Z + X Y Z
8
Full-Adder (Somador Completo) (continuação)
01011
11111
01101
10001
1
1
0
0
Y
0110
1000
1010
0000
SCarryZX
X Y Z
X Y Z
+
S = X Y Z + X Y Z +
X Y Z + X Y Z
X Y Z
X Y Z
+
+
5. 9
Full-Adder Utilizando Dois Half-Adder
10
Somador Paralelo de 4 bits
– Também conhecido como Somador Ripple Carry
6. 11
Somador com Vai-Um Antecipado
– Também conhecido como Carry Look-Ahead Adder
– Utilização de duas novas variáveis:
• Pi = Ai Ө Bi (propagação do vai-um)
• Gi = Ai Bi (geração do vai)
– A soma e o carry podem ser computados da seguinte
forma:
• Si = Pi Ө Ci
• Ci+1 = Gi + Pi Ci
12
Somador com Vai-Um Antecipado (continuação)
– Expandindo a equação do carry, temos:
• C1 é o carry inicial (entrada)
• C2 = G1 + P1 Ci
• C3 = G2 + P2 C2 = G2 + P2 (G1 + P1 C1)
= G2 + P2 G1 + P2 P1 C1
• C4 = G3 + P3 C3
= G3 + P3 G2 + P3 P2 G1 + P3 P2 P1 C1
7. 13
Gerador do Carry Look-Ahead
Look-ahead carry
generator
14
Somador Carry Look-Ahead de 4 bits
8. 15
Comparação de Custo/Desempenho
– Comparação de custo e desempenho entre:
• Somador Carry Look-Ahead
• Somador Ripple Carry
– Levaremos em consideração duas métricas:
• Caminho Crítico
• Quantidade de portas lógicas gasta
16
Caminho Crítico
FAFAFAFAFAFAFAFA
22222221
Caminho Crítico do Somador Ripple Carry: 15 portas lógicas
Circuito Lógico do Somador Completo (FA)
9. 17
Caminho Crítico (continuação)
Caminho Crítico do Somador Carry Look-Ahead: 4 portas lógicas
Gerador de
Carry
G8
P8A8
B8
C8
S8
2 1
1
Look-ahead carry
generator
18
Quantidade de Portas Lógicas
FAFAFAFA
5552
Somador Ripple Carry de 4 bits:
Circuito Lógico do Somador Completo (FA) = 5 portas lógicas
Total: 17 portas
lógicas
A última célula não
produz o vai-um
10. 19
Quantidade de Portas Lógicas
Somador Carry Look-Ahead de 4 bits:
Look-ahead carry
generator
Total: 21 portas lógicas
20
Comentários sobre Custo/Desempenho
– Para operandos com uma grande quantidade de bits:
• O caminho crítico do somador carry look-ahead é menor se
comparado ao caminho crítico do somador ripple carry
• No entanto, o somador carry look-ahead gasta uma
quantidade bem mais significativa de portas lógicas do que o
somador ripple carry.
– Note que na geração do carry look-ahead existem portas
lógicas com uma grande quantidade de entradas, apesar da
implementação em dois níveis
– O somador com carry look-ahead gasta muita porta lógica
quando a quantidade de bits de entrada aumenta
11. 21
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
22
Representação de Números Negativos
– Problema: Subtrair 2 de 1 = - 1
• Como representar o número negativo em binário?
– Solução:
• Sinal-magnitude (signed-magnitude)
• Sinal-complemento (signed-complement)
– complemento de um
– Complemento de dois
12. 23
Números Negativos: Sinal-magnitude
– O bit mais significativo indica o sinal
• 0 => positivo
• 1 => negativo
– Os bits restantes indicam o valor absoluto
– Exemplo:
• (+12)10 = ( 0 0001100)2
• (-12)10 = ( 1 0001100)2
Bit de Sinal
24
Números Negativos: Complemento de Um
– O número negativo é representado pelo seu complemento
– Se o número for negativo:
• Inverter cada bit do valor absoluto
– Exemplo:
• (+12)10 = (0 0 0 0 1 1 0 0)2
• (-12)10 = (1 1 1 1 0 0 1 1)2
– O bit mais significativo ainda indica se o número é positivo ou
negativo:
• 0 => positivo
• 1 => negativo
– No entanto, para determinarmos o valor absoluto que
representa o número negativo temos que realizar um
determinado procedimento:
• Inverter todos os bits
Inverter todos os bits
13. 25
Números Negativos: Complemento de Dois
– Para números negativos, realizamos o complemento de 1, invertendo
os bits, e depois somamos o valor “1”
– Da mesma forma que no complemento de um, o bit mais significativo
também indica se o número é positivo ou negativo:
• 0 => positivo
• 1 => negativo
– Exemplo:
• (+12)10 = (0 0 0 0 1 1 0 0)2
• (-12)10 => (0 0 0 0 1 1 0 0)2 – “12” em binário
1 1 1 1 0 0 1 1 – invertemos todos os bits (complemento de um)
0 0 0 0 0 0 0 1 – somamos “+1”
1 1 1 1 0 0 1 1
0 0 0 0 0 0 0 1
1 1 1 1 0 1 0 0
+
11
+
26
Complemento de Dois (continuação)
– Exemplo:
• (+0)10 = (0 0 0)2
• (-0)10 => (0 0 0)2 – “0” em binário
1 1 1 – invertemos todos os bits (complemento de um)
0 0 1 – somamos “+1”
1 1 1
0 0 1
1 0 0 0
+
11
+
Se houver vai-um (carry),
este deverá ser desprezado
14. 27
Representação de Alguns Números
1000-8
111110001001-7
111010011010-6
110110101011-5
110010111100-4
101111001101-3
101011011110-2
100111101111-1
10001111-0
000000000000+0
000100010001+1
001000100010+2
001100110011+3
010001000100+4
010101010101+5
011001100110+6
011101110111+7
SINAL-MAGNITUDECOMPLEMENTO DE UMCOMPLEMENTO DE DOISDECIMAL
28
Comentários sobre as Representações
– Complemento de um e Sinal-Magnitude:
• Problema: duas representações distintas para o zero (0)
– Complemento de dois:
• Representa um número negativo a mais do que os
outros dois formatos
15. 29
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
30
Soma/Subtração em Complemento de Dois
– Complemento de dois pode ser utilizado para
representar números negativos.
– Sendo assim, como podemos realizar a soma e a
subtração utilizando o complemento de dois?
– Regra: X + Y
• X pode ser positivo ou negativo em complemento de dois
• Y pode ser positivo ou negativo em complemento de dois
– Procedimento:
• Devemos apenas realizar a soma de modo convencional
• Na soma de números com sinal descartar o vai-um final
• O bit de sinal deve fazer parte do número quando
estivermos realizando a operação de soma
16. 31
Soma em Complemento de Dois
– Regra: X + Y
– Exemplos:
Devemos descartar o
vai-um final
32
Subtração em Complemento de Dois
– Regra: X − Y
• X pode ser positivo ou negativo em complemento de dois
• Y pode ser positivo ou negativo em complemento de dois
– Procedimento:
• Devemos, primeiramente, realizar o complemento de dois de
Y
• Depois, devemos somar o operando X com o complemento
de dois de Y
• Na subtração de números com sinal descartar o vai-um final
• O bit de sinal deve fazer parte do número quando estivermos
realizando a operação de subtração
17. 33
Subtração em Complemento de Dois (continuação)
– Exemplos:
• Realizar a subtração dos números com sinal abaixo:
Devemos descartar o
vai-um final
34
Subtração em Complemento de Dois (continuação)
– Curiosidade:
• (± A) − (+ B) = (± A) + (− B)
• (± A) − (− B) = (± A) + (+ B)
– Por isso, a subtração pode ser realizada através do
complemento de dois e da soma.
18. 35
Circuito Somador/Subtrator de 4 bits
– Utilizando o complemento de dois para representar
números negativos, temos:
– Se S = 0, temos na saída do circuito A + B
– Se S = 1, temos na saída do circuito A − B
36
Overflow – Estouro de Representação
– Em um circuito digital já projetado e implementado, a
quantidade de bits utilizada para representar dados
(números, por exemplo) é fixa.
– Sendo assim, o que aconteceria se realizarmos a soma
dos seguintes números binários sem sinal:
1 1 1 1 (15)
0 0 0 1 (1)
1 1 1
+
1 0 0 0 0 (16)
Imagine um circuito com 4 bits
para a representação de dados
O número (16)10 não pode ser
representado com apenas 4 casas
– O vai-um final não pode ser utilizado para representar o
resultado, pois temos somente 4 bits.
– O vai-um final indica um overflow ou estouro de
representação
19. 37
Overflow – Complemento de Dois
– E se estivermos trabalhando com números em
complemento de dois?
– Quando ocorre o overflow?
• O fato de ocorrer vai-um final não implica necessariamente
em overflow
– Regra para determinar o overflow:
• Observar o carry-in e o carry-out do bit mais significativo (bit
de sinal)
• Se os dois carries forem diferentes, ocorreu um overflow.
38
Overflow – Complemento de Dois (continuação)
– Exemplo:
0 1 0 0 0 1 1 0 (+ 70)
0 1 0 1 0 0 0 0 (+ 80)
1
+
1 0 0 1 0 1 1 0 (+ 150)
O carry_in = 1 e o carry_out = 0.
Portanto, ocorreu um overflow
Com 8 bits podemos representar
apenas de +127 até -128
20. 39
Overflow – Complemento de Dois (continuação)
– Exemplo:
1 0 1 1 1 0 1 0 (- 70)
1 0 1 1 0 0 0 0 (- 80)
1 1 1
+
0 1 1 0 1 0 1 0 (- 150)
O carry_in = 0 e o carry_out = 1.
Portanto, ocorreu um overflow
Com 8 bits podemos representar
apenas de +127 até -128
40
Circuito para Detectar um Overflow
– Uma vez identificado um overflow, o processador deverá
gerar uma exceção e um programa especial deverá ser
chamado para o tratamento do erro.
– Em alguns casos, executa-se um procedimento para
avisar o usuário da ocorrência do overflow.
Detecta overflow de números com sinal
em complemento de dois (signed)
Detecta overflow de números sem sinal (unsigned)
21. 41
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
42
Multiplicação
– Multiplicação utilizando um circuito combinacional
– Operandos de 2 bits cada
Operando A
Operando B
Resultado
Produto
parcial
22. 43
Multiplicação (continuação)
– Operando A de 3 bits cada
– Operando B de 4 bits
B3 B2 B1 B0
A2 A1 A0
A0B3 A0B2 A0B1 A0B0
A1B3 A1B2 A1B1 A1B0
A2B3 A2B2 A2B1 A2B0
+
+
C6 C5 C4 C3 C2 C1 C0
x
AND dos B`s com A0
AND dos B`s com A1
AND dos B`s com A2
Precisamos de um
Somador de 4 bits
Precisamos de um
Somador de 4 bits
Resultado
44
Circuito do Multiplicador
23. 45
Comentários sobre a Multiplicação
– Existem muitas maneiras diferentes de implementarmos o
circuito de multiplicação.
• Por exemplo, utilizando um circuito seqüencial
– Para evitarmos o overflow na multiplicação, precisamos de
uma saída contendo:
• Quantidade de bits do operando A + Quantidade de bits do
operando B
46
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
24. 47
Comparador de Magnitude
– Para números sem sinal:
• O circuito deve indicar se dois números “A” e “B” são:
– Iguais: A == B
– Diferentes:
» A > B
» A < B
– Considere os números sem sinal:
– Para que A == B, todos os bits devem ser iguais entre A e B.
• Ai == Bi, i = 0, 1, 2, 3.
B = B3 B2 B1 B0
A = A3 A2 A1 A0
48
Comparador de Magnitude (continuação)
– Para que A == B, todos os bits devem ser iguais entre A e B.
• Ai == Bi, i = 0, 1, 2, 3.
– Isso pode ser conseguido com a função coincidência
• xi = Ai Bi + Ai Bi, i = 0, 1, 2, 3.
– Portanto:
• (A ==B) = x3 x2 x1 x0 Esta é a equação responsável
pelo circuito (A == B)
25. 49
Comparador de Magnitude (continuação)
– Para que A > B ou A < B:
• Temos que percorrer o vetor binário, começando com o bit
mais significativo:
– Se A3 = 1 e B3 = 0, temos que A > B
– Se A3 = 0 e B3 = 1, temos que A < B
– Se A3 = 0 e B3 = 0, devemos analisar os bits A2 e B2
– Se A3 = 1 e B3 = 1, devemos analisar os bits A2 e B2
– Assim, temos:
• (A > B) = A3 B3 + x3 A2 B2 + x3 x2 A1 B1 + x3 x2 x1 A0 B0
• (A < B) = A3 B3 + x3 A2 B2 + x3 x2 A1 B1 + x3 x2 x1 A0 B0
Esta é a equação responsável
pelo circuito (A < B)
Esta é a equação responsável
pelo circuito (A > B)
50
Circuito Comparador de Magnitude
26. 51
Comparação Utilizando a Subtração
– O complemento de dois e a operação de subtração podem ser
utilizados para a comparação de números sem sinal (unsigned)
– Procedimento:
• Realizar a subtração em complemento de dois
– M − N
» M é um número binário sem sinal
» N é um número binário sem sinal
– Como M − N = M + (− N), então:
» devemos realizar o complemento de dois de N
» e depois somar M com o complemento obtido.
– Se M ≥ N, então a soma acima produzirá um carry (vai-um)
» Se o resultado for igual a zero, então M == N
– Se M < N, então a soma não produzirá um carry.
52
Comparação Utilizando a Subtração (continuação)
– Quando realizamos a regra mostrada anteriormente para a comparação,
matematicamente temos:
M + (2n − N) = M − N + 2n (representação em decimal)
– Se M ≥ N, então a soma acima produzirá um carry (vai-um)
• Esse carry é justamente o 2n da expressão acima.
• Dessa forma, basta desprezarmos o vai-um para obtermos o valor M − N
– Se M < N, então a soma não produzirá um carry
• O resultado é um número negativo e devemos realizar o complemento
de dois da resposta para obtermos a magnitude correta do número
• Lembre-se de colocar um sinal de negativo (−) no resultado obtido
Quantidade de dígitos
do número N em binário
Para N ≠ 0, esta expressão representa o complemento de dois de N
Para N = 0, o complemento de dois é igual a zero
27. 53
Comparação Utilizando a Subtração (continuação)
– Sendo assim, temos:
• Resposta = M − N + 2n
• Se fizermos o complemento de dois da resposta, temos:
2n − [M − N + 2n] = 2n − 2n – M + N= N – M
– Se M < N, então não haverá produção de carry.
– Basta realizarmos o complemento de dois do resultado e
colocarmos um sinal de negativo (–) na frente do número
obtido
• Com isso, representamos o número em sinal-magnitude
Isso representa o valor absouto (magnitude)
do resultado
54
Comparação Utilizando a Subtração (continuação)
– Exemplo (X – Y):
• X = 1010100 (Número sem sinal)
• Y = 1000011 (Número sem sinal)
Y = 1 0 0 0 0 1 1
0 1 1 1 1 0 0 (Inverter os bits)
+
0 0 0 0 0 0 1 (Somar 1)
0 1 1 1 1 0 1 (complemento de dois de Y)
• Como houve vai-um final, então A > B.
– Descartamos o vai-um e assim obtemos a resposta correta: 0010001
1 0 1 0 1 0 0 (X)
Vai-um final
+
1 0 0 1 0 0 0 1
0 1 1 1 1 0 1 (complemento de dois de Y)
• Realizar a Soma:
28. 55
Comparação Utilizando a Subtração (continuação)
– Exemplo (Y – X):
• X = 1010100 (Número sem sinal)
• Y = 1000011 (Número sem sinal)
X = 1 0 1 0 1 0 0
0 1 0 1 0 1 1 (Inverter os bits)
+
0 0 0 0 0 0 1 (Somar 1)
0 1 0 1 1 0 0 (complemento de dois de Y)
• Como não houve vai-um final, então A < B.
– Devemos realizar o complemento de dois do resultado e colocar o
sinal de negativo na frente: − 0010001
1 0 0 0 0 1 1 (Y)
Não houve
Vai-um final
+
1 1 0 1 1 1 1
0 1 0 1 1 0 0 (complemento de dois de X)
• Realizar a Soma:
56
Tópicos deste Módulo
– Projeto de Circuitos Aritméticos
– Somadores
– Representação de Números Negativos
– Soma/Subtração em Complemento de Dois
– Multiplicação
– Comparadores de Magnitude
– Outros Blocos Aritméticos
29. 57
Outros Blocos Aritméticos
– Divisores
– Números em ponto flutuante
• Uma palavra de N bits é dividida em duas partes:
– o expoente e
– a mantissa M
– Representação: M * Be, onde B é a base 2
– Incremento e Decremento
• Podemos reduzir o hardware quando trabalhamos com
constantes
– Multiplicação/Divisão por constantes
• Podemos reduzir o hardware quando trabalhamos com
constantes
– Funções trigonométricas
• Seno/Cosseno/Tangente
• Implementação de funções de aproximação
• Armazenamento de Tabelas contendo os resultados
– Zero fill e extensão de sinal
58
Zero Fill
0 1 1 0 1 0 1 1 (saída de um circuito qualquer que possui 8 bits)
0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 (entrada num circuito que possui 16 bits)
Preenchimento com zeros
30. 59
Extensão de Sinal
0 1 1 0 1 0 1 1 (107 em decimal)
0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 (107 em decimal)
Preenchimento com zeros
– Número Positivo:
1 0 0 1 0 1 0 1 (−107 em decimal)
1 1 1 1 1 1 1 1 1 0 0 1 0 1 0 1 (−107 em decimal)
Preenchimento com 1`s
– Número Negativo (complemento de dois):
60
Comentários sobre os Circuitos Aritméticos
– Blocos aritméticos também podem ser implementados utilizando
circuitos seqüenciais
– Existem muitas implementações diferentes para os blocos
aritméticos apresentados:
• Somadores:
– Carry save adder
– Carry select adder
– Carry look-ahead adder
– Ripple carry adder
– Implementações híbridas
• Multiplicadores:
– Utilizando circuitos combinacionais
– Utilizando circuitos seqüenciais
31. 61
Sumário
– O somador ripple carry costuma ser mais lento do que o
somador com vai-um antecipado.
– No entanto, o somador com vai-um antecipado costuma ter um
custo maior.
– Podemos representar números negativos utilizando
complemento de dois:
• A subtração pode ser realizada utilizando o circuito digital de soma
– O circuito de multiplicação pode ser composto por um vários
somadores paralelos
– Comparadores de Magnitude:
• Podemos utilizar um circuito digital específico
• Podemos utilizar a subtração em complemento de dois e alguns
sinais de carry
– Existem diversos tipos de blocos aritméticos:
• Divisores/ Funções Trigonométricas/ Operações com Constantes/
Zero Fill/ Extensão de Sinal/ Implementações com circuitos
seqüenciais