Cheatsheet Camino de Datos


💡
Identificar ciclo (IF, ID, EX, MEM, WB)
IF
  • Instruction register → EscrIR = 1
ID
  • ALU → PC + inm << 2
EX
  • No interviene la memoria
  • ALU con A como primer operando
MEM
  • IoD = 1
  • Cuando interviene la memoria LeerMem || EscrMem
WB
  • EscrReg = 1
💡
Identificar valor de ALUOp
Suma (00)
ALUOp puede tomar este valor en los siguientes casos:
  • Ciclo IF, para calcular PC + 4 comprobar que la ALU recive dichos operandos
  • Ciclo ID, para calcular PC + inm << 2 para calcular el salto condicional
  • Ciclo EX, ALUOp toma este valor para las instrucciones lw y sw . Debemos buscar si los operandos de la alu son A y ext(inm) calcular el offset de la dirección (ejm: 4($s0))
Resta (01)
ALUOp toma este valor únicamente cuando se ejecuta la instrucción beq en su ciclo EX para restar A menos B
Operación aritmético-lógica (10)
ALUOp solo toma este valor cuando se va a ejecutar una instrucción aritmético-lógica en su ciclo EX para operar A y B
💡
Identificar instrucción
Lo primero es identificar el formato de instrucción y el ciclo
Tipo J (Ciclos posibles: EX)
Es facil, solo miramos si los bits 25-16 se concatenan al salir del Instruction register
  • j
Tipo I (Ciclos posibles: EX, MEM o WB)
Miramos si se hace uso de los bits 15-0 como un unico valor en algúna unidad del camino de datos o si se accede a memoria o si se realiza el cálculo del desplazamiento A + ext(inm)
  • lw (Ciclo MEM) → La señal LeerMem = 1
    • Almacenar resultado (lw) (Ciclo WB) → Las señales EscrReg = 1 y MemAReg = 1
  • sw (Ciclo MEM) → La señal EscrMem = 1
  • Salto incondicional (Ciclo EX) beq → La señal FuentePC = 00
Tipo R (Ciclos posibles: EX y WB)
Miramos si los operandos A y Be son usados activamente
  • Aritmético-lógicas (Ciclo EX) → Los operandos de la ALU son A y B
  • Aritmético-lógicas (Ciclo WB) → La señal EscrReg = 1 y MemAReg = 0