Академический Документы
Профессиональный Документы
Культура Документы
Aritméticos
Dr. Andrés David García García
Departamento de Mecatrónica
ITESM-CEM
Algoritmos de procesamiento digital de señales
M 1
y (n) h(k )x(n k )
k 0
2
Algoritmos de DSP
ADGG / LFGP 3
Representación de Números en Binario
i 3 2 1 0
N 1
X Bi 2 i 15 1 1 1 1
i 0
14 1 1 1 0
: : : : :
2 0 0 1 0
1 0 0 0 1
0 0 0 0 0
4
Representación de Números Negativos
• Varios métodos
• Métodos principales
• Signo y magnitud
• Complemento a 2
• Complemento a 1
5
Representación de Números Negativos
6
Numeración en Complemento a 1
• Número positivo, N,
0 XX…XXX
Donde XX…XXX representa la magnitud del número
/N = (2n – 1) – N
Ejemplo: Si n = 4, -N = 15 – N,
-3 = 15 – 3 = 11 = 11002
7
Numeración en Complemento a 2
• Número positivo, N,
0 XX…XXX
Donde XX…XXX representa la magnitud del número
N* = 2n – N
Donde n es el tamaño de la palabra o número
Ejemplo: Si n = 4, -N = 16 – N,
-3 = 16 – 3 = 13 = 11012
• Regla: Avanzar de derecha a izquierda. Cuando se localice el primer 1,
complementar los siguientes bits.
8
Complemento a 1 y Complemento a 2
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
7 1
2+4=6
6 2 2 - 4 = 6 (-2)
5 3
9
Complemento a 2 VS Complemento a 1
• N* = 2n – N = 2n – 1 – N + 1 = /N + 1
10
Representación de Números Negativos
11
La Suma en Complemento a 2
12
La Suma en Complemento a 1
13
Ejemplos
• Complemento a 2
14
Ejemplos
• Complemento a 1
15
Overflow
16
Overflow
17
Overflow en números sin signo
18
Overflow en números con signo
19
Overflow en números con signo
70 0 1 0 0 0 1 1 0 70 1 0 1 1 1 0 1 0
80 0 1 0 1 0 0 0 0 80 1 0 1 1 0 0 0 0
150 0 1 0 0 1 0 1 1 0 150 1 0 1 1 0 1 0 1 0
20
Overflow en números con signo
70 0 1 0 0 0 1 1 0 70 1 0 1 1 1 0 1 0
80 0 1 0 1 0 0 0 0 80 1 0 1 1 0 0 0 0
150 0 1 0 0 1 0 1 1 0 150 1 0 1 1 0 1 0 1 0
21
Overflow en números con signo
Carry : 0 1 0 0 0 0 0 0 Carry : 1 0 1 1 0 0 0 0
70 0 1 0 0 0 1 1 0 70 1 0 1 1 1 0 1 0
80 0 1 0 1 0 0 0 0 80 1 0 1 1 0 0 0 0
150 0 1 0 0 1 0 1 1 0 150 1 0 1 1 0 1 0 1 0
22
Sumadores Binarios
• Clasificación
Tipo de Suma
• Sumador Completo (Full Adder)
• Sumador Medio (Half Adder)
23
Sumador Medio (Half Adder)
• Circuito aritmético que genera la suma de dos bits (no toma en cuenta el
bit carry)
A B
Entradas Salidas
A B Cout S Cout
0 0 0 0 HA
S
0 1 0 1
1 0 0 1
A
S
1 1 1 0
B
S AB AB A B
Cout
C AB
24
Sumador Completo (Full Adder)
A B
Cout
(Hacia el
siguiente FA) Cin
FA (Del FA anterior)
S
25
Sumador Completo (Full Adder)
Entradas Salidas
A B Cin Cout S S ABCin ABCin ABCin ABCin
0 0 0 0 0 S A B Cin
0 0 1 0 1
0 1 0 0 1 Cout AB ACin BCin
0 1 1 1 0
Cout AB Cin( AB AB )
1 0 0 0 1
1 0 1 1 0 Cout AB Cin( A B )
1 1 0 1 0
1 1 1 1 1
26
Sumador Completo (Full Adder)
Cout
Cin
27
Sumadores de n bits
28
Sumador en Serie
Ai
Si
A = An-1, An-2, …,A0 Bi FA
Cin Cout
B = Bn-1, Bn-2, …,B0
Q D
Condición: entradas sincronizadas
por medio de la señal CLK
CLK
29
Sumador Paralelo
30
Ripple Carry Adder
An-1 Bn-1 A2 B2 A1 B1 A0 B0
Cn Cn-1 c2 c1 c0
FA FA FA FA
Sn-1 s2 s1 s0
Cin 0 1 1 0
A 1011
B 0011
S 1110
Cout 0 0 1 1
31
Ripple Carry Adder
32
Ripple Carry Adder
A0 B0 A1 B1 A2 B2 A3 B3
C0 C1 C2 C3 C4
FA FA FA FA
S0 S1 S2 S3 S4
33
Ripple Carry Adder
A0 B0 A1 B1 A2 B2 A3 B3
C0 C1 C2 C3 C4
FAp FAI FAp FAI
S0 S1 S2 S3 S4
34
Ripple Carry Adder
1 1 0 1 Ai = Bi Generación
1 1 1 1 Ci+1 = Gi = Ai AND Bi
35
Ripple Carry Adder
36
Optimización de la suma de 3 bits
ai bi (t0)
• Célula P
P G
• Célula G T1 T1
• Multiplexor
• Célula S M
Ci +1
U
Ci (tci)
(tci+1) X
T2 T3
S
Si (tsi) 37
Optimización del sumador
ai bi (t0)
• Célula:
T1 P G
T1
Propagación
M
Ci +1
Generación U
Ci (tci)
(tci+1) X
T2 T3
S
Cálculo de la suma
Si (tsi)
38
Manchester Carry Chain Adder
39
Manchester Carry Chain Adder
P G
Ci+1 M
U
X
Ci
Si
40
Manchester Carry Chain Adder
P G
M
Ci+1 U
X
Ci
Si 41
Manchester Carry Chain Adder
• En este caso las células de los bits cero, cuatro y cinco generaron Carry de
salida.
• Las demás células propagaron.
• El tiempo de la suma de 8 bits es 5t (la cadena más larga).
42
Manchester Carry Chain Adder
10 01 10 01 10 10 01 10
43
Manchester Carry Chain Adder
ai bi (t0)
• Las compuertas que forman al FA
tienen distintos tiempos de
propagación (T1, T2, T3).
• Se supone que los módulos P y G T1 P G
T1
tienen el mismo tiempo de
propagación T1.
• Los operandos ai, bi están disponibles Ci +1 M
en t0. U
Ci (tci)
• El carry de entrada Ci esta disponible (tci+1) X
en el tiempo tci.
T2 T3
S
Si (tsi)
44
Manchester Carry Chain Adder
ai bi (t0)
• Propagación ó Generación:
T1 P G
T1
• Suma:
tCi1 f (tCi , T1, T 2, T 3)
M
Ci +1
U
Ci (tci)
(tci+1) X
Si (tsi)
45
Manchester Carry Chain Adder
• Si: ai bi (t0)
tCi t0
• Propagación:
T1 P G
T1
tCi1 T1 T 2
• Generación: M
Ci +1
U
Ci (tci)
tCi1 T1 T 2 (tci+1) X
• Suma:
T2 T3
S
t Si T1 T 3
Si (tsi)
46
Manchester Carry Chain Adder
10 01 10 01 10 10 01 10
1 tC0
tC0
tc1 T1 T 2
tci T1 iT 2
tc 2 T1 2T 2
tSN T1 ( N 1)T 2 T 3
tc3 T1 3T 2
tcN T1 N T 2
48
Ejemplo 1: Cálculo del camino crítico en un
sumador MCC
• P = AXORB
• G = AANDB
50
Cálculo de los Ci independientes
• C0 = 0
• C1 = G0 + P0•C0
• C2 = G1 + P1•C1 = G1 + P1•(G0 + P0•C0)
• C3 = G2 + P2•C2 = G2 + P2•(G1 + P1•C1)
• C3 = G2 + P2•(G1 + P1•(G0 + P0•C0))
51
Cálculo de los Ci independientes
• C0 = 0
• C1 = G0 + P0•C0
• C2 = G1 + P1•G0 + P0•P1•C0
• C3 = G2 + P2•G1 + P1•P2•G0 + P0•P1•P2•C0
52
Aceleración de la propagación de los Ci
C0 C1 C2 C3
S0 S1 S2 S3
53
Carry LookAhead Adder
54
Carry LookAhead Adder
C0
P1
G1
P2
G2
P3
G3
P4
G4
•4 bits de suma: C1 C2 C3 55
C4
Carry Lookahead vs Ripple Carry
Ci 1 X iYi X i Ci Yi Ci
Ci 1 XY Ci ( X i Yi )
Para un sumador
de n-bits
Carry Lookahead
Si X i Yi Ci
C1 G0 P0C0
C2 G1 P1G0 P1 P0C0
Para un sumador
de n-bit
58
Sumador/Restador
• Ejemplo:
‘2: 0010
En este caso, como el OV = ‘1’ el
1101
resultado es un número positivo y la
+ 1
magnitud del mismo se obtiene
1110 (14)
directamente
59
Sumador/Restador
• Ejemplo:
60
Sumador/Restador
A0 A1 A2 A3 An
‘1’ FA FA FA FA FA OV
S0 S1 S2 S3 Sn
61
Sumador/Restador
A0 A1 A2 A3 An
B0 B1 B2 B3 Bn
/B0 /B1 /B2 /B3 /Bn
‘0’ OV
‘1’ Sumador de n bits
S0 S1 S2 S3 Sn
62
Sumador/Restador
R/S A0 B0 A1 B1 A2 B2 A3 B3 An Bn
Sumador de n bits OV
S0 S1 S2 S3 Sn
63
Formato BCD
64
BCD a 7-Segment Display
LSB LSB
A a 0
1
BCD input
b
B
BCD
to 7-segment c 2
Display d 3
C
decoder
e 4
f 5
D g 6
65
Suma en BCD
66
Suma en BCD
1 0 0 0 1 0 0 1
8 0 1 0 0 9 0 1 0 1
4 1 1 0 0 5 1 1 1 0
1 2 1 1 0 1 4 1 1 0
1 0 0 1 0 1 0 1 0 0
67
Suma en BCD
1 0 0 0 1 0 0 1 1 0 0 1
8 1 0 0 0 9 1 0 0 1 9 0 1 1 0
8 1 0 0 0 0 9 1 0 0 1 0 6 0 1 1 1 1
1 6 1 1 0 1 8 1 1 0 1 5 1 1 0
1 0 1 1 0 1 1 0 0 0 1 0 1 0 1
X Y
• Primer aproximación
de la implementación Adder
en Hardware
Sum > 9 ? Z
6 0
MUX
Correction
Cout
Adder
Sum
69
Suma en BCD de dos dígitos
• Mas allá de una suma con un dígito:
• El Carry-Out de la suma de correcciónentra como Carry-In de la suma de 4
bits del dígito BCD siguiente
Resultado mayor a
“1001”? SI Carry-Out de la suma de corrección entra a
+ “0110” la segunda suma como Carry-In
1
38 0 0 1 1 1 0 0 0
97 1 0 0 1 0 1 1 1
Resultado mayor a “1001”?
135 1 1 0 1 1 1 1 1
SI
0 1 1 0 0 1 1 0 + “0110”
1 0 0 1 1 0 1 0 1
70
Suma en BCD de dos dígitos
Resultado mayor a
“1001”? SI
+ “0110”
87 1 0 0 0 0 1 1 1
62 0 1 1 0 0 0 1 0
Resultado mayor a “1001”?
149 1 1 1 0 1 0 0 1 NO
0 1 1 0 0 0 0 0 No sumar “0110”
1 0 1 0 0 1 0 0 1
71
Suma en BCD de dos dígitos: Arquitectura
X1 Y1 X0 Y0
Carry- out
Carry- out
Adder Adder
6 0 6 0
MUX MUX
Correction Correction
Cout Cout
Adder Adder
Sum2
Sum1 Sum0
72
Optimización del circuito
• Caso: cuando la suma + “0110” es requerida
• Suma mayor a “1001”
• (10) 1010
• (11) 1011
• (12) 1100
• (13) 1101
• (14) 1110
• (15) 1111 Combinaciones de bits en común:
• Carry-out = 1 (suma mayor a 15)
73
Hardware Architecture
X Y
Cin
Binary Adder
z3 z2 z1 z0
Binary Adder
Cout (S4) S3 S2 S1 S0 74
Suma en BCD de dos dígitos
X1 Y1 X0 Y0
Cin
Cin
Binary Adder Binary Adder
Cout
z3 z2 z1 z0 z3 z2 z1 z0
Cout S3 S2 S1 S0 S3 S2 S1 S0
S2
S1 S0
75
Multiplicador
76
Multiplicador
77
Multiplicación
A3 A2 A1 A0 A
X B3 B2 B1 B0 B B
A/0
A/3
R= Bi A 2 i
78
Codificación de los productos parciales
a3 a2 a1 a0
a3 b0 a2 b0 a1 b0 a0 b0 b0
a3 b1 a2 b1 a1 b1 a0 b1 b1
a3 b2 a2 b2 a1 b2 a0 b2 b2
a3 b3 a2 b3 a1 b3 a0 b3 b3
M7 M 6 M5 M4 M3 M2 M1 M0
A3 A2 A1 A0
B0
A3/0 A2/0 A1/0 A0/0
B1
A3/1 A2/1 A1/1 A0/1
B2
A3/2 A2/2 A1/2 A0/2
B3
A3/3 A2/3 A1/3 A0/3
Matriz de sumas
M7 M6 M5 M4 M3 M2 M1 M0
80
Multiplicación
A3/1 A2/1 A3/0 A1/1 A2/0 A0/1 A1/0 A0/0
HA FA FA HA
FA FA FA HA
FA FA FA HA
M7 M6 M5 M4 M3 M2 M1 M0
81
Multiplicación
82
Multiplicación
A3/1 A2/1 A3/0 A1/1 A2/0 A0/1 A1/0 A0/0
HA FA FA HA
FA FA FA HA
FA FA FA HA
M7 M6 M5 M4 M3 M2 M1 M0
83
Multiplicación
B0
B1
Codificador A/N B2
B3
Sumatoria de A/N
M7 M6 M5 M4 M3 M2 M1 M0
84
Multiplicación de números con signo
• Representación en complemento a 2.
• B3*23*(/A+1) = 23*(B3*/A+B3)
• En este caso si B3=‘1’ se realiza el complemento a 2 y el ajuste.
• Si B3=‘0’ el producto parcial es cero y no hay ajuste.
85
Extensión de signo (Si B es negativo)
A3 A2 A1 A0
B0
A3/0 A2/0 A1/0 A0/0
B1
A3/1 A2/1 A1/1 A0/1
B2
A3/2 A2/2 A1/2 A0/2
B3
Matriz de sumas
M7 M6 M5 M4 M3 M2 M1 M0
86
Multiplicación de números con signo
87
Multiplicación
88
Multiplicación de números con signo
Complemento a 2
89
Multiplicación de números con signo
• Efectuar el corrimiento hacia la izquierda y extensión
de signo.
• El último operando se representa en complemento a 2
de A si B es negativo (MSB = ‘1’), en otro caso, el
último operando es cero:
A bN 1 2 N 1 A 1 2 N 1 bN 1 A bN 1
• Físicamente, la implementación consiste en
complementar el operando A y sumar el término:
bN 1 2 N 1
90
Multiplicación de números con signo
a3 a2 a1 a0
-a3 b0 a2 b0 a1 b0 a0 b 0 b0
-a3 b1 a2 b1 a1 b1 a0 b1 b1
-a3 b2 a2 b 2 a1 b2 a0 b2 b2
-a3 b3 a2 b3 a1 b 3 a0 b3 b3
b3
M7 M6 M5 M4 M3 M2 M1 M0
91
Multiplicación de números con signo
A3 A2 A1 A0
B0
A3/0 A2/0 A1/0 A0/0
A3/0
B1
A3/1 A2/1 A1/1 A0/1
A3/1
B2
A3/2 A2/2 A1/2 A0/2
A3/2
B3
A3/3 A2/3 A1/3 A0/3
23B3
Matriz de sumas
M7 M6 M5 M4 M3 M2 M1 M0
92
Multiplicación de números con signo
93
Multiplicación
94
Multiplicación
95
Multiplicación
96
Carry Save Adders (CSA)
97
Carry Save Adder
A3 S3
B3 FA Co3
C3 N
A3 S3 A N
B3 FA Co3
N Co
C3 B C.S.A N
N
A3 S3 S
B3 C
FA Co3
C3
A3 S3
B3 FA Co3 A+B+C=S+2 CY
C3
98
Carry Save Adder
A+B+C=S+2 CY
99
Carry Save Adder
X+Y+Z X+Y+Z
X= 0 0 1 0 1 0 1 0 1
X= 0 0 1 0 1 0 1 0 1
Y= 0 1 0 1 0 1 1 1 0
Y= 0 1 0 1 0 1 1 1 0
Z= 0 0 1 0 0 0 1 0 1
Suma
r=100000011 S= 010111110
Z= 0 0 1 0 0 0 1 0 1 carry
C= 0 0 1 0 0 0 1 0 1
R= 1 0 1 0 0 1 0 0 0
R= 0 1 0 1 0 0 1 0 0 0
100
Carry Save Adder
A1
A2 CSA CSA CSA CSA CSA SUMADOR
A3 RÁPIDO
A4 A5 A6 A7
103
CSA
A1
A2 CSA CSA CSA CSA SUMADOR
A3 RÁPIDO
A4
A5
A6 CSA
A7 CSA
A8
A9 CSA
104
Sumador Rápido
HA HA HA HA
A3
HA HA HA
A2
HA HA
A1
HA
A0
105
Sumador Rápido
FA FA FA HA
A3 A2 A1 A0
106
Sumador Rápido
FA HA FA HA
HA HA
A3 A2 A1 A0
107
Multiplicación con CSA
108
Multiplicación con CSA
109
Multiplicador Serie-Paralelo
110
Multiplicador Serie-Paralelo
Operando “A”
0 1 1 0
Operando “B”
x 1 0 1 0
0 0 0 0 0 0 0 “A” x B0 Shift a la
0 0 0 1 1 0 “A” x B1 Izquierda según
la potencia de n2
0 0 0 0 0 “A” x B2 que corresponda
1 0 1 0 “A” x B3 a cada bit de “B”
1 0 1 1 1 0 0 (-36)
0 1 1 0
x 1 0 1 0
0 1 1 0
0 0 0 0 Shift
x 1 0 1 0
0 0 0 0 Add
0 0 0 0 0 0 0
+ 0 1 1 0 Shift
0 0 0 1 1 0
0 1 1 0 0 Add
0 0 0 0 0
+ 0 0 0 0 Shift
1 0 1 0
0 0 1 1 0 0 Add
1 0 1 1 1 0 0 (-36)
+ 1 0 1 0 Shift
1 0 1 1 1 0 0 ADD
112
Multiplicador Serie-Paralelo
0 1 1 0
x 1 0 1 0
Producto parcial = 0 0 0 0 0 Shift
0 0 0 0 Add
Producto parcial = A + 0 1 1 0 Shift
0 1 1 0 0 Add
Producto parcial = 0 + 0 0 0 0 Shift
0 0 1 1 0 0 Add
Producto parcial = A + 1 0 1 0 Shift
1 0 1 1 1 0 0 ADD
113
Arquitectura del circuito
0 A
B MUX
(serial)
Fast Adder
114
Arquitectura del circuito
115
Diseño del circuito
• ¿explique porqué?
116
Arquitectura del circuito
C Ad Start
Adder Control
(FSM) CLK
Sh
Multiplicand (A)
117
Arquitectura del circuito: Ejemplo
• Multiplicar 13x11 = 143 (“1101” x “1011”= “10001111”)
• Máquina de Estados
• Pseudo-código
P = 0; // inicialización
for i=0 to n-1 do
if bi = 1 then
P = P + A;
end if;
left-shift A;
end for;
119
Desempeño:
120
División
121
Principio del algoritmo:
1 5 0 0 0 0 1 1 1 1 Cociente
9 1 4 0 Divisor 1001 1 0 0 0 1 1 0 0 Dividendo
9 1 0 0 1
5 0 1 0 0 0 1
4 5 1 0 0 1
5 1 0 0 0 0
1 0 0 1
Pseudo-código
1 1 1 0
Residuo = 0; 1 0 0 1
for i=0 to n-1 do 1 0 1 Residuo
Left-shift (Residuo & Dividendo);
if Residuo ≥ Divisor then
Cociente(i) = 1;
Residuo = Residuo - Divisor;
else
Cociente(i) = 0;
end if;
end for;
122
Architectura
123
División
• Ejemplo:
101 Cociente
110 100010
Resta
-110
101 Compara
-000
1010 Resta
-110
100 Residuo
124
Divisor
Start
Ov (optional)
Divisor register
125
Ejemplo de la operación:
Residuo Cociente
126