Tema 3 - Camino de Datos Multiciclo
MIPSUnidades 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 | El 2º operador de la ALU es el inmediato | El 2º operador de la ALU es el (inmediato 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 ALUEsta unidad recibe la señalALUOp
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 ALUInstrucción | Señal ALUOp Generada |
lw or sw | 00 |
beq | 01 |
Tipo R | 10 |
10
→ Dependerá del campo func de la instrución
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
Ciclo Instruction Fetch (IF)
Este ciclo es común para todas las instrucciones
Se obtiene de memoria la instrucción que vamos a ejecutar
- 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
- 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
- La ALU sumará el valor actual de
PC
+4
- La ALU recibe como operador el valor actual de
PC
, para ello el MUX conectado a dicha entrada debe estar seleccionando el input0
- La ALU recibe como operador el un , para ello el MUX conectado a dicha entrada debe estar seleccionando el input
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
=00
→ ALU Control =00
(suma)
Ciclo Instruction Decode (ID)Se leen los registros de los bits
Se calcula la dirección relativa a partir de los bits
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á
- Estos registros se leen del banco de registros
- El valor se almacena en unos registros auxiliares
A
yB
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:
- Los bits
[15-0]
primero se extienden de 16 a 32 bits
- Luego se desplaza 2 bits a la izquierda (4)
- 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
- El resultado de la ALU se almacena en el registro
SalidaALU
🚦 Señales de control
SelectALU_A
=0
SelectALU_B
=11
ALUOp
=00
→ ALU 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
Ciclo Execution (EX)Se realiza la operación correspondiente con los operadores en
Se realiza la operación correspondiente con los operadores en A
y B
- Se introducen en la ALU los valores almacenados en los registros
A
yB
- 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
- El resultado de la operación se almacena en el registro
SalidaALU
🚦 Señales de control
SelectALU_A
=1
SelectALU_B
=00
ALUOp
=10
→ ALU Control = (depende del campo func)
Ciclo Write Back (WB)
Se almacena el resultado de la operación en una registro
- Se dirigirá el valor de
SalidaALU
hacia la entrada de escritura del banco de registros
- 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)]
lw
y sw
: 3️⃣(EX), 4️⃣(MEM), [5️⃣(WB)]Ciclo Execution (EX)Se realiza la calcula la dirección con los operadores en
Se realiza la calcula la dirección con los operadores en A
y el inmediato
- Se introducen en la ALU los valores almacenados en el registro
A
y el valor del inmediato de la instrucción
- La Unidad de Control de la ALU determina que la ALU debe realizar la operación suma
- El resultado de la operación se almacena en el registro
SalidaALU
🚦 Señales de control
SelectALU_A
=1
SelectALU_B
=10
ALUOp
=00
→ ALU Control =0010
(suma)
Ciclo Memory (MEM)Se accede al la dirección de memoria almacenada en
Se accede al la dirección de memoria almacenada en SalidaALU
- Se accede a la dirección de memora que llega desde
SalidaALU
a través del multiplexor controlado por la señalIoD
- Si la instrucción es
sw
(guardar de registro a memoria) - Se escribe el valor del registro
B
en la dirección de memoria
- Si la instrucción es
lw
(guardar de memoria a registro) - 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)
Ciclo Write Back (WB)Se almacena el valor leido desde
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)
beq
: 3️⃣(EX)Ciclo Execution (EX)Camino de la dirección relativa hasta
Se realiza la resta con los operadores en
Camino de la señal
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ónbeq
, estas señales realizan durante el ciclo ID la suma dePC
+ inmediato.A finales de este ciclo, el valor de la dirección relativa a PC está almacenado en el registroSalidaALU
Se realiza la resta con los operadores en A
y B
- Se introducen en la ALU los valores almacenados en los registros
A
yB
- La Unidad de Control de la ALU selecciona la operación resta
- Si el resultado es cero (los valores eran iguales), la señal
cero
se activa - Si el resultado no era cero, la seña
cero
no se activa
Camino de la señal cero
hasta PC
- La señal
cero
llega hasta una puerta AND donde cruzará dado que la señalEscrPC_cond
estará activada
- 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
=01
→ ALU Control =0110
(resta)
Instrucción j
: 3️⃣(EX)
j
: 3️⃣(EX)Ciclo Execution (EX) Camino de la dirección hasta
Construcción de la dirección de salto
- Se toman los bits del
[25-21]
(todos menos los del cod. op.)
- Se desplazan dos positiones (pasa de 26 a 28 bits)
- Se completan los 4 bits faltantes
[31-26]
con los 4 bits más significativos del actual valor dePC
Camino de la dirección hasta PC
- La dirección resultante llega a un mutiplexor que recive la señal
FuentePC
para seleccionar la entrada10
- La dirección llega al input de PC, que escribe el valor al finalizar este ciclo
🚦 Señales de control
FuentePC
=10
EscrPC
=1