420 likes | 636 Views
CLASE 13. FORMATOS DE INSTRUCCIÓN DEL MIPS. FORMATO TIPO R. Operaciones Aritmético lógicas add, sub, and, or, nor, sll, srl, slt. FORMATO TIPO I. Instrucciones inmediatas, de acceso a memoria, saltos condicionales addi , andi, ori, nori, lw , sw , beq , bne. FORMATO TIPO J.
E N D
FORMATOS DE INSTRUCCIÓN DEL MIPS FORMATO TIPO R • Operaciones Aritmético lógicas • add, sub, and, or, nor, sll, srl, slt FORMATO TIPO I • Instrucciones inmediatas, de acceso a memoria, saltos condicionales • addi, andi, ori, nori, lw, sw, beq, bne FORMATO TIPO J • Instrucciones de salto incondicional • j, jal
EJEMPLOS DE REPASO Ejemplo: Compilar la siguiente porción de código en ensamblador del MIPS: Solución: Asumiendo que la variables i y k corresponden a los registros $s3 y $s5, y la dirección base de save esta en $s6 Loop: add $t1,$s3,$s3 add $t1,$t0,$t0 add $t1,$t0,$s6 lw $t0,0($t1) bne $t0,$s5,Exit addi $s3,$s3,1 j loop Exit: ... while(save[i] == k) i += 1;
MODOS DE DIRECCIONAMIENTO • El MIPS implementa 5 modos de direccionamiento: • Registro. • Inmediato. • Base o desplazamiento. • Relativo al PC. • Pseudo-directo.
SOPORTE DE BAJO NIVEL PARA PROCEDIMIENTOS • El stack pointer (registro $sp) apunta al tope de la pila • El stack “crece” de las direcciones superiores a las inferiores. • Operaciones sobre el stack: • Llevar un dato al stack: PUSH • $sp= $sp – 4 • El dato se lleva al stack en el nuevo$sp • Recuperarun dato del stack: POP • Datotomado del stack en $sp • $sp= $sp + 4 Memoria POP PUSH Leer valor Incrementar $SP Decrementar $SP Mover valor valor Stack Pointer $SP Stack Pointer $SP PILA Ultima posición de Memoria
INTRODUCCION • Ecuación de rendimiento • Número de instrucciones (IC): Determinado por la arquitectura (ISA) y el compilador • CPI y tiempo de ciclo: Determinado por el hardware de la CPU
INTRODUCCION • Procesador (CPU) • Ruta de datos (datapath) • Porción del procesador que corresponde al HW necesario para ejecutar las operaciones que él demanda • Unidad de control • Porción del procesador (también en HW) que le indica al datapath lo que debe hacer
IMPLEMENTACION BASICA MIPS Subconjunto de la arquitectura MIPS (suficiente para ilustrar los principios que orientan el diseño de un datapath y una unidad de control para cualquiera otra ISA). • Instrucciones de acceso a memoria • Load word, lw • Storeword, sw • Instrucciones aritmético-lógicas • Suma, add • Resta, sub • AND lógica, and • OR lógica, or • Set onlessthan, slt • Instrucciones de salto • Branchifequal, beq • Jump, j
PASOS PARA LA EJECUCION DE UNA INSTRUCCION • Búsqueda (fetch) de la instrucción • Trae una instrucción desde la memoria de instrucciones de acuerdo con el valor del PC (ProgramCounter) • Lectura de operandos • Acceso al banco de registros empleando los campos de la instrucción para leer uno (load) o dos registros (ALU, store) • De acuerdo con el tipo de instrucción: • Emplear la ALU para calcular: • Un resultado aritmético o lógico (instrucciones aritmético-lógicas) • Una dirección de memoria para las instrucciones load/store • Una condición de igualdad (branch) • Acceder a la memoria de datos en las instrucciones load/store • Acceder al banco de registros para escribir el resultado de la ALU o un valor proveniente de memoria (instrucciones aritmético-lógicas, load) • Actualizar el valor del PC de acuerdo con el resultado de la comparación con: • PC + 4 • Dirección de destino de salto
VISTA DE ALTO NIVEL DE LA IMPLEMENTACION DEL MIPS • Dos tipos de unidades funcionales: • Elementos que operan en los valores de datos (combinacional). • Elementos que contienen el estado (secuencial). • Operación en un solo ciclo. • Modelo de memoria dividida (Harvard): Una memoria para instrucciones y una para datos.
VISTA DE ALTO NIVEL DE LA IMPLEMENTACION DEL MIPS • No se pueden unir los cables así de simple • Es necesario usar un multiplexor (selector de datos) • Varias unidades deben controlarse de acuerdo con el tipo de instrucción.
PRINCIPIOS DE DISEÑO LOGICO • Información codificada en binario • Voltaje bajo = 0 • Voltaje alto = 1 • Un cable por bit • Datos de múltiples bits se codifican en buses formados por múltiples cables • Elementos combinacionales • Operan sobre datos • La salida es función de las entradas actuales • Un elemento combinacional siempre producirá la misma salida ante la misma entrada • Ej: ALU • Elementos secuenciales • Almacenan información (estado) • Ej: registros, memorias de datos e instrucciones
D Q Clk PRINCIPIOS DE DISEÑO LOGICO • Información codificada en binario • Voltaje bajo = 0 • Voltaje alto = 1 • Un cable por bit • Datos de múltiples bits se codifican en buses formados por múltiples cables. • Elementos combinacionales • Operan sobre datos • La salida es función de las entradas actuales • Un elemento combinacional siempre producirá la misma salida ante la misma entrada • Ej: ALU • Elementos secuenciales • Almacenan información (estado) • Ej: registros, memorias de datos e instrucciones
A Y B A A Mux I0 Y + Y Y I1 ALU B B S F PRINCIPIOS DE DISEÑO LOGICO – ELEMENTOS COMBINACIONALES Compuerta AND (Y = A & B) Sumador ( Adder) (Y = A + B) Multiplexor (Y = S ? I1 : I0) Unidad aritmetico-logica Y = F(A ,B)
D Q Clk Clk Clk D Q Write D Write D Clk Q Q PRINCIPIOS DE DISEÑO LOGICO – ELEMENTOS SECUENCIALES • Flip-flop(Tipo D) • Almacena un bit • Actualiza el valor almacenado cuando la señal de reloj pasa de 0 a 1 • Flip-flop con control de escritura • Sólo actualiza el valor almacenado en el flanco de reloj cuando la entrada de control de escritura es 1
METODOLOGIA DE TEMPORIZACION • Esquema empleado para determinar cuándo un dato es válido y estable respecto al reloj • Accionada por flanco (edge-triggered): todos los cambios de estado (de los elementos secuenciales) ocurren en un flanco de reloj • La lógica combinacional transforma los datos entre flancos de reloj • Ejecución típica: lectura del elemento de estado propagación del dato a través de la lógica combinacional escritura del resultado en otro elemento de estado • El retardo más largo determina el periodo de la señal de reloj • CPU monociclo (Single-cycleCPU) • Todas las instrucciones se ejecutan por completo en un ciclo de reloj. • La ejecución comienza en un flanco y termina en el siguiente (del mismo tipo).
CONSTRUYENDO EL DATAPATH • Datapath • Colección de componentes del procesador que tienen la capacidad de operar sobre datos y almacenarlos. (Memorias de datos e instrucciones, banco de registros, ALU, sumadores). • Construiremos gradualmente un datapath para el MIPS, refinando la vista de alto nivel expuesta anteriormente • Partiremos por definir los elementos requeridos para ejecutar cada tipo de instrucción para luego combinarlos todos
BUSQUEDA DE INSTRUCCIONES • La búsqueda de instrucciones implica: • leer una instrucción de la memoria de instrucciones usando la dirección indicada por el PC. • Actualizar el valor del PC a la dirección de la próxima (secuencial) instrucción. • El PC es actualizado cada ciclo de reloj de manera que no necesita una señal explicita de control. • La ejecución secuencial de programas implica actualizar el PC para que apunte a la instrucción inmediatamente consecutiva en la memoria de instrucciones. • El nuevo valor de PC debe ser PC+4. • Memoria direccionable por bytes. • Tamaño de palabra de 32 bits.
DECODIFICACION DE INSTRUCCIONES • Decodificar instrucciones implica: • Enviar el opcode y el campo fuction de la instrucción a la unidad de control. • Leer dos valores del Register file. • Las direcciones del banco de registros (Register file) son contenidas en la instrucción.
BANCO DE REGISTROS • Agrupa los 32 registros definidos en la ISA MIPS • Permite el acceso simultáneo a 3 registros • Acceso de lectura a dos registros • Entradas de 5 bits cada una para identificar los registros. Salidas de datos de 32 bits • Acceso de escritura a un registro • Entrada de 5 bits para identificar el registro. Entrada de datos de 32 bits • Una señal de control de escritura explícita (RegWrite) porque no se escribe en el banco en cada ciclo (Ej: instrucción sw). • Una entrada de reloj (no ilustrada) determinante en las operaciones de escritura. • Es posible leer y escribir el mismo registro dentro de un ciclo de reloj.
INSTRUCCIONES TIPO R Las instrucciones aritmético-lógicas realizan: R[rd] R[rs] funct R[rt] • Y requieren: • Leer dos operandos fuente (desde los registros rs y rt) • Realizar la operación aritmético-lógica (funct) • Escribir el resultado en el registro rd • Ej: add$t0, $t1, $t2
INSTRUCCIONES TIPO R El banco de registros no es escrito (sw) cada ciclo, de manera que se necesita una señal explicita de control de escritura (WE: Register Write) para el banco de registros.
PONIENDO TODO JUNTO Decodificar rs, rt, rd, op, …
INSTRUCCIONES TIPO I Las instrucciones aritmético-lógicas realizan: • Y requieren: • Leer el registro rt • Leer el numero inmediato de 16 bits, el cual debe ser extendido a un numero de 32 bits. • Escribir el resultado en el registro rs • Ej: ori $8, $9, 64
COMBINACION DE LOS DATAPATH • Para tal fin se adicionan multiplexores. • Donde? • Cuando? MUX
INSTRUCCIONES DE MEMORIA Las instrucciones load/store realizan: R[rt] MEM[R[rs] + sign_ext(Imm16)] #load MEM[R[rs] + sign_ext(Imm16)] R[rt] #store • En la ALU se calcula la dirección de acceso a memoria sumando el registro base (tomado del banco de registros) y el campo de 16 bits de la instrucción extendido en signo • Store: Almacena el valor (extraído del banco de registros) en la memoria de dato. • Load: Escribe en el banco de registros el valor leído de la memoria de datos. • Ej: • lwrt, offset(rs) • swrt, offset(rs)
INSTRUCCIONES DE MEMORIA • lw$1, 30($2) $1=M[$2+30] • sw$3, 10($4) M[$4+30]=$3
INSTRUCCIONES DE SALTO CONDICIONAL La instrucción branchifequal(beq) realiza: if (R[rs] == R[rt]) thenPC PC+4+(sign_ext(Imm16)||00) /* Branchistaken*/ elsePCPC+4 /* Branchisnottaken*/ • Compara dos operandos leídos del banco de registros haciendo una sustracción en la ALU y chequeando su igualdad mediante la salida Zero • Calcula la dirección de destino de salto: • Extendiendo en signo el desplazamiento de 16 bits • Desplazando 2 bits a la izquierda el valor previo • Y sumándolo a PC+4 (valor calculado antes en la búsqueda de la instrucción) • Salto tomado (branchistaken): los dos registros comparados son iguales • La condición de igualdad se verifica • PC = PC PC + 4 + (sign_ext(Imm16) || 00) • Salto no tomado (branchisnottaken): los dos registros comparados NO son iguales • La igualdad no se verifica • PC = PC + 4
INSTRUCCIONES DE MEMORIA • BEQ $1, $2, 12 • Acción: si ($1!=$2) entonces PC=PC+4 • Acción: si ($1==$2) entonces PC=PC+4+48
INSTRUCCIONES DE SALTO • Las operaciones de salto poseen el siguiente formato: • Lo que se hace es reemplazar los 8 bits menos significativos del PC con los 26 bits menos significativos de la instrucción buscada corrida 2 bits a la izquierda.
COMPOSICION DE LOS ELEMENTOS • Conociendo los componentes requeridos para la ejecución de las instrucciones aritmético-lógicas, load/store y branch, podemos combinarlos en un solo datapath que pueda ejecutarlas todas, agregando algunos multiplexores y señales de control • En esta primera versión del datapath cualquier instrucción se ejecuta en un ciclo de reloj • Cada componente del datapath sólo puede realizar una función a la vez durante la ejecución de una instrucción • Por lo tanto, aquellos componentes que requieran ser utilizados más de una vez deben replicarse • Tal es el caso de las memorias: se requieren memorias de datos e instrucciones independientes • Es necesario emplear multiplexores cuando un dato pueda provenir de diferentes fuentes en una instrucción • Para elegir la fuente de datos se emplean señales de control
JUNTANDO TODO Búsqueda de instrucciones tipo R y acceso a memoria
JUNTANDO TODO Insercion del multiplexor
JUNTANDO TODO Distribución del reloj.
JUNTANDO TODO Añadiendo la porción de salto
REFERENCIAS • http://microe.udea.edu.co/~farivera/docencia.html • http://www.cse.hcmut.edu.vn/~anhvu/teaching/2010/BTKT-KTMT/MIPS%20Green%20Card.pdf • http://www.ece.eng.wayne.edu/~gchen/ece4680/lecture-notes/lecture-notes.html • http://www.cs.uiowa.edu/~ghosh/6011.html • http://www.cse.hcmut.edu.vn/~anhvu/teaching/2010/504002CS/ • http://cs.wellesley.edu/~cs240/ • http://www.utdallas.edu/~dodge/EE2310/ • Computer organization and design. The hardware/software interface, 3rd ed., Chapter 5. D. Patterson and J. Hennessy. Morgan Kaufmann Publishers