lógica combinacional en vhdl (ii) - cartagena99 · 2020. 3. 11. · implementación en vhdl...
TRANSCRIPT
![Page 1: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/1.jpg)
Lógica Combinacional en
VHDL (II)
![Page 2: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/2.jpg)
Sumadores de 1-Bit
A B
0 0
0 1
1 0
1 1
SCout
S =
Cout
=
Half
Adder
A B
S
Cout +
A B
0 0
0 1
1 0
1 1
SCout
S =
Cout
=
Full
Adder
Cin
0 0
0 1
1 0
1 1
0
0
0
0
1
1
1
1
A B
S
Cout
Cin+
![Page 3: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/3.jpg)
A B
0 0
0 1
1 0
1 1
0
1
1
0
SCout
0
0
0
1
S =
Cout
=
Half
Adder
A B
S
Cout +
A B
0 0
0 1
1 0
1 1
0
1
1
0
SCout
0
0
0
1
S =
Cout
=
Full
Adder
Cin
0 0
0 1
1 0
1 1
0
0
0
0
1
1
1
1
1
0
0
1
0
1
1
1
A B
S
Cout
Cin+
Sumadores de 1-Bit
![Page 4: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/4.jpg)
A B
0 0
0 1
1 0
1 1
0
1
1
0
SCout
0
0
0
1
S = A B
Cout
= AB
Half
Adder
A B
S
Cout +
A B
0 0
0 1
1 0
1 1
0
1
1
0
SCout
0
0
0
1
S = A B Cin
Cout
= AB + ACin
+ BCin
Full
Adder
Cin
0 0
0 1
1 0
1 1
0
0
0
0
1
1
1
1
1
0
0
1
0
1
1
1
A B
S
Cout
Cin+
Sumadores de 1-Bit
![Page 5: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/5.jpg)
Implementación en VHDLlibrary IEEE;
use IEEE.STD_LOGIC_1164.all;
entity fulladder is
port(a, b, cin: in STD_LOGIC;
s, cout: out STD_LOGIC);
end fulladder;
architecture synth of fulladder is
signal p, g: STD_LOGIC;
begin
p <= a xor b;
g <= a and b;
s <= p xor cin;
cout <= g or (p and cin);
end synth;
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adder is
generic(N: integer := 8);
port(a, b: in STD_LOGIC_VECTOR(N-1 downto 0);
cin: in STD_LOGIC;
s: out STD_LOGIC_VECTOR(N-1 downto 0);
cout: out STD_LOGIC);
end adder;
architecture synth of adder is
signal result: STD_LOGIC_VECTOR(N downto 0);
begin
result <= ("0" & a) + ("0" & b) + cin;
s <= result(N-1 downto 0);
cout <= result(N);
end synth;
![Page 6: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/6.jpg)
Sumadores multibit (CPAs)
• Tipos de carry propagate adders (CPAs):– Ripple-carry (slow)
– Carry-lookahead (fast)
– Prefix (faster)
• Carry-lookahead y prefix adders son más rápidos para sumadores
más grandes, pero requieren más hardware.
A B
S
Cout
Cin+
N
NN
![Page 7: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/7.jpg)
Ripple-Carry Adder
• Cadena de sumadores de 1-bit
• El acarreo se propaga a través de toda la
cadena
• Desventaja: lento
S31
A30
B30
S30
A1
B1
S1
A0
B0
S0
C30
C29
C1
C0
Cout ++++
A31
B31
Cin
![Page 8: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/8.jpg)
Retardo del Ripple-Carry Adder
tripple = NtFA
donde tFA es el retardo de un full adder
![Page 9: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/9.jpg)
Carry-Lookahead Adder• Calcula el acarreo (Cout) para bloques de k-bits usando
señales generar y propagar.
• Algunas definiciones:
– El elemento/columna i produce un acarreo o generando uno Nuevo o propaganda el que le llega a la entrada.
– Se definen señales Generar (Gi) y Propagar (Pi) para cada columna:
• La columna i generará un acarreo nuevo si Ai y Bi son ambos 1.
Gi = Ai Bi• La columna i propagará un acarreo de la entrada a la salida si Ai
o Bi son 1.
Pi = Ai + Bi• El acarreo de la columna i (Ci) es:
Ci = Ai Bi + (Ai + Bi )Ci-1 = Gi + Pi Ci-1
Generar
Propagar
![Page 10: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/10.jpg)
Suma Carry-Lookahead
• Step 1: Calcula Gi y Pi para todas las columnas
• Step 2: Calcula G y P para los bloques de k-bits
• Step 3: Cin se propaga a través de cada bloque
de generar/propagar para k-bits.
![Page 11: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/11.jpg)
Carry-Lookahead Adder• Ejemplo: bloques de 4-bits (G3:0 and P3:0) :
– G3:0 = G3 + P3 (G2 + P2 (G1 + P1G0 )
– P3:0 = P3P2 P1P0
• Generalizando,
– Gi:j = Gi + Pi (Gi-1 + Pi-1 (Gi-2 + Pi-2Gj )
– Pi:j = PiPi-1 Pi-2Pj
– Ci = Gi:j + Pi:j Ci-1
![Page 12: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/12.jpg)
32-bit CLA con bloques de 4-bits
B0
++++
P3:0
G3
P3
G2
P2
G1
P1
G0
P3
P2
P1
P0
G3:0
Cin
Cout
A0
S0
C0
B1
A1
S1
C1
B2
A2
S2
C2
B3
A3
S3
Cin
A3:0
B3:0
S3:0
4-bit CLA
BlockC
in
A7:4
B7:4
S7:4
4-bit CLA
Block
C3
C7
A27:24
B27:24
S27:24
4-bit CLA
Block
C23
A31:28
B31:28
S31:28
4-bit CLA
Block
C27
Cout
![Page 13: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/13.jpg)
Retardo del Carry-Lookahead Adder
• Para un CLA de N-bit con bloques de k-bits:
• tCLA = tpg + tpg_block + (N/k – 1)tAND_OR + ktFA
– tpg : retardo para generar todos los Pi, Gi (solo dependen de Ai y Bi)
– tpg_block : retardo para generar todos los Pi:j, Gi:j
– tAND_OR : retardo desde Cin a Cout de la puerta AND/OR final en el bloque CLA de
k-bits
• Un sumador carry-lookahead de N-bits es, en general, mucho más rápido
que un ripple-carry adder para N > 16.
![Page 14: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/14.jpg)
Prefix Adder
• Calcula el acarreo de entrada para cada
columna (Ci-1) y luego la suma:
Si = (Ai Bi) Ci
• Calcula G y P para bloques de 1-, 2-, 4-, 8-bits,
etc. hasta que todos los Gi se conocen
• log2N etapas
![Page 15: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/15.jpg)
Prefix Adder• El acarreo de entrada o se genera en la columna anterior o se propaga desde
las previas.
• Definimos una columna auxiliar -1 para introducir Cin:
G-1 = Cin, P-1 = 0
• El acarreo de entrada de la columna i = acarreo de salida de la columna:
Ci-1 = Gi-1:-1
• Gi-1:-1: señal para las columnas i-1 a -1
• Ecuación de la suma:
– Si = (Ai Bi) Gi-1:-1
• Objetivo: Calcular rápidamente G0:-1, G1:-1, G2:-1, G3:-1, G4:-1, G5:-1, … (llamados prefijos)
![Page 16: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/16.jpg)
Prefix Adder• Generar and propagar señales para un bloque que cubre los bits i:j:
Gi:j = Gi:k + Pi:k Gk-1:j
Pi:j = Pi:kPk-1:j
• En palabras:
– Generar: el bloque i:j generará acarreo si:
• La parte superior (i:k) genera un acarreo o
• La parte superior propaga un acarreo generado por la parte inferior (k-1:j)
– Propagar: el bloque i:j propagará un acarreo si tanto la parte superior como la inferior lo propagan.
![Page 17: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/17.jpg)
Esquema del Prefix Adder
0:-1
-1
2:1
1:-12:-1
012
4:3
3
6:5
5:36:3
456
5:-16:-1 3:-14:-1
8:7
7
10:9
9:710:7
8910
12:11
11
14:13
13:1114:11
121314
13:714:7 11:712:7
9:-110:-1 7:-18:-113:-114:-1 11:-112:-1
15
0123456789101112131415
Bi
Ai
Gi:i
Pi:i
Gk-1:j
Pk-1:j
Gi:k
Pi:k
Gi:j
Pi:j
ii:j
Bi
Ai
Gi-1:-1
Si
iLegend
![Page 18: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/18.jpg)
Retardo del Prefix Adder
tPA = tpg + log2N(tpg_prefix ) + tXOR
– tpg: retardo en producir Pi Gi (puerta AND o OR)
– tpg_prefix: retardo de las celdas de prefijo negras (AND + OR)
![Page 19: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/19.jpg)
Comparación de retardo de sumadores
• Compara el retardo de: sumadores de 32-bit
ripple-carry, carry-lookahead, y prefix adder
• CLA tiene bloques de 4-bits
• Retado de puerta de 2 entradas = 100 ps;
• Retardo de full adder = 300 ps
![Page 20: Lógica Combinacional en VHDL (II) - Cartagena99 · 2020. 3. 11. · Implementación en VHDL library IEEE; use IEEE.STD_LOGIC_1164.all; entity fulladder is port(a, b, cin: in STD_LOGIC;](https://reader035.vdocuments.co/reader035/viewer/2022071606/6142b237b7accd31ec0edd96/html5/thumbnails/20.jpg)
• Compara retardo de: 32-bit ripple-carry, carry-lookahead, y prefix adder
• CLA tiene bloques de 4-bits
• Retado de puerta de 2 entradas = 100 ps;
• Retardo de full adder = 300 ps
tripple = NtFA = 32(300 ps)
= 9.6 ns
tCLA = tpg + tpg_block + (N/k – 1)tAND_OR + ktFA
= [100 + 600 + (7)200 + 4(300)] ps
= 3.3 ns
tPA = tpg + log2N(tpg_prefix ) + tXOR
= [100 + log232(200) + 100] ps
= 1.2 ns
Comparación de retardo de sumadores