Tema 3 - Camino de Datos Multiciclo

MIPS
MIPS

Unidades de Control


📖
En el circuito tenemos dos unidades capaces de generar una señal seún unos datos de entrada

Unidad de Control (principal)

Unidad de control (general)
Esta unidad recibe el código de operación de la instrucción actual y se encarga de generar las señales que serán recibidas por los multiplexores del circuito y por el resto de unidades.
Señal (bits)
Acción cuando está a 0
Acción cuando está a 1
RegDest (1)
El registro de escritura del banco, sale de los bits [20-16]
El registro de escritura del banco, sale de los bits [15-11]
EscrReg (1)
Escritura en el banco desactivada
Escritura en el banco activada
SelectALU_A (1)
El 1º operador de la ALU es PC
El 1º operador de la ALU es A
LeerMem (1)
Lectura de la direccíon de memoria desactivada
Lectura de la direccíon de memoria activada
EscrMem (1)
Escritura de la dirección de memoria desactivada
Escritura de la direccíon de memoria activada
IoD (1)
La dirección seleccionada en la unidad de memoria es PC
La dirección seleccionada en la unidad de memoria es SalidaALU
EscrIR (1)
La escritura del registro de instrucción está desactivada
La escritura del registro de instrucción está activada
EscrPC (1)
La escritura de PC está desactivada
La escritura de PC está activada
EscrPC_cond (1)
La escritura de PC cuando se actica cero está desactivada
La escritura de PC cuando se actica cero está activada
Señal
00
01
10
11
SelectALU_B (2)
El 2º operador de la ALU es B
El 2º operador de la ALU es 44
El 2º operador de la ALU es el inmediato
El 2º operador de la ALU es el (inmediato ×\scriptsize\times 4)
FuentePC (2)
Manda al input de PC el resultado de la ALU
Manda al input de PC el valor de la SalidaALU
Lleva la dirección calculada para las instrucciones j
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ALUOp (2)
Manda a la unidad de control de la ALU → 00 (suma)
Manda a la unidad de control de la ALU → 01 (resta)
Manda a la unidad de control de la ALU → 10 (depende del campo func)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Dicha señal será recivida por la unidad de control de la ALU

Unidad de Control de la ALU

Unidad de control de la ALU
Esta unidad recibe la señal ALUOp y en base a su valor generará la señal correspondiente con la operación que debe ejecutar la ALU
Según el valor de ALUOp , la unidad generará la señal correspondiente a dicha operación en la ALU
Instrucción
Señal ALUOp Generada
lw or sw
00
beq
01
Tipo R
10
10 → Dependerá del campo func de la instrución
notion image
 
ALU (input)
Operación realizada por la ALU
0000
and
0001
or
0010
add
0110
sub
0111
slt
1100
nor

Ciclos del Camido de Datos Multiciclo


notion image
 

 
notion image
1️⃣
Ciclo Instruction Fetch (IF)
Este ciclo es común para todas las instrucciones
Se obtiene de memoria la instrucción que vamos a ejecutar
  1. Se lee la instrucción que vamos a ejecutar. Para ello leemos la dirección de dicha instrucción almacenada en el registro PC y a continuación se lee dicha instrucción de memoria
  1. Se almacenan los parámetros de dicha instrucción en el Registro de Instrucción (IR)
Se calcula la dirección de la siguiente instrucción
Se apovecha este ciclo para calcular la dirección de la siguiente instrucción dado que no se hace uso de la ALU
  1. La ALU sumará el valor actual de PC + 4
    1. La ALU recibe como operador AA el valor actual de PC , para ello el MUX conectado a dicha entrada debe estar seleccionando el input 0
    2. La ALU recibe como operador BB el un 44, para ello el MUX conectado a dicha entrada debe estar seleccionando el input 1
  1. El resultado es llevado hacia la entrada de PC para actualizar su valor en el siguiente flanco de reloj

🚦 Señales de control
  • EscrPC = 1
  • LeerMem = 1
  • EscrReg = 1
  • SelectALU_B = 01
  • EscrIR = 1
  • ALUOp = 00ALU Control = 00 (suma)
2️⃣
Ciclo Instruction Decode (ID)
Este ciclo es común para todas las instrucciones
Los bits de la instrucción se dirigen a las unidades correspondientes
  • Los bits [31-26] (Cod. Op.) se llevan a la Unidad de Control para generar las señales correspondientes
  • Los bits [25-21] se dirigen al banco de registros para selecinar el primer registro
  • Los bits [20-16] se dirigen al banco de registros para selecinar el segundo registro
  • Los bits [15-0] se dirigen se llevan a la ALU, aunque primero se extiende de 16 a 32 bits y luego se desplaza 2 bits a la izquierda
Se leen los registros de los bits [25-21] y [20-16]
Este paso se hace con el fin de ahorrar tiempo para las operaciones aritmético-lógicas, aunque para otras el valor leido de estos registros no nos servirá
  1. Estos registros se leen del banco de registros
  1. El valor se almacena en unos registros auxiliares A y B que se encuentran a la salida del banco de registros
Se calcula la dirección relativa a partir de los bits [15-0]
Este calculo se realiza para ahorrar tiempo en caso de que la operación sea alguna de salto relativo (branch)
Como hemos dicho antes:
  1. Los bits [15-0] primero se extienden de 16 a 32 bits
  1. Luego se desplaza 2 bits a la izquierda (×\scriptsize\times4)
  1. Se opera en la ALU el valor de la dirección actual junto con el valor resultante de los bits [15-0] tras extenderlos y hacer el desplazamiento
  1. El resultado de la ALU se almacena en el registro SalidaALU

🚦 Señales de control
  • SelectALU_A = 0
  • SelectALU_B = 11
  • ALUOp = 00ALU Control = 00 (suma)

Instrucciones Aritmético-Lógicas: 3️⃣(EX), 4️⃣(WB)

Los siguientes ciclos son propios de las instrucciónes aritmético-lógicas
3️⃣
Ciclo Execution (EX)
Se realiza la operación correspondiente con los operadores en A y B
  1. Se introducen en la ALU los valores almacenados en los registros A y B
  1. La Unidad de Control de la ALU determina la operación que debe realizar la ALU en base al valor de los bits [6-0] de la instrucción
  1. El resultado de la operación se almacena en el registro SalidaALU

🚦 Señales de control
  • SelectALU_A = 1
  • SelectALU_B = 00
  • ALUOp = 10ALU Control = (depende del campo func)
4️⃣
Ciclo Write Back (WB)
Se almacena el resultado de la operación en una registro
  1. Se dirigirá el valor de SalidaALU hacia la entrada de escritura del banco de registros
  1. El registro en el que se escribirá viene determinado por los bits [15-11]

🚦 Señales de control
  • EscrReg = 1
  • RegDest = 1
  • MemToReg = 0

Instrucciones lw y sw : 3️⃣(EX), 4️⃣(MEM), [5️⃣(WB)]

3️⃣
Ciclo Execution (EX)
Se realiza la calcula la dirección con los operadores en A y el inmediato
  1. Se introducen en la ALU los valores almacenados en el registro A y el valor del inmediato de la instrucción
  1. La Unidad de Control de la ALU determina que la ALU debe realizar la operación suma
  1. El resultado de la operación se almacena en el registro SalidaALU

🚦 Señales de control
  • SelectALU_A = 1
  • SelectALU_B = 10
  • ALUOp = 00ALU Control = 0010 (suma)
4️⃣
Ciclo Memory (MEM)
Se accede al la dirección de memoria almacenada en SalidaALU
  1. Se accede a la dirección de memora que llega desde SalidaALU a través del multiplexor controlado por la señal IoD
  1. Si la instrucción es sw (guardar de registro a memoria)
    1. Se escribe el valor del registro B en la dirección de memoria
  1. Si la instrucción es lw (guardar de memoria a registro)
    1. Se guarda el valor leido de memoria en RegMem

🚦 Señales de control
  • IoD = 1
  • LeerMem = 0 (sw) | 1 (lw)
  • EscrMem = 0 (lw) | 1 (sw)
5️⃣
Ciclo Write Back (WB)
Este ciclo solo se ejeuta para la instrucción lw
Se almacena el valor leido desde RegMem en un registro
 

🚦 Señales de control
  • EscrReg = 1
  • MemToReg = 1

Instrucción beq : 3️⃣(EX)

3️⃣
Ciclo Execution (EX)
Camino de la dirección relativa hasta PC
Durante el segundo ciclo (ID) (el anteriror) dado que el camino de datos tiene unas señales por defecto hasta que decodifica la instrucción y manda las señales correspondientes. En el caso de la instrucción beq , estas señales realizan durante el ciclo ID la suma de PC + inmediato.
 
A finales de este ciclo, el valor de la dirección relativa a PC está almacenado en el registro SalidaALU
 
Se realiza la resta con los operadores en A y B
  1. Se introducen en la ALU los valores almacenados en los registros A y B
  1. La Unidad de Control de la ALU selecciona la operación resta
    1. Si el resultado es cero (los valores eran iguales), la señal cero se activa
    2. Si el resultado no era cero, la seña cero no se activa
Camino de la señal cero hasta PC
  1. La señal cero llega hasta una puerta AND donde cruzará dado que la señal EscrPC_cond estará activada
  1. Posteriormente cruzará por una OR, cuya otra entrada EscrPC estará desactivada

🚦 Señales de control
  • SelectALU_A = 1
  • SelectALU_B = 00
  • FuentePC = 01
  • EscrPC_cond = 1
  • ALUOp = 01ALU Control = 0110 (resta)

Instrucción j : 3️⃣(EX)

3️⃣
Ciclo Execution (EX)
Construcción de la dirección de salto
  1. Se toman los bits del [25-21] (todos menos los del cod. op.)
  1. Se desplazan dos positiones (pasa de 26 a 28 bits)
  1. Se completan los 4 bits faltantes [31-26] con los 4 bits más significativos del actual valor de PC
 
Camino de la dirección hasta PC
  1. La dirección resultante llega a un mutiplexor que recive la señal FuentePC para seleccionar la entrada 10
  1. La dirección llega al input de PC, que escribe el valor al finalizar este ciclo

🚦 Señales de control
  • FuentePC = 10
  • EscrPC = 1