31
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

Circuitos aritmeticos

Embed Size (px)

Citation preview

Page 1: Circuitos aritmeticos

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

Page 2: Circuitos aritmeticos

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

Page 3: Circuitos aritmeticos

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

SCarry

ZX

Page 4: Circuitos aritmeticos

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

+

+

Page 5: Circuitos aritmeticos

9

Full-Adder Utilizando Dois Half-Adder

10

Somador Paralelo de 4 bits

– Também conhecido como Somador Ripple Carry

Page 6: Circuitos aritmeticos

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

Page 7: Circuitos aritmeticos

13

Gerador do Carry Look-Ahead

Look-ahead carrygenerator

14

Somador Carry Look-Ahead de 4 bits

Page 8: Circuitos aritmeticos

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)

Page 9: Circuitos aritmeticos

17

Caminho Crítico (continuação)

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

Gerador de

Carry

G8

P8A8

B8

C8S8

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

Page 10: Circuitos aritmeticos

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

Page 11: Circuitos aritmeticos

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

Page 12: Circuitos aritmeticos

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

Page 13: Circuitos aritmeticos

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

Page 14: Circuitos aritmeticos

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

Page 15: Circuitos aritmeticos

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

Page 16: Circuitos aritmeticos

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

Page 17: Circuitos aritmeticos

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.

Page 18: Circuitos aritmeticos

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

Page 19: Circuitos aritmeticos

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

Page 20: Circuitos aritmeticos

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)

Page 21: Circuitos aritmeticos

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

Page 22: Circuitos aritmeticos

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

Page 23: Circuitos aritmeticos

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

Page 24: Circuitos aritmeticos

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)

Page 25: Circuitos aritmeticos

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

Page 26: Circuitos aritmeticos

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 NPara N = 0, o complemento de dois é igual a zero

Page 27: Circuitos aritmeticos

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:

Page 28: Circuitos aritmeticos

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

Page 29: Circuitos aritmeticos

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

Page 30: Circuitos aritmeticos

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

Page 31: Circuitos aritmeticos

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