C P U Uniciclo

2,205 views

Published on

Published in: Technology, Business
  • me salvo la vida para una prueba, muchas gracias por compartir esta informacion
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

C P U Uniciclo

  1. 1. Organzación de CPU Cecilia Hernández
  2. 2. Componentes sistema computacional
  3. 3. Diseño de Procesador Sección de Datos y Control JerarquíaMemoria Control ALU Registers PC estado Bus Memoria CPU Sección de datos Combinational Secuencial
  4. 4. Diseño de CPU <ul><li>Sección de datos </li></ul><ul><ul><li>Como fluyen los datos entre los diferentes componentes </li></ul></ul><ul><ul><li>Que operaciones pueden ser realizadas cuando los datos fluyen </li></ul></ul><ul><ul><li>Que puede realizarse en un ciclo de reloj </li></ul></ul><ul><li>Unidad de control </li></ul><ul><ul><li>Envia señales a los elementos de la sección de datos </li></ul></ul><ul><ul><li>Establece direcciones de datos de origen y destino y que operaciones se pueden realizar </li></ul></ul><ul><li>Jerarquía de Memoria </li></ul><ul><ul><li>Mantiene el programa a ejecutar con sus datos </li></ul></ul>
  5. 5. Organización de la CPU <ul><li>ISA determina la interfaz hardware/software </li></ul><ul><li>Desempeño determinado por </li></ul><ul><ul><li>Número de instrucciones </li></ul></ul><ul><ul><li>Período del reloj </li></ul></ul><ul><ul><li>Ciclos de reloj por instrucción (CPI) </li></ul></ul><ul><li>Diseño del procesador (datos y control) determina </li></ul><ul><ul><li>Período del reloj </li></ul></ul><ul><ul><li>Ciclos por instrucción </li></ul></ul><ul><li>Primer ejercicio: diseño de un procesador uniciclo </li></ul><ul><ul><li>Un ciclo por instrucción </li></ul></ul><ul><ul><li>Simple de implementar, pero período es innecesariamente grande </li></ul></ul>
  6. 6. Pasos en diseño de CPU <ul><li>Analizar conjunto de instrucciones  requerimientos de la sección de datos (datapath) </li></ul><ul><ul><li>Expresar cada instrucción a nivel de registros (register transfer level: RTL) </li></ul></ul><ul><ul><li>Datapath provee almacenamiento para registros de ISA (y tal vez más) </li></ul></ul><ul><ul><li>Datapath debe soportar cada transferencia entre registros </li></ul></ul><ul><li>Seleccionar componentes de datapath y esquema de reloj </li></ul><ul><li>Organizar datapath para cumplir requerimientos </li></ul><ul><li>Analizar implementación y determinar valores de señales de control para ejecutar cada instrucción </li></ul><ul><li>Diseñar lógica de control </li></ul><ul><ul><li>Instrucción  señales de control a datapath </li></ul></ul>
  7. 7. Formato instrucciones MIPS op target address 0 26 31 6 bits 26 bits op rs rt rd shamt funct 0 6 11 16 21 26 31 6 bits 6 bits 5 bits 5 bits 5 bits 5 bits op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits R-type I-type J-type
  8. 8. Paso 1a: Subset de MIPS <ul><li>ADD and SUB </li></ul><ul><ul><li>add rd, rs, rt </li></ul></ul><ul><li>OR Immediate: </li></ul><ul><ul><li>ori rt, rs, imm16 </li></ul></ul><ul><li>LOAD and STORE Word </li></ul><ul><ul><li>lw rt, rs, imm16 </li></ul></ul><ul><ul><li>sw rt, rs, imm16 </li></ul></ul><ul><li>BRANCH: </li></ul><ul><ul><li>beq rs, rt, imm16 </li></ul></ul>op rs rt rd shamt funct 0 6 11 16 21 26 31 6 bits 6 bits 5 bits 5 bits 5 bits 5 bits op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits
  9. 9. Ejecución de instrucción de máquina <ul><li>CPU ejecuta instrucciones de un programa ciclo </li></ul><ul><li>Instrucciones especifican operaciones sobre operandos y generan resultados </li></ul><ul><li>Datos pueden encontrarse en memoria (RAM, ROM) o en registros internos al procesador </li></ul><ul><li>Instrucciones pueden también modificar el flujo de control (saltos, llamadas a procedimiento) </li></ul><ul><li>Instrucciones pueden crear excepciones </li></ul>
  10. 10. Descripción a nivel de registros (RTL) <ul><li>RTL expresa el significado de la instrucción </li></ul><ul><li>La ejecución de cada instrucción comienza con la búsqueda (fetch) de la instrucción: </li></ul><ul><li>op | rs | rt | rd | shamt | funct = MEM[ PC ] </li></ul><ul><li>op | rs | rt | Imm16 = MEM[ PC ] </li></ul><ul><li>inst Transferencia de registros </li></ul><ul><li>ADDU R[rd] <– R[rs] + R[rt]; PC <– PC + 4 </li></ul><ul><li>SUBU R[rd] <– R[rs] – R[rt]; PC <– PC + 4 </li></ul><ul><li>ORi R[rt] <– R[rs] | zero_ext(Imm16); PC <– PC + 4 </li></ul><ul><li>LOAD R[rt] <– MEM[ R[rs] + sign_ext(Imm16)];PC <– PC + 4 </li></ul><ul><li>STORE MEM[ R[rs] + sign_ext(Imm16) ] <– R[rt];PC <– PC + 4 </li></ul><ul><li>BEQ if ( R[rs] == R[rt] ) then PC <– PC + 4 + sign_ext(Imm16) || 00 else PC <– PC + 4 </li></ul>
  11. 11. Paso 1: Requerimientos del conjunto de instrucciones <ul><li>Memoria </li></ul><ul><ul><li>Instrucciones y datos </li></ul></ul><ul><li>Registros (32 x 32) </li></ul><ul><ul><li>Leer Rs </li></ul></ul><ul><ul><li>Leer Rt </li></ul></ul><ul><ul><li>Escribir Rd o Rt </li></ul></ul><ul><li>PC </li></ul><ul><li>Extensor (signo o ceros) </li></ul><ul><li>Sumar, restar y OR registros o constante extendida </li></ul><ul><li>Sumar 4 o constante extendida a PC </li></ul>
  12. 12. Paso 2: Componentes de la sección de datos (datapath) <ul><li>Elementos combinacionales </li></ul><ul><li>Elementos de almacenamiento </li></ul><ul><ul><li>Esquema de reloj </li></ul></ul>
  13. 13. Elementos combinacionales Sumador (adder) Multiplexor (MUX) 32 32 A B 32 Sum Carry 32 32 A B 32 Result OP 32 A B 32 Y 32 Select Adder MUX ALU CarryIn Unidad aritmético-lógica (ALU) Bit Zero Result
  14. 14. Elementos de almacenamiento <ul><li>Registro </li></ul><ul><ul><li>Similar a flip-flop tipo D, excepto </li></ul></ul><ul><ul><ul><li>Entrada y salida de N bits </li></ul></ul></ul><ul><ul><ul><li>Habilitación de escritura (Write Enable) </li></ul></ul></ul><ul><ul><li>Write Enable: </li></ul></ul><ul><ul><ul><li>Falso (0): Data Out no cambia </li></ul></ul></ul><ul><ul><ul><li>Verdadero (1): Data Out cambia a Data In </li></ul></ul></ul>Clk Data In Write Enable N N Data Out
  15. 15. Elementos de almacenamiento <ul><li>Banco de registros de 32 registros </li></ul><ul><ul><li>Dos buses de salida de 32 bits (busA y busB) </li></ul></ul><ul><ul><li>Un bus de entrada de 32 bits (busW) </li></ul></ul><ul><ul><li>Soportar dos lecturas y una escritura simultánea es caro  pocos registros </li></ul></ul><ul><li>Entradas de selección </li></ul><ul><ul><li>RA: selecciona qué registro leer a busA </li></ul></ul><ul><ul><li>RB: selecciona qué registro leer a busB </li></ul></ul><ul><ul><li>RW: selecciona a qué registro escribir busW cuando WriteEnable es 1 </li></ul></ul><ul><li>Reloj (CLK) </li></ul><ul><ul><li>Sólo importa durante operación de escritura: escribir busW sólo cuando CLK lo indica </li></ul></ul><ul><ul><li>Lectura es combinacional: cuando RA y RB cambian, busA y busB se actualizan después de un “tiempo de acceso” </li></ul></ul>Clk busW Write Enable 32 32 busA 32 busB 5 5 5 RW RA RB 32 32-bit Registers
  16. 16. Elementos de almacenamiento <ul><li>Memoria idealizada </li></ul><ul><ul><li>Un bus de entrada (DataIn) </li></ul></ul><ul><ul><li>Un bus de salida (DataOut) </li></ul></ul><ul><li>Selección de palabra en memoria </li></ul><ul><ul><li>Address indica la dirección de la palabra </li></ul></ul><ul><ul><li>WriteEnable = 1  Address selecciona palabra a escribir en memoria vía DataIn </li></ul></ul><ul><li>Señal de reloj (CLK) </li></ul><ul><ul><li>Válida sólo durante escritura  escribir cuando WriteEnable = 1 en tiempo indicado por el reloj </li></ul></ul><ul><ul><li>Para lectura, memoria es combinacional: DataIn se actualiza cuando Address cambia, después de un “tiempo de acceso” </li></ul></ul>Clk Data In Write Enable 32 32 DataOut Address
  17. 17. Esquema de reloj <ul><li>Todos los elementos de almacenamiento sincronizados por el mismo canto del reloj </li></ul>Clk Don’t Care Setup Hold . . . . . . . . . . . . Setup Hold
  18. 18. Paso 3: Diseñar datapath <ul><li>Cumplir requerimientos de RTL de instrucciones </li></ul><ul><ul><li>Búsqueda de instrucción </li></ul></ul><ul><ul><li>Lectura de operandos </li></ul></ul><ul><ul><li>Ejecución de operación </li></ul></ul><ul><ul><li>Escritura de resultados </li></ul></ul><ul><ul><li>Actualización del PC </li></ul></ul>
  19. 19. Paso 3a: Unidad de búsqueda de instrucción <ul><li>RTL común a todas las instrucciones </li></ul><ul><ul><li>Fetch: MEM[PC] </li></ul></ul><ul><ul><li>Actualizar el contador de programa </li></ul></ul><ul><ul><ul><li>Instrucciones secuenciales: PC  PC + 4 </li></ul></ul></ul><ul><ul><ul><li>Branch y Jump: PC  destino del salto (condicional) </li></ul></ul></ul>32 Instrucción leída PC Clk Address Memoria con Instrucciones Cálculo Próx. Inst.
  20. 20. Unidad de búsqueda de instrucción <ul><li>Si instrucción es la siguiente secuencialmente </li></ul>Address Memoria con Instrucciones PC Sumador 32 4 Instrucción 32
  21. 21. Unidad de búsqueda de instrucción <ul><li>Si siguiente instrucción determinada por branch </li></ul>Address Memoria con Instrucciones PC Sumador 4 Instrucción 32 Sumador Ext Signo Despl 2 izq Imm MUX PCsel
  22. 22. Paso 3b: Suma y Resta <ul><li>R[rd]  R[rs] op R[rd] Ejemplo add rd, rs, rt </li></ul><ul><ul><li>Ra, Rb y Rw vienen de campos de la instrucción: rs, rt y rd </li></ul></ul><ul><ul><li>ALUctr y RegWr: provienen de la unidad de control que decodifica la instrucción ( a partir de campos op y funct de la instrucción) </li></ul></ul>32 Result ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registros Rs Rt Rd ALU 32 Result ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Rs Rt Rd ALU 32 Resultado ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Regist Rs Rt Rd ALU op rs rt rd shamt funct 0 6 11 16 21 26 31 6 bits 6 bits 5 bits 5 bits 5 bits 5 bits
  23. 23. Diagrama de tiempo 32 Result ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32-bit Registers Rs Rt Rd ALU Clk PC Rs, Rt, Rd, Op, Func Clk-to-Q ALUctr Instruction Memory Access Time Old Value New Value RegWr Old Value New Value Delay through Control Logic busA, B Register File Access Time Old Value New Value busW ALU Delay Old Value New Value Old Value New Value New Value Old Value Register Write Occurs Here
  24. 24. Paso 3c: Operaciones lógicas con constantes R[rt]  R[rs] op ZeroExt[imm16] Ejemplo: ori rt, rs, imm16 32 Result ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs ZeroExt Mux Rt Rd RegDst Mux 32 16 imm16 ALUSrc ALU Rt ? 32 Result ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs ZeroExt Mux Rt Rd RegDst Mux Rt Rd RegDst Mux 32 16 imm16 ALUSrc ALU Rt ? op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits immediate 16 15 31 16 bits 16 bits 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  25. 25. Paso 3d: Lectura de memoria (load) R[rt]  MEM[ R[rs] + SignExt[imm16] ] Ejemplo: lw rt, rs, imm16 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Clk Data In WrEn 32 Adr Data Memory 32 ALU MemWr Mux W_Src ?? Rt ? 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Clk Data In WrEn 32 Adr Data Memory 32 ALU MemWr Mux W_Src ?? Rt ? op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits
  26. 26. Paso 3e: Escritura en memoria (store) MEM[ R[rs] + SignExt[imm16] ]  R[rt] Ejemplo: sw rt, rs, imm16 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Clk Data In WrEn 32 Adr Data Memory MemWr ALU 32 Mux W_Src 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Clk Data In WrEn 32 Adr Data Memory MemWr ALU 32 Mux W_Src op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits
  27. 27. Paso 3f: Salto condicional (branch) beq rs, rt, imm6 Mem[PC] Buscar instrucción de memoria Equal  R[rs] == R[rt] ? Calcular condición de salto If (Equal) Calcular dirección de siguiente instrucción PC  PC + 4 + SignExt(imm16) Else PC  PC + 4 op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits
  28. 28. Paso 3f: Salto condicional (branch) beq rs, rt, imm16 Condición generada por datapath 32 imm16 PC Clk 00 Adder Mux Adder 4 nPC_sel Clk busW RegWr 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Equal? Cond PC Ext Inst Address 32 imm16 PC Clk 00 Adder Adder Mux Mux Adder 4 Adder Adder 4 nPC_sel Clk busW RegWr 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Equal? Cond PC Ext Inst Address op rs rt immediate 0 16 21 26 31 6 bits 16 bits 5 bits 5 bits
  29. 29. En suma: <ul><li>Unidad de búsqueda envía campos rs, rd, rt, imm16 de instrucción al datapath </li></ul><ul><li>El resto de las señales de control (subrayadas) generados por la unidad de control </li></ul>32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Mux MemtoReg Clk Data In WrEn 32 Adr Data Memory 32 MemWr ALU Instruction Fetch Unit Clk Zero Instruction<31:0> 0 1 0 1 0 1 <21:25> <16:20> <11:15> <0:15> Imm16 Rd Rs Rt nPC_sel 32 ALUctr Clk busW RegWr 32 32 busA 32 busB 5 5 5 Rw Ra Rb 32 32 - bit Registers Rs Rt Rt Rd RegDst Extender Mux Mux 32 16 imm16 ALUSrc ExtOp Mux MemtoReg Clk Data In WrEn 32 Adr Data Memory 32 MemWr ALU Instruction Fetch Unit Clk Zero Instruction<31:0> 0 1 0 1 0 1 <21:25> <16:20> <11:15> <0:15> Imm16 Rd Rs Rt nPC_sel
  30. 30. Señales de control nPC_MUX_sel 0  PC  PC + 4 1  PC  PC + 4 + SignExt(imm16) || 00
  31. 31. Señales de Control ExtOp : “zero”, “sign” MemWr : 1  Escribir en memoria ALUSrc : 0  regB; 1  constante MemToReg : 0  ALU; 1  Mem ALUctr : “add”, “sub”, “or” RegDst : 0  “rt”; 1  “rd” RegWr : 1  Escribir en registro
  32. 32. Paso 4: Valores de señales de control
  33. 33. RTL: Add add rd, rs, rt Mem[PC] Búsqueda de instrucción R[rd]  R[rs] + R[rt] Ejecución de instrucción PC  PC + 4 Actualización de PC op rs rt rd shamt funct 0 6 11 16 21 26 31 6 bits 6 bits 5 bits 5 bits 5 bits 5 bits
  34. 34. Unidad de Fetch <ul><li>Igual para todas las instrucciones </li></ul>
  35. 35. Datapath uniciclo durante “add” R[rd]  R[rs] + R[rt] op rs rt rd shamt funct 0 6 11 16 21 26 31
  36. 36. Unidad de fetch al final de “add” <ul><li>Igual para todas las instrucciones excepto branch, jump, etc. </li></ul>
  37. 37. Datapath uniciclo durante “ori” R[rt]  R[rs] or ZeroExt(imm16) op rs rt immediate 0 16 21 26 31
  38. 38. Datapath uniciclo durante “lw” R[rt]  Dmem[R[rs]+SignExt(imm16)] op rs rt immediate 0 16 21 26 31
  39. 39. Datapath uniciclo durante “sw” Dmem[R[rs]+SignExt(imm16)]  R[rt] op rs rt immediate 0 16 21 26 31
  40. 40. Datapath uniciclo durante “ beq” If (R[rs] – R[rt] == 0) then Zero  1 Else Zero  0 op rs rt immediate 0 16 21 26 31
  41. 41. Unidad de fetch al final de “beq” If (Zero == 1) then PC  PC + 4 + SignExt[imm16]*4 Else PC  PC + 4 op rs rt immediate 0 16 21 26 31
  42. 42. Resumen de señales de control Proceso de decodificación de instrucciones consiste en generar estas señales inst Register Transfer ADD R[rd] < – R[rs ] + R[rt ]; PC < – PC + 4 ALUsrc = RegB , ALUctr = “ add ” , RegDst = rd, RegWr , nPC_sel = “ +4 ” SUB R[rd] < – R[rs ] – R[rt ]; PC < – PC + 4 ALUsrc = RegB , ALUctr = “ sub ” , RegDst = rd, RegWr , nPC_sel = “ +4 ” ORi R[rt ] < – R[rs ] + zero_ext(Imm16); PC < – PC + 4 ALUsrc = Im , Extop = “ Z ” , ALUctr = “ or ” , RegDst = rt , RegWr , nPC_sel = “ +4 ” LOAD R[rt ] < – MEM[ R[rs ] + sign_ext(Imm16)]; PC < – PC + 4 ALUsrc = Im , Extop = “ Sn ” , ALUctr = “ add ” , MemtoReg , RegDst = rt , RegWr , nPC_sel = “ +4 ” STORE MEM[ R[rs ] + sign_ext(Imm16)] < – R[rs ]; PC < – PC + 4 ALUsrc = Im , Extop = “ Sn ” , ALUctr = “ add ” , MemWr , nPC_sel = “ +4 ” BEQ if ( R[rs ] == R[rt ] ) then PC < – PC + sign_ext(Imm16)] || 00 else PC < – PC + 4 nPC_sel = “ Br ” , ALUctr = “ sub ” Instrucción Transferencia de registros ADD R[rd] < – R[rs ] + R[rt ]; PC < – PC + 4 ALUsrc = RegB , ALUctr = “ add ” , RegDst = rd, RegWr , nPC_sel = “ +4 ” SUB R[rd] < – R[rs ] – R[rt ]; PC < – PC + 4 ALUsrc = RegB , ALUctr = “ sub ” , RegDst = rd, RegWr , nPC_sel = “ +4 ” ORi R[rt ] < – R[rs ] + zero_ext(Imm16); PC < – PC + 4 ALUsrc = Im , Extop = “ Z ” , ALUctr = “ or ” , RegDst = rt , RegWr , nPC_sel = “ +4 ” LOAD R[rt ] < – MEM[ R[rs ] + sign_ext(Imm16)]; PC < – PC + 4 ALUsrc = Im , Extop = “ Sn ” , ALUctr = “ add ” , MemtoReg , RegDst = rt , RegWr , nPC_sel = “ +4 ” STORE MEM[ R[rs ] + sign_ext(Imm16)] < – R[rs ]; PC < – PC + 4 ALUsrc = Im , Extop = “ Sn ” , ALUctr = “ add ” , MemWr , nPC_sel = “ +4 ” BEQ if ( R[rs ] == R[rt ] ) then PC < – PC + 4 + sign_ext(Imm16)] || 00 else PC < – PC + 4 nPC_sel = “ Br ” , ALUctr = “ sub ”
  43. 43. Paso 5: Diseñar lógica de control ALUctr RegDst ALUSrc ExtOp MemtoReg MemWr Equal Instrucción<31:0> <21:25> <16:20> <11:15> <0:15> Imm16 Rd Rs Rt nPC_sel Adr Memoria Instruccion SECCIÓN DE DATOS Decoder Op <21:25> Fun RegWr
  44. 44. Resumen de señales de control add sub ori lw sw beq RegDst ALUSrc MemtoReg RegWrite MemWrite nPCsel ExtOp ALUctr<2:0> 1 0 0 1 0 0 x Add 1 0 0 1 0 0 x Subtract 0 1 0 1 0 0 0 Or 0 1 1 1 0 0 1 Add x 1 x 0 1 0 1 Add x 0 x 0 0 1 x Subtract func op 00 0000 00 0000 00 1101 10 0011 10 1011 00 0100 Appendix A 10 0000 Ver 10 0010 No interesa op target address op rs rt rd shamt funct 0 6 11 16 21 26 31 op rs rt immediate R-type I-type J-type add, sub ori, lw, sw, beq jump
  45. 45. Decodificación local Unidad de control decodifica parte de la instrucción y ALU hace su propia decodificación local R-type ori lw sw beq RegDst ALUSrc MemtoReg RegWrite MemWrite Branch ExtOp ALUop<N:0> 1 0 0 1 0 0 x “ R-type” 0 1 0 1 0 0 0 Or 0 1 1 1 0 0 1 Add x 1 x 0 1 0 1 Add x 0 x 0 0 1 x Subtract op 00 0000 00 1101 10 0011 10 1011 00 0100
  46. 46. Codificación para ALUop ALUop: Instrucciones tipo ‘R’; instrucciones tipo ‘I’ (or, add, subtract)  2 bits R-type ori lw sw beq ALUop (Symbolic) “ R-type” Or Add Add Subtract ALUop<2:0> 1 00 0 10 0 00 0 00 0 01
  47. 47. Decodificación de campo ‘func’ op rs rt rd shamt funct 0 6 11 16 21 26 31 R-type R-type ori lw sw beq ALUop (Symbolic) “ R-type” Or Add Add Subtract ALUop<2:0> 1 00 0 10 0 00 0 00 0 01 funct<5:0> Instruction Operation 10 0000 10 0010 10 0100 10 0101 10 1010 add subtract and or set-on-less-than ALUctr<2:0> ALU Operation 000 001 010 110 111 And Or Add Subtract Set-on-less-than ALUctr ALU
  48. 48. Tabla de verdad para ALUctr R-type ori lw sw beq ALUop (Symbolic) “ R-type” Or Add Add Subtract ALUop<2:0> 1 00 0 10 0 00 0 00 0 01 ALUop func bit<2> bit<1> bit<0> bit<2> bit<1> bit<0> bit<3> 0 0 0 x x x x ALUctr ALU Operation Add 0 1 0 bit<2> bit<1> bit<0> 0 x 1 x x x x Subtract 1 1 0 0 1 x x x x x Or 0 0 1 1 x x 0 0 0 0 Add 0 1 0 1 x x 0 0 1 0 Subtract 1 1 0 1 x x 0 1 0 0 And 0 0 0 1 x x 0 1 0 1 Or 0 0 1 1 x x 1 0 1 0 Set on < 1 1 1 funct<3:0> Instruction Op. 0000 0010 0100 0101 1010 add subtract and or set-on-less-than
  49. 49. Desventajas de procesador uniclo <ul><li>CPI =1 pero, ¿Qué tan rápido es el reloj? </li></ul><ul><ul><li>Tan rápido como la instrucción más lenta </li></ul></ul><ul><ul><li>Memorias reales son mucho más lentas que el procesador </li></ul></ul><ul><ul><li>Instrucciones de punto flotante toman mucho más tiempo </li></ul></ul><ul><li>Cada unidad funcional está ocupada por toda la instrucción </li></ul><ul><ul><li>Necesitamos memoria separada de programa y de datos </li></ul></ul><ul><ul><li>No podemos compartir ALU para calcular siguiente PC </li></ul></ul>PC Inst Memory mux ALU Data Mem mux PC Reg File Inst Memory mux ALU mux PC Inst Memory mux ALU Data Mem PC Inst Memory cmp mux Reg File Reg File Reg File Arithmetic & Logical Load Store Branch Critical Path setup setup PC Inst Memory mux ALU Data Mem mux PC Reg File Inst Memory mux ALU mux PC Inst Memory mux ALU Data Mem PC Inst Memory cmp mux Reg File Reg File Reg File Arithmetic & Logical Load Store Branch Camino Crítico setup setup
  50. 50. Peor caso: instrucción load Critical Path (Load Operation) = PC ’ s Clk - to - Q + Instruction Memory ’ s Access Time + Register File ’ s Access Time + ALU to Perform a 32 - bit Add + Data Memory Access Time + Setup Time for Register File Write + Clock Skew Clk 5 Rw Ra Rb 32 32 - bit Registers Rd ALU Clk Data In Data Address Ideal Data Memory Instruction Instruction Address Ideal Instruction Memory Clk PC 5 Rs 5 Rt 16 Imm 32 32 32 32 A B Next Address Camino Crítico (Instrucción Load) = Tiempo acceso PC + Tiempo de acceso a la memoria + Tiempo de acceso a Banco Reg + ’ ALU para realizar suma de 32 bits+ - Tiempo acceso memoria de datos + Tiempo de seteo escritura en BReg + Clock Skew Clk 5 Rw Ra Rb 32 32 - bit Registros Rd ALU ALU Clk Data In Dir. Data Ideal Memoria Datos Instrucción Dirección Instrucción Ideal Memoria Instrucción Clk PC 5 Rs 5 Rt 16 Imm 32 32 32 32 A B Próx. Dir.
  51. 51. Ejemplo <ul><li>Asumir que los tiempos de operación de las unidades funcionales son: </li></ul><ul><ul><li>Memoria: 2ns </li></ul></ul><ul><ul><li>ALU y sumadores: 2ns </li></ul></ul><ul><ul><li>Banco de registros: 1ns </li></ul></ul><ul><li>Los retardos de multiplexores, unidad de extensión de signo, registros individuales y alambres son despreciables. Comparar el desempeño de las siguientes implementaciones: </li></ul><ul><ul><li>Máquina uniciclo de período de reloj fijo. </li></ul></ul><ul><ul><li>Máquina uniciclo ficticia donde el período de reloj varía para ajustarse al tiempo exacto de ejecución de cada instrucción. </li></ul></ul><ul><li>Asumir que la frecuencia dinámica de ejecución de instrucciones es: 24% loads, 12% stores, 44% instrucciones ALU, 18% saltos condicionales (branches) y 2% saltos absolutos (jumps). </li></ul>
  52. 52. Solución Banco registros Fetch Jump Memoria ALU Banco registros Fetch Store ALU Banco registros Fetch Branch Memoria ALU Banco registros Fetch Load Banco registros ALU Banco registros Fetch ALU Uso de unidades funcionales Tipo de instrucción
  53. 53. Solución Período de reloj ciclo fijo: 8ns Período de reloj ciclo variable: 6*0.44 + 8*0.24 + 7*0.12 + 5*0.18 + 2*0.02 = 6.3ns Aceleración = 1.27 2 2 Memoria datos 2 2 2 2 ALU 1 1 1 1 Lectura banco registros 2 2 2 2 2 Memoria de instrucción Jump Branch Store Load ALU Tipo de instrucción 2ns 7ns 8ns 6ns Total 1 1 Escritura banco registros
  54. 54. Ejemplo Suponer una unidad de punto flotante que suma o resta en 8ns y multiplica o divide en 16ns. Todas las otras unidades funcionales tienen los retardos del ejemplo anterior. ¿Qué tanto más rápida es la implementación de reloj de período variable versus la de reloj de período fijo? Asumir que las frecuencias de ejecución son: 31% loads, 21% stores, ALU 27%, saltos condicionales 5%, saltos absolutos 2%, suma/resta de punto flotante 7%, y multiplicación/división de punto flotante 7%. Tiempo de ejecución suma/resta de punto flotante = 2 + 1 + 8 + 1 = 12ns Tiempo de ejecución multiplicación/división de punto flotante = 2 + 1 + 16 + 1 = 20ns Ciclo de reloj período fijo = 20ns Ciclo de reloj promedio período variable = 8*0.31 + 7*0.21 + 6*0.27 + 5*0.05 + 2*0.02+ 12*0.07 + 20*0.07 = 8.1ns Aceleración = 20/8.1 = 2.47
  55. 55. Mejorando el desempeño <ul><li>Idea: procesador multiciclo </li></ul><ul><ul><li>Ejecutar sólo parte de una instrucción en cada período de reloj </li></ul></ul><ul><ul><li>Reloj es más rápido </li></ul></ul><ul><ul><li>Instrucciones más sencillas toman menos ciclos en ejecutar que instrucciones más complejas </li></ul></ul>

×