Você está na página 1de 21

MICROPROCESADOR

ARQUITECTURA DE COMPUTADORAS MICROPROCESADOR FUNCIONAMIENTO INTERNO IMPLEMENTADO EN VHDL

INTEGRANTES:

ARMANDO AGARIJO CONCHA GIANCARLO GUTIERREZ AZALDE AYME LEON HANS

090613H 090043G 090622G

ARQUITECTURA DE COMPUTADORAS 1 MICROPROCESADOR

TRABAJO FINAL DEL MICROPROCESADOR


Para nuestro trabajo vamos a poder implementar un microprocesador, para lo cual tenemos que realizar el cdigo respectivo en cada parte de nuestro microprocesador, teniendo tres partes: La memoria RAM, la unidad de control y el ALU (Unidad Aritmtica Lgica). Codigo para la unidad de control: libraryieee; use ieee.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; entityunidad_de_control is port(clock:instd_logic; sa:outstd_logic_vector(3 downto 0)); endunidad_de_control; architecturebehanovial of unidad_de_control is type state is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15); signal d:state:=s0; begin

A:process(clock) begin if (clock='1' and clock'event) then case d is when s0=> d<=s1; when s1=> d<=s2; when s2=> d<=s3; when s3=> d<=s4;
pg. 1

ARQUITECTURA DE COMPUTADORAS 2 MICROPROCESADOR when s4=> d<=s5; when s5=> d<=s6; when s6=> d<=s7; when s7=> d<=s8; when s8=> d<=s9; when s9=> d<=s10; when s10=> d<=s11; when s11=> d<=s12; when s12=> d<=s13; when s13=> d<=s14; when s14=> d<=s15; when s15=> d<=s0; end case; end if; end process A; B:process (d) begin case d is

when s0=>sa<="1001"; when s1=>sa<="0110"; when s2=>sa<="1110"; when s3=>sa<="1010"; when s4=>sa<="1000"; when s5=>sa<="0001";
pg. 2

ARQUITECTURA DE COMPUTADORAS 3 MICROPROCESADOR

when s6=>sa<="0011"; when s7=>sa<="1111"; when s8=>sa<="0101"; when s9=>sa<="0010"; when s10=>sa<="0000"; when s11=>sa<="1100"; when s12=>sa<="0100"; when s13=>sa<="0111"; when s14=>sa<="1101"; when s15=>sa<="1011"; end case; end process B; endbehanovial; Cdigo para el ALU: ------- COMPONENT alu: -------------------LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; -------------------------------------------ENTITY alu IS PORT ( a, b,c: IN STD_LOGIC_VECTOR (7 DOWNTO 0); sel: IN STD_LOGIC_VECTOR (3 DOWNTO 0); cin: IN STD_LOGIC; x: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END alu; ----------------------------------------ARCHITECTURE arith_unit OF alu IS

pg. 3

ARQUITECTURA DE COMPUTADORAS 4 MICROPROCESADOR SIGNAL arith, logic: STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN WITH sel SELECT x <= a+1 a-1 b WHEN "0000", WHEN "0001", WHEN "0010", WHEN "0011", b+1 WHEN "0100", b-1 WHEN "0101", a+b WHEN "0110", cxor a WHEN "0111", c and b WHEN "1000", b+cxor a-1 WHEN "1001", (not c) and b+1 WHEN "1010", c and (b+a) WHEN "1011", b-a WHEN "1100", not((a xor c) and (b-1)) WHEN "1101", a+b+c+cin WHEN OTHERS; END arith_unit; a

Cdigopara la RAM: --------------------------------------------------LIBRARY ieee; USE ieee.std_logic_1164.all; --------------------------------------------------entityramis GENERIC ( bits: INTEGER := 8; -- # de bits de la palabra words: INTEGER := 16); -- # de palabras de la memoria PORT ( Wr_R, clk: IN STD_LOGIC; dir: IN INTEGER RANGE 0 TO words-1; data_in: IN STD_LOGIC_VECTOR (bits-1 DOWNTO 0); data_out: OUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0)); END ram; --------------------------------------------------ARCHITECTURE ram0 OF ram IS TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR (bits-1 DOWNTO 0);

pg. 4

ARQUITECTURA DE COMPUTADORAS 5 MICROPROCESADOR

SIGNAL memory: vector_array; BEGIN PROCESS (clk, Wr_R) BEGIN IF (Wr_R='1') THEN IF (clk'EVENT AND clk='1') THEN memory(dir) <= data_in; END IF; END IF; END PROCESS; data_out<= memory(dir); END ram0; Siendo este nuestro cdigo vamos a proceder a implementarlo en el quartus en formato vhdl, pasando a compilar nuestro cdigo y definiendo nuestro propio diagrama de bloques para cada componente y despus poder agruparlo, logrando obtener nuestro diagrama de bloques por dos medios aunque con la estructura interna por medio del RTL.

MEMORIA RAM:

pg. 5

ARQUITECTURA DE COMPUTADORAS 6 MICROPROCESADOR

memory

A_write_enable
PRE

memory
A_write_enable A_data[7..0] A_data_out[7..0]

Wr_R clk

ENA CLR

A_write_address[3..0] A_read_address[3..0] SYNC_RAM

data_out[7..0]

A_data
PRE

data_in[7..0]

ENA CLR

A_write_address
PRE

dir[3..0]

ENA CLR

UNIDAD DE CONTROL:
s0 s2 s3 s4 s5 s6 s7

WideOr0

clock

clk

s8 s9 s10 s11 s12 s13 s14 s15

WideOr1

WideOr2 s a[3..0]

WideOr3

pg. 6

ARQUITECTURA DE COMPUTADORAS 7 MICROPROCESADOR CONFIGURACION INTERNA DEL ALU:


Add6
A[7..0]

Mux0 Add7
A[7..0] B[7..0]

Add8
A[7..0] B[7..0]

b[7..0]

B[7..0]

+
ADDER

+
7' h00 --

SEL[3..0]

+
ADDER

x~31 ADDER

Add4
A[8..0]

1' h1 -B[8..0]

+
ADDER OUT DATA[15..0]

1' h1 --

x~23 Add2
A[8..0]

a[7..0]
1' h1 -9' h1FD --

B[8..0]

+
ADDER

Add2_OUT

Add3
A[7..0] B[7..0]

8' h01 --

+
ADDER x~7

MUX

Mux1

SEL[3..0]

c[7..0] x~39 x~30

Add5
A[8..0]

x~22
OUT DATA[15..0]

1' h1 -B[8..0]

9' h1FD --

+
ADDER

Add0
A[7..0] B[7..0]

8' h01 --

+
ADDER x~38 MUX

x~38_OUT0

Mux2 x~6
SEL[3..0]

x~45_OUT0

x~29

x~21
OUT DATA[15..0]

cin x~47_OUT0 x~9_OUT0 x~41_OUT0 x~10_OUT0 x~12_OUT0 x~46_OUT0 x~14_OUT0 x~11_OUT0 x~44_OUT0 x~13_OUT0 x~28

MUX

Mux3

SEL[3..0]

x~20
OUT DATA[15..0]

MUX

Mux4

SEL[3..0]

x~43_OUT0

x~27

x~19
OUT DATA[15..0]

x[7..0]

MUX

Mux5

SEL[3..0]

pg. 7

x~42_OUT0

x~26

x~18
OUT DATA[15..0]

x~19
OUT DATA[15..0]

x[7..0]

ARQUITECTURA DE COMPUTADORAS 8 MICROPROCESADOR


MUX

Mux5

SEL[3..0]

x~42_OUT0

x~26

x~18
OUT DATA[15..0]

MUX

Mux6

sel[3..0]

SEL[3..0]

x~25

x~17
OUT DATA[15..0]

MUX

Mux7

SEL[3..0]

x~40_OUT0

x~24

x~16
OUT DATA[15..0]

Add1
A[7..0] B[7..0]

x~8

+
x~37 ADDER

x~36

MUX

x~35

x~36_OUT0 Add1_OUT x~37_OUT0 x~35_OUT0 Add5_OUT x~39_OUT0 x~34_OUT0

x~34

x~33 x~33_OUT0 x~32 x~32_OUT0 x~5

x~4

x~3

x~2

x~1

x~0

x~15_OUT0

pg. 8

ARQUITECTURA DE COMPUTADORAS 9 MICROPROCESADOR Ahora nuestra representacin para nuestros diagramas de bloques lo obtenemos de la parte de crate/update:

Crear circuitos a base de bloques obtenemos:

pg. 9

ARQUITECTURA DE COMPUTADORAS 10 MICROPROCESADOR

Obtenemos Los siguientes componentes que expresaran nuestros bloques:

Tenemos que escribir nuestros buses en la seccin de propiedades de los pines de los bloques:

pg. 10

ARQUITECTURA DE COMPUTADORAS 11 MICROPROCESADOR

Siendo nuestro diseo ensamblado y conectado completamente el siguiente:

Establecemos la jerarqua del caso y lo compilamos:

pg. 11

ARQUITECTURA DE COMPUTADORAS 12 MICROPROCESADOR

Compilamos el archivo:

pg. 12

ARQUITECTURA DE COMPUTADORAS 13 MICROPROCESADOR

Ahora Realizamos nuestro diagrama de bloque obtenido de nuestro circuito implementado competamente:

pg. 13

ARQUITECTURA DE COMPUTADORAS 14 MICROPROCESADOR

Elegimos los parametros:

pg. 14

ARQUITECTURA DE COMPUTADORAS 15 MICROPROCESADOR Luego insertamos en nuestro diagrama de tiempos todos nuestros pines para poder otorgarle seales aleatorias y comprobar nuestra salida en nuestro diagrama de tiempos:

Dando los valores a nuestro pines:

Simulando nuestro programa:

pg. 15

ARQUITECTURA DE COMPUTADORAS 16 MICROPROCESADOR

Generando la funcin del tiempo:

pg. 16

ARQUITECTURA DE COMPUTADORAS 17 MICROPROCESADOR

Ponemos nuestro ALU para comprobar que de acuerdo a nuestra seal de control controlamos direcciones las cuales van a la parte de la memoria que manda al ALU que ejecute una determinada operacin que vamos a observar en nuestro diagrama de tiempos:

pg. 17

ARQUITECTURA DE COMPUTADORAS 18 MICROPROCESADOR

Ahora con un top levelentity en la unidad central de procesos que es el diagrama de bloques empleado tenemos el siguiente grafico:

pg. 18

ARQUITECTURA DE COMPUTADORAS 19 MICROPROCESADOR

De la cual observamos:

pg. 19

ARQUITECTURA DE COMPUTADORAS 20 MICROPROCESADOR

CONCLUSION: Pudimos comprobar el funcionamiento de un microprocesador y modo de operacin con sus componentes internos.

pg. 20

Você também pode gostar