viernes, 4 de enero de 2013

Práctica 6

Simulación de ejecución en la realización monociclo del procesador MIPS

 

Desarrollo de la práctica

En este caso, continuamos trabajando en el entorno de trabajo de Simula3MS, como ya hicimos en la Práctica 5. En dicha práctica, se llevó a cabo un repaso de la programación en ensamblador con las instrucciones y registros básicos. En la Práctica 6, procederemos a cargar un programa en el simulador, e identificaremos el camino de datos que siguen las diferentes instrucciones en las que nos iremos deteniendo.

En primer lugar, vamos a proceder a ensamblar el Programa1, con el que vamos a trabajar en la práctica, y haremos una visual a lo que nos muestra Simula3MS:





Acto seguido, vamos saltando los diferentes ciclos del programa hasta llegar a la primera instrucción de tipo lw, que será lw $s0,0($t1). Es una instrucción que cargará en $s0 la palabra almacenada en la dirección de memoria que contiene el registro $t1 más el desplazamiento, en este caso de 0. Además del Contador de Programa, que siempre se usa, ésta instrucción hará uso para su ejecución del Banco de Registros, la ALU y la Memoria de Datos, la Memoria de Instrucciones, la Extensión del Signo y la Unidad de Control. Podemos verlo en la siguiente imagen:




La operación anterior, descrita en lenguaje RTL, quedaría de la siguiente forma:

  1. MAR<-PC
  2. PC<-PC+4
  3. MBR<-MP
  4. Decodificación de la Instrucción
  5. MAR<-RI($T1)
  6. MBR<-MP
  7. $S0<-MBR


Lo siguiente que anotaremos, será el valor hexadecimal que toman los siguientes registros y buses:


PC: 0x0040000c
Instrucción [31-0]: 0x8d300000
Instrucción [25-21]: 0x0000009
Instrucción [20-16]: 0x0000010
Instrucción [15-0]: 0x00000000
Bus de 32 bits tras la extensión de signo: 0x00000000
Dato leído 1: 0x00000009
Resultado de la ALU (ó dirección de memoria de datos): 0x0000000a
Dato leído en memoria de datos: 0x0000000a
Dato a escribir en el banco de registros: 0x0000000a

Nos desplazamos ahora hacia la última instrucción de tipo lw, que es lw $s3, 12($t1). El proceso de la instrucción es exactamente el mismo que en el caso anterior. Únicamente variamos el registro en el que cargamos la palabra almacenada, que será ahora $s3, y el valor del offset que añadiremos a $t1, en éste caso de 12.

Ahora, el valor de los siguientes registros y buses será el siguiente:

Instrucción [15-0]: 0x0000000c
Bus de 32 bits tras la extensión de signo: 0x0000000c

Comentemos ahora algo sobre la instrucción add. El proceso de la instruccíon es sencillo: El contador de programa aumenta, como siempre, en 4. Tendremos dos registros de lectura , $s1 y $s2, de los que vendrán los datos que se sumarán en la ALU. El resultado pasará a la memoria de datos para salir al Registro de escritura donde lo guardaremos. En este caso será $t0.

En este caso, el camino de datos sufre ciertas variaciones. Una instrucción lw usa un registro fuente, en vez de dos registros como usa la instrucción add. Por otro lado, tampoco nececitaremos ahora los bits de offset. Tampoco usaremos la memoria de datos, ya que al operar en la ALU, el resultado no se lee ni se escribe en la misma. La siguiente imagen nos detalla el nuevo camino para la instrucción:




Ahora, nos fijaremos en que ciertas líneas de control son destacadas por Simula3MS en un tono naranja:


  • Para la instrucción lw, se activan LeerMem, MamaReg, fuenteALU, y EscrReg. 
  • Para la instrucción add, se activan RegDest, ALUOp y EscrReg.


Comentario acerca de la práctica:




En sí, no he visto que la práctica tenga una dificultad especial. Es más, ni siquiera son instrucciones complejas. Pero sí que me ha sido necesario consultar material de la asignatura de Fundamentos de Estructura de Computadores, que dimos el año pasado. Véase por ejemplo el lenguaje RTL, algo que el año pasado se vió también de forma bastante escueta, y, si no recuerdo mal, con ensamblador trabajamos sólo en una de las prácticas. Supongo además que el resumen que muestro contendrá varios errores que espero poder subsanar antes de la exposición final, ya que hay cosas que sigo sin tener del todo claras.

Pablo Pastor Muñoz.
 

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.