domingo, 12 de mayo de 2013

Unidad de Control

Esta practica está relacionada con el funcionamiento de la Unidad de Control (CU), cuya función es la de buscar las instrucciones en la memoria principal, decodificarlas y ejecutarlas.

PRÁCTICA 4

Sean las siguientes instrucciones:

a) ADD $t0, $t1, $t2
b) ADDI $s0,$s1, 0x0011
c) ORI $t0, $t2, 0x00A1
d) SLL $t0, $t0, 0x0002
e) SLR $t1, $t0, 0x0002
f) LUI $s0,0x0011
g) SW $t4, 0x0111
h) SLT $t1, $t2, $t0
i) J 0x000001A
j) JR $S0


1. Codificar las instrucciones en hexadecimal, tal como quedarían en memoria.

2. Utilizando la CPU descrita en clase teórica y el lenguaje de transferencia de registro, realizar la
secuencia de transferencias y acciones.

3. Comprobar que todo lo anterior se ha realizado de forma correcta mediante el simulador que se
adjunta para la práctica. Se introducirá el código de instrucción en la memoria de manera que
sean posible realizar todas las fases de la instrucción.


Para poder llevar a cabo la practica hay que tener claro lo que necesitamos:

Tabla de registros para poder codificar correctamente las instrucciones a hexadecimal:



Esquema de la CPU:


Esquema del simulador implementado en Logisim:



Códigos de operación de la ALU de las CPU anteriores:
  • 00001 Suma
  • 00010 Resta
  • 00011 OR
  • 00100 AND
  • 00101 Desplazamiento a la derecha de 1,2,3,4 bits
  • 00110 Desplazamiento a la izquierda de 1,2,3,4 bits
  • 00111 NOT
  • 01000 XOR

------------------------------------------------------------------------------------------------------------

a) ADD $t0, $t1, $t2



000000|01001|01010|01000|00000|100000

0000|0001|0010|1010|0100|0000|0010|0000 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x012A4020


Lenguaje de transferencia                                Señales                                                               
C1
MAR  PC
T4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3, C6
C4Decodificación
C5R8  R9 + R10 
RA=1001, RB=1010, MA=0, MB=0, 
C.Op=00001, T5, RC=1000, SC
C6Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

b) ADDI $s0,$s1, 0x0011





001000|10001|10000|0000000000010001

0010|0010|0011|0000|0000|0000|0001|0001 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x22300011

Lenguaje de transferencia                                Señales                                                       
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5RT2 ← RIT8, C10
C6R16  R17 + RT2
RA=10001, MA=0, MB=1, C.Op=00001,
T5, RC=10000, SC

C7Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

c) ORI $t0, $t2, 0x00A1



001101|01010|01000|0000000010100001

0011|0101|0100|1000|0000|0000|1010|0001 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x354800A1


Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5RT2  RIT8, C10
C6R8 ← R10 or RT2
RA=1010, MA=0, MB=1, C.Op=00011, T5,
RC=1000, SC

C7Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

d) SLL $t0, $t0, 0x0002



Esta instrucción con valor inmediato es tiene la siguiente peculiaridad:

"Shift register rt left (right) by the distance indicated by immediate shamt or
the register rs and put the result in register rd. Note that argument rs is ignored
for sll, sra, and srl."

000000|00000|01000|01000|00010|000000

0000|0000|0000|1000|0100|0000|1000|0000 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x00084080


Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5RT2  RI T8, C10
C6R8  R8 + RT2RA=1000, MA=0, MB=1, C.Op=00110, T5,
RC=1000, SC
C7Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

e) SRL $t1, $t0, 0x0002



Esta instrucción con valor inmediato es tiene la siguiente peculiaridad:

"Shift register rt left (right) by the distance indicated by immediate shamt or
the register rs and put the result in register rd. Note that argument rs is ignored
for sll, sra, and srl."

000000|00000|01000|01001|00010|000010

0000|0000|0000|1000|0100|1000|1000|0010 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x00088882



Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5RT2  RI T8, C10
C6R9  R8 + RT2RA=1000, MA=0, MB=1, C.Op=00101, T5,
RC=1001, SC
C7Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

f) LUI $s0,0x0011






001111|00000|10000|0000000000010001

0011|1100|0001|0000|0000|0000|0001|0001 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x3C100011


Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5MAR  RI (17-32)T8, C1
C6MBR  MP(MAR)TD, L, C2
C7R16 ← MBRT3, RC=10000, SC
C8Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

g) SW $t4, 0x0111







101011|00000|01100|0000000100010001

1010|1100|0000|1100|0000|0001|0001|0001 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0xAC0C0111


Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5MBR  R12RA=1100, T1, C3
C6MAR  RIT8, C1
C7MP ← MBRTA, TD, E
C8Comprobación de las señales de interrupción

------------------------------------------------------------------------------------------------------------

h) SLT $t1, $t2, $t0








000000|01010|01000|01001|00000|101010

0000|0001|0100|1000|0100|1000|0010|1010 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x0148482A



Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5R9 = R10<R8RA=1010, RB=1000, MA=0, MB=0,
C.Op=00110, T5, RC=1001, SC
C6Comprobación de las señales de interrupción
------------------------------------------------------------------------------------------------------------

i) J 0x000001A







000010|00000000000000000000011010

0000|1000|0000|0000|0000|0000|0001|1010 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x0800001A



Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5PC  RIT8, C5
C6Comprobación de las señales de interrupción
------------------------------------------------------------------------------------------------------------

j) JR $S0







000000|10000|000000000000000|001000

0000|0010|0000|0000|0000|0000|0000|1000 (Agrupamos de 4 en 4 para pasarlo a hexadecimal)

0x02000008



Lenguaje de transferencia                                Señales                                                               
C1MAR  PCT4, C1
C2PC  PC + 4
MBR  MP(MAR)
Td, L, C2, C4
C3RI  MBRT3C6
C4Decodificación
C5PC  R16RA=10000, T1, C5
C6Comprobación de las señales de interrupción
------------------------------------------------------------------------------------------------------------


FAQ's

- ¿Donde puedo encontrar el formato de las instrucciones para poder codificarlas?
Esta parte de la practica corresponde al tema 2, en los apuntes del campus virtual correspondiente a este  tema, podemos encontrar el formato y ejemplos de como realizar la codificación.  

- En el banco de registros hay un error en los buses. ¿Cómo lo puedo solucionar?
Esto puede deberse a que el decodificador que va unido a los triestados tiene en el atributo "Disabled output" seleccionado "floating". Esto hará que si el decodificador no está activado, el valor de salida sea indefinido. Debemos cambiarlo a "zero" para que al estar desactivado, el valor de salida sea 0, y así los triestados funcionarán.

- ¿Qué debo hacer para empezar de nuevo la simulación de un circuito en Logisim?
Debes pulsar crtl y la tecla R, o darle al botón simulación y "Reset simulation"


- ¿Qué debo hacer para poder mostrar una imagen de mi circuito?
Debes pulsar en "Archivo" y luego en "Export image", de la siguiente forma.


- ¿Por que en los 4 primeros ciclos de reloj siempre se repiten los mismos pasos independientemente de la instrucción?
Porque se ha de generar una secuencia de señales de control que posibiliten buscar el código de instrucción en memoria, su carga en RI y la preparación de PC para el ciclo de instrucción siguiente. y posteriormente su decodificación localizando la secuencia de señales de control que den lugar a la ejecución de la instrucción.