PRÁCTICA 3

UNIDAD DE CONTROL


Ejercicio 1 :

A)


ADD $t0, $t1, $t2
Nmemónico
0
RS=$t1
RT=$t2
RD=$t0
0
0x20
Binario
000000
01001
01010
01000
00000
100000
Hexadecimal
0x12A4020


S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
R8 ß R9+R10
RA=01001, RB=01010, RC=01000, MA=0, MB=0, OP=00001, T5,SC
S6
Comprobar interrupción


B)


ADDI $s0,$s1, 0x0011
Nmemónico
8
RS=$s1
RT=$s0
Inmediato
Binario
001000
10001
10000
0000000000010001
Hexadecimal
0x22300011


S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT2 ß RI
T8, C10
S6
R10 ßR19+RT2
RA=10001($s1), OP=00001, MA=0, MB=1, T5, RC= 10000($s0), SC                               
S7
Comprobar interrupción.


C)


ORI $t0, $t2, 0x00A1
Nmemónico
0xD
RS=$t2
RT=$t0
Inmediato
Binario
001101
01010
01000
0000000010100001
Hexadecimal
0x354800A1

           
S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT2 ß RI
T8, C10
S6
R8 ß R10 OR Rt2
RA=01010, MA=0, MB=1,OP=00003, T5, RC=01000, SC 
S7
Comprobar interrupción


D).


SLL $t0, $t0, 0x0002
Nmemónico
0
Rs=0
Rt=$t0=8
Rd=$t0=8
Desp=2
0
Binario
000000
00000
01000
01000
00010
000000
Hexadecimal
0x84080
           
S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT2 ßRI
T8, C10
S6
R8 ßR8 SLL RT2
RA=01000, MA=0, MB=1, OP=00008, T5, RC=01000, SC  
S7
Comprobar interrupción.



E)


SLR $t1, $t0, 0x0002
Nmemónico
0
Rs=0
Rt=$t0=8
Rd=$t1=9
Desp=2
0
Binario
000000
00000
01000
01001
00010
000000
Hexadecimal
0x84880


S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT2 ß RI              
T8, C10
S6
R9 ß R8 SLR RT2          
RA=01000, MA=0, MB=1, OP=00005, T5, RC=01001, SC
S7
Comprobar interrupción.


F)


LUI $s0,0x0011
Nmemónico
0xF
0
Rt=$s0=16
Imm=0x0011
Binario
010000
00000
10000
000000000010001
Hexadecimal
0x20080011


S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT2 ß RI              
T8, C10
S6
R16 ß R16
RA=10000, MA=0, MB=1, OP=00006, T5, RC=10000, SC                                                                       
S7
Comprobar interrupción.


G)

SW $t4, 0x0111
Nmemónico
0x2b
Rs=0
Rt=$t4=12
Imm=0x0011
Binario
101011
00000
01100
0000000000010001
Hexadecimal
0xAC0C0011
                                                                                                           
           
S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
MAR ß RI
T8, C10
S6
MBR ß R10                    
RA=01010, T1, C3
S7
MP ß MBR
Ta, Td, E
S8
Comprobar interrupción

H)
SLT $t1, $t2, $t0
Nmemónico
0
Rs=$t2=10
Rt=$t0=8
Rd=$t1=9
0
0x2A
Binario
000000
01010
01000
01001
00000
101010
Hexadecimal
0x148482A

S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
RT3 ß R10-R8

RE ß ALU
RA=01010,RB=01000,MA=0,MB=0, OP=00001, C11
C8
S6
RT1 ß RE                        
T7, C9
S7
R9 ß NOT                       
RC=01001, MA=1, Op=00110, T5, SC
S8
Comprobar interrupción.


I)
J 0x000001A
Nmemónico
2
Dirección
Binario
000010
00000000000000000000011010
Hexadecimal
0x800001A
                                                            

S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
PC ß RI                
T8, C5
S6
Comprobar interrupción.


J)

JR $S0
Nmemónico
0
Rs=$s0=16
0
8
Binario
000000
10000
000000000000000
001000
Hexadecimal
0x2000008

           
S1
MAR ß PC
T4, C1
S2
MBR ß MP (MAR)
PC ß PC+4
Td, L, C2
C4
S3
RI ß MBR
T3, C6
S4
Decodificación

S5
PC ß R16             
RA=10000, T1, C5
S6
Comprobar interrupción



SIMULACIÓN LOGISIM.

Para comprobar las operaciones realizadas previamente, debemos meter los resultados en la memoria del circuito en hexadecimal. Esto es fácil de hacer, simplemente clickamos con el botón derecho sobre la memoria, pinchamos en “Editar contenidos…” y sobreescribimos los 10 primeros valores, saltando el primero, y cerramos la ventana. Ya podemos simular las
instrucciones correctamente.






Simularemos la primera instrucción, ADD $t0, $t1, $t2:
En el primer ciclo, abrimos el triestado T4, pero como en este caso es la primera instrucción, el contador se mantiene a 0. Con esto conocemos la dirección de memoria en la que está la instrucción. Activamos la señal C1 del MAR para almacenar la dirección de la
instrucción con la que estamos trabajando.





En el siguiente ciclo, abrimos el triestado TD, activamos el modo lectura (L) y con el pin seleccionamos la posición en memoria que contiene la instrucción, para luego activar C2 y guardar el contenido en MBR. A la vez, hay que activar C4 para sumar 4 bytes al contenido del contador de programa, para que se puedan simular todas las instrucciones seguidas de esta forma.





En el último ciclo, lo único necesario es mover el contenido de MBR a RI para que la unidad pueda decodificar la instrucción. Para esto, activamos el triestado T3 y lo guardamos activando C6.
Ahora debemos introducir los valores que queramos en $t1 y St2 para operarlos. Seleccionamos $t1 y $t2 en los registros RA y RB, y con el 0 se realizará la operación. Ahora hay que almacenar el resultado en $t0. Para ello, activamos T5 y seleccionamos en RC el registro $t0. Finalmente, activamos a la vez SC y C8 para almacenar en el registro y los indicadores de la operación.





FAQ´s



1. ¿Cómo debemos codificar las instrucciones a la hora de hacer el trabajo?


Pues debemos pasarlas primero a binario y luego a hexadecimal, teniendo en cuenta que cada instrucción tiene una forma o fórmula de codificarse ( puede verse en los apuntes del tema 2 – Programación en ensamblador ).



2. ¿Qué tenemos que tener en cuenta para que funcione el simulador?

Para que se inicie el programa la memoria debe estar activada: Sel =1, en modo lectura L=1 y el triestado que conecta el bus de direcciones con el registro MAR abierto TD=1. 









Para reiniciar todo el sistema se cuenta con una entrada de RESET general.

3. ¿De qué se encarga la A.L.U?

Encargada de realizar las operaciones aritméticas, lógicas y de desplazamiento.
En la ALU del trabajo se puede seleccionar la operación introduciendo los siguientes códigos:
00001 Suma
00002 Resta
00003 OR
00004 AND
00005 Desplazamiento a la derecha de 1, 2, 3, 4 bits
00006 Desplazamiento a la izquierda de 1, 2, 3, 4 bits
00007 NOT
00008 XOR

4. No funciona el simulador, falla el decodificador.

El parámetro “Disabled Output” del decodificador junto a los triestados debe estar en “zero”, aunque a veces venga predeterminado “floating”.

5. ¿Qué debo hacer para resetear el circuito?

Sencillamente clicamos en “Simulación” y posteriormente, “Reset”.



                                                                                              Realizado por: Manuel Pedrajas Ochoa
                                                                                               Manuel Venega Bermúdez

No hay comentarios:

Publicar un comentario