Nothing Special   »   [go: up one dir, main page]

Tema 4 Tecnicas de Implementacion de La CPU

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 122

10/30/2012

TEMA 4 Tcnicas de implementacin de la CPU


1. Introduccin y objetivos 2. Metodologas de diseo: Control cableado y microprogramado 3. Diseo de una CPU sencilla basada en el repertorio de instrucciones del MIPS R2000 4. Control microprogramado

Introduccin. Metodologas diseo. Repaso arquitectura MIPS.

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

CPU Control Datapath

Memoria

E/S Entrada Salida

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

Diseo del procesador Control cableado

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

Diseo del procesador Control microprogramado

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

Lgica de Seleccin de direcciones

SECUENCIADOR

Cod Op.

Diseo del procesador

Diseo CPU sencilla basada en instrucciones MIPS

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

cod. op cod. op cod. op

rs rs

rt rt

rd

shamt immediato

funct

Formato R Formato I Formato J

direccin de salto

10/30/2012

Diseo del procesador

Repaso: Repertorio bsico de instrucciones


rd, rs, rt

3126 2521 2016 1511 106 50

add, ...

op

rs
Registro del 1 operando fuente

rt

rd

shamt

funct

add $t0, $t1, $t2

Registro del 2 operando fuente

Registro del operando destino

3126 2521 2016 150

rt, desp rs lw $t0, desplaz($t1)

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

Registro del operando fuente 1

Registro del Campo desplazamiento operando fuente 2 de memoria

3126 2521 2016 150

jal

op

direccin de salto
Direccin destino del salto

Direccin de salto = PC[31-28] || direccin << 2

Diseo del procesador 1. Operando: Registro


op rs rt rd funct

Repaso: Modos direccionamiento MIPS R Registro


operando

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

Contador programa (PC)

5. Instruccin: Pseudo-directo
op direccin de salto Contador programa (PC)

J
||

Memoria
jump instruccin destino

10/30/2012

Diseo del procesador


Cmo se realiza el salto relativo al PC?

Direccionamiento relativo al PC (Branch)

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

offset extensin signo


00 32 32 Add 32 4 32 Add 32

direccin destino
32

PC
32

Diseo del procesador


Cmo se realiza el salto pseudo-directo?

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

Diseo del procesador

Repaso: Formato de las instrucciones

Instruccin: load word (cargar palabra) store word (almacenar)

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.

3126 2521 2016 150

lw $t0, 32($t1)
35 diez R8 R9

100011

01001

01000

0000000000100000

3126 2521 2016 150

sw $t0, 0($t1)
43 diez

101011

01001

01000

0000000000000000

Diseo del procesador

Repaso formatos (Tipo R: add, sub, and...)

Instruccin: add (sumar) subtract (restar) and (and lgico)

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

add $t0, $t1, $t2


R8 R18 R19

000000

10010

10011

01000

00000

100000

R
32 diez

sub $t0, $t1, $t2 and $t0, $t1, $t2

000000 000000

10010 10010

10011 10011

01000 01000

00000 00000

100010 100100

R R
34 diez 36 diez

10/30/2012

Diseo del procesador

Repaso formatos (inmediato)

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

addi $t0, $t1, 32


R8 R9 8 diez

001000

001001 001000

0000000000100000

I I I

ori $t0, $t1, 4


13 diez

001101 001100 12 diez

001001 001000 001001 001000

0000000000000100 0000000000100100

andi $t0, $t1, 36

Diseo del procesador

Repaso formatos (saltos condicionales)

Instruccin: branch if equal (saltar si igual)

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

3126 2521 2016 150

beq $t0, $t1, exit


R8 R9 84 4 diez

000100

01000

01001

0000000000001000

3126 2521 2016 150

bne $t0, $t1, bucle


R8 R9 44 5 diez

000101

01000

01001

0000000000000100

10/30/2012

Diseo del procesador


op op jump (saltar) jump and link (saltar y enlazar) jump on register (saltar al contenido del registro) j eti1
0x00400004 hexa 2 diez 000011 3 diez

Repaso formatos (jmp)


direccin de salto rs

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

3126 2521 2016 1511 106 50

jr $t0
R8

000000

01000

00000

00000

00000

001000

Visin global de la implementacin. Monociclo. Elementos del Datapath.

10/30/2012

Diseo del procesador

Visin global de la implementacin

TCPU

NI

CPI

Treloj

NI: N total de instrucciones


(recuento de instrucciones), del programa. Depende de la arquitectura del conjunto de instrucciones y de la tecnologa del compilador

CPI: Ciclos por


instruccin depende de la realizacin del procesador

Treloj: Periodo o ciclo de reloj. depende de la realizacin del procesador

Diseo del procesador

Visin global de la implementacin

determina la duracin del ciclo de reloj (Treloj)

Implementacin del procesador


determina el n de ciclos por instruccin (CPI)

Implementaciones a realizar:

monociclo multiciclo segmentado

Implementaciones distintas para el mismo repertorio:

lw, sw add, sub, and, or, slt beq

10/30/2012

Diseo del procesador

Visin global de la implementacin

Convenios sobre el diseo lgico:


Asertar una seal significa inicializarla a un voltaje lgico alto (ponerla a 1) 2 tipos de elementos lgicos: - Combinacionales: componentes HW sin estado (dado un conjunto de entradas siempre generan la misma salida, es decir, no tienen ninguna capacidad de almacenamiento) - Elementos de estado o secuenciales: poseen capacidad de
almacenamiento interno de datos, siendo una de sus entradas siempre un reloj que define cundo pueden modificarse los estados de estos dispositivos

Las entradas de cualquier lgica combinacional deben provenir de un conjunto de


elementos de estado y sus salidas se deben escribir en un conjunto de elementos de estado

Cmo se efecta la sincronizacin?

Diseo del procesador

Visin global de la implementacin

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)

El tiempo necesario para que las seales alcancen el elemento de estado 2 es el


tiempo que definir la longitud mnima del ciclo

Ejecucin tpica (un nico ciclo de reloj):


1) Leer contenido de elementos de estado 2) Enviar valores a travs de la lgica combinacional 3) Escribir valores en uno o ms registros de estado
Elem. estado 1 Lgica combinacional Elem. estado 2

reloj

un ciclo de reloj

10

10/30/2012

Diseo del procesador

Implementacin monociclo

Implementacin MIPS monociclo:


1 nico ciclo de reloj de gran duracin por instruccin Cada instruccin comienza a ejecutarse en un flanco de reloj (asc. o desc.),
y termina su ejecucin en el flanco siguiente de reloj

comienza ejecucin instruccin

finaliza ejecucin instruccin (comienza ejecucin siguiente instruccin)

Diseo del procesador

Monociclo: Visin general

Visin general La implementacin MIPS que se propone es simplificada:


Instrucciones de acceso a memoria: lw, sw Instrucciones aritmtico-lgicas: add, sub, and, or, slt Instrucciones de salto: beq, j

La implementacin MIPS que se propone es genrica:


Utilizacin del contador de programa (PC) para proporcionar la direccin de la siguiente instruccin Decodificacin de la instruccin y lectura de registros Ejecucin de la instruccin

Todas las instrucciones (excepto las de tipo J) utilizan la ALU tras leer los registros

11

10/30/2012

Diseo del procesador


Pasos para ejecutar cualquier instruccin

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

comunes a toda instr.

3) Usar los operandos en la ALU: 4) Depende de la 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

Memoria de instrucciones PC Instruccin

Reg Reg Registros Reg Dato

ALU Direccin Dato Memoria de datos

Diseo del procesador

Monociclo: Datapath (bsqueda instrucciones)


Memoria de instrucciones: Elemento secuencial. Slo suministra instrucc. Contador de programa: Elemento secuencial. Suele tener una seal de escritura; como la implementacin es monociclo, no es necesaria (o siempre asertada). * Salida = Direccin de la instruccin actual. * Entrada = Direccin de la siguiente instruccin. Sumador: Elemento combinacional. Suma de 4 en 4 porque cada instruccin comienza en una nueva palabra de memoria. Cada palabra consta de 32 bits (4 bytes). La memoria direcciona bytes. direcciones palabras

4 Add

Memoria de instrucciones PC Dir I[31-0]

0x1001002C 0x10010028 0x10010024 0x10010020 0x1001001c 0x10010018 0x10010014 0x10010010

0x0a823476 0x3a0b3451 0x0a0234d6 0x7a08c451 0xf04904a6 0x74d00f56 0x0a13605a 0x0024c850

12

10/30/2012

Diseo del procesador

Monociclo: Datapath (instr. tipo R)

3126 2521 2016 1511 106 50

rd, rs, rt add $t0, $t1, $t2

Tipo R

cod. oper 6 bits

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]

rs = I[25-21] Instruccin tipo R rt = I[20-16] rd = I[15-11]

5 Sel. R1 Sel. R2 5 Registros 5 Sel. R Dato esc. R R1 R2

32 32

ALU zero ALUres 32 3 Operacin ALU

escribir

Diseo del procesador


Tipo I
cod. oper
6 bits operacin de la instruccin

Monociclo: Datapath (lw y sw)


rs
5 bits

3126 2521 2016 150

rt
5 bits

desp
16 bits

rt, desp rs lw $t0 , desplaz ($t1) sw $t0 , desplaz ($t1)

Registro del operando fuente

Campo de Registro del desplazamiento de memoria operando destino

lw: Registros[rt] Memoria[Registros[rs]+SignExt[desp] sw: Memoria[Registros[rs]+SignExt[desp]] Registros[rt]


escribir rs = I[25-21] Instruccin tipo I rt = I[20-16] (sw) Sel. R1 Sel. R2 Registros (lw) Sel. R Dato esc. R 1 6 R1 R2 ALU zero ALUres Dir dato lec. dato esc. dato (sw) Memoria de datos leer (lw) escribir Elemento de estado

desp = I[15-0]

signo exten dido

32

13

10/30/2012

Diseo del procesador


3126 2521 2016 150

Monociclo: Datapath (beq)


rt rs desp beq $t1, $t2, desplaz

Tipo I

cod. oper
6 bits operacin de la instruccin

rs
5 bits

rt
5 bits

desp
16 bits

Registro del operando fuente 1

Registro del Campo de operando desplazamiento de memoria fuente 2

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.

rs = I[25-21] Instruccin beq rt = I[20-16]

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6

R1 R2

ALU zero ALUres

Hacia una lgica de control de saltos

desp = I[15-0]

signo exten dido

32

Diseo del procesador

Monociclo: Datapath (ensamblaje)

Combinacin del hardware de los diferentes tipos de instrucciones:


Ningn recurso del datapath puede ser utilizado ms de una vez Aquellas unidades funcionales que se necesitan ms de una vez
deben estar duplicadas

Pueden existir elementos compartidos por diferentes tipos de


instrucciones.

Para compartir estos elementos se necesitan multiplexores

14

10/30/2012

Diseo del procesador


rs = I[25-21] Instruccin tipo R rt = I[20-16] rd = I[15-11] 5 Sel. R1 Sel. R2 5 Registros 5 Sel. R Dato esc. R 3 Operacin ALU R1 R2 32 32 ALU zero ALUres 32

Ensamblaje de instrucciones tipo R y lw,sw


Elemento de estado rs = I[25-21] Instruccin tipo I rt = I[20-16] (sw) Sel. R1 Sel. R2 Registros (lw) Sel. R Dato esc. R R1 R2 ALU zero ALUres Dir dato lec. dato esc. dato (sw) Memoria de datos leer (lw) escribir

desp = I[15-0]

16

signo exten dido

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

Sel. R1 Sel. R2 Registros Dir_esc Dato esc.

R1 R2

ALU zero
0 1

Result

Dir dato lec. dato esc. dato Memoria de datos


1 0

Necesarios multiplexores

Diseo del procesador

Camino de datos unificado tras aadir BEQ

4 Add desp. izda. 2 Add ALUres

0 1

Nuevo multiplexor

I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6

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]

signo exten dido

32

15

10/30/2012

Monociclo. Control de la ALU

Diseo del procesador


3126 2521 2016 1511 106 50

Monociclo: Diseo de la UC
rd, rs, rt

add, ...

cod. oper

rs

rt

rd

shamt

funct

add $t0, $t1, $t2

Registro del 1 operando fuente

Registro del 2 operando fuente

Registro del operando destino

3126 2521 2016 150

rt, desp rs lw $t0, desplaz($t1)

lw, sw

cod. oper

rs

rt

desp

sw $t0, desplaz($t1)

Registro del Registro del operando fuente operando destino

Direccin de memoria Campo desplazamiento = rs + desp


de memoria

3126 2521 2016 150

beq

cod. oper

rs

rt

desp

rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp

Registro del operando fuente 1

Registro del Campo desplazamiento operando fuente 2 de memoria

Examinando los formatos, deducimos el encaminamiento de los datos, para lo cual se necesitan las seales de control:

MemRead MemWrite PCSrc

RegDst RegWrite

ALUSrc MemtoReg

16

10/30/2012

Diseo del procesador

Seales de control necesarias

4 Add desp. izda. 2 Add ALUres

0 1

PCSrc

RegWrite I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6

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]

signo exten dido

32

MemRead

ALU control ALUOp 2

Diseo del procesador


funct
F5 F4 F3 F2 F1 F0 5 4 3 2 6 ALU 3 1 0

Monociclo: Control ALU

ALUc 000 001 010 110 111

Funcin AND OR suma resta activar si menor que

I[5-0 ALUop
2

ALU control

ALUc

Instruccin lw sw beq add sub and or slt

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

funct xxxxxx xxxxxx xxxxxx 100000 100010 100100 100101 101010

ALU suma suma resta suma resta AND OR activar si menor que

ALUc 010 010 110 010 110 000 001 111

17

10/30/2012

Diseo del procesador


funct
F5 F4 F3 F2 F1 F0 5 4 3 2 6 ALU 3 1 0

Monociclo: Control ALU

ALUc 000 001 010 110 111

Funcin AND OR suma resta activar si menor que

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

ALUop ALUop1 0 0 1 1 1 1 1 ALUop0 0 1 0 0 0 0 0 F5 x x 1 1 1 1 1 F4 x x 0 0 0 0 0 F3 x x 0 0 0 0 1

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

Operacin 010 110 010 110 000 001 111

Diseo del procesador


funct
F5 F4 F3 F2 F1 F0 5 4 3 2 6 ALU 3 1 0
F3 F2 F1 F0 ALUop1

Monociclo: Control ALU


ALUop0

ALUc2 ALUc1

I[5-0 ALUop
2

ALU control

ALUc0

ALUc

ALUop ALUop1 0 x 1 1 1 1 1 ALUop0 0 1 x x x x x F5 x x x x x x x F4 x x x x x x x F3 x x 0 0 0 0 1

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

Operacin 010 110 010 110 000 001 111

18

10/30/2012

Diseo del procesador


Camino de datos con la UC
4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Seales de control necesarias

Add desp. izda. 2 ALUres

PCSrc

I[31-26] Control

I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador


4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Seales de control necesarias


0

Add desp. izda. 2 ALUres

PCSrc

I[31-26] Control

I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Seal Control RegDst RegWrite ALUSrc PCSrc MemRead MemWrite MemtoReg

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

Diseo del procesador

Monociclo: Camino de datos R

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador

Monociclo: Camino de datos R (1)

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

Bsqueda de instruccin Incremento de PC

I[5-0]

ALU control

20

10/30/2012

Diseo del procesador

Monociclo: Camino de datos R (2)

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

Lectura de registros fuentes Inicializacin de UC

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador

Monociclo: Camino de datos R (3)

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU


0 1

zero ALUres Dir dato lec. dato esc. dato Memoria de datos
1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

Operacin ALU

I[5-0]

ALU control

10

21

10/30/2012

Diseo del procesador

Monociclo: Camino de datos R (4)

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres

0 1

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1

zero ALUres Dir dato

0
lec. dato esc. dato Memoria de datos
1 0

1
I[15-0]

signo exten dido

32

0
ALU control

Registro destino

I[5-0]

10

Diseo del procesador

Monociclo: Camino de datos lw

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

22

10/30/2012

Diseo del procesador

Monociclo: Camino de datos lw

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres

0 1

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1

zero ALUres Dir dato

0
lec. dato esc. dato Memoria de datos
1 0

0
I[15-0]

signo exten dido

32

1
ALU control

I[5-0]

00

Diseo del procesador

Monociclo: Camino de datos beq

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

23

10/30/2012

Diseo del procesador

Monociclo: Camino de datos beq

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres

0 1

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

0
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1

zero ALUres Dir dato

0
lec. dato esc. dato Memoria de datos
1 0

X
I[15-0]

signo exten dido

32

0
ALU control

I[5-0]

01

Diseo del procesador


Instrucciones afectadas 0 1 MemRead R sw beq lw MemWrite R lw beq sw ALUSrc R beq lw sw RegDst lw R RegWrite sw beq R lw PCsrc R lw sw beq MemtoReg R lw
RegWrite ALUSrc I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]
0 1

Monociclo: Resumen control

4 Add

Add desp. izda. 2 ALUres

PCSrc

MemWrite ALU zero

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R

R1 R2

MemtoReg

0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

RegDst I[15-0]

ALUc 1 6 signo exten dido 32 3 MemRead ALU control ALUOp 2

I[5-0]

24

10/30/2012

Diseo del procesador


4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Monociclo: Resumen control


0

Add desp. izda. 2 ALUres

PCSrc

I[31-26] Control

I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

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

Monociclo. Diseo de la Unidad de Control. Inconvenientes.

25

10/30/2012

Diseo del procesador


4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Monociclo: Resumen control


0

Add desp. izda. 2 ALUres

PCSrc

I[31-26] Control

I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

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

Diseo del procesador R


Op5 Op4 Op3 Op2 Op1 Op0 RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp 0 0 0 0 0 0 1 0 0 1 0 0 0 10

Monociclo: Diseo de la Unidad de Control lw sw


1 0 0 0 1 1 0 1 1 1 1 0 0 00 1 0 1 0 1 1 X 1 X 0 0 1 0 00

beq
0 0 0 1 0 0 X 0 X 0 0 0 1 01

Cdigos de operacin

Op5 Op4 Op3 Op2 Op1 Op0

Implementacin del control en una PLA

Formato

lw

sw

beq RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch ALUOp1 ALUOp0

Seales de control

Tabla de funciones de control

26

10/30/2012

Diseo del procesador


Cmo se realiza el salto pseudo-directo?

Monociclo: Implementacin jmp

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

Diseo del procesador

Monociclo: Implementacin jmp


desp jmp salto

3126 250

Tipo J

cod. oper
6 bits operacin

desp
26 bits Campo de desplazamiento de memoria

Nueva direccin = desplazar 2 izqda. [ (PC+4) concatenado desp ]

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

Diseo del procesador


I[29-0]
desp. izda. 2

Monociclo: Camino de datos jmp

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

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

0
R1 R2 ALU
0 1

zero ALUres Dir dato

0
lec. dato esc. dato Memoria de datos
1 0

Sel. R Dato esc. R 1 6

X
I[15-0]

signo exten dido

32

0
ALU control

I[5-0]

XX

Diseo del procesador


4 Add PC+4 (PC+4)[29-26]

Monociclo: Unidad de Control con jmp aadida


I[29-0]
desp. izda. 2 0 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 PCSrc

I[25-0] (desp)

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16]

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Instruccin R lw sw beq jmp

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

Diseo del procesador

Monociclo: Implementacin addi

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

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador

Monociclo: Implementacin addi


rt rs desp addi $t0, $t1, 32

3126 2521 2016 150

Tipo I

cod. oper
6 bits operacin de la instruccin

rs
5 bits

rt
5 bits

inmediato
16 bits

Registro del operando fuente 1

Registro del Campo de operando desplazamiento de memoria fuente 2

Suma inmediato con signo extendido al contenido del registro rs y coloca resultado en rt

rs = I[25-21] Instruccin tipo I rt = I[20-16]

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6

R1 R2

ALU zero ALUres

escribir Dir dato lec. dato esc. dato

(sw)

Memoria de datos leer

desp = I[15-0]

signo exten dido

32

29

10/30/2012

Diseo del procesador

Monociclo: Camino de datos addi

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador

Monociclo: Camino de datos addi

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres

0 1

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

1
Sel. R1 Sel. R2 Registros Sel. R Dato esc. R 1 6 R1 R2 ALU
0 1

zero ALUres Dir dato

0
lec. dato esc. dato Memoria de datos
1 0

0
I[15-0]

signo exten dido

32

0
ALU control

I[5-0]

00

30

10/30/2012

Diseo del procesador


4 Add

Monociclo: Unidad de Control con addi aadida


0

Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Instruccin R lw sw beq jmp addi

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

Diseo del procesador

Monociclo: Implementacin bne

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

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

31

10/30/2012

Diseo del procesador

Monociclo: Camino de datos bne

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador

Monociclo: Camino de datos bne

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite Sel. R1 Sel. R2 Registros I[15-11]
0 1

Add desp. izda. 2 ALUres

PCSrc

Control

0 1

Sel

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R 1 6

I[15-0]

signo exten dido

32

I[5-0]

ALU control

32

10/30/2012

Diseo del procesador

Monociclo: Camino de datos bne

4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite desp. izda. 2 Add ALUres

0 1

PCSrc

Control

0 1

Sel

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

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]

signo exten dido

0
ALU control

I[5-0]

01

Diseo del procesador


4 Add

Monociclo: Unidad de Control con bne aadida


0

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

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[20-16] R1 R2 ALU zero


0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

Sel. R Dato esc. R

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Instruccin R lw sw beq jmp addi bne

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

Diseo del procesador

Monociclo: Fallo en valor seales control

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

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Diseo del procesador


4 Add RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite

Monociclo: Fallo en valor seales control


0

Add desp. izda. 2 ALUres

PCSrc

Control

I[31-26] I[25-21] Memoria de instrucciones PC Dir I[31-0] I[15-11] I[20-16]


0 1

Sel. R1 Sel. R2 Registros Sel. R Dato esc. R

R1 R2

ALU zero
0 1

ALUres

Dir dato lec. dato esc. dato Memoria de datos


1 0

I[15-0]

16

signo exten dido

32

I[5-0]

ALU control

Fallo RegDst = 0 ALUSrc = 0

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

Diseo del procesador EJERCICIO 4

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)

Diseo del procesador


Clase de instruccin Formato R (44%) Load word (24%) Store word (12%) BEQ (18 %) JUMP (2%)
Clase instruccin Formato R Load word Store word BEQ JUMP

Monociclo: Rendimiento
Unidades funcionales usadas por dicha clase

Carga instruccin Carga instruccin Carga instruccin Carga instruccin Carga instruccin

Acceso a registros Acceso a registros Acceso a registros Acceso a registros

ALU ALU ALU ALU

Acceso a registros Acceso a memoria Acceso a memoria Acceso a registros

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

CPIVARIABLE = 8x2.4% + 7x12% + 6x44% + 5x18% + 2x2% = 6.3 ns

TCPU monociclo Ley Amdahl: TCPU variable =1+

n = 100

NI x 8 x Treloj = 1.27 NI x 6.3 x Treloj

La realizacin mediante un tiempo de ciclo variable sera un 27% ms rpida (muy dificultosa)

35

10/30/2012

Diseo del procesador

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

Solucin: Implementacin MULTICICLO

Utilizar un Treloj ms corto


(obtenido a partir de los retardos de las unidades funcionales bsicas)

Las instrucciones requieren ms de un ciclo para ejecutarse

Implementacin multiciclo: Elementos del Data Path. Descomposicin de la instruccin.

36

10/30/2012

Diseo del procesador


add, ...

Multiciclo: Repaso instrucciones


rd, rs, rt

3126 2521 2016 1511 106 50

cod. oper

rs

rt

rd

shamt

funct

add $t0, $t1, $t2

Registro del 1 operando fuente

Registro del 2 operando fuente

Registro del operando destino

3126 2521 2016 150

rt, desp rs lw $t0, desplaz($t1)

lw, sw

cod. oper

rs

rt

desp

sw $t0, desplaz($t1)

Registro del Registro del operando fuente operando destino

Direccin de memoria Campo desplazamiento = rs + desp


de memoria

3126 2521 2016 150

beq

cod. oper

rs

rt

desp

rt rs desp beq $t1, $t2, desplaz Direccin de memoria (si rs = rt) = (PC + 4) + desp

Registro del operando fuente 1

Registro del Campo desplazamiento operando fuente 2 de memoria

Examinando los formatos, deducimos el encaminamiento de los datos, para lo cual se necesitan las seales de control:

MemRead MemWrite PCSrc

RegDst RegWrite

ALUSrc MemtoReg

Diseo del procesador

Multiciclo: Visin de alto nivel

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

Write Addr Write Data

Read Data 2

ALU B

IR Registro instrucciones A, B Registros de datos

MDR Registro de datos de memoria ALUout Registro salida ALU

ALUout

Read Data (Instr. or Data)

Memoria

IR

Read Addr 1 Read Registros Read Addr 2 Data 1

37

10/30/2012

Diseo del procesador


Operaciones realizadas al final de un ciclo

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

Write Addr Write Data

Read Data 2

ALU B

IR Registro instrucciones A, B Registros de datos

MDR Registro de datos de memoria ALUout Registro salida ALU

Diseo del procesador

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)

Igual que monociclo


Controlado por seal de control RegDst

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)

Igual que monociclo


Controlado por seal de control MemtoReg

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3

32

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

ALUout

Read Data (Instr. or Data)

Memoria

IR

Read Addr 1 Read Registros Read Addr 2 Data 1

38

10/30/2012

Diseo del procesador

Multiciclo: Control

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador


MemRead Baja: Nada Alta: Se lee dato de memoria MemWrite Baja: Nada Alta: Se escribe dato en memoria ALUSelA Baja: PC ALU Alta: rs ALU RegDst Baja: rt reg.destino Alta: rd reg.destino RegWrite Baja: Nada Alta: Se escribe dato en registo MemtoReg Baja: ALU reg.destino Alta: Memoria reg.destino IorD Baja: PC Memoria Alta: ALU Memoria IRWrite Baja: Nada Alta: Memoria reg. Instruccin PCWrite Baja: Nada Alta: Escribe PC (control por PCWriteCond) PCWriteCond Baja: Nada Alta: Escribe PC si salida zero de ALU
PC IorD PCWriteCond

Multiciclo: Control

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

ALUout

0 1

Memoria IR Address

2 0 1

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

2 0 1

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

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

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

39

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

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.)

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

40

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

42

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 3: CLCULO DIRECCIN DE MEMORIA LW, SW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria:
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA = 1 ALUSelB = 10 ALUOp = 00 (Suma)

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

43

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 3: EJECUCIN TIPO R


Acciones: dependen del tipo de instruccin Instrucciones aritmtico-lgicas (TIPO R):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA= 1 ALUSelB = 00 ALUOp = 10 (Determinada por cdigo funcin)

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

44

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 3: TERMINACIN BRANCH


Acciones: dependen del tipo de instruccin Instrucciones de salto condicional (BEQ):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA = 1 PCWriteCond = 1 ALUSelB = 00 PCSource = 01 ALUOp = 01 (Resta)

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

45

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 3: TERMINACIN JUMP


Acciones: dependen del tipo de instruccin Instrucciones de salto incondicional (jump):
PCWriteCond PCWrite

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst PC[31-28] Instr[25-0] Shift left 2 28

PC = PC[3128] | | (IR[250] << 2)


2 0 1

Instr[31-26]

Seales de control: PCWrite = 1 PCSource = 10

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

46

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 4: ACCESO A MEMORIA LW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW y SW):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: MemRead = 1 IorD = 1

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

47

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 4: ACCESO A MEMORIA SW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW y SW):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

48

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

ETAPA 4: TERMINACIN TIPO R


Acciones: dependen del tipo de instruccin Instrucciones aritmtico-lgicas (Tipo R):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: RegDst = 1 MemToReg = 0 RegWrite = 1

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

49

10/30/2012

Diseo del procesador

Multiciclo: Descomposicin de la instruccin

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Implementacin multiciclo: Elementos del Data Path. Descomposicin de la instruccin.

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: RegWrite = 1 MemtoReg = 1 RegDst = 0

50

10/30/2012

Diseo del procesador


MemRead Baja: Nada Alta: Se lee dato de memoria MemWrite Baja: Nada Alta: Se escribe dato en memoria ALUSelA Baja: PC ALU Alta: rs ALU RegDst Baja: rt reg.destino Alta: rd reg.destino RegWrite Baja: Nada Alta: Se escribe dato en registo MemtoReg Baja: ALU reg.destino Alta: Memoria reg.destino IorD Baja: PC Memoria Alta: ALU Memoria IRWrite Baja: Nada Alta: Memoria reg. Instruccin PCWrite Baja: Nada Alta: Escribe PC (control por PCWriteCond) PCWriteCond Baja: Nada Alta: Escribe PC si salida zero de ALU
PC IorD PCWriteCond

Multiciclo: Control

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

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

Diseo del procesador

Detalle de cada instruccin

Ejecucin completa instruccin lw

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

51

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de lw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de lw

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

En vertical: ejecucin completa de lw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de lw

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

53

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de lw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de lw

ETAPA 3: CLCULO DIRECCIN DE MEMORIA LW, SW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria:
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA = 1 ALUSelB = 10 ALUOp = 00 (Suma)

54

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de lw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de lw

ETAPA 4: ACCESO A MEMORIA LW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW y SW):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: MemRead = 1 IorD = 1

55

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de lw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de lw

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: RegWrite = 1 MemtoReg = 1 RegDst = 0

56

10/30/2012

Diseo del procesador

Detalle de cada instruccin

Ejecucin completa instruccin sw

Diseo del procesador

En vertical: ejecucin completa de sw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

57

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de sw

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

En vertical: ejecucin completa de sw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

En vertical: ejecucin completa de sw

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

En vertical: ejecucin completa de sw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

59

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de sw

ETAPA 3: CLCULO DIRECCIN DE MEMORIA LW, SW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria:
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

En vertical: ejecucin completa de sw

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA = 1 ALUSelB = 10 ALUOp = 00 (Suma)

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

60

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de sw

ETAPA 4: ACCESO A MEMORIA SW


Acciones: dependen del tipo de instruccin Instrucciones de referencia a memoria (LW y SW):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Detalle de cada instruccin

Ejecucin completa instruccin R

61

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de R

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de R

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

En vertical: ejecucin completa de R

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de R

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

63

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de R

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de R

ETAPA 3: EJECUCIN TIPO R


Acciones: dependen del tipo de instruccin Instrucciones aritmtico-lgicas (TIPO R):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA= 1 ALUSelB = 00 ALUOp = 10 (Determinada por cdigo funcin)

64

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de R

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de R

ETAPA 4: TERMINACIN TIPO R


Acciones: dependen del tipo de instruccin Instrucciones aritmtico-lgicas (Tipo R):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: RegDst = 1 MemToReg = 0 RegWrite = 1

65

10/30/2012

Diseo del procesador

Detalle de cada instruccin

Ejecucin completa instruccin beq

Diseo del procesador

En vertical: ejecucin completa de beq

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

66

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de beq

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

En vertical: ejecucin completa de beq

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

En vertical: ejecucin completa de beq

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

En vertical: ejecucin completa de beq

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

68

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de beq

ETAPA 3: TERMINACIN BRANCH


Acciones: dependen del tipo de instruccin Instrucciones de salto condicional (BEQ):
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

Seales de control: ALUSelA = 1 PCWriteCond = 1 ALUSelB = 00 PCSource = 01 ALUOp = 01 (Resta)

Detalle de cada instruccin

Ejecucin completa instruccin jump

69

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de jump

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de jump

ETAPA 1: BSQUEDA DE LA INSTRUCCIN


Accin comn a cualquier instruccin: cargar instruccin en memoria y calcular la direccin de la siguiente instruccin en orden secuencial
PCWriteCond PCWrite

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

Diseo del procesador

En vertical: ejecucin completa de jump

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de jump

ETAPA 2: DECODIFICACIN DE INSTRUCCIN


Acciones: Aplicables a toda instruccin No perjudiciales para unas y aplicables a otras
PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

IorD

Lectura registros: A = Registros[IR(rs)] B = Registros[IR(rt)]


PC[31-28] Shift left 2 28

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

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

71

10/30/2012

Diseo del procesador

En vertical: ejecucin completa de jump

Bsqueda de instruccin

1 ciclo de reloj
Clculo direcc. memoria

Decodificacin de instruccin

Clculo direcc. memoria

Ejecucin

Terminacin

Terminacin

Acceso a memoria

Acceso a memoria

Terminacin

Postescritura

lw

sw

beq

jump

Diseo del procesador

En vertical: ejecucin completa de jump

ETAPA 3: TERMINACIN JUMP


Acciones: dependen del tipo de instruccin Instrucciones de salto incondicional (jump):
PCWriteCond PCWrite

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst PC[31-28] Instr[25-0] Shift left 2 28

PC = PC[3128] | | (IR[250] << 2)


2 0 1

Instr[31-26]

Seales de control: PCWrite = 1 PCSource = 10

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

72

10/30/2012

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

Multiciclo: Resumen de las etapas

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Implementacin multiciclo. Obtencin del diagrama de estados.

73

10/30/2012

Diseo del procesador

Multiciclo: Diseo de la UC (repaso formatos)


rd, rs, rt

3126 2521 2016 1511 106 50

add, ...

op

rs
Registro del 1 operando fuente

rt

rd

shamt

funct

add $t0, $t1, $t2

Registro del 2 operando fuente

Registro del operando destino

3126 2521 2016 150

rt, desp rs lw $t0, desplaz($t1)

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

Registro del operando fuente 1

Registro del Campo desplazamiento operando fuente 2 de memoria

3126 2521 2016 150

jal

op

direccin de salto
Direccin destino del salto

Direccin de salto = PC[31-28] || direccin << 2

Diseo del procesador


Control de la implementacin multiciclo Ms complejo que el de la monociclo (por las etapas)

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])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

74

10/30/2012

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

Diseo autmata control: Etapa 1

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


IorD PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 1

PCWriteCond PCWrite

0
PC[31-28] Shift left 2 28

Instr[25-0]

Iniciar
2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

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

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

75

10/30/2012

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

Diseo autmata control: Etapa 2

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


IorD PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 2


0
IorD = 0 MemRead IRWrite ALUSelA= 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PCWriteCond PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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]

A = Registros[IR(rs)] B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)


Instrucciones Instrucciones Referencia a mem Tipo R Instruccin Instruccin Salto condicional Salto incondicional

76

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 3 (lw o sw)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond PCWrite IorD

Diseo autmata control: Etapa 3 (lw o sw)

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

0
2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
MDR

Write Addr Write Data

ALU Read Data 2 B

4
Shift left 2

Instr[15-0] Sign Extend Instr[5-0]

0 1 2 3
ALU control

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

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

Diseo del procesador

Diseo autmata control: Etapa 3 (tipo R)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond PCWrite IorD

Diseo autmata control: Etapa 3 (tipo R)

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

0
2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
MDR

Write Addr Write Data

ALU Read Data 2 B

4
Shift left 2

Instr[15-0] Sign Extend Instr[5-0]

0 1 2 3
ALU control

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

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

Diseo del procesador

Diseo autmata control: Etapa 3 (beq)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


IorD PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 3 (beq)

PCWriteCond PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

0
2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
MDR

Write Addr Write Data

ALU Read Data 2 B

4
Shift left 2

Instr[15-0] Sign Extend Instr[5-0]

0 1 2 3
ALU control

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

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

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

79

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 3 (jump)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


IorD PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 3 (jump)

PCWriteCond PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

0
2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
MDR

Write Addr Write Data

ALU Read Data 2 B

4
Shift left 2

Instr[15-0] Sign Extend Instr[5-0]

0 1 2 3
ALU control

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

zero

1
ALUSelA =0 ALUSelB = 11 ALUop = 00

9
J
PCSource=01 PCWrite

32

2
ALUSelA =1

6
ALUSelA =1 ALUSelB = 00 ALUop = 10

PC = PC[3128] | | (IR[250] << 2)


Por mantener la regularidad, la instruccin J tambin se ejecuta en 3 ciclos aunque podramos ahorrar uno (el de la op. ALU)

ALUSelB = 10 ALUop = 00

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

80

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 4 (lw)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond IorD PCWrite PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 4 (lw)


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

ALUSelA =1 ALUSelB = 10 ALUop = 00

6
ALUSelA =1 ALUSelB = 00 ALUop = 10

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

81

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 4 (sw)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond IorD PCWrite PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 4 (sw)


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

ALUSelA =1 ALUSelB = 10 ALUop = 00

6
ALUSelA =1 ALUSelB = 00 ALUop = 10

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

5
Memwrite IorD = 1

82

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 4 (tipo R)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond IorD PCWrite PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 4 (tipo R)


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

ALUSelA =1 ALUSelB = 10 ALUop = 00

6
ALUSelA =1 ALUSelB = 00 ALUop = 10

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

5
Memwrite IorD

7
RegWrite MemtoReg = 0 RegDst

83

10/30/2012

Diseo del procesador

Diseo autmata control: Etapa 5 (lw)


IR = Memoria[PC] PC = PC + 4

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


PCWriteCond IorD PCWrite PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

Diseo autmata control: Etapa 5 (lw)


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

ALUSelA =1 ALUSelB = 10 ALUop = 00

6
ALUSelA =1 ALUSelB = 00 ALUop = 10

3
Memread IorD = 1

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

5
Memwrite IorD

7
RegWrite MemtoReg = 0 RegDst

84

10/30/2012

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

Diseo autmata control: Resumen

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

Diseo autmata control: Resumen

1 ciclo de reloj

ALUSelA =0 ALUSelB = 11 ALUop = 00

ALUSelA =1 ALUSelB = 10 ALUop = 00 SW 5

ALUSelA =1 6 ALUSelB = 00 ALUop = 10 8

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

PCSource=10 PCwrite

3 Memread IorD = 1

LW

7 Memwrite IorD = 1 RegWrite MemtoReg = 0 RegDst = 1

4 RegWrite MemtoReg = 1 RegDst = 0

85

10/30/2012

Implementacin multiciclo. Obtencin del diagrama de estados. Implementacin final.

Diseo del procesador


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

Diseo autmata control: Resumen

1 ciclo de reloj

ALUSelA =0 ALUSelB = 11 ALUop = 00

ALUSelA =1 ALUSelB = 10 ALUop = 00 SW 5

ALUSelA =1 6 ALUSelB = 00 ALUop = 10 8

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

PCSource=10 PCwrite

3 Memread IorD = 1

LW

7 Memwrite IorD = 1 RegWrite MemtoReg = 0 RegDst = 1

4 RegWrite MemtoReg = 1 RegDst = 0

86

10/30/2012

Diseo del procesador

Multiciclo: Control mediante FSM

Circuito combinacional de control (PLA)

Entradas

PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSelB ALUSelA RegWrite RegDst

Op5

Op4

Op3

Op2

Op1

Op0

Salidas

Reg. estado Inst[31-26] Reloj

Siguiente estado

Diseo del procesador

Control mediante FSM: Salidas de control


0

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

Diseo del procesador

Control mediante FSM: Estado siguiente


0

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

Diseo del procesador

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

Diseo del procesador


Cuando se presenta una excepcin:

Excepciones: Posibles tratamientos

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

Diseo del procesador


Aadir registros:

Excepciones: Modificaciones al camino de datos

EPC (32 bits) Cause (32 bits)


0 Instruccin indefinida 1 Desbordamiento aritmtico

Aadir seales a la UC Aadir entrada al MUX fuente del PC

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

Salida ALU ALUOp = 01(-)

ALUSelB = 01

89

10/30/2012

Diseo del procesador

Excepciones: Modificaciones en la unidad de control


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

1 ciclo de reloj

ALUSelA =0 ALUSelB = 11 ALUop = 00

ALUSelA =1 ALUSelB = 10 ALUop = 00 SW 5

ALUSelA =1 6 ALUSelB = 00 ALUop = 10 8

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

PCSource=10 PCWrite

3 Memread IorD = 1

LW

7 Memwrite IorD = 1 RegWrite MemtoReg = 0 RegDst = 1

4 RegWrite MemtoReg = 1 RegDst = 0

Diseo del procesador 0

Excepciones: Modificaciones de la unidad de control


1
instruccin indefinida

10
IntCause=0 CauseWrite

7 lw sw

1
jmp R beq indef.

desbordamiento

12 11

2
lw sw

IntCause=1 CauseWrite

ALUSelA=0 ALUSelB=01 ALUOp=01 EPCWrite

7
desbor. no desbor.

10

13
PCWrite PCSource=11

11

12

4
13 0

90

10/30/2012

Diseo del procesador

Multiciclo: Implementacin addi

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]

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

Diseo del procesador

Repaso formatos (inmediato)

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

addi $t0, $t1, 32


R8 R9 8 diez

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

001000

001001 001000

0000000000100000

I I I

ori $t0, $t1, 4


13 diez

001101 001100 12 diez

001001 001000 001001 001000

0000000000000100 0000000000100100

andi $t0, $t1, 36

91

10/30/2012

Diseo del procesador


PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst PC[31-28] Instr[25-0] Shift left 2 28 PCWriteCond PCWrite

Multiciclo: Implementacin addi

IorD

0
2 0 1

Instr[31-26]

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
MDR

Write Addr Write Data

ALU Read Data 2 B

4
Shift left 2

Instr[15-0] Sign Extend Instr[5-0]

0 1 2 3
ALU control

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

zero

1
ALUSelA =0 ALUSelB = 11 ALUOp = 00 ALUop

32

ALUout = A + SignExt(IR[15-0]) Registros(rt) = ALUout Nuevo


RegWrite MemtoReg = 0 RegDst = 0

2
ALUSelA =1 ALUSelB = 10 ALUop = 00

Diseo del procesador

Multiciclo: Implementacin bne

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]

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

92

10/30/2012

Diseo del procesador

Repaso formatos (saltos condicionales)

Instruccin: branch if equal (saltar si igual)

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

3126 2521 2016 150

beq $t0, $t1, exit


R8 R9 84 4 diez

000100

01000

01001

0000000000001000

3126 2521 2016 150

bne $t0, $t1, bucle


R8 R9 44 5 diez

000101

01000

01001

0000000000000100

Diseo del procesador

Multiciclo: Implementacin bne


1 0

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

Sel

PC[31-28] Instr[25-0] Shift left 2 28

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

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

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

93

10/30/2012

Diseo del procesador


1 0

Multiciclo: Implementacin bne


Sel

PCWriteCond PCWrite IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond Sel = 1

Diseo del procesador

Multiciclo: Implementacin bne, blez, bgtz

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

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

94

10/30/2012

Diseo del procesador

Multiciclo: Implementacin bne, blez, bgtz

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

bne beq blez bgtz zero


OR

Bit 31 del resultado de la ALU (signo)

Diseo del procesador

Multiciclo: Implementacin bne, blez, bgtz


00 01 10

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

Sel

11

1 (bit signo)

PC[31-28] Instr[25-0] Shift left 2 28

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

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

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

95

10/30/2012

Diseo del procesador

Multiciclo: Multiciclo: Implementacin Implementacin bne, blez, bgtz bne


00 01 10 11

PCWriteCond PCWrite IorD

Sel

1 (bit signo)

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

2 0 1

PC

Read Data (Instr. or Data) Write Data

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

1
ALUSelA =0 ALUSelB = 11 ALUop = 00

zero ALU

0 1 1 0
Instr[15-0]

Write Addr Write Data

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

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond Sel = 00

Diseo del procesador

Multiciclo:Multiciclo: Implementacin Implementacin bne, blez, bgtz blez


00 01 10 11

PCWriteCond PCWrite IorD

Sel

1 (bit signo)

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

2 0 1

PC

Read Data (Instr. or Data) Write Data

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

1
ALUSelA =0 ALUSelB = 11 ALUop = 00

zero ALU

0 1 1 0
Instr[15-0]

Write Addr Write Data

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

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond Sel = 10

96

10/30/2012

Diseo del procesador

Multiciclo:Multiciclo: Implementacin Implementacin bne, blez, bgtz


00 01 10 11

PCWriteCond PCWrite IorD

Sel

1 (bit signo)

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PC[31-28] Instr[25-0] Shift left 2 28

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

2 0 1

PC

Read Data (Instr. or Data) Write Data

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

1
ALUSelA =0 ALUSelB = 11 ALUop = 00

zero ALU

0 1 1 0
Instr[15-0]

Write Addr Write Data

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

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond Sel = 11

Diseo del procesador

Multiciclo: Implementacin jal

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]

PC[31-28] Instr[25-0] Shift left 2 28

2 0 1

PC

Read Data (Instr. or Data) Write Data

0 1 1 0
Instr[15-0]

Write Addr Write Data

ALU Read Data 2 B

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

97

10/30/2012

Diseo del procesador


op op jump (saltar) jump and link (saltar y enlazar) jump on register (saltar al contenido del registro) j eti1
0x00400004 hexa 2 diez 000011 3 diez

Multiciclo: Implementacin jal


direccin de salto rs

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

3126 2521 2016 1511 106 50

jr $t0
R8

000000

01000

00000

00000

00000

001000

Diseo del procesador

Multiciclo: Implementacin jal

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

PC[31-28] Instr[25-0] Shift left 2 28

PC

Read Data (Instr. or Data) Write Data

31

0 1 2 2 1 0

Write Addr Write Data

ALU Read Data 2 B

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

Read Addr 1 Registros Read Data 1 Read Addr 2

0 1

zero

98

10/30/2012

Diseo del procesador


PCWriteCond IorD PCWrite

Diseo autmata control: Etapa 3 (jump)

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

IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

PC

Read Data (Instr. or Data) Write Data

31

0 1 2 2 1 0

Write Addr Write Data

ALU Read Data 2 B

ALUout

0 1

Memoria IR Address

Read Addr 1 Registros Read Data 1 Read Addr 2

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]

PC = PC[3128] | | (IR[250] << 2) R31 = PC + 4

PCSource = 10 PCWrite RegDst = 01 MemtoReg = 01 RegWrite

Como MemtoReg y RegDst necesitan 2 bits de control, habra que modificar todo el autmata

Diseo del procesador EJERCICIO 5

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.

Ciclos de reloj CPI = Nmero de instrucciones


Nmero de ciclos por cada tipo de instruccin en mquina multiciclo: Instruccin load: 5 Instruccin store: 4 Instruccin tipo R: 4 Instruccin salto condicional: 3 Instruccin salto incondicional: 3

CPI = 0.22 x 5 + 0.11 x 4 + 0.49 x 4 + 0.16 x 3 + 0.02 x 3 = 4.04 ciclos


Mejor que el peor de los casos particulares, lo cual en una arquitectura monociclo es imposible

99

10/30/2012

Diseo del procesador

Multiciclo frente a monociclo

Implementacin monociclo: Ciclo 1 Clk Ciclo 2

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

lw IFetch Dec Exec Mem WB

sw IFetch Dec Exec Mem

Tipo R IFetch

Control Microprogramado.

100

10/30/2012

Diseo del procesador

Multiciclo: Control mediante FSM

Circuito combinacional de control

Entradas

PCWrite PCWriteCond IorD MemRead MemWrite IRWrite MemtoReg PCSource ALUOp ALUSelB ALUSelA RegWrite RegDst

Op5

Op4

Op3

Op2

Op1

Op0

Salidas

Reg. estado Inst[31-26] Reloj

Siguiente estado

Diseo del procesador

Control mediante FSM: Salidas de control


0

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

Diseo del procesador

Control mediante FSM: Estado siguiente


0

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

Diseo del procesador

Control mediante FSM: Complejidad


use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity control_mips_multiciclo is port (CLK: in STD_LOGIC; Op: in STD_LOGIC_VECTOR (5 downto 0); ALUOp: out STD_LOGIC_VECTOR (1 downto 0); ALUSelA: out STD_LOGIC; ALUSelB: out STD_LOGIC_VECTOR (1 downto 0); IorD: out STD_LOGIC; IRWrite: out STD_LOGIC; MemRead: out STD_LOGIC; MemtoReg: out STD_LOGIC; MemWrite: out STD_LOGIC; PCSource: out STD_LOGIC_VECTOR (1 downto 0); PCWrite: out STD_LOGIC; PCWriteCond: out STD_LOGIC; RegDst: out STD_LOGIC; RegWrite: out STD_LOGIC; TargetWrite: out STD_LOGIC); end; architecture control_mips_multiciclo_arch of control_mips_multiciclo is type Sreg0_type is (e0, e1, e2, e3, e4, e5, e6, e7, e8, e9); signal Sreg0: Sreg0_type; begin Sreg0_machine: process (CLK) begin if CLK'event and CLK = '1' then case Sreg0 is when e0 => Sreg0 <= e1; when e1 => if op="000000" then Sreg0 <= e6; elsif op="000100" then Sreg0 <= e8; elsif op="000010" then Sreg0 <= e9; elsif op="100011"or op="101011" then Sreg0 <= e2; end if; when e2 => if op="100011" then Sreg0 <= e3; elsif op="101011" then Sreg0 <= e5; end if; when e3 => Sreg0 <= e4;

VHDL

102

10/30/2012

Diseo del procesador

Control mediante FSM: Problemas

Problemas control mediante FSM


La unidad de control para el conjunto completo de instrucciones del MIPS puede llevar de 3 a ms de 20 ciclos de reloj
El FSM resultante puede tener cientos o miles de estados y transiciones Representaciones tremendamente complejas

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

Diseo del procesador

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

Diseo del procesador

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

Diseo del procesador

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

Secuenciamiento de microinstrucciones, como en un programa


Autmata estados finitos ROM o PLA (microprograma)

ALUSelA=0 ALUSelB=11 ALUOp=00 PCWrite

microinstruccin

104

10/30/2012

Diseo del procesador

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

Diseo del procesador

Control microprogramado: conceptos generales

Qu debe contener una microinstruccin? Una microinstruccin debe especificar:


Qu seales de control deben ser asertadas Cul es la microinstruccin que se ejecutar a continuacin

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

Diseo del procesador

Control microprogramado: conceptos generales

Tipos de secuenciamiento Explcito:


Usado por el modelo de Wilkes Cada microinstruccin incluye la direccin de la siguiente

Implcito:
Consiste en tener ordenadas secuencialmente microinstrucciones de cada microprograma Necesitamos un contador microinstruccin en curso de microprograma que todas las

apunte

la

Diseo del procesador

Control microprogramado: conceptos generales

Codificacin de las microinstrucciones Vertical:


Cada microinstruccin especifica una o pocas microoperaciones a ser ejecutadas Capacidad limitada para expresar paralelismo en las microoperaciones Palabra de control corta

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

Diseo del procesador


0
IorD = 0 MemRead IRWrite ALUSelA = 0 ALUSelB =01 ALUop = 00 PCSource = 00 PCWrite

Diseo a partir del autmata control

1 ciclo de reloj

ALUSelA =0 ALUSelB = 11 ALUop = 00

ALUSelA =1 ALUSelB = 10 ALUop = 00 SW 5

ALUSelA =1 6 ALUSelB = 00 ALUop = 10 8

ALUSelA =1 ALUSelB = 00 ALUop = 01 PCSource=01 PCWritecond

PCSource=10 PCWrite

3 Memread IorD = 1

LW

7 Memwrite IorD = 1 RegWrite MemtoReg = 0 RegDst = 1

4 RegWrite MemtoReg = 1 RegDst = 0

Diseo del procesador

UC microprogramada. Esquema (1)


PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

ROM (lgica de control)


1 estado
sumador

14 seales de control del camino de datos (17 bits)

seal de control del estado siguiente (2 bits)

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

Pac (19 bits) Palabra de control


0

000010 (jump) 1001 (9)


R

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

UC microprogramada. Esquema (2) 0

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

Instruccin lw sw R beq jmp

Diseo del procesador

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

Diseo del procesador


Add Func. code Subt

UC microprogramada. Formato (1)

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

Control Secuenciamiento PCWrite

PC rs 4 Extend Extshft rt Target rd

1 operando ALU = PC 1 operando ALU = rs

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

Diseo del procesador

UC microprogramada. Formato (2)


MemRead, IorD=0 MemRead, IorD=1 MemWrite, IorD=1

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

Control Secuenciamiento PCWrite

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

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo de una CPU con control microprogramado .

110

10/30/2012

Diseo del procesador


Add Func. code Subt

UC microprogramada. Formato (1)

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

Control Secuenciamiento PCWrite

PC rs 4 Extend Extshft rt Target rd

1 operando ALU = PC 1 operando ALU = rs

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

Diseo del procesador

UC microprogramada. Formato (2)


MemRead, IorD=0 MemRead, IorD=1 MemWrite, IorD=1

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

Control Secuenciamiento PCWrite

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

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


0
MemRead ALUSelA=0 IorD=0 IRWrite ALUSelB=01 ALUOp=00 PCWrite PCSource=00
Rtulo

Microprograma (captura y decodificacin)


Control ALU SRC1 SRC2 Destino Registro Control Secuenciam. ALU Memoria memoria PCWrite

Fetch

Add

PC

ReadPC

IR

ALU

Seq

ALUout PC+4

IR Memoria[PC]

AddCtl=11
Va a la siguiente microinstruccin

PC PC+4 (salida ALU)

IorD

PCSource ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

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

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

Diseo del procesador


0 1
Add ALUSelA=0 ALUSelB=11 ALUOp=00 TargetWrite
Rtulo

Microprograma (captura y decodificacin)


Control ALU SRC1 SRC2 Destino Registro Control Secuenciam. ALU Memoria memoria PCWrite

PC Extshft Target

dispatch 1

ALUout PC + SignExt(IR[15-0])<<2 Target ALUout

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

ROM (lgica de control)


1
PC[31-28]

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

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

Diseo del procesador


1 lw sw 2
ALUSelA=1 ALUSelB=10 ALUOp=00
Rtulo

Microprograma (captura y decodificacin)


Control ALU SRC1 SRC2 Destino Registro Control Secuenciam. ALU Memoria memoria PCWrite

LWSW1 Add

rs

Exten

Dispatch 2 AddCtl=10 Usa ROM 2 (ir a LW2 SW2)

ALUout =A + SignExt(RI[15-0]) (dir. memoria)

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

114

10/30/2012

Diseo del procesador


lw 3
MemRead ALUSelA=1 4 IorD=1 MemRead ALUSelB=10 ALUSelA=1 ALUOp=00 IorD=1
MemtoReg=1 RegDst=0 ALUSelB=10 ALUOp=00

Microprograma (lw)
ALUout =A + SignExt(RI[15-0]) (dir. memoria) MDR = Memoria[ALUout]

LW2

Add

rs

Exten

ReadALU

Seq

Add

rs

Exten

ReadALU Write rt Registros[IR[20-16]] = MDR

Fetch AddCtl=00 Va a Fetch


PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

115

10/30/2012

Diseo del procesador


2 sw 5
MemWrite ALUSelA=1 IorD=1 ALUSelB=10 ALUOp=00

Microprograma (sw)
ALUout =A + SignExt(RI[15-0]) (dir. memoria)

SW2

Add

rs

Exten

WriteALU Read rt Memoria[ALUout] = B

Fetch AddCtl=00 Va a Fetch

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

116

10/30/2012

Diseo del procesador


R 6
Rtulo Control ALU SRC1 SRC2

Microprograma (R)
Destino Registro Control Secuenciam. ALU Memoria memoria PCWrite

ALUSelA=1 ALUSelB=00 ALUOp=10 ALUSelA=1 RegDst=1 RegWrite MemtoReg=0 ALUSelB=00 ALUOp=10

Rform1 F.code LW2 F.code

rs rs

rt rt rd Registros[IR[15-11]] = ALUout

Seq Fetch AddCtl=00 Va a Fetch

7 0

ALUout = A op B

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

117

10/30/2012

Diseo del procesador


1 beq 8
BEQ1 Subt rs rt

Microprograma (beq)

ALUSelA=1 ALUSelB=00 ALUOp=01 PCWrite PCSource=01

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]

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


IR = Memoria[PC] PC = PC + 4

UC microprogramada

1 ciclo de reloj
ALUout = A + SignExt(RI[15-0])

A = Registros[IR(rs)]; B = Registros[IR(rt)] ALUout = PC + (SignExt(IR[15-0]<<2)

ALUout = A + SignExt(RI[15-0])

ALUout = A op B

Si (A == B) PC = ALUout

PC = PC[3128] | | (IR[250] << 2)

MDR = Memoria[ALUout]

Memoria[ALUout] = B

Registros[IR[15-11]] = ALUout

Registros[IR[20-16]] = MDR

lw

sw

beq

jump

118

10/30/2012

Diseo del procesador


1 9 jmp
PCWrite PCSource=10

Microprograma (jump)

JUMP1

jump addr. Fetch PC = PC[3128] | | (IR[250] << 2)

PCSource IorD ALUOp Control MemRead ALUSelB MemWrite ALUSelA MemtoReg RegWrite IRWrite RegDst
Instr[31-26]

PCWriteCond PCWrite

ROM (lgica de control)


1
PC[31-28]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

Instr[25-0]

Shift left 2

28

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

MDR

4
Shift left 2

Sign Extend

0 1 2 3
ALU control

32

Instr[5-0]

op = IR[31-26]

Diseo del procesador


Rtulo Fetch Contr.ALU SRC1 SRC2 D.ALU Memoria Add PC 4 Read PC Add PC ExtshftTarget LWSW1 Add rs Extend LW2 Add rs Extend Read ALU Add rs Extend Read ALU SW2 Add rs Extend Read ALU Rformat1 Code func rs rt Code func rs rt rd BEQ1 Subt rs rt JUMP1
PCWriteCond PCWrite

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]

PCwrite PCWriteCond IorD RegWrite RegDst AddCtl

estado
2 0 1

sumador

mux
3 2 1 0

PC

Read Data (Instr. or Data) Write Data

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

000010 (jump) 1001 (9)

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

Diseo del procesador


ROM (lgica de control)
1 estado
sumador

Implementacin lgica de seleccin de direcciones


PCwrite PCWriteCond IorD RegWrite RegDst AddCtl
lw

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

000010 (jump) 1001 (9)

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

Diseo del procesador

Mtodos para reducir el coste del hardware

Mtodos reduccin coste CPU microprogramada: Reduccin del nmero de microinstrucciones:


Muchas de las microinstrucciones se repiten. El nmero de instrucciones diferentes es mucho menor que el nmero de instrucciones almacenadas. Por lo tanto, espacio desaprovechado Solucin: adoptar formatos de microinstruccin lo ms robustos posible, evitando solapamiento

Reduccin de la anchura de las microinstrucciones:


Para acortar el tamao de las microinstrucciones se codifican todos o alguno de sus campos. Inconveniente: Hay que incluir decodificadores para extraer la informacin real

120

10/30/2012

Diseo del procesador

Mtodos para reducir el coste del hardware

Solucin de compromiso (reduccin anchura): Realizar una menor codificacin:


Incluir decodificadores, pero ms pequeos, y pueden trabajar en paralelo Las microinstrucciones son ms largas que en el caso anterior

Diseo del procesador

Nanoprogramacin

Nanoprogramacin: Un nivel por debajo de la microprogramacin:


En vez de una memoria de muchas palabras grandes, tenemos dos, una de muchas palabras pequeas y otra de pocas palabras grandes En la memoria ms ancha guardamos las diferentes microinstrucciones En la memoria ms larga, guardamos las direcciones de las microinstrucciones

121

10/30/2012

Diseo del procesador

Bibliografa recomendada
David A. Patterson y John L. Hennessy Computer Organization and Design: The Hardware/Software Interface, Third Edition Elsevier/Morgan-Kaufmann, 2005

Traduccin: Estructura y Diseo de Computadores: Interficie Circuitera/Programacin. Editorial Revert, 2000

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

También podría gustarte