Tema 4 Tecnicas de Implementacion de La CPU
Tema 4 Tecnicas de Implementacion de La CPU
Tema 4 Tecnicas de Implementacion de La CPU
10/30/2012
Diseo del procesador Control se encarga de: 1. Obtener instrucciones memoria 2. Generar seales que controlen el flujo de informacin entre los componentes y controlar las operaciones que realizan 3. Controlar secuenciamiento de instrucciones
Introduccin
Memoria
Fetch
Exec Decode Ruta de datos necesita: componentes unidades funcionales y almacenamiento (registros) para ejecutar instrucciones conexiones componentes conectados entre s de forma que las instrucciones puedan completarse y que los datos puedan ser cargados desde o almacenados en la memoria
Metodologas de diseo
La unidad de control es un circuito secuencial cuyas salidas corresponden a las seales de control (diseo fijo)
Difcil de modificar Difcil de ampliar el diseo
LOGICA DE CONTROL
DATA PATH
Seales de Control
PLA
Cod. Oper.
Cod. Oper.
Estado
10/30/2012
Metodologas de diseo
El control es realizado por un microprograma en el que cada una de las microinstrucciones contiene :
Las seales de control que van a los elementos del camino de datos Campos que determinan flujo de control del microprograma
Data Path
MEMORIA ROM (MICROCDIGO) Bits de control
Contador de Microprograma
+1
SECUENCIADOR
Cod Op.
Categoras de instrucciones en MIPS R3000 Registros Operaciones (aritmticas, lgicas) Carga (load) y almacenamiento (store) Jump y Branch Punto flotante (realizadas por coprocesador) Gestin de memoria Especiales Tres formatos de instruccin (todos de 32 bits) PC HI LO R0 - R31
rs rs
rt rt
rd
shamt immediato
funct
direccin de salto
10/30/2012
add, ...
op
rs
Registro del 1 operando fuente
rt
rd
shamt
funct
lw, sw
op
rs
rt
offset
sw $t0, desplaz($t1)
Direccin de memoria Registro del Registro del Campo desplazamiento = rs + desp operando fuente operando destino de memoria
3126 2521 2016 150
beq
op
rs
rt
offset
rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp jal etiqueta
jal
op
direccin de salto
Direccin destino del salto
2. Operando: Base
op rs rt offset
Memoria
operando
Registro base
3. Operando: Inmediato
op rs rt operando
I I Memoria
branch instruccin destino
4. Instruccin: Relativo al PC
op rs rt offset
5. Instruccin: Pseudo-directo
op direccin de salto Contador programa (PC)
J
||
Memoria
jump instruccin destino
10/30/2012
Instruccin: Relativo al PC
op rs rt offset
Memoria
branch instruccin destino
Contador programa (PC) El contador de programa se actualiza durante el ciclo de bsqueda (PC+4)
El offset (16 bits) se desplaza dos bits a la izquierda (4) para direccionar a nivel de palabra, no a nivel de byte (aumentando rango efectivo direccionamiento) Es necesario extender el signo (hasta 32 bits) para sumar dicho valor con el PC actualizado
16
direccin destino
32
PC
32
Salto pseudo-directo
Instruccin: Pseudo-directo
op direccin de salto Contador programa (PC)
La direccin de salto (26 bits) se desplaza dos bits a la izquierda (4) para direccionar a nivel de palabra, no a nivel de byte (aumentando rango direccionamiento) Dicho desplazamiento da lugar a una direccin de 28 bits que se concatena a los 4 bits ms significativos del PC, que seguidamente se actualiza con el nuevo valor
26
J
||
Memoria
jump instruccin destino
direccin salto
00 32
PC
32
10/30/2012
Formato:
op
rs
rt
offset
lw rt, offset(base) siendo base rs Extiende el signo de offset y lo suma al contenido del registro rs para formar una direccin. Carga el contenido de la palabra direccionada en el registro rt. sw rt, offset(base) siendo base rs Extiende el signo de offset y lo suma al contenido del registro rs para formar una direccin. Almacena el contenido del registro rt (fuente) en la direccin de la palabra direccionada.
lw $t0, 32($t1)
35 diez R8 R9
100011
01001
01000
0000000000100000
sw $t0, 0($t1)
43 diez
101011
01001
01000
0000000000000000
Formato:
op
rs
rt
rd
funct
add rd, rs, rt Suma el contenido de los registros rs y rt y lo guarda en el registro rd sub rd, rs, rt Resta el contenido del registro rt del rs y lo guarda en el registro rd and rd, rs, rt Operacin lgica AND bit a bit del contenido de los registros rs y rt guarda el resultado en el registro rd
3126 2521 2016 1511 106 50
000000
10010
10011
01000
00000
100000
R
32 diez
000000 000000
10010 10010
10011 10011
01000 01000
00000 00000
100010 100100
R R
34 diez 36 diez
10/30/2012
Instruccin: add immediate (sumar inmediato) or immediate (or inmediato) and immediate (and inmediato)
Formato:
op
rs
rt
operando
addi rt, rs, operando Suma el inmediato con signo extendido al contenido del registro rs y coloca el resultado en el registro rt ori rt, rs, operando Hace la operacin lgica OR del inmediato con cero extendido y el contenido del registro rs y coloca el resultado en el registro rt andi rt, rs, operando Hace la operacin lgica AND del inmediato con cero extendido y el contenido del registro rs y coloca el resultado en el registro rt
3126 2521 2016 150
001000
001001 001000
0000000000100000
I I I
0000000000000100 0000000000100100
Formato:
op
rs
rt
offset
beq rs, rt, offset Compara el contenido de los registros rs y rt. Si son iguales la siguiente instruccin se obtiene de la direccin (PC+ 4) + SignoExtendido(offset) << 2
branch if not equal bne rs, rt, offset Compara el contenido de los registros rs y rt. Si son distintos la siguiente (saltar si distinto) instruccin se obtiene de la direccin (PC+ 4) + SignoExtendido(offset) << 2
000100
01000
01001
0000000000001000
000101
01000
01001
0000000000000100
10/30/2012
Instruccin:
Formatos:
J
funct R
j direccin Salta a la direccin: PC[31-28] || direccin << 2 jal direccin Salta a la direccin: PC[31-28] || direccin << 2 y guarda la direccin de retorno en el registro R31 (denominado ra) jr rs Salta a la direccin contenida en el registro rs
3126 25 0
000010
00000100000000000000000001
J J R
8 diez
jal target
0x00400010 hexa
00000100000000000000000100
jr $t0
R8
000000
01000
00000
00000
00000
001000
10/30/2012
TCPU
NI
CPI
Treloj
Implementaciones a realizar:
10/30/2012
Metodologa de sincronizacin:
Determina cundo las seales pueden ser leidas y cuando se escriben Lgica combinacional entre 2 elementos de estado, que opera en un nico ciclo
de reloj (toda seal desde el elemento de estado 1 hasta el elemento de estado 2 debe propagarse en un ciclo)
reloj
un ciclo de reloj
10
10/30/2012
Implementacin monociclo
Todas las instrucciones (excepto las de tipo J) utilizan la ALU tras leer los registros
11
10/30/2012
Monociclo: Datapath
1) Enviar PC a memoria de instrucciones 2) Leer los operandos que hay en 1 (lw) o 2 (...) registros seleccionados
mediante los campos de instruccin
lw, sw : Calcular una dir. efectiva de memoria add, ... : Ejecutar el cdigo de operacin beq : Hacer comparaciones
cargar un valor de memoria en registro
lw, sw : Resultado ALU = dir. para almacenar un valor en registro, o para add, ... : Resultado ALU se escribe en un registro beq : Resultado ALU determina la direccin de la siguiente instruccin
4 Add
12
10/30/2012
Tipo R
rs 5 bits
rt 5 bits
rd 5 bits
shamt 5 bits
funct 6 bits
Registro del Funcin, operacin Registro del Registro del Cantidad de desplazamiento selecciona segundo de la primer operando la variante de instruccin operando fuente operando fuente destino la operacin Registros[rd] Registros[rs] op Registros[rt]
32 32
escribir
rt
5 bits
desp
16 bits
desp = I[15-0]
32
13
10/30/2012
Tipo I
cod. oper
6 bits operacin de la instruccin
rs
5 bits
rt
5 bits
desp
16 bits
Nueva instruccin (si rs = rt) = base (dir. siguiente a la actual) + desp = (PC + 4) + (SignExt[desp]<<2)
PC + 4 desp. izda. 2 Add ALUres Destino salto: base o base+desplaz.
R1 R2
desp = I[15-0]
32
14
10/30/2012
desp = I[15-0]
16
32
4 Add I[25-21] I[20-16] Memoria de instrucciones PC Dir I[31-0] I[15-0] 16 signo 32 exten dido I[15-11]
0 1
R1 R2
ALU zero
0 1
Result
Necesarios multiplexores
0 1
Nuevo multiplexor
R1 R2
ALU zero
0 1
Hacia lgica control saltos Dir dato lec. dato esc. dato Memoria de datos
1 0
ALUres
I[15-0]
32
15
10/30/2012
Monociclo: Diseo de la UC
rd, rs, rt
add, ...
cod. oper
rs
rt
rd
shamt
funct
lw, sw
cod. oper
rs
rt
desp
sw $t0, desplaz($t1)
beq
cod. oper
rs
rt
desp
rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp
Examinando los formatos, deducimos el encaminamiento de los datos, para lo cual se necesitan las seales de control:
RegDst RegWrite
ALUSrc MemtoReg
16
10/30/2012
0 1
PCSrc
R1 R2
ALU zero
0 1
MemWrite MemtoReg Dir dato lec. dato esc. dato Memoria de datos
1 0
ALUres
ALUSrc ALUc
RegDst I[15-0]
32
MemRead
I[5-0 ALUop
2
ALU control
ALUc
ALUop 00 00 01 10 10 10 10 10
Operacin load word store word branch equal add subtract AND logical OR logical set on less than
ALU suma suma resta suma resta AND OR activar si menor que
17
10/30/2012
I[5-0 ALUop
2
ALU control
ALUc
sustituyo por x, porque sustituyo por x, porque ALUop no puede valer 11 siempre van a valer 10
funct F2 x x 0 0 1 1 0 F1 x x 0 1 0 0 1 F0 x x 0 0 0 1 0
ALUc2 ALUc1
I[5-0 ALUop
2
ALU control
ALUc0
ALUc
funct F2 x x 0 0 1 1 0 F1 x x 0 1 0 0 1 F0 x x 0 0 0 1 0
18
10/30/2012
PCSrc
I[31-26] Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
32
I[5-0]
ALU control
PCSrc
I[31-26] Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
Efecto cuando no est activa El destino es rt: I[20-16] Ninguno Segundo op. ALU segundo registro ledo PC = PC +4 Ninguno Ninguno Entrada banco de registros proviene de ALU
Efecto cuando est activa El destino es rd: I[15-11] Registro destino se actualiza con valor a escribir Segundo op. ALU SignExt(I[15-0]) PC = salida sumador (direccin destino del salto) El valor de la pos. de mem. dada por direccin se coloca en la salida de lectura Valor de la pos. de mem. dada por direccin se reemplaza por el valor de la entrada de datos El valor de la entrada del banco de registros proviene de la memoria
19
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
20
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
zero ALUres Dir dato lec. dato esc. dato Memoria de datos
1 0
I[15-0]
32
Operacin ALU
I[5-0]
ALU control
10
21
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres
0 1
PCSrc
Control
1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1
0
lec. dato esc. dato Memoria de datos
1 0
1
I[15-0]
32
0
ALU control
Registro destino
I[5-0]
10
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
22
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres
0 1
PCSrc
Control
1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1
0
lec. dato esc. dato Memoria de datos
1 0
0
I[15-0]
32
1
ALU control
I[5-0]
00
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
23
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres
0 1
PCSrc
Control
0
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1
0
lec. dato esc. dato Memoria de datos
1 0
X
I[15-0]
32
0
ALU control
I[5-0]
01
4 Add
PCSrc
R1 R2
MemtoReg
0 1
ALUres
RegDst I[15-0]
I[5-0]
24
10/30/2012
PCSrc
I[31-26] Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
Instruccin R lw sw beq
RegDst 1 0 x x
ALUSrc 0 1 1 0
MemtoReg 0 1 x x
RegWrite 1 1 0 0
MemRead 0 1 0 0
MemWrite 0 0 1 0
Branch 0 0 0 1
ALUop1 1 0 0 0
ALUop1 0 0 0 1
25
10/30/2012
PCSrc
I[31-26] Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
Instruccin R lw sw beq
RegDst 1 0 x x
ALUSrc 0 1 1 0
MemtoReg 0 1 x x
RegWrite 1 1 0 0
MemRead 0 1 0 0
MemWrite 0 0 1 0
Branch 0 0 0 1
ALUop1 1 0 0 0
ALUop1 0 0 0 1
beq
0 0 0 1 0 0 X 0 X 0 0 0 1 01
Cdigos de operacin
Formato
lw
sw
beq RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp0
Seales de control
26
10/30/2012
Instruccin: Pseudo-directo
op direccin de salto Contador programa (PC)
La direccin de salto (26 bits) se desplaza dos bits a la izquierda (4) para direccionar a nivel de palabra, no a nivel de byte (aumentando rango direccionamiento) Dicho desplazamiento da lugar a una direccin de 28 bits que se concatena a los 4 bits ms significativos del PC, que seguidamente se actualiza con el nuevo valor
26
J
||
Memoria
jump instruccin destino
direccin salto
00 32
PC
32
3126 250
Tipo J
cod. oper
6 bits operacin
desp
26 bits Campo de desplazamiento de memoria
31 30 29 28 27 26 25 24 23
PC + 4
1 0 0 1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 30 29 28 27 26 25 24 23 4 3 2 1 0
Instr. I concatenar
0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1
31 30 29 28 27 26 25 24 23 4 3 2 1 0
1 0 0 1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1
desplazar 2 izqda.
31 30 29 28 27 26 25 24 23
0 1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0
Direccin de salto
27
10/30/2012
4 Add
PC+4
(PC+4)[29-26]
1 0
Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Jump Sel. R1 Sel. R2 Registros I[15-11]
0 1
desp. izda. 2
ALUres
1
PCSrc
I[25-0] (desp)
Control
0
R1 R2 ALU
0 1
0
lec. dato esc. dato Memoria de datos
1 0
X
I[15-0]
32
0
ALU control
I[5-0]
XX
Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Jump Sel. R1 Sel. R2 Registros I[15-11]
0 1
desp. izda. 2
ALUres PCSrc
I[25-0] (desp)
Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
RegDst 1 0 x x x
ALUSrc 0 1 1 0 x
MemtoReg 0 1 x x x
RegWrite 1 1 0 0 0
MemRead 0 1 0 0 0
MemWrite 0 0 1 0 0
Branch 0 0 0 1 0
Jump 0 0 0 0 1
ALUop1 1 0 0 0 x
ALUop1 0 0 0 1 x
28
10/30/2012
EJERCICIO 1 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo monociclo, la instruccin addi. Realizar las modificaciones necesarias en el datapath y en la unidad de control.
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
16
32
I[5-0]
ALU control
Tipo I
cod. oper
6 bits operacin de la instruccin
rs
5 bits
rt
5 bits
inmediato
16 bits
Suma inmediato con signo extendido al contenido del registro rs y coloca resultado en rt
R1 R2
(sw)
desp = I[15-0]
32
29
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres
0 1
PCSrc
Control
1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1
0
lec. dato esc. dato Memoria de datos
1 0
0
I[15-0]
32
0
ALU control
I[5-0]
00
30
10/30/2012
Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 ALUres
PCSrc
Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
RegDst 1 0 x x x 0
ALUSrc 0 1 1 0 x 1
MemtoReg 0 1 x x x 0
RegWrite 1 1 0 0 0 1
MemRead 0 1 0 0 0 0
MemWrite 0 0 1 0 0 0
Branch 0 0 0 1 0 0
ALUop1 1 0 0 0 x 0
ALUop1 0 0 0 1 x 0
EJERCICIO 2 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo monociclo, la instruccin bne. Realizar las modificaciones necesarias en el datapath y en la unidad de control.
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
16
32
I[5-0]
ALU control
31
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
ALUres
I[15-0]
32
I[5-0]
ALU control
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
PCSrc
Control
0 1
Sel
ALUres
I[15-0]
32
I[5-0]
ALU control
32
10/30/2012
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres
0 1
PCSrc
Control
0 1
Sel
0
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1
0 0
zero ALUres Dir dato lec. dato esc. dato Memoria de datos 32
1 0
0 X
X
I[15-0]
0
ALU control
I[5-0]
01
Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1
desp. izda. 2
ALUres PCSrc
Control
0 1
Sel
ALUres
I[15-0]
16
32
I[5-0]
ALU control
RegDst 1 0 x x x 0 x
ALUSrc 0 1 1 0 x 1 0
MemtoReg 0 1 x x x 0 x
RegWrite 1 1 0 0 0 1 0
MemRead 0 1 0 0 0 0 0
MemWrite 0 0 1 0 0 0 0
Branch 0 0 0 1 0 0 1
Sel x x x 0 x x 1
ALUop1 1 0 0 0 x 0 0
ALUop1 0 0 0 1 x 0 1
33
10/30/2012
EJERCICIO 3 Describir el efecto que producira un simple fallo de permanecer siempre a 0 (independientemente del valor correcto de la seal) en el modelo monociclo. Qu instrucciones dejaran de funcionar para los siguientes fallos (considerados por separado)? RegDst = 0; ALUSrc = 0; MemtoReg = 0; zero = 0.
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres PCSrc
0 1
Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
PCSrc
Control
R1 R2
ALU zero
0 1
ALUres
I[15-0]
16
32
I[5-0]
ALU control
Efecto No funcionan las instrucciones de tipo R (no se carga en el registro destino correcto) No funcionan las instrucciones con formato I (salvo branch) ya que el operando SignExt(IR[15-0]) nunca acta como segundo operando de la ALU
MemtoReg = 0 No funcionan las instrucciones de carga (el dato ledo de la memoria no se carga en el registro destino cuya direccin viene dada por rt) zero = 0 No funciona la instruccin branch (aunque se cumpla condicin, el salto no se produce)
34
10/30/2012
Monociclo: Rendimiento
Suponer que los tiempos de ejecucin de las unidades funcionales principales de esta realizacin son los siguientes: a) Unidades de memoria: 2 ns b) ALU y sumadores: 2ns c) Banco registros (lectura/escritura): 1 ns Suponiendo que los multiplexores, la unidad de control, el acceso al PC, la unidad de extensin de signo y los cables no tienen retardo, cual de las siguientes realizaciones sera ms rpida y por cunto? 1) Una realizacin donde cada instruccin se ejecuta en 1 ciclo de tamao fijo 2) Una realizacin donde cada instruccin se ejecuta en 1 ciclo de longitud variable, de forma que cada instruccin tarda nicamente lo necesario (aunque este esquema no es muy realista, nos permitir ver el sacrificio que supone el que las instrucciones deban ejecutarse en un nico ciclo de reloj de la misma longitud) Para la comparacin de rendimientos supngase la siguiente combinacin de instrucciones: 24% de loads, 12% de stores, 44% de tipo R, 18% de saltos condicionales y 2% de saltos incondicionales (jumps)
Monociclo: Rendimiento
Unidades funcionales usadas por dicha clase
Carga instruccin Carga instruccin Carga instruccin Carga instruccin Carga instruccin
Memoria instrucciones 2 2 2 2 2
Lectura registros 1 1 1 1
Operacin ALU 2 2 2 2
Memoria datos 0 2 2
Escritura registros 1 1
TOTAL 6 ns 8 ns 7 ns 5 ns 2 ns
CPIMONOCICLO = 8 ns
n = 100
La realizacin mediante un tiempo de ciclo variable sera un 27% ms rpida (muy dificultosa)
35
10/30/2012
Monociclo: Inconvenientes
Duracin de cualquier instruccin = 1 ciclo de reloj (CPI = 1) Duracin de Treloj determinada por instuccin ms larga (lw) Como hay instrucciones que se pueden realizar en un ciclo
de reloj ms corto, el rendimiento no ser muy bueno
Ciclo 1 Clk lw sw Desp Ciclo 2
36
10/30/2012
cod. oper
rs
rt
rd
shamt
funct
lw, sw
cod. oper
rs
rt
desp
sw $t0, desplaz($t1)
beq
cod. oper
rs
rt
desp
rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp
Examinando los formatos, deducimos el encaminamiento de los datos, para lo cual se necesitan las seales de control:
RegDst RegWrite
ALUSrc MemtoReg
Cada paso de la ejecucin de una instruccin emplear un ciclo de reloj. Una unidad funcional puede utilizarse ms de una vez por instruccin, si se utiliza en
distintos ciclos, con lo que se reduce la cantidad de hardware
Memoria nica para instrucciones y datos Se aaden uno o ms registros tras cada unidad funcional para almacenar la salida hasta que sea utilizada en siguiente ciclo ALU nica en lugar de una ALU y dos sumadores
PC
Address
MDR
Write Data
Read Data 2
ALU B
ALUout
Memoria
IR
37
10/30/2012
Multiciclo: Datapath
Almacenar valores necesarios en un ciclo posterior por la instruccin actual en un registro interno (no visible al programador). Todos los registros (excepto el registro de instruccin, IR) almacenan datos solamente entre un par de ciclos consecutivos (no es necesaria una seal de control de escritura) Los datos utilizados por instrucciones posteriores se almacenan en registros visibles al programador (PC, memoria, banco de registros)
PC
Address
MDR
Write Data
Read Data 2
ALU B
Multiciclo: Datapath
Nuevo multiplexor
Selecciona entre el registro A y el PC
Nuevo multiplexor
Selecciona el origen de la seleccin de acceso, ya sea el PC (acceso a instrucciones) o la salida de la ALU (para acceder a datos)
Nuevo multiplexor
Pasa a tener 4 vas con 2 entradas nuevas: constante 4 (incremento PC) y desplaz. con signo extendido y desplazado 2 bits (destino saltos)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
32
ALUout
0 1
Memoria IR Address
0 1
zero
ALUout
Memoria
IR
38
10/30/2012
Multiciclo: Control
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Multiciclo: Control
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWrite
ALUout
0 1
Memoria IR Address
2 0 1
0 1
zero
2 0 1
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUSelB (2 bits) 00: rt ALU 01: 4 ALU 10: SignExtend(IR[15-0]) 11: SignExtend(IR[15-0])<<2
ALUOp (2 bits) 00: suma 01: resta 10: ALU opera segn funcin
PCSource (2 bits) 00: PC = PC + 4 01: PC = Destino del salto branch 10: PC = Destino del salto jump
ALUout
0 1
Memoria IR Address
0 1
zero
39
10/30/2012
Particionado de la ejecucin de la instruccin en ciclos de reloj Debemos analizar lo que debera pasar en cada ciclo de reloj para determinar las seales de control que necesitamos El objetivo es equilibrar la cantidad de trabajo a realizar en cada ciclo y minimizar este trabajo En cada fase puede realizarse: Una operacin ALU Un acceso al banco de registros Un acceso a memoria El ciclo debe ser tan corto como la ms larga de estas operaciones Al final de cada ciclo, los valores que se necesiten en otro ciclo deben almacenarse en registros (PC, banco registros, A, B, IR, MDR, ALUout, etc.)
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
40
10/30/2012
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
41
10/30/2012
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
42
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
ALUout = A + SignExt(RI[15-0])
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
43
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
ALUout = A op B
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
44
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Si (A == B) PC = ALUout
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
45
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst PC[31-28] Instr[25-0] Shift left 2 28
Instr[31-26]
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
46
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
LW:
PC[31-28] Shift left 2 28
Instr[25-0]
MDR = Memoria[ALUout]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
47
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
SW:
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
Memoria[ALUout] = B Seales de control: MemWrite = 1 (MDR se escribe en cada ciclo por lo que no hace falta seal de control de escritura)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
48
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Registros[IR[15-11]] = ALUout
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
49
10/30/2012
ETAPA 5: POSTESCRITURA LW
Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW):
PCWriteCond PCWrite
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Registros[IR[20-16]] = MDR
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
50
10/30/2012
Multiciclo: Control
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWrite
2 0 1
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUSelB (2 bits) 00: rt ALU 01: 4 ALU 10: SignExtend(IR[15-0]) 11: SignExtend(IR[15-0])<<2
ALUOp (2 bits) 00: suma 01: resta 00: ALU opera segn funcin
PCSource (2 bits) 00: PC = PC + 4 01: PC = Destino del salto branch 10: PC = Destino del salto jump
ALUout
0 1
Memoria IR Address
0 1
zero
51
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
52
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
53
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
ALUout = A + SignExt(RI[15-0])
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
54
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
LW:
PC[31-28] Shift left 2 28
Instr[25-0]
MDR = Memoria[ALUout]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
55
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
ETAPA 5: POSTESCRITURA LW
Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW):
PCWriteCond PCWrite
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Registros[IR[20-16]] = MDR
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
56
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
57
10/30/2012
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
58
10/30/2012
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
59
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
ALUout = A + SignExt(RI[15-0])
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
60
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
SW:
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
Memoria[ALUout] = B Seales de control: MemWrite = 1 (MDR se escribe en cada ciclo por lo que no hace falta seal de control de escritura)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
61
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
62
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
63
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
ALUout = A op B
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
64
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Registros[IR[15-11]] = ALUout
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
65
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
66
10/30/2012
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
67
10/30/2012
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
ALUout
0 1
Memoria IR Address
0 1
zero
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
68
10/30/2012
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Si (A == B) PC = ALUout
PC[31-28] Shift left 2 28
Instr[25-0]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
69
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
Bsqueda de la instruccin:
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
IR = Memoria[PC]
Incremento contador de programa:
PC[31-28]
PC = PC + 4
2 0 1
Instr[25-0]
Shift left 2
28
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
Seales de control: MemRead = 1 IRWrite = 1 IorD = 0 ALUSelA = 0 ALUSelB = 01 ALUOp = 00 (Suma) PCWrite = 1 (PCSource = 00)
70
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
PCWriteCond PCWrite
IorD
Instr[25-0]
2 0 1
Clculo direccin efectiva de salto: ALUout = PC + (SignExt(IR[15-0]<<2) Seales de control: ALUSelA = 0 ALUSelB = 11 ALUOp = 00 (Suma)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
71
10/30/2012
Bsqueda de instruccin
1 ciclo de reloj
Clculo direcc. memoria
Decodificacin de instruccin
Ejecucin
Terminacin
Terminacin
Acceso a memoria
Acceso a memoria
Terminacin
Postescritura
lw
sw
beq
jump
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst PC[31-28] Instr[25-0] Shift left 2 28
Instr[31-26]
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
72
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
73
10/30/2012
add, ...
op
rs
Registro del 1 operando fuente
rt
rd
shamt
funct
lw, sw
op
rs
rt
offset
sw $t0, desplaz($t1)
Direccin de memoria Registro del Registro del Campo desplazamiento = rs + desp operando fuente operando destino de memoria
3126 2521 2016 150
beq
op
rs
rt
offset
rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp jal etiqueta
jal
op
direccin de salto
Direccin destino del salto
Multiciclo: Diseo de la UC
Implementacin mediante autmata de estados finitos (FSM) Consideramos que toda salida que no se encuentra activa est expresamente negada
IR = Memoria[PC] PC = PC + 4
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
74
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCWriteCond PCWrite
0
PC[31-28] Shift left 2 28
Instr[25-0]
Iniciar
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
IR = Memoria[PC] PC = PC + 4
ALUout
0 1
Memoria IR Address
0 1
zero
75
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCWriteCond PCWrite
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
76
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
0
2 0 1
PC
0 1 1 0
MDR
4
Shift left 2
0 1 2 3
ALU control
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
32
2
ALUSelA =1
ALUout = A + SignExt(IR[15-0])
ALUSelB = 10 ALUop = 00
77
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
0
2 0 1
PC
0 1 1 0
MDR
4
Shift left 2
0 1 2 3
ALU control
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
32
2
ALUSelA =1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
ALUout = A op B
ALUSelB = 10 ALUop = 00
78
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCWriteCond PCWrite
0
2 0 1
PC
0 1 1 0
MDR
4
Shift left 2
0 1 2 3
ALU control
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
32
2
ALUSelA =1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
Si (A == B) PC = ALUout
ALUSelB = 10 ALUop = 00
79
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PCWriteCond PCWrite
0
2 0 1
PC
0 1 1 0
MDR
4
Shift left 2
0 1 2 3
ALU control
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
9
J
PCSource=01 PCWrite
32
2
ALUSelA =1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
ALUSelB = 10 ALUop = 00
80
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
9
J
PCSource=01 PCWrite
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
MDR = Memoria[ALUout]
3
Memread IorD = 1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
81
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
9
J
PCSource=01 PCWrite
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Memoria[ALUout] = B
3
Memread IorD = 1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
5
Memwrite IorD = 1
82
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
9
J
PCSource=01 PCWrite
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Registros[IR[15-11]] = ALUout
3
Memread IorD = 1
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
5
Memwrite IorD
7
RegWrite MemtoReg = 0 RegDst
83
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
9
J
PCSource=01 PCWrite
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Registros[IR[20-16]] = MDR
4
RegWrite MemtoReg = 1 RegDst = 0
6
ALUSelA =1 ALUSelB = 00 ALUop = 10
3
Memread IorD = 1
5
Memwrite IorD
7
RegWrite MemtoReg = 0 RegDst
84
10/30/2012
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
1 ciclo de reloj
PCSource=10 PCwrite
3 Memread IorD = 1
LW
85
10/30/2012
1 ciclo de reloj
PCSource=10 PCwrite
3 Memread IorD = 1
LW
86
10/30/2012
Entradas
PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSelB ALUSelA RegWrite RegDst
Op5
Op4
Op3
Op2
Op1
Op0
Salidas
Siguiente estado
lw sw
1
jmp R beq
2
lw sw
Salidas de control PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst
Entradas (EstadoActual[3-0]) 0000 1 X 0 1 0 1 X 00 00 01 0 0 X 0001 0 0 X 0 0 0 X XX 00 11 0 0 X 0010 0 0 X 0 0 0 X XX 00 10 1 0 X 0011 0 0 1 1 0 0 X XX XX XX X 0 X 0100 0 0 X 0 0 0 1 XX XX XX X 1 0 0101 0 0 1 0 1 0 X XX XX XX X 0 X 0110 0 0 X 0 0 0 X XX 10 00 1 0 X 0111 0 0 X 0 0 0 0 XX XX XX X 1 1 1000 0 1 X 0 0 0 X 01 01 00 1 0 X 1001 1 X X 0 0 0 X 10 XX XX X 0 X
87
10/30/2012
lw sw
1
jmp R beq
2
lw sw
Estado Actual[3-0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Inst[31-26] 000000 (tipo R) 0001 0110 XXXX XXXX XXXX XXXX 0111 0000 XXXX XXXX 000010 (jmp) 0001 1001 XXXX XXXX XXXX XXXX XXXX XXXX XXXX 0000
(cdigo de operacin) 100011 (lw) 0001 0010 0011 0100 0000 XXXX XXXX XXXX XXXX XXXX 101011 (sw) 0001 0010 0101 XXXX XXXX 0000 XXXX XXXX XXXX XXXX Otra cualquiera 0001 ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal
000100 (beq) 0001 1000 XXXX XXXX XXXX XXXX XXXX XXXX 0000 XXXX
Excepciones: Definiciones
Excepcin
Evento inesperado que cambia el flujo de control del procesador, debido a una causa
Interna Desbordamiento aritmtico Uso de instrucc. indefinida Llamada al SO desde prog. usuario Malfunciones hardware Externa ( Interrupciones, convenio MIPS) Comunicacin con dispositivo E/S Malfunciones hardware
Diseo de UC debe contemplar el tratamiento de las excepciones El camino crtico que determina Treloj debe considerar la excepcin ms larga Excepciones que contemplaremos: Ejecucin de una instruccin indefinida Desbordamiento aritmtico
88
10/30/2012
Guardar direccin de la instruccin actual en EPC (contador de programa de excepciones) Transferir control a una direccin especificada del S.O. (dir_SO), llamada
direccin del vector de interrupciones rutina de servicio
Dos posibilidades de actuacin: Ejecuta la rutina de servicio contina ejecucin del programa segn EPC Detiene la ejecucin del programa informa del error
SO debe conocer la causa de la excepcin. Mtodos:
Registro Cause: (mtodo usado por MIPS) dir_SO es nica Cause registra la causa de la excepcin Interrupciones vectorizadas dir_SO determinada segn la causa de la excepcin Ejemplo:
Instr.indefinida: dir_SO = 01000000 00000000 00000000 00000000 Desbordamiento dir_SO = 01000000 00000000 00000000 01000000 Tamao mximo del vector de excepcin: 32 instrucciones
EPCWrite Permite escribir sobre EPC CauseWrite Permite escribir sobre Cause IntCause Escribe 0 1 en el bit 0 de Cause
PC + 4 destino jmp destino beq
01000000 00000000 00000000 00000000 ALUSelA = 0 0 1 2 3 valor cableado de dir_SO, para escribirlo en PC
PC
PCSource
EPCWrite EPC
Como PC pasa a ser PC+4 durante el estado de captura de instruccin, lo que hay que guardar en EPC es PC-4:
PC
0 1
ALU 4
0 1 2 3
ALUSelB = 01
89
10/30/2012
1 ciclo de reloj
PCSource=10 PCWrite
3 Memread IorD = 1
LW
10
IntCause=0 CauseWrite
7 lw sw
1
jmp R beq indef.
desbordamiento
12 11
2
lw sw
IntCause=1 CauseWrite
7
desbor. no desbor.
10
13
PCWrite PCSource=11
11
12
4
13 0
90
10/30/2012
EJERCICIO 1 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo multiciclo, la instruccin addi. Realizar las modificaciones necesarias en el datapath y en el autmata correspondiente a la unidad de control
PCWriteCond PCWrite
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Instruccin: add immediate (sumar inmediato) or immediate (or inmediato) and immediate (and inmediato)
Formato:
op
rs
rt
operando
addi rt, rs, operando Suma el inmediato con signo extendido al contenido del registro rs y coloca el resultado en el registro rt ori rt, rs, operando Hace la operacin lgica OR del inmediato con cero extendido y el contenido del registro rs y coloca el resultado en el registro rt andi rt, rs, operando Hace la operacin lgica AND del inmediato con cero extendido y el contenido del registro rs y coloca el resultado en el registro rt
3126 2521 2016 150
ALUout
0 1
Memoria IR Address
0 1
zero
001000
001001 001000
0000000000100000
I I I
0000000000000100 0000000000100100
91
10/30/2012
IorD
0
2 0 1
Instr[31-26]
PC
0 1 1 0
MDR
4
Shift left 2
0 1 2 3
ALU control
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUOp = 00 ALUop
32
2
ALUSelA =1 ALUSelB = 10 ALUop = 00
EJERCICIO 2 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo multiciclo, la instruccin bne. Realizar las modificaciones necesarias en el datapath y en el autmata correspondiente a la unidad de control
PCWriteCond PCWrite
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
92
10/30/2012
Formato:
op
rs
rt
offset
beq rs, rt, offset Compara el contenido de los registros rs y rt. Si son iguales la siguiente instruccin se obtiene de la direccin (PC+ 4) + SignoExtendido(offset) << 2
branch if not equal bne rs, rt, offset Compara el contenido de los registros rs y rt. Si son distintos la siguiente (saltar si distinto) instruccin se obtiene de la direccin (PC+ 4) + SignoExtendido(offset) << 2
000100
01000
01001
0000000000001000
000101
01000
01001
0000000000000100
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Sel
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
2 0 1
0 1
zero
93
10/30/2012
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Nuevo
Si (A != B) PC = ALUout
EJERCICIO 3 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo multiciclo, las instrucciones bne (saltar si no igual), blez (saltar si menor o igual que 0) y bgtz (saltar si mayor que 0). Realizar las modificaciones necesarias en el datapath y en el autmata correspondiente a la unidad de control
PCWriteCond IorD PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWrite
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
94
10/30/2012
EJERCICIO 3 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo multiciclo, las instrucciones bne (saltar si no igual), blez (saltar si menor o igual que 0) y bgtz (saltar si mayor que 0). Realizar las modificaciones necesarias en el datapath y en el autmata correspondiente a la unidad de control
00 01 10 11
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Sel
11
1 (bit signo)
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
2 0 1
0 1
zero
95
10/30/2012
Sel
1 (bit signo)
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
ALUout
0 1
Memoria IR Address
0 1
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
zero ALU
0 1 1 0
Instr[15-0]
Read Data 2
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Nuevo
Si (A != B) PC = ALUout
Sel
1 (bit signo)
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
ALUout
0 1
Memoria IR Address
0 1
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
zero ALU
0 1 1 0
Instr[15-0]
Read Data 2
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Nuevo
Si (A B <= 0) PC = ALUout
96
10/30/2012
Sel
1 (bit signo)
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
ALUout
0 1
Memoria IR Address
0 1
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
zero ALU
0 1 1 0
Instr[15-0]
Read Data 2
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Nuevo
Si (A B > 0) PC = ALUout
EJERCICIO 4 Deseamos aadir al repertorio inicial de instrucciones de la CPU, modelo multiciclo, la instruccin jal. Realizar las modificaciones necesarias en el datapath y en el autmata correspondiente a la unidad de control
PCWriteCond PCWrite
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
2 0 1
PC
0 1 1 0
Instr[15-0]
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
0 1
zero
97
10/30/2012
Instruccin:
Formatos:
J
funct R
j direccin Salta a la direccin: PC[31-28] || direccin << 2 jal direccin Salta a la direccin: PC[31-28] || direccin << 2 y guarda la direccin de retorno en el registro R31 (denominado ra) jr rs Salta a la direccin contenida en el registro rs
3126 25 0
000010
00000100000000000000000001
J J R
8 diez
jal target
0x00400010 hexa
00000100000000000000000100
jr $t0
R8
000000
01000
00000
00000
00000
001000
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
PC
31
0 1 2 2 1 0
MDR
4
Shift left 2
Instr[15-0]
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
ALUout
0 1
Memoria IR Address
2 0 1
0 1
zero
98
10/30/2012
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
0
PC[31-28]
Instr[25-0]
Shift left 2
28
2 0 1
PC
31
0 1 2 2 1 0
ALUout
0 1
Memoria IR Address
0 1
zero
1
ALUSelA =0 ALUSelB = 11 ALUop = 00
MDR
4
Shift left 2
Instr[15-0]
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
Como MemtoReg y RegDst necesitan 2 bits de control, habra que modificar todo el autmata
Multiciclo: Rendimiento
Utilizando el autmata de control diseado para la mquina multiciclo y suponiendo que la proporcin de instrucciones ejecutadas por un programa es 22% de loads, 11% de stores, 49% de tipo R, 16% de saltos condicionales y 2% de saltos incondicionales (jumps), calcular el CPI suponiendo que cada estado consume 1 ciclo de reloj.
99
10/30/2012
lw
sw
Desp
Implementacin multiciclo:
reloj multiciclo es un poco ms lento que 1/5 del reloj monociclo debido al retardo de registros
Clk
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 5 Ciclo 6 Ciclo 7 Ciclo 8 Ciclo 9Ciclo 10
Tipo R IFetch
Control Microprogramado.
100
10/30/2012
Entradas
PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSelB ALUSelA RegWrite RegDst
Op5
Op4
Op3
Op2
Op1
Op0
Salidas
Siguiente estado
lw sw
1
jmp R beq
2
lw sw
Salidas de control PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSrcB ALUSrcA RegWrite RegDst
Entradas (EstadoActual[3-0]) 0000 1 X 0 1 0 1 X 00 00 01 0 0 X 0001 0 0 X 0 0 0 X XX 00 11 0 0 X 0010 0 0 X 0 0 0 X XX 00 10 1 0 X 0011 0 0 1 1 0 0 X XX XX XX X 0 X 0100 0 0 X 0 0 0 1 XX XX XX X 1 0 0101 0 0 1 0 1 0 X XX XX XX X 0 X 0110 0 0 X 0 0 0 X XX 10 00 1 0 X 0111 0 0 X 0 0 0 0 XX XX XX X 1 1 1000 0 1 X 0 0 0 X 01 01 00 1 0 X 1001 1 X X 0 0 0 X 10 XX XX X 0 X
101
10/30/2012
lw sw
1
jmp R beq
2
lw sw
Estado Actual[3-0] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Inst[31-26] 000000 (tipo R) 0001 0110 XXXX XXXX XXXX XXXX 0111 0000 XXXX XXXX 000010 (jmp) 0001 1001 XXXX XXXX XXXX XXXX XXXX XXXX XXXX 0000
(cdigo de operacin) 100011 (lw) 0001 0010 0011 0100 0000 XXXX XXXX XXXX XXXX XXXX 101011 (sw) 0001 0010 0101 XXXX XXXX 0000 XXXX XXXX XXXX XXXX Otra cualquiera 0001 ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal ilegal
000100 (beq) 0001 1000 XXXX XXXX XXXX XXXX XXXX XXXX 0000 XXXX
VHDL
102
10/30/2012
Alternativamente, podemos representar el conjunto de seales de control que son asertadas en un determinado estado como una instruccin de control de bajo nivel ejecutada por el datapath Esto es lo que se conoce como microinstruccin Ejecutar una microinstruccin es equivalente a asertar las seales de control especificadas por la microinstruccin
Control microprogramado
Ideas bsicas
Emplear una memoria (de control) para almacenar las seales de control de los perodos de cada instruccin Origen histrico: En 1951-1953 Maurice V. Wilkes propone el siguiente esquema: o Seales de control se encuentran almacenadas en memoria A o Memoria B contiene la direccin de la siguiente microinstruccin o Se permiten microbifurcaciones condicionales
103
10/30/2012
Control microprogramado
Definiciones
Microinstruccin: cada palabra de la memoria de control Microprograma: conjunto ordenado de microinstrucciones cuyas seales de control constituyen el cronograma de una (macro)instruccin del lenguaje mquina Ejecucin de un microprograma: lectura en cada pulso de reloj de una de las microinstrucciones que lo forman, enviando las seales ledas a la unidad de proceso como seales de control Firmware (o microcdigo): conjunto de los microprogramas de una mquina
Control microprogramado
La UC microprogramada evita la complejidad de un diseo basado en autmata Ejecucin de una microinstruccin = Asertar las seales de control
especificadas por la microinstruccin
microinstruccin
104
10/30/2012
Control microprogramado
Ventajas e inconvenientes
Ventajas:
Simplicidad conceptual (informacin de control reside en una memoria) Las correcciones, modificaciones y ampliaciones son mucho ms fciles de hacer que en una unidad de control cableada No hay que redisear toda la unidad, sino slo cambiar el contenido de algunas posiciones de la memoria de control
Inconvenientes:
Lentitud frente a cableada, debido a: o Lectura de una memoria puede ser ms lenta que cableada o Menor capacidad de expresar paralelismo de las microinstrucciones
Cada microinstruccin se corresponde con un estado en el FSM y se le asigna un nmero de estado o direccin
Comportamiento secuencial: incrementar direccin actual para obtener siguiente Salto incondicional: saltar a la direccin de una determinada microinstruccin Salto condicional: saltar a la direccin de una microinstruccin segn control
105
10/30/2012
Implcito:
Consiste en tener ordenadas secuencialmente microinstrucciones de cada microprograma Necesitamos un contador microinstruccin en curso de microprograma que todas las
apunte
la
Horizontal:
Cada microinstruccin especifica varias microoperaciones diferentes a ejecutarse en paralelo Alto grado de operaciones paralelas posibles Muchas acciones con una sola microinstruccin Palabra de control larga
106
10/30/2012
1 ciclo de reloj
PCSource=10 PCWrite
3 Memread IorD = 1
LW
mux
3 2 1 0
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2)
2
lw sw
ROM 1 de distribucin
lw sw
1
jmp beq
op = IR[31-26]
107
10/30/2012
Diseo del procesador Estado AddCtl Pac 0 3 1001010000000100011 1 1 0000000001001100001 2 2 0000000000001010010 3 3 0011000000001010011 4 0 0011001000001011000 5 0 0010100000001010000 6 3 0000000000100010011 7 0 0000000000100011100 8 0 0100000010010010000 9 0 1000000100000000000
lw sw
1
jmp R beq
2
lw sw
Sucesin de de estados 0 1 2 3 4 0 0 1 2 5 0 0 1 6 7 0 0 1 8 0 0 1 9 0
UC microprogramada. Formato
Cmo definir el formato de una microinstruccin? El formato define los campos de la microinstruccin y las seales de control afectadas por cada campo
Las seales de control asociadas a un determinado campo deben estar relacionadas entre s El formato debe escogerse para simplificar la representacin, haciendo que las microinstrucciones sean consistentes
Hacer que cada campo de la microinstruccin sea responsable de especificar un conjunto de seales de control no solapadas
Seales que nunca son asertadas simultaneamente pueden compartir el mismo campo Siete campos en nuestra mquina simple:
Control ALU; SRC1; SRC2; Destino ALU; Memoria; Control PCWrite; Secuenciamiento
108
10/30/2012
ALU suma ALUOp=00 ALU opera segn cdigo de funcin ALUOp=10 ALU resta ALUOp=01
Rtulo
Control ALU
SRC1
SRC2
Destino ALU
Memoria
Registro memoria
ALUSelA=0 ALUSelA=1
2 operando ALU = 4 ALUSelB=01 2 operando ALU = signo extendido(IR[15-0) ALUSelB=10 2 operando ALU = desplaz. de signo extendido ALUSelB=11 2 operando ALU = rt ALUSElB=00 Salida de ALU registro Destino TargetWrite Salida de ALU rd RegWrite,RegDst=1,MemtoReg=0
Read PC Lee de memoria, direccin est en PC Read ALU Lee de memoria, direccin es salida ALU Write ALU Escribe en memoria, direccin es salida ALU IR Read rt Write rt
dato ledo de memoria IR rt memoria dato ledo de memoria rt
IRWrite Sin seales (rt siempre es fuente para almac.) RegWrite, MemtoReg=1, RegDst=0
Rtulo
Control ALU
SRC1
SRC2
Destino ALU
Memoria
Registro memoria
ALU PC = salida ALU en PC PCSource=00, PCWrite Target-cond PC = valor de Target si zero(ALU)=1 PCWriteCond, PCSource=01 Jump address PC = direcc. de bifurcacin de la instrucc. PCWrite, PCSource=10 seq fetch dispatch 1 dispatch 2
Sigue secuencialmente la siguiente instruccin Siguiente microinstrucc. (rotulada Fetch), 1 de nueva instrucc. Utiliza la ROM 1 para seleccionar la siguiente microinstruccin Utiliza la ROM 2 para seleccionar la siguiente microinstruccin AddCtl=11 AddCtl=00 AddCtl=01 AddCtl=10
109
10/30/2012
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
110
10/30/2012
ALU suma ALUOp=00 ALU opera segn cdigo de funcin ALUOp=10 ALU resta ALUOp=01
Rtulo
Control ALU
SRC1
SRC2
Destino ALU
Memoria
Registro memoria
ALUSelA=0 ALUSelA=1
2 operando ALU = 4 ALUSelB=01 2 operando ALU = signo extendido(IR[15-0) ALUSelB=10 2 operando ALU = desplaz. de signo extendido ALUSelB=11 2 operando ALU = rt ALUSElB=00 Salida de ALU registro Destino TargetWrite Salida de ALU rd RegWrite,RegDst=1,MemtoReg=0
Read PC Lee de memoria, direccin est en PC Read ALU Lee de memoria, direccin es salida ALU Write ALU Escribe en memoria, direccin es salida ALU IR Read rt Write rt
dato ledo de memoria IR rt memoria dato ledo de memoria rt
IRWrite Sin seales (rt siempre es fuente para almac.) RegWrite, MemtoReg=1, RegDst=0
Rtulo
Control ALU
SRC1
SRC2
Destino ALU
Memoria
Registro memoria
ALU PC = salida ALU en PC PCSource=00, PCWrite Target-cond PC = valor de Target si zero(ALU)=1 PCWriteCond, PCSource=01 Jump address PC = direcc. de bifurcacin de la instrucc. PCWrite, PCSource=10 seq fetch dispatch 1 dispatch 2
Sigue secuencialmente la siguiente instruccin Siguiente microinstrucc. (rotulada Fetch), 1 de nueva instrucc. Utiliza la ROM 1 para seleccionar la siguiente microinstruccin Utiliza la ROM 2 para seleccionar la siguiente microinstruccin AddCtl=11 AddCtl=00 AddCtl=01 AddCtl=10
111
10/30/2012
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
Fetch
Add
PC
ReadPC
IR
ALU
Seq
ALUout PC+4
IR Memoria[PC]
AddCtl=11
Va a la siguiente microinstruccin
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
112
10/30/2012
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
PC Extshft Target
dispatch 1
AddCtl=01
Va a la microinst. segn ROM de distribucin 2
PCwrite PCWriteCond IorD RegWrite RegDst AddCtl
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
113
10/30/2012
LWSW1 Add
rs
Exten
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
114
10/30/2012
Microprograma (lw)
ALUout =A + SignExt(RI[15-0]) (dir. memoria) MDR = Memoria[ALUout]
LW2
Add
rs
Exten
ReadALU
Seq
Add
rs
Exten
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
115
10/30/2012
Microprograma (sw)
ALUout =A + SignExt(RI[15-0]) (dir. memoria)
SW2
Add
rs
Exten
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
116
10/30/2012
Microprograma (R)
Destino Registro Control Secuenciam. ALU Memoria memoria PCWrite
rs rs
rt rt rd Registros[IR[15-11]] = ALUout
7 0
ALUout = A op B
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
117
10/30/2012
Microprograma (beq)
Tar-con
Fetch
ALUout = rs - rt = zero
si zero=1, PC = ALUout
0
PCWriteCond PCWrite
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
UC microprogramada
1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])
ALUout = A + SignExt(RI[15-0])
ALUout = A op B
Si (A == B) PC = ALUout
MDR = Memoria[ALUout]
Memoria[ALUout] = B
Registros[IR[15-11]] = ALUout
Registros[IR[20-16]] = MDR
lw
sw
beq
jump
118
10/30/2012
Microprograma (jump)
JUMP1
PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
PCWriteCond PCWrite
Instr[25-0]
Shift left 2
28
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
Microprograma de la UC
Reg.mem IR Cont.PCWrite Secuenc. ALU Seq Dispatch 1 Dispatch 2 Seq Write rt Fetch Read rt Fetch Seq Fetch Target cond Fetch jump address Fetch
ROM (lgica de control)
1
PC[31-28] Instr[25-0] Shift left 2 28
IorD
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]
estado
2 0 1
sumador
mux
3 2 1 0
PC
0 1 1 0
Instr[15-0]
ALUout
0 1
Memoria IR Address
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Read Addr 1 Registros Read Data 1 Read Addr 2 Write Addr Write Data Read Data 2
0 1
zero ALU
MDR
4
Shift left 2
Sign Extend
0 1 2 3
ALU control
32
Instr[5-0]
op = IR[31-26]
119
10/30/2012
lw sw
1
jmp R beq
2
sw
mux
3 2 1 0
0
op ROM 2 de distribucin op 100011 (lw) 101011 (sw) Estado 0011 (3) 0101 (5) 000000 (R) 000100 (beq) 100011 (lw) 101011 (sw) Estado 0110 (6) 1000 (8) 0010 (2) 0010 (2) ROM 1 de distribucin
Valor de AddCtl 0 1 2 3
Accin Pasar al estado 0 Envo con ROM 1 Envo con ROM 2 Usar el estado incrementado
op = IR[31-26]
ROM de distribucin 1 op 000000 000010 000100 100011 101011 Instruccin R jump beq lw sw Estado 0110 1001 1000 0010 0010 op 100011 101011 ROM de distribucin 2 Instruccin lw sw Estado 0011 0101
120
10/30/2012
Nanoprogramacin
121
10/30/2012
Bibliografa recomendada
David A. Patterson y John L. Hennessy Computer Organization and Design: The Hardware/Software Interface, Third Edition Elsevier/Morgan-Kaufmann, 2005
William Stallings Computer Organization and Architecture: Designing for Performance, Seventh Edition Prentice-Hall, 2006 Traduccin: Organizacin y Arquitectura de Computadores, Quinta Edicin. Editorial Prentice-Hall, 2000
122