Escolar Documentos
Profissional Documentos
Cultura Documentos
INTEGRANTES:
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
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
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
memory
A_write_enable
PRE
memory
A_write_enable A_data[7..0] A_data_out[7..0]
Wr_R clk
ENA CLR
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
WideOr1
WideOr2 s a[3..0]
WideOr3
pg. 6
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]
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]
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~34
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:
pg. 9
Tenemos que escribir nuestros buses en la seccin de propiedades de los pines de los bloques:
pg. 10
pg. 11
Compilamos el archivo:
pg. 12
Ahora Realizamos nuestro diagrama de bloque obtenido de nuestro circuito implementado competamente:
pg. 13
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:
pg. 15
pg. 16
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
Ahora con un top levelentity en la unidad central de procesos que es el diagrama de bloques empleado tenemos el siguiente grafico:
pg. 18
De la cual observamos:
pg. 19
CONCLUSION: Pudimos comprobar el funcionamiento de un microprocesador y modo de operacin con sus componentes internos.
pg. 20