You are on page 1of 50

DISEO RTL DE PROCESADORES ARITMTICOS

MICROELECTRNICA IE. MSc. Jos Armando Becerra Vargas

REQUISITOS DEL CURSO

Para abordar temas de diseo jerrquico, descripcin a nivel RTL y diseo de procesadores aritmticos en general, el estudiante debe tener conocimientos de los siguientes temas:

1. Anlisis y sntesis de sistemas combinacionales; lgica cableada, Lgica modular y descripcin en VHDL de sistemas combinacionales.
2. Anlisis y sntesis de sistemas secuenciales; Mquinas de estado de Mealy y Moore, Diseo de alto nivel y descripcin en VHDL de sistemas secuenciales. 3. Conocimiento bsico de arquitectura de computadores; Funcionamiento de una ALU, sistemas que realizan operaciones, Registros, Contadores, Memorias RAM y ROM, descripcin en VHDL de sistemas complejos. 4. Manejo adecuado de las herramientas EDA. Para el caso especfico, conocimiento, destreza y manejo del software ISE FOUNDATION de XILINX.

ESTRUCTURA GENERAL DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS

OPERACIONES DE TRANSFERENCIA
Identificacin de Registros en operaciones de transferencia:

OPERACIN

DESCRIPCIN

R2 R1 : El contenido de R1 se transfiere a R2

OPERACIONES DE TRANSFERENCIA

Operacin condicional:

if ( K1 1) then ( R2 R1)
Notacin de transferencia entre registros:

K1: R2 R1

OPERACIONES DE TRANSFERENCIA

Smbolos usados en el lenguaje de transferencia de Registros:

SMBOLO Letras y/o Letras y Nmeros Parntesis Flecha Coma

DESCRIPCIN Denota un Registro Denota parte de un Registro Denota Transferencia de Datos Separa operaciones simultaneas

EJEMPLO AR, R2, DR, IR R2(1), R2(7:0), AR(L) R2 <-- R1 R1 <-- R2, R2 <-- R1

Parntesis cuadrados

Especifica una direccin de memoria

DR <-- M[AR]

OPERACIONES DE TRANSFERENCIA

Ejemplo de Micro-operaciones Aritmticas:


DESIGNACIN SIMBLICA R0 <-- R1 + R2 R2 <-- /R2 R2 <-- /R2 + 1 R0 <-- R1 + /R2 + 1 R1 <-- R1 + 1 R1 <-- R1 - 1 DESCRIPCIN El contenido de R1 ms R2 se transfiere a R0 Complemento a uno del contenido de R2 se carga en R2. Complemento a dos del contenido de R2 se carga en R2. R1 ms el complemento a dos de R2 se transfiere a R0 (Substraccin o Resta) Incrementa el contenido de R1 (Contador ascendente) Decrementa el contenido de R1 (Contador descendente)

OPERACIONES DE TRANSFERENCIA

Implementacin de las operaciones de transferencia:

X K1 : R1 R1 R 2

___

X K1 : R1 R1 R2 1

___

OPERACIONES DE TRANSFERENCIA

Micro-operaciones Lgicas:
DESIGNACIN SIMBLICA R0 <-- /R1 R0 <-- R1 L R2 R0 <-- R1 V R2 R0 <-- R1 R2 DESCRIPCIN Operacin Lgica NOT bit a bit (Complemento a uno) Operacin Lgica AND bit a bit (Clarear bits) Operacin Lgica OR bit a bit (Poner bits) Operacin Lgica XOR bit a bit (Complementa bits)

Ejemplo de operaciones de desplazamiento:


TIPO SHIFT LEFT SHIFT RIGHT DESIGNACIN SIMBLICA R1 <-- sl R2 R1 <-- sr R2 FUENTE R2 10011110 11100101 DESTINACIN DESPUS DEL CORRIMIENTO R1 00111100 01110010

TRANSFERENCIA UTILIZANDO MULTIPLEXORES

Ejemplo: Implementacin de la operacin condicional mltiple.

K1 : R0 R2, K1 K 2 : R0 R1

___

TRANSFERENCIA UTILIZANDO MULTIPLEXORES

Circuito detallado de la implementacin de: K1 : R0 R1, K1' K 2 : R0 R2

TRANSFERENCIA UTILIZANDO MULTIPLEXORES


Multiplexores dedicados Un solo Bus

TRANSFERENCIA UTILIZANDO MULTIPLEXORES

TRANSFERENCIA DE REGISTRO RO <-- R2 RO <-- R1, R2 <-- R1 RO <-- R1, R1 <-- R0

SELECT S0 1 0 S1 0 1 L2 0 1 IMPOSIBLE

CARGA L1 0 0 L0 1 1

Ejemplo de Transferencia de Registros utilizando una configuracin de un solo BUS.

TIPOS DE BUSES
BUS Multiplexado BUS Tri estado con Registros bidireccionales

TIPOS DE BUSES

Funcionamiento de un Registro Bidireccional:

TIPOS DE BUSES ESTRUCTURA CON MEMORIA


Conexin de una Memoria al Bus de Datos y al Bus de Direcciones:

UNIDAD DE DATOS

Conjunto e Registros
(RTL)

Unidad Funcional (Operaciones)

UNIDAD FUNCIONAL (ALU)

Unidad Aritmtico-Lgica (ALU)

ESTRUCTURA COMPLETA DE UNA ALU

UNIDAD LGICA

UNIDAD ARITMTICA

CICLO DE MICRO-OPERACIONES DE UNA ALU


Tabla de Funciones
Select S1 0 0 1 S0 0 1 0 Input Y Todo 0's B /B Cin = 0 G = A (Transferencia) G = A + B (Adicin) G = A + /B G = A + Y + Cin Cin = 1 G = A + 1 (Incrementa) G=A+B+1 G = A + /B + 1 (Substraccin)

Todo 1's

G = A - 1 (Decrementa)

G = A (Transferencia)

INPUTS S1 0 0 S0 0 0 Bi 0 1 Yi 0

OUTPUT

Yi = 0 0

0
0 1 1

1
1 0 0

0
1 0 1

0
Yi = Bi 1 1 Yi = /Bi 0

1
1

1
1

0
1

1
Yi = 1 1

Yi Bi S 0 / Bi S1
Mapa de Karnaugh

Tabla de Verdad

UNIDAD ARITMTICA DE CUATRO BITs

Se basa en un diseo totalmente combinacional, los bloques FA, se refieren a sumadores completos de un bit

UNIDAD LGICA

TABLA FUNCIONAL
S1 0 S0 0 OUTPUT G=ALB OPERACIN AND

CIRCUITO LGICO

0
1 1

1
0 1

G=AVB
G=AB G = /A

OR
XOR NOT

El Multiplexor selecciona la funcin lgica deseada. Pueden existir ms de cuatro funciones lgicas, lo que requiere un MUX de mayor capacidad.

UNA ETAPA DE LA ALU

TABLA FUNCIONAL DE LA ALU

SELECCIN DE OPERACIN OPERACIN S2 0 0 0 0 0 0 0 0 1 1 1 1 S1 0 0 0 0 1 1 1 1 0 0 1 1 S0 0 0 1 1 0 0 1 1 0 1 0 1 Cin 0 1 0 1 0 1 0 1 X X X X G=A G=A+1 G=A+B G=A+B+1 G = A + /B G = A + /B + 1 G=A-1 G=A G=ALB G=AVB G=AB G = /A Transfer A Increment A Addition Add with Carry input of 1 A ms complemento a uno de B Substraction Decrement A Transfer A AND OR XOR NOT (Complemento a uno) FUNCIN

DESPLAZADORES (SHIFTERS)

DESPLAZADOR ROTATORIO
Tabla Funcional
SELECCIN S1 0 0 1
1

OUTPUT S0 0 1 0
1

OPERACIN Y1 D1 D0 D3
D2

Y3 D3 D2 D1
D0

Y2 D2 D1 D0
D3

Y0 D0 D3 D2
D1

NO ROTAR ROTA UNA POSICIN ROTA DOS POSICIONES


ROTA TRES POSICIONES

Circuito Lgico

DIAGRAMA GENERAL DE UNA UNIDAD DE DATOS

La unidad de datos presentada en la figura, tiene una arquitectura tipo Hardvard (Bus de datos y direcciones separados). El arreglo de registros permite cargar, almacenar y operar fcilmente los datos que se desean procesar.

TABLA PARA LA UNIDAD FUNCIONAL


SELECCIN FS 00000 00001 00010 00011 00100 00101 MF 0 0 0 0 0 0 G 0000 0001 0010 0011 0100 0101 H 00 00 00 00 01 01 F=A F=A+1 F=A+B F=A+B+1 F = A + B F = A + B + 1 MICRO-OPERACIN

00110
00111 01000 01010 01100 01110 10000 10100 11000

0
0 0 0 0 0 1 1 1

0110
0111 1000 1010 1100 1110 0000 0100 1000

01
01 00 10 10 10 00 01 10

F=A1
F=A F=ALB F=AVB F=AB F = A F=B F = sr B F = sl B

DETALLE DE LA UNIDAD FUNCIONAL

ESTRUCTURA DE UN PROCESADOR CON ARQUITECTURA TIPO HARDVARD

DIAGRAMA DE BLOQUES DE UN PROCESADOR CON ARQUITECTURA TIPO HARDVARD

EJEMPLOS

1. Bit Counter 2. Shift-and-Add Multiplier

1. BIT COUNTER
Sistema que permite contar el nmero de 1s presentes en el Registro A, guardando el resultado en el Registro B

Pseudo-cdigo para el Bit Counter

B = 0; while A0 do if a0 = 1 then B = B + 1; end if; Right-shift A; end while ;

Se utiliza un lenguaje estndar de programacin para describir el algoritmo que se va a utilizar. Luego se describe como diseo ASM

CARTA ASM PARA EL BIT COUNTER

Carta ASM para el diseo del DATAPATH del contador de bits 1, describe las micro-operaciones presentes en el diseo.

DIAGRAMA DE TIEMPOS DEL BIT COUNTER

DISEO DEL DATAPATH PARA EL BIT COUNTER

CARTA ASM PARA EL CONTROL DEL BIT COUNTER

Carta ASM para el diseo de la lgica de control del contador de bits 1. Obsrvese que las seales utilizadas son las seales de STATUS. Z = 1 when A[n] = 0 a0 s LB LA EB EA

Bit menos significativo de A Seal de inicio START Load B, Borra el contador B Load A, Carga el registro A Incrementa el contador B Desplaza A hacia la derecha

Done Indica que el proceso termin

CDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (1)

-- Descripcin en Cdigo VHDL del contador de 1s -- Declaracin de Libreras, clusula USE LIBRARY ieee ; USE ieee.std_logic_1164.all ; LIBRARY work ; USE work.components.shiftrne ; -- Declaracin de la entidad

ENTITY bitcount IS PORT(Clock, Resetn LA, s Data B Done END bitcount ;

: IN STD_LOGIC ; : IN STD_LOGIC ; : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; : BUFFER INTEGER RANGE 0 to 8 ; : OUT STD_LOGIC ) ;

CDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (2)


ARCHITECTURE Behavior OF bitcount IS TYPE State_type IS ( S1, S2, S3 ) ; SIGNAL y : State_type ; SIGNAL A : STD_LOGIC_VECTOR(7 DOWNTO 0) ; SIGNAL z, EA, LB, EB, low : STD_LOGIC ; BEGIN FSM_transitions: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0' THEN y <= S1 ; ELSIF (Clock'EVENT AND Clock = '1') THEN CASE y IS WHEN S1 => IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF ; WHEN S2 => IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF ; WHEN S3 => IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF ; END CASE ; END IF ; END PROCESS ;

CDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (3)

FSM_outputs: PROCESS ( y, A(0) ) BEGIN EA <= '0' ; LB <= '0' ; EB <= '0' ; Done <= '0' ; CASE y IS WHEN S1 => LB <= '1' WHEN S2 => EA <= '1' ; IF A(0) = '1' THEN EB <= '1' ; ELSE EB <= '0' ; END IF ; WHEN S3 => Done <= '1' ; END CASE ; END PROCESS ;

CDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (4)


-- El DATAPATH es descrito a continuacin upcount: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0' THEN B <= 0 ; ELSIF (Clock'EVENT AND Clock = '1') THEN IF LB = '1' THEN B <= 0 ; ELSEIF EB = '1' THEN B <= B + 1 ; END IF ; END IF; END PROCESS;

low <= '0' ; ShiftA: shiftrne GENERIC MAP ( N => 8 ) PORT MAP ( Data, LA, EA, low, Clock, A ) ; z <= '1' WHEN A = "00000000" ELSE '0' ; END Behavior ;

2. MULTIPLICADOR BINARIO DE n BITS

ALGORITMO PARA LA MULTIPLICACIN


Decimal 13 x 11 13 13 143 Binaria 1 1 0 1 Multiplicando 1 0 1 1 Multiplicador 1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1

P = 0; For i = 0 to n 1 do

if bi = 1 then
P = P + A; end if;

Producto

Left-Shift A; End for;

a. Mtodo manual

b. Pseudo - Code

CARTA ASM PARA EL MULTIPLICADOR BINARIO

Carta ASM para el diseo del DATAPATH del multiplicador binario, describe las microoperaciones presentes en el diseo.

DIAGRAMA DE TIEMPOS PARA EL MULTIPLICADOR

DISEO DEL DATAPATH PARA EL MULTIPLICADOR

RA
RB MUX P NOR B0

Shift-Left Register
Shift-Right Register Multiplexor 2:1 de 2n bits Registro genrico de 2n bits Compuerta NOR de n entradas LSB del registro B

ADDER Sumador de 2n bits

Data P Resultado de la multiplicacin

CARTA ASM PARA EL CONTROL DEL MULTIPLICADOR

Carta ASM para el diseo de la lgica de control del Multiplicador Binario. Obsrvese que las seales utilizadas son las seales de STATUS. Z = 1 when B[n] = 0 b0 s RB RA Psel EP

Bit menos significativo de B Seal de inicio START Shift-Right B Shift-Left A Control del MUX Suma a P el contenido de A

Done Indica que el proceso termin

CDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (1)

LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; USE work.components.all ;


ENTITY multiply IS GENERIC ( N : INTEGER := 8; NN : INTEGER := 16 ) ; PORT ( Clock : IN STD_LOGIC ; Resetn : IN STD_LOGIC ; LA, LB, s : IN STD_LOGIC ; DataA : IN STD_LOGIC_VECTOR(N1 DOWNTO 0) ; DataB : IN STD_LOGIC_VECTOR(N1 DOWNTO 0) ; P : BUFFER STD_LOGIC_VECTOR(N1 DOWNTO 0) ; Done : OUT STD_LOGIC ) ; END multiply ;

CDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)


ARCHITECTURE Behavior OF multiply IS TYPE State_type IS ( S1, S2, S3 ) ; SIGNAL y : State_type ; SIGNAL Psel, z, EA, EB, EP, Zero : STD_LOGIC ; SIGNAL B, N_Zeros : STD_LOGIC_VECTOR(N1 DOWNTO 0) ; SIGNAL A, Ain, DataP, Sum : STD_LOGIC_VECTOR(NN1 DOWNTO 0) ; BEGIN FSM_transitions: PROCESS ( Resetn, Clock ) BEGIN IF Resetn = '0 THEN y <= S1 ; ELSIF (Clock'EVENT AND Clock = '1') THEN CASE y IS WHEN S1 => IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF; WHEN S2 => IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF; WHEN S3 => IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF; END CASE ; END IF ; END PROCESS;

CDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)

FSM_outputs: PROCESS ( y, s, B(0) ) BEGIN EP <= '0' ; EA <= '0' ; EB <= '0' ; Done <= '0' ; Psel <= '0'; CASE y IS WHEN S1 => EP <= '1 ; WHEN S2 => EA <= '1' ; EB <= '1' ; Psel <= '1 ; IF B(0) = '1' THEN EP <= '1' ; ELSE EP <= '0' ; END IF ; WHEN S3 => Done <= '1 ; END CASE ; END PROCESS ;

CDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (3)


- - Define the datapath circuit Zero <= '0' ; N_Zeros <= (OTHERS => '0' ) ; Ain <= N_Zeros & DataA ; ShiftA: shiftlne GENERIC MAP ( N => NN ) PORT MAP ( Ain, LA, EA, Zero, Clock, A ) ; ShiftB: shiftrne GENERIC MAP ( N => N ) PORT MAP ( DataB, LB, EB, Zero, Clock, B ) ; z <= '1' WHEN B = N_Zeros ELSE '0' ; Sum <= A + P ; - - Define the 2n 2-to-1 multiplexers for DataP GenMUX: FOR i IN 0 TO NN1 GENERATE Muxi: mux2to1 PORT MAP ( Zero, Sum(i), Psel, DataP(i) ) ; END GENERATE; RegP: regne GENERIC MAP ( N => NN ) PORT MAP ( DataP, Resetn, EP, Clock, P ) ; END Behavior ;

You might also like