Sie sind auf Seite 1von 61

Circuitos Aritméticos Combinacionais

Tiago de Oliveira

1
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
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

3
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

4
Somador – Half-Adder (Meio Somador)

A B S Cout
0 0 0 0
0 1 1 0 S = AӨB
Cout = A . B
1 0 1 0
1 1 0 1
– Problema:
1
0 0 0 1
+
0 1 0 1
0 1 1 0
– Solução: Full-Adder (Somador Completo)

5
Full-Adder (Somador Completo)

X Y Z Carr S
y
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

6
Full-Adder (Somador Completo) (continuação)

X Y Z Carry S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0 XYZ

1 0 0 0 1 +
1 0 1 1 0 XYZ
Carry = X Y Z + X Y Z +
+ XYZ+XYZ
1 1 0 1 0 XYZ
+
1 1 1 1 1 XYZ

7
Full-Adder (Somador Completo) (continuação)

X Y Z Carry S
0 0 0 0 0
0 0 1 0 1 XYZ
+
0 1 0 0 1 XYZ

0 1 1 1 0
+ S=XYZ+XYZ +
1 0 0 0 1 XYZ XYZ+XYZ

1 0 1 1 0
+
1 1 0 1 0
1 1 1 1 1 XYZ

8
Full-Adder Utilizando Dois Half-Adder

9
Somador Paralelo de 4 bits

– Também conhecido como Somador Ripple Carry

10
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

11
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

12
Gerador do Carry Look-Ahead

Look-ahead carry
generator 13
Somador Carry Look-Ahead de 4 bits

14
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

15
Caminho Crítico

FA FA FA FA FA FA FA FA

1 2 2 2 2 2 2 2

Caminho Crítico do Somador Ripple Carry: 15 portas lógicas

Circuito Lógico do Somador Completo (FA)

16
Caminho Crítico (continuação)
1

B8
A8 P8
S8
C8
G8
2 1

Gerador de
Carry

Look-ahead carry
generator

Caminho Crítico do Somador Carry Look-Ahead: 4 portas lógicas


17
Quantidade de Portas Lógicas

Somador Ripple Carry de 4 bits:

FA FA FA FA

2 5 5 5
A última célula não
produz o vai-um
Total: 17 portas
lógicas

Circuito Lógico do Somador Completo (FA) = 5 portas lógicas

18
Quantidade de Portas Lógicas

Somador Carry Look-Ahead de 4 bits:

Look-ahead carry
generator

Total: 21 portas lógicas 19


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

20
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

21
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

22
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
Bit de Sinal
• (-12)10 = ( 1 0001100)2

23
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
Inverter todos os bits

• (-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

24
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


11110011 – invertemos todos os bits (complemento de um)
+
00000001 – somamos “+1”

1 1
11110011
+
00000001
11110100
25
Complemento de Dois (continuação)
– Exemplo:
• (+0)10 = (0 0 0)2

• (-0)10 => (0 0 0)2 – “0” em binário


111 – invertemos todos os bits (complemento de um)
+
001 – somamos “+1”

1 1
111
+
001
1000

Se houver vai-um (carry),


este deverá ser desprezado

26
Representação de Alguns Números
DECIMAL COMPLEMENTO DE DOIS COMPLEMENTO DE UM SINAL-MAGNITUDE
+7 0111 0111 0111
+6 0110 0110 0110
+5 0101 0101 0101
+4 0100 0100 0100
+3 0011 0011 0011
+2 0010 0010 0010
+1 0001 0001 0001
+0 0000 0000 0000
-0 1111 1000
-1 1111 1110 1001
-2 1110 1101 1010
-3 1101 1100 1011
-4 1100 1011 1100
-5 1011 1010 1101
-6 1010 1001 1110
-7 1001 1000 1111
-8 1000 27
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

28
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
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

30
Soma em Complemento de Dois
– Regra: X + Y
– Exemplos:

Devemos descartar o
vai-um final

31
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

32
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

33
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.

34
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
35
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:
Imagine um circuito com 4 bits
111 para a representação de dados
1 1 1 1 (15)
+
0 0 0 1 (1)
1 0 0 0 0 (16)
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
36
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.

37
Overflow – Complemento de Dois (continuação)
– Exemplo:

1 O carry_in = 1 e o carry_out = 0.
0 1 0 0 0 1 1 0 (+ 70) Portanto, ocorreu um overflow
+
0 1 0 1 0 0 0 0 (+ 80)
1 0 0 1 0 1 1 0 (+ 150)
Com 8 bits podemos representar
apenas de +127 até -128

38
Overflow – Complemento de Dois (continuação)
– Exemplo:

1 1 1 O carry_in = 0 e o carry_out = 1.
1 0 1 1 1 0 1 0 (- 70) Portanto, ocorreu um overflow
+
1 0 1 1 0 0 0 0 (- 80)
0 1 1 0 1 0 1 0 (- 150)
Com 8 bits podemos representar
apenas de +127 até -128

39
Circuito para Detectar um Overflow

Detecta overflow de números com sinal


em complemento de dois (signed)

Detecta overflow de números sem sinal (unsigned)

– 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.

40
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

41
Multiplicação
– Multiplicação utilizando um circuito combinacional
– Operandos de 2 bits cada

Operando B
Operando A

Produto
parcial

Resultado

42
Multiplicação (continuação)
– Operando A de 3 bits cada
– Operando B de 4 bits

B3 B2 B1 B0
x
A2 A1 A0

Precisamos de um A0B3 A0B2 A0B1 A0B0 AND dos B`s com A0


Somador de 4 bits
A1B3 A1B2 A1B1 A1B0 + AND dos B`s com A1
Precisamos de um
Somador de 4 bits A2B3 A2B2 A2B1 A2B0 + AND dos B`s com A2

C6 C5 C4 C3 C2 C1 C0
Resultado

43
Circuito do Multiplicador

44
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

45
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

46
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:
A = A3 A2 A1 A0
B = B3 B2 B1 B0

– Para que A == B, todos os bits devem ser iguais entre A e B.


• Ai == Bi, i = 0, 1, 2, 3.

47
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)

48
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
Esta é a equação responsável
pelo circuito (A > B)
– 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)

49
Circuito Comparador de Magnitude

50
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.

51
Comparação Utilizando a Subtração (continuação)
– Quando realizamos a regra mostrada anteriormente para a comparação,
matematicamente temos:
Quantidade de dígitos
do número N em binário
M + (2n − N) = M − N + 2n (representação em decimal)

Para N ≠ 0, esta expressão representa o complemento de dois de N


Para N = 0, o complemento de dois é igual a zero

– 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

52
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

Isso representa o valor absouto (magnitude)


do resultado

– 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

53
Comparação Utilizando a Subtração (continuação)
– Exemplo (X – Y):
• X = 1010100 (Número sem sinal)
• Y = 1000011 (Número sem sinal)

Y=1000011
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)

• Realizar a Soma:
1 0 1 0 1 0 0 (X)
+
0 1 1 1 1 0 1 (complemento de dois de Y)
10010001
Vai-um final

• Como houve vai-um final, então A > B.


– Descartamos o vai-um e assim obtemos a resposta correta: 0010001
54
Comparação Utilizando a Subtração (continuação)
– Exemplo (Y – X):
• X = 1010100 (Número sem sinal)
• Y = 1000011 (Número sem sinal)

X=1010100
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)

• Realizar a Soma:
1 0 0 0 0 1 1 (Y)
+
0 1 0 1 1 0 0 (complemento de dois de X)
Não houve 1101111
Vai-um final

• 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
55
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

56
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
57
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

58
Extensão de Sinal
– Número Positivo:

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 Negativo (complemento de dois):

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

59
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

60
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
61

Das könnte Ihnen auch gefallen