MC542 Organização de Computadores Teoria e Prática 2006 Prof. Paulo Cesar Centoducatte ducatte@ic.unicamp.br www.ic.unicamp.br/~ducatte Review today, not so fast in future
“Fundamentals of Digital Logic with VHDL Design” - (Capítulo 5) MC542 Circuitos Lógicos Representação de Números e Circuitos Aritméticos “Fundamentals of Digital Logic with VHDL Design” - (Capítulo 5) Review today, not so fast in future
Título do Capítulo Abordado Sumário Representação Posicional Adição de N´´umeros sem Sinal Números com Sinal (sinalizados) Somadores Rápidos Multiplicação Representações de Números Reais
Representação Posicional Representação de Inteiros sem Sinal Sistema Binário: D = dn-1 dn-2 … d1 d0 V(D) = dn-1x10n-1 + dn-2x10n-2 + … + d1x101 + d0x100 B = bn-1 bn-2 … b1 b0 V(B) = bn-1x2n-1 + bn-2xbn-2 + … + b1x21 + b0x20 n-1 = ∑ bix2i i=0
Representação Posicional Conversão entre Decimal e Binário V(B) = bn-1x2n-1 + bn-2xbn-2 + … + b1x21 + b0x20 V(B) = bn-1x2n-1 + bn-2xbn-2 + … + b1x21 + b0 V(B) = bn-1x2n-2 + bn-2xbn-3 + … + b1 + b0 2 2 Conversão de Decimal para Binário: Divisão sucessiva por 2
Exemplo
Octal e Hexadecimal
Adição de Números sem Sinal 0 1 0 1 0 x + + 0 0 1 1 0 y c s 0 1 1 0 Carry Soma x y c s 1
Adição de Números sem Sinal X = x x x x x 0 1 1 1 1 ( 15 ) 4 3 2 1 10 + Y = y y y y y 0 1 0 1 0 ( 10 ) 4 3 2 1 10 1 1 1 0 Generated carries S = s s s s s 1 1 0 0 1 ( 25 ) 4 3 2 1 10
Adição de Números sem Sinal Somador Completo a partir de ½ Somador HA c x i HA c c y i + 1 i c i s i x i y i c i + 1
Somador Ripple-Carry x y x y x y n – 1 n – 1 1 1 c 1 c c FA c c n n ” c 1 c c FA c c n n ” 1 2 FA FA s s s n – 1 1 MSB position LSB position
Representação de Números Negativos Sinal e Magnitude b b b n – 1 1 Número sem Sinal Magnitude MSB b b b b n – 1 n – 2 1 Número com Sinal Magnitude Sign 0 denotes + 1 denotes – MSB
Representação de Números Negativos Complemento de 1 Em complemento de “Um” o número negativo K, com n-bits, é obtido subtraíndo seu positivo P de 2n - 1 K = (2n – 1) - P Exemplo: se n = 4 então: K = (24 – 1) – P K = (16 – 1) – P K = (1111)2 - P K = -7 -> P = 7 7 = (0111)2 -7 = (1111)2 - (0111)2 -7 = (1000)2
Representação de Números Negativos Complemento de 2 Em complemento de “Dois” o número negativo K, com n-bits, é obtido subtraíndo seu positivo P de 2n K = (2n - 1) + 1 - P K = 2n - P K = (2n - 1) – P + 1 Exemplo: se n = 4 então: K = 24 – P K = 16 – P K = (10000)2 - P K = -7 -> P = 7 7 = (0111)2 -7 = (10000)2 - (0111)2 -7 = (1001)2
Representação de Números Negativos
Adição e Subtração Complemento de 1 ( + 5 ) 0 1 0 1 ( – 5 ) 1 0 1 0 + ( + 2 ) + 0 0 1 0 + ( + 2 ) + 0 0 1 0 ( + 7 ) 0 1 1 1 ( - 3 ) 1 1 0 0 ( + 5 ) 0 1 0 1 ( – 5 ) 1 0 1 0 + ( – 2 ) + 1 1 0 1 + ( – 2 ) + 1 1 0 1 ( + 3 ) 1 0 0 1 0 ( – 7 ) 1 0 1 1 1 1 1 0 0 1 1 1 0 0 0
Adição e Subtração Complemento de 2 ( + 5 ) 0 1 0 1 ( – 5 ) 1 0 1 1 + ( + 2 ) + 0 0 1 0 + ( + 2 ) + 0 0 1 0 ( + 7 ) 0 1 1 1 ( – 3 ) 1 1 0 1 ( + 5 ) 0 1 0 1 ( – 5 ) 1 0 1 1 + ( – 2 ) + 1 1 1 0 + ( – 2 ) + 1 1 1 0 ( + 3 ) 1 0 0 1 1 ( – 7 ) 1 1 0 0 1 ignore ignore
Subtração em Complemento de 2 ( + 5 ) 0 1 0 1 0 1 0 1 – ( + 2 ) – 0 0 1 0 + 1 1 1 0 ( + 3 ) 1 0 0 1 1 ignore ( – 5 ) 1 0 1 1 1 0 1 1 – ( + 2 ) – 0 0 1 0 + 1 1 1 0 ( – 7 ) 1 1 0 0 1 ignore ( + 5 ) 0 1 0 1 0 1 0 1 – ( – 2 ) – 1 1 1 0 + 0 0 1 0 ( + 7 ) 0 1 1 1 ( – 5 ) 1 0 1 1 1 0 1 1 – ( – 2 ) – 1 1 1 0 + 0 0 1 0 ( – 3 ) 1 1 0 1
Complemento de 2 0000 1111 0001 1110 0010 – 1 + 1 – 2 + 2 1101 0011 – 3 + 3 1100 – 4 + 4 0100 – 5 + 5 1011 0101 – 6 + 6 – 7 + 7 – 8 1010 0110 1001 0111 1000
Unidade Somador-Subtrator y y y n – 1 1 Add ¤ Sub control x x x n – 1 1 c n -bit adder c n s s s n – 1 1
Overflow Quando há overflow? Como detectar se houve overrflow? ( + 7 ) 0 1 1 1 ( – 7 ) 1 0 0 1 + ( + 2 ) + 0 0 1 0 + ( + 2 ) + 0 0 1 0 ( + 9 ) 1 0 0 1 ( – 5 ) 1 0 1 1 c = c = 4 4 c = 1 c = 3 3 ( + 7 ) 0 1 1 1 ( – 7 ) 1 0 0 1 + ( – 2 ) + 1 1 1 0 + ( – 2 ) + 1 1 1 0 ( + 5 ) 1 0 1 0 1 ( – 9 ) 1 0 1 1 1 c = 1 c = 1 4 4 c = 1 c = 3 3
Somadores Rápidos Carry-Lookahead Desempenho do somador Ripple Carry de n-bits Se cada somador completo tem um atraso de Δt Então, o atraso de todo o somador será de n Δt
Somadores Rápidos Carry-Lookahead Ci+1 = xiyi + xici + yici Ci+1 = xiyi + (xi + yi)ci Ci+1 = gi + pici Ci+1 = gi + pi (gi-1 + pi-1 ci-1) Ci+1 = gi + pigi-1 + pipi-1ci-1
Somadores Rápidos Ripple Carry em termos de g e p x y x y 1 1 g p g p 1 1 c 1 c c 2 Stage 1 Stage 0 s s 1
Somadores Rápidos Carry-Lookahead x y x y 1 1 x y g p g p 1 1 c c 2 c 1 s s 1
Somadores Rápidos Carry-Lookahead x y x y x y 31 – 24 31 – 24 15 – 8 15 – 8 7 – 7 – c 8 c Block Block Block c c c 32 3 24 16 1 s s s 31 – 24 15 – 8 7 –
Carry-Lookahead Hierarquico x y x y x y 31 – 24 31 – 24 15 – 8 15 – 8 7 – 7 – Block Block Block c 3 c 1 24 G P G P G P 3 3 1 1 s s s 31 – 24 15 – 8 7 – c c c 32 16 8 Second-level lookahead
Multiplicação Multiplicando M (14) 1 1 1 0 Multiplicador Q (11) ´ 1 0 1 1 1 1 1 0 1 1 1 0 0 0 0 0 1 1 1 0 Produto P (154) 1 0 0 1 1 0 1 0 Multiplicação: lapis e papel
Multiplicação Multiplicando M (11) 1 1 1 0 Multiplicador Q (14) ´ 1 0 1 1 Produto Parcial 0 1 1 1 0 + 1 1 1 0 Produto Parcial 1 1 0 1 0 1 + 0 0 0 0 Produto Parcial 2 0 1 0 1 0 + 1 1 1 0 Produto P (154) 1 0 0 1 1 0 1 0
Multiplicação
Multiplicação Números com Sinal Multiplicando M (+14) 0 1 1 1 0 Multiplicador Q (+11) x 0 1 0 1 1 Produto Parcial 0 0 0 0 1 1 1 0 + 0 1 1 1 0 Produto Parcial 1 0 1 0 1 0 1 + 0 0 0 0 0 Produto Parcial 2 0 0 1 0 1 0 + 0 1 1 1 0 Produto Parcial 3 0 1 0 0 1 1 + 0 0 0 0 0 Produto P (+154) 0 0 1 0 0 1 1 0 1 0 Multiplicando Possitivo
Multiplicação Números com Sinal Multiplicando M ( 14) – 1 0 0 1 0 Multiplicador Q (+11) ´ 0 1 0 1 1 Partial product 0 1 1 1 0 0 1 0 + 1 1 0 0 1 0 Partial product 1 1 1 0 1 0 1 1 + 0 0 0 0 0 Partial product 2 1 1 1 0 1 0 1 + 1 1 0 0 1 0 Partial product 3 1 1 0 1 1 0 0 + 0 0 0 0 0 Product P ( 154) – 1 1 0 1 1 0 0 1 1 0 Multiplicando Negativo
Representações de Números Reais Notação Científica: ± Mantissa x 10E Mantissa = x.yyyyyy Se Mantissa não possui zeros a esquerda do ponto decimal -> normalizado Padrão IEEE-754 Normalizado Bit Escondido (-1)s x (1 + Fração) x 2E
IEEE-754 de Precisão Simples 32 bits S E M Sign 8-bit 23 bits of mantissa 0 denotes + excess-127 1 denotes – exponent
IEEE-754 de Precisão Dupla 64 bits S E M Sign 11-bit excess-1023 52 bits of mantissa exponent
IEEE-754 Valores Representados Exponent Fraction Represents e = 0 = Emim - 1 f = 0 0 e = 0 = Emim - 1 f 0 0.f x 2 Emim e Emax 1.f x 2e e = Emax + 1 f = 0 e = Emax + 1 f 0 NaN Emim
IEE-754: Exemplo -0,75 = -0,11 Normalizando è 1,1 x 2 0 1 1 1 1 1 1 0 10 2 Normalizando è 1,1 x 2 -1 31 30 23 22 0 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Qual o decimal correspondente ? IEE-754: Exemplo Qual o decimal correspondente ? 31 30 23 22 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 N= - ( 1+0.25) x 2 (129-127) = -1,25 x 4 = -5,0
BCD Binary-Coded-Decimal
Adição Usando BCD X 0 1 1 1 7 + Y + 0 1 0 1 + 5 Z 1 1 0 0 12 + 0 1 1 0 carry 1 0 0 1 0 S = 2 X 1 0 0 0 8 + Y + 1 0 0 1 + 9 Z 1 0 0 0 1 17 + 0 1 1 0 carry 1 0 1 1 1 S = 7
Adição Usando BCD
Somador BCD - Código VHDL LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; ENTITY BCD IS PORT (X, Y : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) ) ; END BCD ; ARCHITECTURE Behavior OF BCD IS SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0) ; SIGNAL Adjust : STD_LOGIC ; BEGIN Z <= ('0' & X) + Y ; Adjust <= '1' WHEN Z > 9 ELSE '0' ; S <= Z WHEN (Adjust = '0') ELSE Z + 6 ; END Behavior ;
Simulação Funcional do Somador BCD
? c out Four-bit adder Two-bit adder s 3 2 1 z x y in