Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S...

16
Lógica Combinacional en VHDL (III)

Transcript of Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S...

Page 1: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Lógica Combinacional en

VHDL (III)

Page 2: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Restador

Symbol Implementation

+

A B

-

YY

A B

NN

N

N N

N

N

Page 3: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Comparador: IgualdadSymbol Implementation

A3

B3

A2

B2

A1

B1

A0

B0

Equal=

A B

Equal

44

Page 4: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Comparator: Menor que

A < B

-

BA

[N-1]

N

N N

Page 5: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Implementación VHDL

library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity comparator is

generic(N: integer := 8);

port(a, b: in STD_LOGIC_VECTOR(N-1 downto 0);

eq, neq, lt, lte, gt, gte: out STD_LOGIC);

end comparator;

architecture synth of comparator is

begin

eq <= '1' when (a = b) else '0';

neq <= '1' when (a /= b) else '0';

lt <= '1' when (a < b) else '0';

lte <= '1' when (a <= b) else '0';

gt <= '1' when (a > b) else '0';

gte <= '1' when (a >= b) else '0';

end synth;

Page 6: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Arithmetic Logic Unit (ALU)

ALU

N N

N

3

A B

Y

F

F2:0 Function

000 A and B

001 A or B

010 A + B

011 no usado

100 A and B’

101 A or B’

110 A - B

111 SLT

Page 7: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Diseño de la ALU

+

2 01

A B

Cout

Y

3

01

F2

F1:0

[N-1] S

NN

N

N

N NNN

N

2

Ze

ro

Exte

nd

F2:0 Function

000 A and B

001 A or B

010 A + B

011 no usado

100 A and B’

101 A or B’

110 A - B

111 SLT

Page 8: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Ejemplo Set Less Than (SLT)

+

2 01

A B

Cout

Y

3

01

F2

F1:0

[N-1] S

NN

N

N

N NNN

N

2

Ze

ro

Exte

nd

• Configura una ALU de 32-bit

para la operación SLT : A = 25

and B = 32

Page 9: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Set Less Than (SLT) Example

+

2 01

A B

Cout

Y

3

01

F2

F1:0

[N-1] S

NN

N

N

N NNN

N

2

Ze

ro

Exte

nd

• Configura una ALU de 32-bit para la

operación SLT : A = 25 and B = 32

– A < B, hace que Y sea la representación

de 1 con 32-bits (0x00000001)

– F2:0 = 111

– F2 = 1 (sumador funciona como

restador), por tanto 25 - 32 = -7

– -7 en complement a 2 tiene un 1 en

su bit más significativo bit (S31 = 1)

– F1:0 = 11 el multiplexor selecciona

Y = S31 (zero extended) =

0x00000001.

Page 10: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Shifters: Desplazamiento• Logical shifter: desplaza el valor a la izquierda o derecho y rellena los espacios vacíos con

ceros.– Ex: 11001 >> 2 =

– Ex: 11001 << 2 =

• Arithmetic shifter: igual que el lógico, pero en el desplazamiento a la derecha, en vez de rellenar con ceros, rellena con el valor del antiguo bit más (most significant bit - msb).– Ex: 11001 >>> 2 =

– Ex: 11001 <<< 2 =

• Rotator: rota los bits en círculo, de forma que esos bits salen por un extremo y entran por el otro.– Ex: 11001 ROR 2 =

– Ex: 11001 ROL 2 =

Page 11: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

• Logical shifter:

– Ex: 11001 >> 2 = 00110

– Ex: 11001 << 2 = 00100

• Arithmetic shifter:

– Ex: 11001 >>> 2 = 11110

– Ex: 11001 <<< 2 = 00100

• Rotator:

– Ex: 11001 ROR 2 = 01110

– Ex: 11001 ROL 2 = 00111

Shifters: Desplazamiento

Page 12: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Diseño del shifter

A3:0

Y3:0

shamt1:0

>>

2

4 4

A3

A2

A1

A0

Y3

Y2

Y1

Y0

shamt1:0

00

01

10

11

S1:0

S1:0

S1:0

S1:0

00

01

10

11

00

01

10

11

00

01

10

11

2

Page 13: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Shifters como Multiplicadores, Divisores

• A << N = A × 2N

– Ejemplo: 00001 << 2 = 00100 (1 × 22 = 4)

– Ejemplo: 11101 << 2 = 10100 (-3 × 22 = -12)

• A >>> N = A ÷ 2N

– Ejemplo: 01000 >>> 2 = 00010 (8 ÷ 22 = 2)

– Ejemplo: 10000 >>> 2 = 11100 (-16 ÷ 22 = -4)

Page 14: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Multiplicadores• Productos parciales se forman multiplicando un dígito

del multiplicador por el multiplicando• Las sumas parciales desplazadas se suman para formar

el resultado final.

Decimal Binary

23042x

01010111

5 x 7 = 35

460920+

9660

01010101

01010000

x

+

0100011

230 x 42 = 9660

multiplier

multiplicand

partial

products

result

Page 15: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Multiplicador 4 x 4

x B3

B2

B1

B0

A3B

0 A

2B

0 A

1B

0 A

0B

0

A3

A2

A1

A0

A3B

1 A

2B

1 A

1B

1 A

0B

1

A3B

2 A

2B

2 A

1B

2 A

0B

2

A3B

3 A

2B

3 A

1B

3 A

0B

3+

P7

P6

P5

P4

P3

P2

P1

P0

0

P2

0

0

0

P1

P0

P5

P4

P3

P7

P6

A3

A2

A1

A0

B0

B1

B2

B3

x

A B

P

44

8

Page 16: Lógica Combinacional en VHDL (III)...Diseño de la ALU + 2 0 1 A B C out Y 3 0 1 F 2 F 1:0 [N-1] S N N N N N N N N N 2 o d F 2:0 Function 000 A and B 001 A or B 010 A + B 011 no usado

Divisor 4 x 4

1

A3

000

Q3

1

Q2

B0

B1

B2

B3

R0

R1

R2

R3

A2

1

Q1

A1

1

Q0

A0

+

R B

D

R'

N

Cin

Cout

1 0

R B

DR'N

Cout

Cin

Legend

A/B = Q + R/B

Algorithm:

R’ = 0

for i = N-1 to 0R = {R’ << 1. Ai}

D = R - Bif D < 0, Qi=0, R’=R

else Qi=1, R’=D

R’=R