ELO311 Estructuras de Computadores Digitales Procesador Monociclo Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design", (segunda y tercera edición), Morgan Kaufmann, CA. 2005 material del curso anterior ELO311 del Prof. Leopoldo Silva www.wikipedia.org Arquitectura de Nuestro Proc. Monociclo Modelo Carga-Almacenamiento. Read ISA (Instruction Service Architecture) Exec El camino de datos (datapath) ejecuta las instrucciones bajo dirección de control Processor Devices Control 000000 00100 00010 0001000000100000 Memory Input Datapath contents Reg #4 ADD contents Reg #2 results put in Reg #2 Output La memoria almacena instrucciones y datos Decode Especificación del ISA Se implementará el procesador considerando las instrucciones: Suma, resta y set less than (R) add rd, rs, rt sub slt rd, rs, rt rd, rs, rt Or inmediato (I) ori rt, rs, inm16 Carga y Almacenamiento (I). lw sw rt, inm16(rs) rt, inm16(rs) Bifurcación (I). beq rs, rt, rótulo Salto incondicional. (J) j rótulo Especificación del ISA (cont) Manual de Programación MIPS reducido. Especificación del ISA (cont) Detallar movimientos de datos y trasferencias Lógicas add R[rd] = R[rs] + R[rt]; PC = PC + 4 sub R[rd] = R[rs] – R[rt]; PC = PC + 4 slt R[rd] = R[rs] < R[rt] ? 1: 0 ; PC = PC + 4 ori R[rt] = R[rs] or zero_ext(Inm16); PC = PC + 4 lw R[rt] = MEM[ R[rs] + sign_ext(Inm16)]; PC = PC + 4 sw MEM[ R[rs] + sign_ext(Inm16) ] = R[rt]; PC = PC + 4 beq if ( R[rs] = = R[rt] ) PC = (PC +4)+[sign_ext(Inm16)]*4; else PC = PC + 4 j PC = (PC +4)&0xF0000000 + add_26*4 Componentes Físicos del Procesador Recursos Combinacionales Unidad Aritmético Lógica AluCtr[2..0] Resultado AluCtr Función Binvert Operación 0 00 OpA & OpB and 0 01 OpA | OpB or 0 10 OpA + OpB add 1 10 OpA - OpB sub 1 11 OpA < OpB ? 1: 0 slt ALU OpA Resultado OpB Componentes Físicos del Procesador (cont) Recursos Combinacionales Sumador que permita calcular PC+4 Suma PC PC+4 4 Componentes Físicos del Procesador (cont) Recursos Combinacionales Unidad Extensora ExtOp ExtOp Op. de 32 Extensor 0 zero_ext(Inm16) 1 sign_ext(Inm16) Inm16 Op32 Operando de 32 bits Componentes Físicos del Procesador (cont) Recursos Combinacionales Diseño Extensor lógico y aritmético E x tO p tie rra 0 b it 1 5 d e In m 1 6 < 1 5 ..0 > In m 1 6 1 < 3 1 ..1 6 > d e O p 3 2 < 3 1 ..0 > d e O p 3 2 Componentes Físicos del Procesador (cont) Recursos Combinacionales Multiplexores CtrMux Out 00 S0 01 S1 S0 10 S2 S1 CtrMux S2 0 Out 1 2 Componentes Físicos del Procesador (cont) Recursos Combinacionales Multiplexores. Implementación. Di C1 0 0 1 1 C0 Out_i 0 Ai 1 Bi 0 Ci 1 Di Ci Out_i Bi Ai C1 C0 Componentes Físicos del Procesador (cont) Recursos Combinacionales Detector Igualdad O pA O pB D e te c to r de Ig u a ld a d E qual B2 A2 B1 A1 B0 A0 A=B Componentes Físicos del Procesador (cont) Recursos Almacenamiento. Memorias Una memoria para almacenar las instrucciones (ROM). Una memoria para leer y escribir datos (RAM). Diseño inicial se elige tener recursos separados aunque podría ocuparse una sola memoria para datos e instrucciones. Componentes Físicos del Procesador (cont) Recursos Almacenamiento. Memorias MemWr MemRd Inactivo MemRd Dirección Inactivo WrEn Rd AddrI Memoria Instrucciones Dout Dirección Din WrEn Rd AddrD Memoria Datos Dout Componentes Físicos del Procesador (cont) Recursos Almacenamiento. Registros. Arreglo Registros RegWr R[Rw] = busW Rs 5 Rt 5 Rw 5 busW 32 Ra WE Rb Rw 32 Registros 32-bit busA = R[ Ra ] busA 32 busB = R[ Rb ] busB 32 Componentes Físicos del Procesador (cont) Diseño del arreglo de Registros. 5 31 31 32 Componentes Físicos del Procesador (cont) Recursos Almacenamiento. Registros. Contador de Programa WE RIn PC ROut Componentes Físicos del Procesador (cont) Camino Datos. Determinación del próximo valor del PC. PC = PC + 4 WEPC Suma PC PC+4 4 PC Componentes Físicos del Procesador (cont) Camino Datos. Determinación del próximo valor del PC. Bifurcaciones y salto. nPC_sel[1..0] nPCsel PC = PC +4 01 PC = PC +4 + [Sign_ext(Inm16)]*4 10 PC = (PC +4)&0xF0000000+(addr_26*4) 0 1 4 Inm16 SigExt 2 << 2 (PC+4)[31..28] Addr26 0..1 PC 00 Componentes Físicos del Procesador (cont) Camino de datos entre PC y Memoria de Datos. <31..26> COp WE PC <5..0> Funct <15..0> Inm16 "1" <15..11> Rd PC AddrI Rd busIR <20..16> Rt Memoria Instrucciones <25..21> Rs <25..0> add_26 Componentes Físicos del Procesador (cont) Unidad que determina la próxima instrucción a ejecutar, con la memoria de instrucciones. nPC_se l WE PC COp Funct <31..26> busIR "1" 0 SigExt 1 <<2 2 Inm16 (PC+4)[31..28] add_26 0..1 rs PC 4 <5..0 > <25..21> Rd AddrI Memoria Instrucciones <20..16> rt <15..11> rd <15..0> <25..0> add_26 Inm16 Rs Componentes Físicos del Procesador (cont) Abstracción del diagrama anterior en un bloque que determina y decodifica la instrucción a ejecutar, y que además calcula la dirección de la próxima instrucción a realizar. nPC_sel Unidad de Instrucción <31..26> COp <15..0> Inm16 busIR <15..11> rd <20..16> rt <25..21> rs Componentes Físicos del Procesador (cont) Camino de Datos para operaciones de tipo R. Arreglo de registros y la unidad aritmético lógica, para poder realizar las transferencias físicas que implementan las operaciones de suma y resta (e.g. add rd, rs, rt) AluCtr RegWr rs 5 rt 5 RW = rd 5 busW 32 Ra WE busA Rb 32 RW 32 Registros busB 32-bits W 32 AluOut Componentes Físicos del Procesador (cont) Modificaciones al camino de datos para poder procesar instrucciones inmediatas. RegDst RegWr 5 rd 0 rs rt 5 5 RW rt 1 WE Ra Rb Rw 32 Registros 32-bit ExtOp 32 AluOut busB 32 Extensor Inm16 AluCtr busA 32 busW AluSrc Op32 0 1 Componentes Físicos del Procesador (cont) Camino de datos para acceder la memoria de datos. RegDst rd rt rs 0 rt 1 RegWr 5 5 5 RW MemWr MemtoReg MemRd AluSrc AluCtr ExtOp WE Ra Rb 32 Registros RW 32 -bits busA 32 AluOut 32 0 busB 0 Addr 32 WrEn Rd Dout busW Inm16 Op3 2 Extensor 1 Din Memoria Datos 1 Componentes Físicos del Procesador (cont) Detector de igualdad de busA y busB Equal RegDst rd rt rs 0 rt 1 RegWr 5 5 5 WE Ra Rb 32 Registros 32-bits RW RW ExtOp 32 AluOut Igual 32 busB busW Unidad de registros MemWr MemtoReg MemRd busA 32 Inm16 AluSrc AluCtr Extensor 0 AddrD WrEn Rd Dout 1 Memoria Din Datos Op32 Unidad de operaciones 0 1 Unidad de memoria Componentes Físicos del Procesador (cont) Unidad Instrucción nPC_se l WE PC COp Funct <31..26> busIR "1" 0 SigExt 1 <<2 2 Inm16 (PC+4)[31..28] add_26 0..1 rs PC 4 <5..0 > <25..21> Rd AddrI Memoria Instrucciones <20..16> rt <15..11> rd <15..0> <25..0> add_26 Inm16 Rs Componentes Físicos del Procesador (cont) Unidad Registros RegWr RegDst rs 5 5 rt 1 rd 0 5 RW Ra WE Rb 32 busA Rw 32 Registros 32 32-bit busB 32 busW Componentes Físicos del Procesador (cont) Unidad Operaciones Equal ExtOp AluSrc AluCtr busA Igual 0 busB Extensor Op32 1 Inm16 AluOut busB Componentes Físicos del Procesador (cont) Unidad Memoria MemWr MemRd MemtoR eg 0 AddrD Memoria Datos Din busW Dout 1 Procesador Monociclo Esquema General WEPC nPC_sel COp Funct RegDst RegWr ExtOp AluSrc Equal AluCtr MemWr MemRd MemtoReg <31..26> <5..0 > "1" 0 4 1 2 Inm16 Rd AddrI Memoria InstrucInstrucciones <25..21> rt <15..11> 1 5 32 busA RW 32 Registros 0 3232-bit rd busW Alu Out 32 0 Memoria Datos 1 Extensor add_26 add_26 Dout Op32 Din 1 busB Inm16 AddrD 32 busW 0..1 0 busB <15..0> <25..0> add_26 add_26 R WE a Rb 5 <20..16> 4 (PC+4)[31..28] 5 rs Igual SigExt*4 Ext*4 P C busIR Inm16 Procesador Monociclo Esquema General por unidad Unidad de Control AluSrc RegDst RegWr ExtOp AluCtr nPC_sel WEPC COp+ Funct 2 Unidad de Instrucción rs rt rd MemWr MemRd MemtoReg Equal 32 busA 5 5 Unidad Registros 5 busW 32 Unidad AluOut de busB Operaciones 32 0 AddrD 1 Din Memoria Datos Dout Inm16 Reloj Transferencias Físicas de Datos Cada transferencia lógica se implementa como un conjunto de transferencias físicas. Transferencia física es la descripción de un movimiento de datos entre los recursos del camino de datos. Muestra lo que sucede en el camino de datos. Estos movimientos de datos pueden ser debidos a conexiones permanentes entre componentes o pueden programarse mediante las señales de control Las señales de control sincronizan los cambios de estados de los registros o de la memoria Transferencias Físicas de Datos (cont) Para cada instrucción: Se hace referencia a través de un mnemónico. Se anota la transferencia lógica. Y luego el conjunto de transferencias físicas que la desarrollan. Las transferencias físicas se agrupan de acuerdo a la unidad en que se realizan. Se muestran por líneas, pero toda la electrónica que las representa está funcionando en paralelo, y la información fluye en serie a través de los recursos. Transferencias Físicas de Datos (cont) ADD: R[rd] ⇐ R[rs] + R[rt]; PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, Rb=rt, RW=rd, busA=R[Ra], busB=R[Rb], Unidad Registros. Lectura. AluOut=add(busA, busB), Unidad Operaciones. busW=AluOut, R[RW]=busW. Unidad Registros. Escritura. SUB: R[rd] ⇐ R[rs] – R[rt]; PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, Rb=rt, RW=rd, busA=R[Ra], busB=R[Rb], Unidad Registros. Lectura. AluOut= sub(busA, busB), Unidad Operaciones. busW=AluOut, R[RW]=busW. Unidad Registros. Escritura. Transferencias Físicas de Datos (cont) SLT: R[rd] ⇐ R[rs] < R[rt] ? 1: 0 ; PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, Rb=rt, RW=rd, busA=R[Ra], busB=R[Rb], Unidad Registros. Lectura. AluOut=slt(busA, busB), Unidad Operaciones. busW=AluOut, R[RW]=busW. Unidad Registros. Escritura. ORI: R[rt] ⇐ R[rs] | zero_ext(Inm16); PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, RW=rt, busA=R[Ra], Unidad Registros. Lectura. Op32 = zero_ext(Inm16), AluOut=or(busA, Op32), Unidad Operaciones. busW=AluOut, R[RW]=busW. Unidad Registros. Escritura. Transferencias Físicas de Datos (cont) LOAD: R[rt] ⇐ MEM[ R[rs] + sign_ext(Inm16)]; PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, RW=rt, busA=R[Ra], Unidad Registros. Lectura. Op32 = signext(Inm16), AluOut=add(busA , Op32), Unidad Operaciones. AddrD=AluOut, Dout = MemDat[AddrD], Unidad Memoria Datos. busW=Dout, R[RW]=busW. Unidad Registros. Escritura. STORE: MEM[ R[rs] + sign_ext(Inm16)] ⇐ R[rt]; PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], PC=PC+4, Unidad Instrucción. Ra=rs, Rb=rt, busA=R[Ra], busB=R[Rb], Unidad Registros. Lectura. Op32 = signext(Inm16), AluOut= add(busA , Op32), Unidad Operaciones. AddrD=AluOut, Din = busB, MemDat[AddrD]=Din. Unidad Memoria Datos. Transferencias Físicas de Datos (cont) BEQ: if ( R[rs] == R[rt] ) PC ⇐ (PC +4)+ sign_ext(Inm16)] *4 else PC ⇐ PC + 4 AddrI=PC, busIR=MemInst[AddrI], Unidad Instrucción. Ra=rs, Rb=rt, busA=R[Ra], busB=R[Rb], Unidad Registros. Lectura. if (Equal) Unidad Operaciones. PC = (PC +4)+ sign_ext(Inm16)] *4 else PC=PC+4. Unidad Instrucción. JUMP: PC ⇐ (PC +4)&0xF0000000+ add_26 *4 AddrI=PC, busIR=MemInst[AddrI], Unidad Instrucción. PC = (PC +4)&0xF0000000+ add_26 *4. Unidad Instrucción Señales de Control para Transferencias Físicas En lugar de valores binarios pueden usarse valores conceptuales de las señales de control nPC_sel: "+4","Branch","Jump" Unidad Instrucción. WEPC: "1" Escribe en registro PC. Unidad Instrucción. RegDst: “rt”, “rd” Unidad Registros. Lectura. ExtOp: “zero”, “sign” Unidad Operaciones. AluSrc: "busB","Op32" Unidad Operaciones. AluCtr: “add”, “sub”, “or”, “slt” Unidad Operaciones. MemWr: "1" Escribe en la memoria. Unidad Memoria Datos. MemRd: "1" Lee desde la memoria de datos. Unidad Memoria Datos. MemtoReg:"alu","mem" Unidad Registros. Escritura. RegWr: "1" escribe busW en el registro Unidad Registros. Escritura. especificado en RW. Valores que toman las señales de control Valores que toman las señales de control para desarrollar las diferentes transferencias lógicas necesarias para cada instrucción: ADD: R[rd] ⇐ R[rs] + R[rt]; PC ⇐ PC + 4 nPC_sel = “+4”, WEPC =1, Unidad Instrucción. RegDst = "rd", Unidad Registros. Lectura. AluSrc = "busB", AluCtr = “add”, ExtOp=∅, Unidad Operaciones. MemWr=0, MemRd=∅, Unidad Memoria Datos. Memtoreg="alu", RegWr=1. Unidad Registros. Escritura. SUB: R[rd] ⇐ R[rs] – R[rt]; PC ⇐ PC + 4 nPC_sel = “+4”, WEPC=1 , Unidad Instrucción. RegDst = "rd", Unidad Registros. Lectura. AluSrc = "busB", AluCtr = “sub”, ExtOp=∅, Unidad Operaciones. MemWr=0, MemRd=∅, Unidad Memoria Datos. Memtoreg="alu", RegWr=1. Unidad Registros. Escritura. Valores que toman las señales de control (cont) SLT: R[rd] ⇐ R[rs] < R[rt] ? 1: 0 ; PC ⇐ PC + 4 nPC_sel = “+4”, WEPC=1 , Unidad Instrucción. RegDst = "rd", Unidad Registros. Lectura. AluSrc = "busB", AluCtr = “slt”, ExtOp=∅, Unidad Operaciones. MemWr=0, MemRd=∅, Unidad Memoria Datos. Memtoreg="alu", RegWr=1. Unidad Registros. Escritura. ORI: R[rt] ⇐ R[rs] + zero_ext(Inm16); PC ⇐ PC + 4 nPC_sel = “+4”, WEPC =1, Unidad Instrucción. RegDst = "rt", Unidad Registros. Lectura. AluSrc = "Op32", ExtOp = “zero”, AluCtr = “or”, Unidad Operaciones. MemWr=0, MemRd=∅, Unidad Memoria Datos. Memtoreg="alu", RegWr=1. Unidad Registros. Escritura. Valores que toman las señales de control (cont) LOAD: R[rt] ⇐ MEM[ R[rs] + sign_ext(Inm16)]; PC ⇐ PC + 4 nPC_sel = “+4”, WEPC=1 , Unidad Instrucción. RegDst = "rt", Unidad Registros. Lectura. AluSrc = "Op32", ExtOp = “sign”, AluCtr = “add”, Unidad Operaciones. MemRd=1, MemWr=0, Unidad Memoria Datos. Memtoreg="mem", RegWr=1. Unidad Registros. Escritura. STORE: MEM[ R[rs] + sign_ext(Inm16)] ⇐ R[rt]; PC ⇐ PC + 4 nPC_sel = “+4”, WEPC =1, Unidad Instrucción. RegDst = ∅, Unidad Registros. Lectura. AluSrc = "Op32", ExtOp = “sign”, AluCtr = “add”, Unidad Operaciones. MemWr=1, MemRd=0, Memtoreg=∅, RegWr=0. Unidad Memoria Datos. Unidad Registros. Escritura Valores que toman las señales de control (cont) BEQ: if ( R[rs] == R[rt] ) PC ⇐ (PC +4) + sign_ext(Inm16)] *4; else PC ⇐ PC + 4 if (Equal) nPC_sel=”Br”; else nPC_sel=”+4”; WEPC =1. Unidad Instrucción. RegDst = ∅, Unidad Registros. Lectura. AluSrc = ∅, ExtOp = ∅ , AluCtr = ∅ , Unidad Operaciones. MemWr=0, MemRd=∅, Unidad Memoria Datos. Memtoreg=∅, RegWr=0. Unidad Registros. Escritura J: PC ⇐ (PC +4)&0xF0000000+ add_26 *4 nPC_sel = “Jmp”, WEPC=1 . Unidad Instrucción. RegDst = ∅, Unidad Registros. Lectura. AluSrc = ∅, ExtOp = ∅ , AluCtr = ∅ , Unidad Operaciones. MemWr=0, MemRd=∅. Unidad Memoria Datos. Memtoreg=∅, RegWr=0. Unidad Registros. Escritura Diagrama de Tiempos para las Instrucciones A continuación se muestran todas las señales que se producen cuando se ejecutan las instrucciones del repertorio. Se pueden ver los tiempos requeridos para la ejecución de las instrucciones de salto jmp, de bifurcación (branch), aritméticas y lógicas inmediatas (add, sub, slt, ori), store word (store) y load word (load). La mas lenta es load y por ende determina la frecuencia del reloj (al ser monociclo la frecuencia del reloj es determinada por la instrucción mas larga). Se las ubica con sus requerimientos aproximados de tiempo, y en forma relativa con respecto a las otras. Diagrama de Tiempos para las Instrucciones (cont) CLK Retardo Registro Valor anterior PC Valor anterior IR Valor anterior PC+4 Nuevo valor PC Tiempo Acceso Memoria Instrucciones Nuevo valor IR Rs, Rt, Rd, Op, Inm16, add26 Tiempo Propagación Sumador Unidad de Instrucción Nuevo valor PC+4 Retardo de Propagación en Unidad de Control Valores anteriores Señales de control Nuevos valores RegWr, RW, WEpc, AluCtr,.... Tiempo Acceso Arreglo Registros aritméticas y lógicas Valores anteriores busA, busB Nuevos valores busA, busB Propagación ALU Nuevos valores de AluOut y busW en ADD, SUB, ORI Valores anteriores AluOut, busW Tiempo Acceso Memoria de Datos store Valor anterior Dout load Nuevos valores de Dout en Lw y M[Aluout] en Sw Propagación Mux Valor anterior busW Propagación Mux branch Valor anterior Dirección de salto. Valor anterior Dirección de bifurcación jump Setup Registro y Skew del reloj. Nuevo valor Dirección de salto. Propagación Sumador y Mux Unidad de Instrucción Nuevo valor Dirección de bifurcación Propagación Detector igualdad Nuevo valor bus W en Lw Tiempos para las Instrucciones (cont) Si se miden los tiempos que requieren las instrucciones para completar sus transferencias, puede confeccionarse, observando el diagrama temporal, la siguiente tabla: Sin embargo todas las instrucciones se ejecutan en el mismo tiempo(un ciclo de reloj) que la más lenta en ejecutarse (es decir en 12 unidades, en la escala con la que se confeccionó el gráfico). Tiempos para las Instrucciones (cont) Otra alternativa es generar una tabla basada en las specs de los circuitos de los distintos componentes. Ejemplo: Las memorias responden en 2 ns, los sumadores y la ALU operan en 2 ns; y la unidad de registros, tanto en lectura como en escritura, responden en 1 ns Ignorando retardos de otros elementos se hacer la siguiente tabla Rendimiento del Procesador Monociclo Si definimos, en general: C = Comportamiento Procesador = 1/ TE (a mayor tiempo, peor comportamiento) TE = Tiempo de ejecución de un programa de prueba. NI = número de instrucciones del programa de prueba. CPI = ciclos de reloj por instrucción. ( vale 1 para diseño monociclo) PC = Período del reloj. Se tiene que: TE = NI * CPI * PC Con la tabla simplificada, para el procesador monociclo con un período fijo de reloj, se tiene: TE(reloj fijo) = NI*1*8 Ya que la instrucción más lenta demora 8 ns. Rendimiento del Procesador Monociclo (cont) Si deseamos evaluar el comportamiento promedio: Se asume que el programa de prueba está constituido por la siguiente mezcla: 25% de cargas, 11% de almacenamientos, 30 % de sumas, 9 % de restas, 4 % de or inmediatos, 15 % de bifurcaciones y 6 % de saltos. Se tendrá ahora: TE(reloj variable) = NI (0,25*8 + 0,11*7+0,30*6+0,09*6 + 0,04*6+0,15*3+0,06*2) = NI*5,92 Puede considerarse que el valor promedio del período del reloj es 5,92 ns. Rendimiento del Procesador Monociclo (cont) La comparación: C(reloj variable)/ C(reloj fijo) = TE(reloj fijo) / TE(reloj variable) = 8,0/5,92 = 1,35. Indica que el procesador monociclo con reloj variable es 1,35 veces más rápido que el de reloj fijo. La alternativa de reloj variable es de implementación compleja, suele escogerse un reloj más rápido pero aceptando que las instrucciones se completen en diferentes ciclos de reloj (es decir CPI variable). Esto dará origen a la metodología de diseño denominada multiciclo, que se verá más adelante. El comportamiento monociclo empeora si en la mezcla de instrucciones participan algunas que tengan tiempos de ejecución mucho mayores que el promedio (e.g. punto flotante, transferencias complejas) Diseño de la Unidad de Control En el modelo monociclo la unidad de control es una red combinacional que tiene como entradas el código de operación-funct y la condición Equal; y como salidas las señales de Control. Unidad de Control nPC_sel U. Instrucción Cop + Funct WEPC RegDst RegWr U. Registros Equal ExtOp AluSrc AluCtr MemWr MemRd U. Operaciones U. Memoria Camino de Datos Reloj U.Registros MemtoReg Diseño de la Unidad de Control (cont) Tabla de Verdad de la Unidad de Control Monociclo Op Bnegate Operación Decimal Binario and φ 0 00 or φ 1 01 add 0 2 10 slt 1 3 11 sub 1 2 10 Diseño de la Unidad de Control (cont) Tabla de Verdad de la Unidad de Control Monociclo OP Funct Nemo. 000000 100000 R add 000000 100010 R sub 000000 101010 R slt 001101 φφφφφφ I ori 100011 φφφφφφ I lw 101011 φφφφφφ I sw 000100 φφφφφφ I beq 000010 φφφφφφ J j 000000 100100 R and 000000 101010 R slt Diseño de la Unidad de Control (cont) Tabla de Verdad de la Unidad de Control Monociclo Op+funct Eq WEPC nPC_se l Ext Op Alu Src Alu Ctr Reg Dst Mem Wr Mem Rd Mem toReg Reg Wr Add φ 1 00 φ 0 010 0 0 φ 0 1 Sub φ 1 00 φ 0 110 0 0 φ 0 1 Slt φ 1 00 φ 0 111 0 0 φ 0 1 Ori φ 1 00 0 1 001 1 0 φ 0 1 Load φ 1 00 1 1 010 1 0 1 1 1 Store φ 1 00 1 1 010 φ 1 0 φ 0 Beq 1 1 01 φ φ φφφ φ 0 φ φ 0 Beq 0 1 00 φ φ φφφ φ 0 φ φ 0 Jmp φ 1 10 φ φ φφφ φ 0 φ φ 0 Entradas 13 Salidas 13 COp Funct RegDst RegWr WEPC nPC_sel ExtOp <31..26> "1" 0 4 1 4 Inm1 6 (PC+4)[31..2 8] 4 Memoria InstrucInstrucciones <20..16 > rt 1 <15..11 > 0 rd <15..0 > <25..0 > 0..1 5 add_26 add_26 5 R a R b W E R 32 Registros W 3232-bit 3 bus2 nPC_sel Ext Op Add φ 1 00 Sub φ 1 Slt φ Ori Al uO ut 0 Op32 bus W Addr D Memoria Datos 1 Din 1 Dou t bus B Inm16 WEPC MemRd MemtoReg 0 32 W Eq MemWr bus A bus B Inm16 Op+funct 32 Extensor add_26 add_26 2 R AddrI d 5 rs AluCtr Igual SigExt* Ext* P C busI R <5..0 ><25..21> AluSr Equal c Alu Src Alu Ctr Reg Dst Mem Wr Mem Rd Mem toReg Reg Wr φ 0 010 0 0 φ 0 1 00 φ 0 110 0 0 φ 0 1 1 00 φ 0 111 0 0 φ 0 1 φ 1 00 0 1 001 1 0 φ 0 1 Load φ 1 00 1 1 010 1 0 1 1 1 Store φ 1 00 1 1 010 φ 1 0 φ 0 Beq 1 1 01 φ φ φφφ φ 0 φ φ 0 Beq 0 1 00 φ φ φφφ φ 0 φ φ 0 Jmp φ 1 10 φ φ φφφ φ 0 φ φ 0 Entradas 13 Salidas 13 Diseño de la Unidad de Control (cont) Tabla Resumen Unidad de Control Monociclo OP+Funct+Eq Control[12..0] Obs. 000000100000φ 100φ001000φ01 Add 000000100010φ 100φ011000φ01 Sub 000000101010φ 100φ111000φ01 Slt 001101φφφφφφφ 1000100110φ01 Ori 100011φφφφφφφ 1001101010111 Load 101011φφφφφφφ 10011010φ10φ0 Store 000100φφφφφφ1 101φφφφφφ0φφ0 Beq 000100φφφφφφ0 100φφφφφφ0φφ0 Beq 000010φφφφφφφ 110φφφφφφ0φφ0 Jmp Diseño de la Unidad de Control (cont) La implementación de la unidad de control puede ser utilizando. En base a compuertas lógicas (función mínima) Dispositivos lógicos programables (por ejemplo: GAL) O mediante EPROM Se debe extender esta arquitectura monociclo si se desean agregar nuevas instrucciones, esto puede requerir que se modifiquen algunas de las unidades (e.g. instrucción, registros, operaciones, memoria), el camino de datos y la unidad de control.