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
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
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
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
+
+
9
Full-Adder Utilizando Dois Half-Adder
10
Somador Paralelo de 4 bits
– Também conhecido como Somador Ripple Carry
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
13
Gerador do Carry Look-Ahead
Look-ahead carry
generator
14
Somador Carry Look-Ahead de 4 bits
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)
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
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
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
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
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
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
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
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
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.
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
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
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)
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
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
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
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)
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
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
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:
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
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
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
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

Circuitos aritmeticos

  • 1.
    1 Circuitos Aritméticos Combinacionais Tiagode 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 CircuitosAritmé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 DoisHalf-Adder 10 Somador Paralelo de 4 bits – Também conhecido como Somador Ripple Carry
  • 6.
    11 Somador com Vai-UmAntecipado – 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 CarryLook-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) CaminhoCrí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 PortasLó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: Complementode 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 AlgunsNú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 Complementode 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 Complementode 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 de4 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 – Complementode 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 – Complementode 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) – OperandoA 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 aMultiplicaçã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 aSubtraçã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 aSubtraçã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 aSubtraçã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 01 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 somadorripple 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