Translate

viernes, 21 de diciembre de 2012

Práctica 6



Guía de resolución de práctica:

Pasando a citar los pasos entro en profundidad a explicar aquellos que puedan generar dudas.

1. Abra el programa de nombre Programa1.
2. Pinche sobre el botón ensamblar y compruebe que no se produce ningún error.
3. Si ha habido errores repase la sintaxis de las instrucciones ayudándose del manual. En caso contrario, pique sobre ejecutar para iniciar el proceso de simulación de ejecución del programa recién creado.
4. Observe en la nueva ventana la zona que se destacan en la figura 2 además del código ubicado en el segmento de texto.


Vemos en la imagen un camino de datos en donde en naranja se resaltan las señales de control, en naranja levemente resaltado encontramos que esas señales de control son las que van a intervenir durante el paso de datos, y las líneas remarcadas en azul son aquellas por las que deben pasar los datos en las fases de la instrucción.

5. Haciendo uso del botón “Ciclo siguiente” avance hasta la primera instrucción lw.
6. Localice e indique los elementos necesarios del camino de datos que realiza esta instrucción de tipo I: 

            La respuesta a esta pregunta es que se activan PC para incrementarse en 4 y apuntar a la siguiente instrucción, y la unidad de control al leer los bits del 31 al 26 activa los siguientes : LeerMem(que lee de memoria), MemoReg (activa el multiplexor para permitir el paso de datos si esta en 0 el dato habrá salido de memoria y si esta en 1 no lo habrá necesitado), ALUOp (que selecciona la operación que va a realizar, FuenteALU( Que activa el multiplexor si esta en 0 permite el dato de un registro y si esta a 1 permitira que sea el offset de la instrucción) y por último EscrReg (se encarga de almacenar el resultado en un registro).

7. Las conexiones entre los elementos del camino de datos aparecen resaltados en verde. Describa con palabras y con lenguaje RTL todas las operaciones que tienen lugar hasta completar esta instrucción lw $s0,0($t1). 

1º PC incrementado para la siguiente instrucción.
2º Mem. Instrucciones decodifica la instrucción y la identifica.
3º Extension de signo entra 0x0 en 32 bits.
4º ALU opera.
5º Lee de memoria y pasa el dato para que se cargue en el registro destino.
Y respecto a la unidad de control :
1ºRegDest: es 0, para que entre en el registro $s0.
2ºFuentePC: es 0 por que no es de salto.
3ºSaltoCond:es 0 porque no se utiliza.
4ºLeerMem:es 1 porque lee el dato de $t1.
5ºMemoReg:es 1 dado que el dato sale de memoria desplazado(aunque el desplazamiento sea 0).
6ºALUOp:Suma.
7ºEscriMem:es 0 porque no se escribe nada.
8ºFuenteALU: es 1 para que sume el offset.
9ºEscrReg:será $s0.
10ºEscrDato:0 porque no escribe en memoria.


Indique el valor, en hexadecimal, que toman los siguientes registros y buses:
-Nota aclaratoria: Ante la duda poner las respuestas de todas las formas posibles.

PC: Pasa a valer en hexadecimal 0x00400008.
Instrucción [31-0]:La instrucción sería en binario agrupado en grupos de 4 bits para verlo más sencillo
1000 1011 0011 0000 0000 0000 0000 0000 y en hexadecimal 0x8d300000.
Instrucción [25-21]:En este caso al coger los bits vemos que son 11001 = $t1 = 0x19 en hexadecimal.
Instrucción [20-16]:En este caso los bits son 10000 = $s0 = 0x10 en hexadecimal.
Instrucción [15-0]:Esta parte corresponde al Offset que vemos que es todo 0 (0x0000).
Bus de 32 bits tras la extensión de signo: Para instrucciones de 32 bits la extensión es de 8 ceros por lo que sería 0x00000000.
Dato leído 1:Siendo $t1 vemos que su dirección corresponde a 0x10010000.
Resultado de la ALU (o dirección de memoria de datos): En este caso sería la misma que la dirección de memoria desplazada 0 posiciones y por tanto corresponde a 0x10010000.
Dato leído en memoria de datos: Lee el dato con valor 10 que es 0x0000000a en hexadecimal.
Dato a escribir en el banco de registros: En este caso ya que el desplazamiento es 0 el resultado sería el mismo que el leído en la memoria de datos y por tanto valdría 10 = 0x0000000a


9. Haciendo uso del botón “Ciclo siguiente” avance hasta la última instrucción lw.¿Cambia en algo el proceso ya descrito de realización de la instrucción lw?. ¿Qué valores toman ahora los siguientes registros y buses?

Instrucción [15-0]: este offset corresponde a 0x000c que es un desplazamiento de 12
Bus de 32 bits tras la extensión de signo: Al rellenar el hueco para que sea de 32 bits quedaría como la anterior pero con 4 ceros más por la izquierda de manera que se vería 0x0000000c pero aun valdría 12.

10. Haciendo uso del botón “Ciclo siguiente” avance hasta la instrucción add. Observando el camino de datos destacado en verde, explique con sus palabras qué operaciones tienen lugar para la realización de la instrucción add.


Se incrementa el contador de programa o PC en 4 para que apunte a la siguiente instrucción, la instrucción selecciona los registro con los que va a operar pasándolos por la ALU para sumarlos, y mediante activaciones de multiplexores llegan de vuelta al registro destino sin pasar por memoria.

11. ¿Se trata del mismo camino de datos utilizado para la instrucción Lw? Justifique su respuesta.

Son caminos de datos diferentes por varios motivos:
la instrucción ADD no necesita acceder a memoria ya que trabaja con los registros, y por tanto será más rápida de ejecutar.
Por tanto las señales de control también se verán modificadas para que el dato llegue al registro destino sin pasar por dicha memoria.

12. Vuelva a la instrucción lw y observe cómo algunas líneas de control aparecen destacadas sobre las demás usando otro tono del color naranja. ¿Qué líneas de control actúan para cada una de las instrucciones analizadas?

Lw: Las líneas de control que se activan son :
Activados: PC = PC+4 y respecto a la unidad de control le llegan bits del 31-26 y activa LeerMem, MemoReg, ALUOp, FuenteALU y EscrReg con EscrDato.
Explico este último ya que los demás los explique anteriormente, este último permite el paso del dato activando el multiplexor.
Add: en esta instrucción las líneas activadas son PC para incrementarse en 4 para apuntar a la siguiente instrucción en la unidad de control (RegDest, ALUOp y EscrReg) y registros varios para que el dato llegue a registro $t0.

No hay comentarios:

Publicar un comentario