Diseño Procesador Monociclo
Especificación de la arquitectura del repertorio de instrucciones y de las instrucciones que podrá ejecutar el procesador. Modelo Carga-Almacenamiento.
Se implementará el procesador considerando las instrucciones: Suma, resta y slt (R) add rd, rs, rt sub rd, rs, rt slt rd, rs, rt Or inmediato (I) ori rt, rs, inm6
Se implementará el procesador considerando las instrucciones: Carga y Almacenamiento (I). lw sw rt, inm6(rs) rt, inm6(rs) Bifurcación (I). beq rs, rt, rótulo Salto incondicional. (J) j rótulo
Manual de Programación MIPS reducido.
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]? : ; PC = PC + 4 ori R[rt] = R[rs] or zero_ext(inm6); PC = PC + 4 lw R[rt] = MEM[ R[rs] + sign_ext(inm6)]; PC = PC + 4 sw MEM[ R[rs] + sign_ext(inm6) ] = R[rt]; PC = PC + 4 beq if ( R[rs] = = R[rt] ) j PC = (PC +4)+[sign_ext(Inm6)]*4; else PC = PC + 4 PC = (PC +4)&xF + add_26*4 6
Recursos Combinacionales Unidad Aritmético Lógica AluCtr[2..] Resultado Función AluCtr Binvert Operación ALU OpA OpA & OpB and OpA OpB or Resultado OpA + OpB OpA - OpB add sub OpB OpA < OpB? : slt 7
Recursos Combinacionales Sumador que permita calcular PC+4 PC Suma PC+4 4 8
Recursos Combinacionales Unidad Extensora ExtOp ExtOp Op. de zero_ext(inm6) Inm6 Extensor Op sign_ext(inm6) Operando de bits 9
Recursos Combinacionales Diseño Extensor lógico y aritmético tierra bit 5 de Inm6 <5..> Inm6 ExtOp <3..6> de Op <3..> de Op
Recursos Combinacionales Multiplexores CtrMux Out CtrMux S S S2 S S Out S2 2
Recursos Combinacionales Multiplexores. Implementación. Di C C Out_i Ai Bi Ci Di Ci Bi Ai C Out_i C 2
Recursos Combinacionales Detector Igualdad OpA OpB Detector de Igualdad Equal B2 A2 B A B A A=B 3
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. 4
Recursos Almacenamiento. Memorias Inactivo MemRd MemWr MemRd Dirección Inactivo WrEn AddrI Rd Memoria Instrucciones Dout Dirección Din WrEn Rd AddrD Memoria Datos Dout 5
Recursos Almacenamiento. Registros. Arreglo Registros Rs Rt Rw busw 5 5 5 Ra Rb Rw RegWr WE Registros -bit busa busb R[Rw] = busw busa = R[ Ra ] busb = R[ Rb ] 6
Diseño del arreglo de Registros. 7
Recursos Almacenamiento. Registros. Contador de Programa WE RIn PC ROut 8
Camino Datos. Determinación del próximo valor del PC. PC = PC + 4 Suma WEPC PC PC+4 PC 4 9
Camino Datos. Determinación del próximo npc_sel[..] valor del PC. Bifurcaciones y salto. 4 PC npcsel Inm6 SigExt << 2 2 PC = PC +4 (PC+4)[3..28] PC = PC +4 + [Sign_ext(Inm6)]*4 PC = (PC +4)&xF+(addr_26*4) Addr26.. 2
Camino de datos entre PC y Memoria de Programa. <3..26> COp WE PC <5..> Funct "" <5..> Inm6 <5..> Rd PC AddrI Rd Memoria Instrucciones busir <2..6> Rt <25..2> Rs <25..> add_26 2
Unidad que determina la próxima instrucción a ejecutar, con la memoria de instrucciones. 4 SigExt <<2 Inm6 (PC+4)[3..28] add_26.. npc_sel 2 PC WE PC "" Rd AddrI busir Memoria Instrucciones COp <3..26> <5.. > <25..2> <2..6> <5..> <5..> <25..> add_26 Funct rs rt rd Inm6 Rs 22
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 busir <3..26> COp <5..> Inm6 <5..> rd <2..6> rt <25..2> rs 23
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. RegWr AluCtr rs rt RW = rd busw 5 5 5 Ra Rb RW W WE Registros -bits busa busb AluOut 24
Modificaciones al camino de datos para poder procesar instrucciones inmediatas. RegDst RegWr ExtOp AluSrc AluCtr rd rt Inm6 rs rt RW busw 5 5 5 Ra Rb Rw WE Registros -bit Extensor busa busb Op AluOut 25
Camino de datos para acceder la memoria de datos. RegDst RegWr ExtOp AluSrc AluCtr MemWr MemtoReg MemRd rd rt Inm6 busw Ra WE Rb Registros RW -bits 5 rs 5 rt 5 RW Op Extensor busa busb Din AluOut Addr WrEn Rd Memoria Datos Dout 26
Detector de igualdad de busa y busb RegDst RegWr ExtOp Equal AluSrc AluCtr MemWr MemtoReg MemRd rd rt Inm6 busw 5 rs Ra WE 5 rt Rb Registros 5 RW RW -bits Extensor busa Igual busb Op Din AluOut AddrD WrEn Rd Memoria Datos Dout 27
Simplificación Considerando unidades Unidad Instrucción npc_sel WE PC COp <3..26> Funct 4 SigExt <<2 Inm6 (PC+4)[3..28] add_26 2 PC "" Rd AddrI busir Memoria Instrucciones <5.. > <25..2> <2..6> <5..> <5..> <25..> rs rt rd.. add_26 Inm6 Rs 28
Simplificación Considerando unidades Unidad Registros RegDst RegWr rs rt rd 5 5 5 RW Ra Rb Rw WE Registros -bit busa busb busw 29
Simplificación Considerando unidades Unidad Operaciones ExtOp Equal AluSrc AluCtr busa Igual busb AluOut Extensor Op busb Inm6 3
Simplificación Considerando unidades Unidad Memoria MemWr MemRd MemtoR eg AddrD Memoria Datos Dout busw Din 3
Procesador Monociclo Procesador Monociclo Esquema General Esquema General Memoria Memoria Datos Datos Dout Dout MemRd MemRd MemWr MemWr MemtoReg MemtoReg AddrD AddrD Din Din busw busw RW RW R a Rb Rb Registros Registros -bit -bit busw busw WE WE RegWr RegWr 5 5 5 RegDst RegDst Inm6 Inm6 Alu Alu Out Out AluSrc AluSrc Op Op Extensor Extensor AluCtr AluCtr Igual Igual Equal Equal bus bus B busa busa busb busb ExtOp ExtOp <25..2> <25..2> <2..6> <2..6> <5..> <5..> <5..> <5..> <25..> <25..> <3..26> <3..26> P C Sig SigExt*4 Ext*4 4 (PC+4)[3..28] (PC+4)[3..28] npc_sel npc_sel 2.... AddrI AddrI Memoria Memoria Instruc- Instrucciones ciones busir busir Rd Rd "" "" Inm6 Inm6 add_26 add_26 WE WE PC PC <5.. > <5.. > Funct Funct COp COp rs rs rt rt rd rd Inm6 Inm6 add_26 add_26 4
Esquema General por unidad npc_sel WEPC RegDst Unidad de Control AluSrc RegWr ExtOp AluCtr MemWr MemRd MemtoReg COp+ Funct Equal Unidad de Instrucción rs rt rd 5 5 5 busw Inm6 Unidad Registros busa busb Unidad de Operaciones AluOut Din AddrD Memoria Datos Dout Reloj 33
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. 34
Transferencias físicas de datos. Movimientos son debidos a: Conexiones permanentes entre recursos Señales de control. 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. 35
Transferencias físicas de datos. 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. 36
Transferencias físicas de datos. 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. 37
Transferencias físicas de datos. SLT: R[rd] R[rs] < R[rt]? : ; PC PC + 4 AddrI=PC, busir=meminst[addri], PC=PC+4, Ra=rs, Rb=rt, RW=rd, busa=r[ra], busb=r[rb], AluOut=slt(busA, busb), busw=aluout, R[RW]=busW. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Registros. Escritura. ORI: R[rt] R[rs] zero_ext(inm6); PC PC + 4 AddrI=PC, busir=meminst[addri], PC=PC+4, Unidad Instrucción. Ra=rs, RW=rt, busa=r[ra], Unidad Registros. Lectura. Op = zero_ext(inm6), AluOut=or(busA, Op), Unidad Operaciones. busw=aluout, R[RW]=busW. Unidad Registros. Escritura. 38
Transferencias físicas de datos. LOAD: R[rt] MEM[ R[rs] + sign_ext(inm6)]; PC PC + 4 AddrI=PC, busir=meminst[addri], PC=PC+4, Ra=rs, RW=rt, busa=r[ra], Op = signext(inm6), AluOut=add(busA, Op), AddrD=AluOut, Dout = MemDat[AddrD], busw=dout, R[RW]=busW. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. STORE: MEM[ R[rs] + sign_ext(inm6)] R[rt]; PC PC + 4 AddrI=PC, busir=meminst[addri], PC=PC+4, Ra=rs, Rb=rt, busa=r[ra], busb=r[rb], Op = signext(inm6), AluOut= add(busa, Op), AddrD=AluOut, Din = busb, MemDat[AddrD]=Din. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. 39
Transferencias físicas de datos. BEQ: if ( R[rs] == R[rt] ) PC (PC +4)+ sign_ext(inm6)] *4 else PC PC + 4 AddrI=PC, busir=meminst[addri], Ra=rs, Rb=rt, busa=r[ra], busb=r[rb], if (Equal) PC = (PC +4)+ sign_ext(inm6)] *4 else PC=PC+4. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Instrucción. J UMP: PC (PC +4)&xF+ add_26 *4 AddrI=PC, busir=meminst[addri], PC = (PC +4)&xF+ add_26 *4. Unidad Instrucción. Unidad Instrucción 4
Transferencias físicas de datos. Valores Conceptuales que toman las Señales de Control npc_sel: "+4","Branch","Jump" Unidad Instrucción. WEPC: "" Escribe en registro PC. Unidad Instrucción. RegDst: rt, rd Unidad Registros. Lectura. ExtOp: zero, sign Unidad Operaciones. AluSrc: "busb","op" Unidad Operaciones. AluCtr: add, sub, or, slt Unidad Operaciones. MemWr: "" Escribe en la memoria. Unidad Memoria Datos. MemRd: "" Lee desde la memoria de datos. Unidad Memoria Datos. MemtoReg:"alu","mem" Unidad Registros. Escritura. RegWr: "" escribe busw en el registro Unidad Registros. Escritura. especificado en RW. 4
Valores de las señales de control para activar las transferencias lógicas. Valores que toman las señales de control para desarrollar las diferentes transferencias lógicas necesarias para cada instrucción. 42
Valores de las señales de control para activar las transferencias lógicas. ADD: R[rd] R[rs] + R[rt]; PC PC + 4 npc_sel = +4, WEPC =, RegDst = "rd", AluSrc = "busb", AluCtr = add, ExtOp=, MemWr=, MemRd=, Memtoreg="alu", RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. SUB: R[rd] R[rs] R[rt]; PC PC + 4 npc_sel = +4, WEPC=, RegDst = "rd", AluSrc = "busb", AluCtr = sub, ExtOp=, MemWr=, MemRd=, Memtoreg="alu", RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. 43
Valores de las señales de control para activar las transferencias lógicas. SLT: R[rd] R[rs] < R[rt]? : ; PC PC + 4 npc_sel = +4, WEPC=, RegDst = "rd", AluSrc = "busb", AluCtr = slt, ExtOp=, MemWr=, MemRd=, Memtoreg="alu", RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. ORI: R[rt] R[rs] + zero_ext(inm6); PC PC + 4 npc_sel = +4, WEPC =, RegDst = "rt", AluSrc = "Op", ExtOp = zero, AluCtr = or, MemWr=, MemRd=, Memtoreg="alu", RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. 44
Valores de las señales de control para activar las transferencias lógicas. LOAD: R[rt] MEM[ R[rs] + sign_ext(inm6)]; PC PC + 4 npc_sel = +4, WEPC=, RegDst = "rt", AluSrc = "Op", ExtOp = sign, AluCtr = add, MemRd=, MemWr=, Memtoreg="mem", RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura. STORE: MEM[ R[rs] + sign_ext(inm6)] R[rt]; PC PC + 4 npc_sel = +4, WEPC =, Unidad Instrucción. RegDst =, Unidad Registros. Lectura. AluSrc = "Op", ExtOp = sign, AluCtr = add, Unidad Operaciones. MemWr=, MemRd=, Unidad Memoria Datos. Memtoreg=, RegWr=. Unidad Registros. Escritura 45
Valores de las señales de control para activar las transferencias lógicas. BEQ: if ( R[rs] == R[rt] ) PC (PC +4) + sign_ext(inm6)] *4; else PC PC + 4 if (Equal) npc_sel= Br ; else npc_sel= +4 ; WEPC =. RegDst =, AluSrc =, ExtOp =, AluCtr =, MemWr=, MemRd=, Memtoreg=, RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura J: PC (PC +4)&xF+ add_26 *4 npc_sel = Jmp, WEPC=. RegDst =, AluSrc =, ExtOp =, AluCtr =, MemWr=, MemRd=. Memtoreg=, RegWr=. Unidad Instrucción. Unidad Registros. Lectura. Unidad Operaciones. Unidad Memoria Datos. Unidad Registros. Escritura 46
Clk Diagrama de tiempos para todas las instruccion es del procesador Valor anterior PC Valor anterior IR Valor anterior PC+4 Valores anteriores Señales de control Valores anteriores busa, busb Retardo Registro Nuevo valor PC+4 Nuevo valor PC Tiempo Acceso Memoria Instrucciones Nuevo valor IR Rs, Rt, Rd, Op, Inm6, add26 Tiempo Propagación Sumador Unidad de Instrucción Valores anteriores AluOut, busw Tiempo Acceso Memoria de Datos Retardo de Propagación en Unidad de Control Nuevos valores RegWr, RW, WEpc, AluCtr,... Tiempo Acceso Arreglo Registros Nuevos valores busa, busb Propagación ALU Nuevos valores de AluOut y busw en ADD, SUB, ORI Valor anterior Dout Propagación Mux Nuevos valores de Dout en Lw y M[Aluout] en Sw Propagación Mux Valor anterior Dirección de salto. Valor anterior busw Setup Registro y Skew del reloj. Nuevo valor Dirección de salto. Propagación Sumador y Mux Unidad de Instrucción Nuevo valor bus W en Lw Valor anterior Dirección de bifurcación Nuevo valor Dirección de bifurcación Propagación Detector igualdad 47
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 WE PC Cop + Funct RegDst RegWr Equal ExtOp AluSrc AluCtr MemWr MemRd MemtoReg U. Instrucción U. Registros U. Operaciones U. Memoria U.Registros Camino de Datos Reloj 48
Diseño de la Unidad de Control. Tabla de verdad de la Unidad de Control Monociclo Op Bnegate Operación Decimal Binario and or add 2 slt 3 sub 2 49
Diseño de la Unidad de Control. Tabla de verdad de la Unidad de Control Monociclo OP Funct Nemo. R add R sub R slt I ori I lw I sw I beq J j R and R slt 5
Diseño de la Unidad de Control. Tabla de verdad de la Unidad de Control Monociclo Op+funct Eq WE PC npc_sel Ext Op Alu Src Alu Ctr Reg Dst Mem Wr Mem Rd Mem toreg Reg Wr Add Sub Slt Ori Load Store Beq Beq Jmp Entradas 3 Salidas 3 5
52 Memoria Memoria Datos Datos Dou Dou t MemR MemR d MemW MemW r MemtoR MemtoR eg eg Addr Addr D Di Di n bus bus W R W R a R b Registros Registros -bit -bit 3 2 bus bus W W E Reg Reg Wr Wr 5 5 5 RegDs RegDs t Inm6 Inm6 Al Al u O ut ut AluSrc AluSrc Op Op Extensor Extensor AluCtr AluCtr Igual Igual Equal Equal bus bus B bus bus A bus bus B ExtOp ExtOp <25..2 <25..2 > <2..6 <2..6 > <5.. <5.. > <5.. <5.. > <25.. <25.. > <3..26> <3..26> P C Sig SigExt* Ext* 4 4 (PC+4) (PC+4) [3..28] [3..28] npc_sel npc_sel 2.... Addr Addr I Memoria Memoria Instruc- Instrucciones ciones busi busi R R d " " " Inm Inm 6 add_26 add_26 WE WE PC PC <5.. <5.. > Fun Fun ct ct COp COp rs rs rt rt rd rd Inm6 Inm6 add_26 add_26 4 Salidas 3 Entradas 3 Jmp Beq Beq Store Load Ori Slt Sub Add Reg Wr Mem toreg Mem Rd Mem Wr Reg Dst Alu Ctr Alu Src Ext Op npc_sel WE PC Eq Op+funct
Diseño de la Unidad de Control. Tabla Resumen Unidad de Control Monociclo OP+Funct+Eq Control[2..] Obs. Add Sub Slt Ori Load Store Beq Beq Jmp 53
Diseño de la Unidad de Control. 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. 54