MICROPROCESADOR Multiciclo
Ejemplo Tiempos de operación. Unidades de memoria: 10 ns. Alu y sumadores: 10 ns Archivo de registros (lectura y escritura): 5 ns. Suponiendo que los multiplexores, unidad de control, accesos al PC, unidad de extensión de signo y cableado no tengan retardo.
Ejemplo Cuál de las siguientes implementaciones será más rápida y cuánto más? 1. Una implementación en la que cada instrucción opera en un ciclo de reloj de duración fija. 2. Cada instrucción se ejecuta en un ciclo de reloj utilizando un reloj de duración variable, que para cada instrucción tiene la duración que necesita.
Ejemplo 22 por 100 cargas, 11 por 100 almacenamientos, 49 por 100 operaciones de formato R, 16 por 100 saltos, 2 por 100 bifurcaciones. Ciclo de reloj CPU=31.6 ns. Rendimimiento CPU(rv)=1.27 Rendimimiento CPU(ru)
Las etapas generales en la ejecución de una instrucción son: IF: Fetch de instrucción. ID: Decodificación y Fetch de registros. EX: Ejecución y cálculo de la dirección efectiva. MEM: Acceso a la memoria en lectura o escritura. WB: Escritura de Registros.
Unidad multiciclo Se utiliza una unidad de memoria para instrucciones y datos. Se utiliza un registro para guardar la instrucción una vez que se lee. Este registro de instrucción (IR) se necesita porque la memoria puede ser reutilizada para acceder más tarde al dato en la ejecución de la instrucción.
Circuito completo
Elementos adicionales Registros temporales. Señales de control adicional.
1. Búsqueda de instrucción Busca la instrucción de memoria e incrementa el contador de programa. IR=Memoria [PC]; PC=PC+4;
1. Búsqueda de instrucción control. Acertar las señales de control: MemRead e IRWrite, para leer la memoria y buscar la instrucción en el registro de instrucción (IR). Inicializar: IorD=0 para elegir PC. ALUSelB=01, para incrementar el PC en 4. ALUSelA=0, ALUOp=00 (Para que la ALU sume).
2. Decodificación de la instrucción y búsqueda de registros: Leer los campos de instrucción rs y st. Se calculará con la ALU la dirección destino del salto. Se guarda el resultado en un registro Destino. A=Registro[IR[25-21]]; B=Registro[IR[20-16]]; Destino=PC+(signo-extendido(IR[15-0])<<2);
2. Decodificación de la instrucción y búsqueda de registros: Operaciones. ALUSelB=11, para que el campo de desplazamiento esté con el signo extendido y desplazado. ALUSelA=0 y ALUOp=00 para hacer la suma. LOS ACCESOS AL REGISTRO Y EL CÁLCULO DEL DESTINO DEL SALTO SE REALIZAN EN PARALELO.
3: Ejecución, cálculo de la dirección de memoria, o terminación del salto. Referencia a Memoria ALUOut = A + ext signo (IR[15-0]) Operación: ALUSelA=1, ALUSelB=10, ALUOp=00 Aritmética tipo R ALUOut = A op B Operación: ALUSelA=1, ALUSelB=00, inicializar ALUOp=10.
3: Ejecución, cálculo de la dirección de memoria, o terminación del salto. Branch if ( A == B) PC = Destino. Operación: Si Zero=1 inicializar ALUSelA=1 y ALUSelB=00, ALUOp=01 (resta). Jump PC = PC[31-28] (IR[25-0] <<2)
4: Acceso a memoria, o terminación de la instrucción tipo R. Referencia a Memoria si es lw: MDR = Memoria[ALUOut] acertar: MemRead=1 o, si es sw: Memoria[ALUOut] = B acertar: MemWrite=1 Operación: IorD=1 para forzar que la dirección de la memoria venga de la ALU y no de PC.
4: Acceso a memoria, o terminación de la instrucción tipo R. Instrucción Aritmética tipo R Registro[IR[15-11]] = ALUOut RegDst=1 para seleccionar el registro en donde se va a escribir. Acertar: RegWrite y MemtoReg=0. Las señales ALUSelA, ALUSelB y ALUOp no cambian desde el ciclo anterior.
5: Escritura desde memoria al archivo de registros. Se completa la instrucción lw, cargando el valor de memoria en un registro. Registro[IR[20-16]] = MDR Operación: MemtoReg=1 para escribir el resultado en memoria RegWrite=1 para provocar una escritura. RegDst=0 para seleccionar el campo rt. ALUSelA, ALUSelB y ALUOp debe mantenerse estables.
Control estados: Fetch y Decodificación
Control estados: Referencia Memoria
Control estados: Tipo R
Control estados: Bifurcacion Beq
Control estados: Jump
Control del Multiciclo