Datapath

Transcripción

Datapath
Unidades principales en la
implementación
Data
Register #
PC
Address
Instruction
Instruction
memory
Registers
Register #
ALU
Address
Data
memory
Register #
El procesador: camino de datos y
control
Data
„
IEC – UTM
Moisés E. Ramírez G.
„
1
Introducción
„
„
„
„
„
Instrucciones de acceso a memoria: lw, sw
Instrucciones aritmético-lógicas: add, sub, slt, and, or
Brincos: BEQ, J
„
Para mantener consistencia, y no entrar en
detalles de los valores de voltaje, una
señal acertada indicará un 1 lógico.
„
Cualquier valor que se almacene, será
guardado durante el flanco de reloj.
„
En la implementación, cada instrucción
inicia su ejecución sobre el flanco de reloj y
la completa al siguiente flanco de reloj. El
inconveniente es que todas las
instrucciones están limitadas a la
instrucción que ocupa más tiempo.
Pasos generales
„
„
„
„
Elementos que operan sobre datos
(combinacionales)
Elementos que contienen estados (secuenciales)3
Convenciones
Se diseñará una implementación que incluya las
instrucciones más importantes.
„
Tipos de elementos:
Enviar el contador del programa (PC) a la memoria que
contiene el código y atrapar la instrucción.
Leer uno o dos registros usando los campos de la
instrucción para seleccionar los registros a leer.
Uso de la ALU para el cálculo de una dirección, ejecución
de una operación aritmética o lógica o comparaciones.
Acceso a la memoria de datos para lectura o escritura.
2
4
1
Elementos a usar para la búsqueda y captura
de la instrucción a ejecutar (fetch)
„
La memoria de
instrucciones
almacenará las
instrucciones a
ejecutar.
„
El program counter,
indica la instrucción
que se está
ejecutando
„
Un sumador es
necesario para calcular
la siguiente instrucción
que se ejecutará
(sumar 4 al PC).
Las entradas al archivo de
registros deben incluir los
números de los registros a
leer y el número de
registro a escribir, al igual
que el dato que se escribirá
en el registro especificado.
„
Para calcular la dirección en
memoria a accesar, se suma el
contenido del registro base con el
desplazamiento de 16 bits.
„
La memoria de datos permitirá
lecturas (cargas) y escrituras
(almacenamientos).
„
El módulo de extensión de signo
permitirá convertir una palabra de
16 a 32 bits. La constante es un
valor expresado en complemento a
2 de esta manera permite acceder
a direcciones anteriores o
posteriores al registro base.
5
Archivo de registros (register file)
„
Cargas y almacenamientos
5
Register
numbers
5
5
Data
3
Read
register 1
Read
register 2
Registers
Write
register
Write
data
ALUcontrol
Read
data 1
Data
Zero
ALU ALU
result
Read
data 2
7
Camino de datos para cargas y
almacenamientos
„
Se accesa a los registros, posteriormente se
calcula la dirección de memoria ya sea para leer o
escribir y posteriormente, en el caso de una carga,
se concluye con la escritura del registro.
RegWrite
a. Registers
b. ALU
6
8
2
Saltos incodicionales J
Instrucción BEQ
„
„
El repertorio de instrucciones especifica que la
base para el cálculo de la dirección destino es la
dirección siguiente a la instrucción del brinco.
Dado que en el camino de los datos dedicado a
buscar y capturar la instrucción, calculamos PC +
4, este valor se usará como base para obtener el
destino del salto.
„
„
Debido a que las instrucciones utilizan palabras de
32 bits, el desplazamiento debe corresponder a un
desplazamiento de palabras y no de bytes. Para
ello, una vez que se haya extendido en signo al
campo del desplazamiento, será necesario
multiplicarlo por 4, esto se consigue si se desplaza
2 lugares a la izquierda.
9
Camino de datos para BEQ
La instrucción j tiene dos campos, un campo de 6
bits que corresponde al opcode y otro de 26 bits
que indica la dirección destino del salto.
Para esta instrucción también deberá considerarse
que las instrucciones ocupan 4 bytes, de manera
que también será necesario desplazar este campo
2 bits a la izquierda. Después del desplazamiento
se tendrán 28 bits, de manera que el nuevo valor
del contador del programa se obtendrá
concatenando los 4 bits más significativos del PC
11
Implementación
„
„
10
Debe tomarse en cuenta que se trata de
una implementación que ejecutará todas
las instrucciones en 1 ciclo de reloj. Esto
significa que los recursos en el camino de
los datos no pueden ser usados mas de
una vez por instrucción, de manera que
cualquier elemento que se requiera mas de
una vez, deberá ser duplicado.
Al compartir elementos, pueden requerirse
múltiples conexiones a una entrada. Para
ello se utilizarán multiplexores, y será el
control el que determine cual de los datos
fluirá a cada entrada.
12
3
Implementación de un ciclo
Tipo R + acceso a memoria
„
„
„
„
El primer operando en ambos casos es el dato escrito en el
registro 1, obtenido del archivo de registros, sin embargo el
segundo operando difiere para las dos instrucciones: En el
caso de las instrucciones tipo-R el segundo operando es el
dato escrito en el registro 2, obtenido del archivo de
registros.
Mientras que para los accesos a memoria, el segundo
operando es una constante extendida en signo. Por lo que es
necesario un multiplexor en la entrada del segundo
operando de la ALU.
En la entrada de datos del archivo de registros también
deberá colocarse un multiplexor por medio del cual se
seleccione entre el dato que viene de memoria (lw) o el
resultado de la operación de la ALU
BEQ: Un multiplexor a la entrada del PC, para permitirá
seleccionar entre PC + 4 y el resultado de haber sumado a
PC + 4 una constante.
PCSrc
Add
ALU
Add result
4
RegWrite
Instruction [25–21]
PC
Read
address
Instruction
[31– 0]
Instruction
memory
Instruction [20–16]
Read
register 1
Read
register 2
Read
data 1
Read
data 2
1
M
u
Instruction [15–11] x
0
Write
register
Write
data Registers
RegDst
Instruction [15–0]
16
Sign 32
extend
1
M
u
x
0
Shift
left 2
MemWrite
ALUSrc
1
M
u
x
0
ALU
control
Zero
ALU ALU
result
MemtoReg
Address
Read
data
1
M
u
x
0
Write Data
data memory
MemRead
Instruction [5– 0]
13
15
ALUOp
Camino de datos para instrucciones tipo
R y de acceso a memoria
Control de la ALU
„
„
„
14
Para cargas y almacenamientos se requiere
que la ALU realice una suma para calcular
la dirección de la localidad de memoria a la
que se realizará el acceso.
Para instrucciones aritmético lógicas la ALU
realizará una suma, resta, AND, OR o
ajuste sobre menor que, dependiendo del
campo de función.
Para el salto sobre igual la ALU necesita
realizar una resta.
16
4
Diseño del control de la ALU
Campos en los tipos de
instrucciones
„
„
„
„
Se usan dos formatos de instrucciones distintos
Las instrucciones tipo R usan 3 registros como parámetros
(fuentes: rs, rt; destino: rd)
Las instrucciones de salto sobre igual y cargas y
almacenamientos usan 2 registros rs y rt que serán
evaluados para conocer si son iguales.
En las cargas (35) y almacenamientos (43), el registro base
rs, es el registro que se sumará a la dirección de 16 bits.
17
Tabla de verdad para controlar
las operaciones de la ALU
19
Diseño del control principal
„
„
„
„
„
Opcode bits 31-26 -> op[5-0]
En instrucciones tipo R, saltos sobre igual y
almacenamientos, los registros a ser leídos: rs
(25-21) y rt (20-16)
El registro base para cargas y almacenamientos es
rs (25-21)
Los 16 bits de desplazamiento para brincos sobre
igual, cargas y almacenamientos siempre están en
los bits 15-0
El registro destino está en uno de dos lugares:
„
„
„
En caso de requerir más funciones, serán necesarias nuevas
ecuaciones. Ya que habrá nuevas combinaciones.
18
instrucciones tipo R en rd (15-11)
Cargas en rt (20-16)
Por lo tanto es necesario un multiplexor para
seleccionar el campo que corresponda al registro
que se escribirá de acuerdo a la operación.
20
5
Cada una de las señales de
control
Camino de datos con las señales de control
identificadas
21
23
El control principal
Señales del control principal
22
24
6
Control para la implementación
de un solo ciclo
„
„
„
La unidad de control ajustará el valor de todas las
señales dependiendo del código de operación, con
excepción de PCSrc, ya que depende del resultado
de la comparación en BEQ.
Una de las entradas de la AND en PCSrc indica
que se está realizando la operación de BEQ y la
otra provendrá de la bandera de cero proveniente
de la comparación dentro de la ALU|
En la siguiente tabla se muestra las señales de
control que deberán colocarse en función del
Opcode
25
27
Implementación
del control
26
28
7
Implementación de saltos
incondicionales
„
„
„
Problemas en la implementación de
un solo ciclo
J es un tipo de salto incondicional, ello
implica que el salto siempre se realizará.
La instrucción contiene una dirección de 26
bits que se extenderá a 28 bits (palabras
en vez de bytes).
Al realizarse un salto, la nueva dirección
estará formada de:
„
„
„
„
„
No se usa una implementación de un solo ciclo
porque no es eficiente.
Una implementación de un solo ciclo tiene CPI de
1 (ciclos por instrucción).
Todos los ciclos deberán ser del mismo tamaño,
están determinados por la ruta o la instrucción
que ocupa mayor cantidad de elementos en la
máquina, la carga:
„
„
Los 4 bits más significativos de PC+4,
28 bits (26 + 2 bits) del campo inmediato de la
instrucción de salto.
„
„
„
„
Memoria de instrucciones
Archivo de registros
ALU
Memoria de datos
Archivo de registros
Diferentes tipos de instrucciones se podrían
ejecutar en menos tiempo.
29
31
Implementación multiciclos
„
Cada instrucción se dividirá en pasos:
„
„
„
„
„
„
„
30
lectura de la instrucción,
decodificación,
lectura de registros, etc.
Cada paso se realizará en un ciclo de reloj,
todos los ciclos de la misma longitud.
Se requerirán multiples ciclos para cada
instrucción.
El número de ciclos dependerá del tipo de
instrucción.
Una unidad funcional puede ser usada más
de una vez por instrucción, en diferentes
ciclos.
32
8
Ventajas de una implementación
multiciclos
„
„
„
„
„
„
Consideraciones:
Cada instrucción puede tomar diferente número de
ciclos de reloj.
Se pueden compartir unidades funcionales dentro
de la ejecución de una instrucción.
Se puede usar una sola memoria para datos e
instrucciones.
Se puede usar una sola ALU
Se agregan registros después de cada unidad
funcional, para que éstos mantengan la salida
hasta que su valor sea usado en un ciclo de reloj
sucesivo. Estos registros no son visibles al
programador.
La colocación de los registros temporales depende
de dos factores:
„
„
Se puede notar que existen:
„
„
„
„
34
El archivo de registros puede realizar a la vez dos lecturas o
una escritura.
La memoria puede realizar una lectura o una escritura.
La ALU puede realizar una operación
Cada uno de estos tres elementos genera un
resultado que debe salvarse para las próximas
etapas. Se agregan a la implementación:
„
Registros temporales para respaldar la salida de la memoria:
„
„
IR Instruction Register (instrucción). Este es el único registro
que se mantiene durante toda la ejecución de la instrucción.
MDR memory data register (dato)
Ambos registros se almacenan por separado ya que ambos
pueden ser necesarios en un mismo ciclo.
„
„
La salida del archivo de registros se almacenan en A y B.
La salida de la ALU se almacena en ALUOut.
35
Implementación de múltiples ciclos.
„
Una sola memoria (instrucciones y datos)
Una sola ALU, en vez de una ALU y dos sumadores.
En cada ciclo de reloj:
„
Las unidades funcionales que se requieren en cada ciclo
Los datos que se requerirán en etapas posteriores. 33
Aproximación a un camino de datos de una
implementación multiciclos
„
„
En los recuadros se marcan los registros
necesarios para la implementación de múltiples
ciclos.
36
9
Camino de datos y control para la implementación de
múltiples ciclos.
Multiplexor para Instrucciones o Datos
„
Un multiplexor para seleccionar
entre dos posibles direcciones:
„
„
Dirección de una instrucciones
(que proviene del PC)
Dirección de un dato (que se
generó como el resultado de una
operación de la ALU).
37
Multiplexores que controlan las
entradas de la ALU
„
„
„
„
„
PC
A (registro)
El segundo multiplexor
„
„
„
„
„
Posibles valores que escribirán en el PC
El primer multiplexor permite
seleccionar entre
„
39
„
B
4
Salida de ext de signo 16->32
Dirección desplazada <<2
PC + 4
ALUOut que mantiene la dirección destino del salto
sobre igual después de ser calculada
Los 26 bits que provienen del IR que son
desplazados a la izquierda por 2 y que
posteriormente se concatenan con los 4 bits más
significativos del PC+4.
Haber cambiado a una memoria
y una ALU, reduce los costos.
38
40
10
Señales de control de 2 bits
41
43
Distribución de la ejecución de
las señales de control
Señales de control de 1 bit
„
„
Es necesario evaluar lo que deberá ocurrir en cada ciclo de
reloj de la implementación multiciclo, con esto determinará
que señales de control adicionales pueden ser necesarias, así
como las activaciones de las diferentes señales de control.
Cada paso está limitado a
„
„
„
42
Una operación de la ALU
Un acceso a memoria (R o W)
Un acceso al Archivo de registros
„
El tiempo de ciclo será tan corto como la operación que
tome el tiempo más largo.
„
Después de cada operación los datos generados deberán ser
almacenados en elementos de estados principales (RF, PC,
Memoria) o temporales (IR, MDR, A, B ALUOp)
44
11
Pasos para la ejecución de una
instrucción
2) Decodificación de la instrucción
y lectura de registros
„
1.- Búsqueda de la instrucción
„
2.- Decodificación de la instrucción y lectura
de registros
„
Hasta este momento se desconoce la instrucción que se está
ejecutando.
Se realizará la lectura del archivo de registros, dejando los valores
leídos en los registros A y B. En caso de que alguna instrucción no
requiera de ellos no perjudicará.
Suponiendo que se trata de un Salto condicional, se aprovecha para
calcular la dirección destino del brinco, se suman los 16 bits más bajos
del IR, extendidos en signo y desplazados a la izquierda en 2.
3.- Ejecución, cálculo de una dirección de
memoria o culminación de un brinco/salto
„
4.- Acceso a memoria o culminación de una
instrucción tipo-R
„
„
45
1) Búsqueda de la instrucción
„
„
„
„
„
„
„
„
„
„
„
„
5.- Culminación de una lectura de memoria
„
„
Lo realizan todas las instrucciones
Se lee la instrucción de la memoria y se almacena en IR.
Al mismo tiempo se aprovecha la ALU para calcular la
dirección de la siguiente instrucción.
La memoria se habilita: MemRead
IorD = 0 para que PC suministre la instrucción
IR se habilita para escribir IRWrite, dicha escritura se
realizará en el siguiente flanco de reloj.
ALUSrcA = 0 <- PC
ALUSrcB = 01 <- 4
ALUOp = 00 <- Suma
PCWrite = se acerta para guardar el resultado de la suma
que se realizará en el siguiente flanco de reloj.
ALUOut Guarda el resultado de PC + 4
46
„
La lectura del archivo de registros es automática: no requiere
habilitaciones
La escritura en A y B, tampoco requiere habilitaciones pero se
realizará en el siguiente flanco de reloj.
ALUOp = 00 <- suma
ALUSrcA = 0 <- PC
ALUSrcB = 11 <- 16 bits más bajos de IR <<2
ALUOut guardará el resultado de la suma de forma automática
OPCoder definirá lo que se realizará en los siguientes pasos
47
3) Ejecución, cálculo de una dirección de
memoria, culminación de un brinco/salto
„
A partir de esta etapa, la ejecución
depende de la clase de instrucción. La ALU
opera sobre los resultados obtenidos de la
etapa anterior
„
Acceso a memoria:
„
ALUOut = A + ext-signo( IR[15-0] )
„
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
La escritura en ALUOut no requiere habilitación
„
„
„
48
12
(3b)
Instrucción aritmético-lógica (Tipo R):
„
(3d)
ALUOut = A op B
„
„
La ALU realizará la operación especificada en el
campo de función ( IR[5-0] )
ALUOp = 10
ALUSrcA =1
ALUSrcB = 00
„
La escritura en ALUOut no requiere habilitación
„
„
„
Salto
PC = PC [ 31-28 ] || ( IR[ 25-0] << 2 )
„
El PC es reemplazado por la dirección del salto
PCSource = 10
PCWrite debe ser acertado.
„
Aquí termina esta instrucción.
„
„
49
(3c)
4) Acceso a memoria o culminación
de una instrucción tipo-R
Brinco sobre igual
Si ( A == B ) PC = ALUOut
„
„
„
„
„
„
„
„
„
„
51
Se aprovecha que en el paso anterior ya se calculó la dirección
destino del brinco, la cual está en ALUOut.
Se aprovechará la ALU para la comparación los dos registros
para la posible generación de bandera zero.
ALUSrcA = 1
ALUSrcB =0 00
ALUOp = 01
PCSource = 01 (PC tomará el valor de ALUOut)
PCWriteCond =1.
Si la escritura del PC se va a realizar, lo hará en el siguiente
flanco de reloj, y tomará la dirección correcta puesto que no ha
cambiado el valor de ALUOut.
Con este paso culmina la ejecución de esta instrucción y se
puede continuar con la siguiente.
El PC se modifica dos veces, en el paso 1 se escribió en
el PC el valor de PC + 4. En el paso 2 sobre este valor se
calculó la dirección destino del brinco, la cual se
escribió en el paso 3 en el PC.
50
„
„
„
„
Durante este paso, se accesará a la memoria para una carga
o un almacenamiento y una instrucción tipo R almacenará su
resultado.
Acceso a Memoria:
MDR = Memory[ ALUOut ] <Carga> o
Memory[ ALUOut ] = B <Almacenamiento>
„
„
„
„
„
„
La dirección calculada en el paso anterior está en ALUOut.
IorD = 1
Si es una Carga, MemRead debe acertarse, el dato a
cargar se almacenará en el registro MDR.
Para almacenamientos, MemWrite debe acertarse, el dato
que se escribirá está en el registro B, se obtuvo en el paso 2,
pero su valor no cambio durante el paso 3.
La escritura del registro MDR y de la memoria se hará en el
siguiente flanco de reloj. Con este paso terminan los
almacenamientos, pero no las cargas.
52
13
(4b)
„
Instrucción aritmético-lógica Tipo R
Reg[ IR [ 15-11 ] ] = ALUOut
5.- Culminación de una
lectura de memoria
En este paso se completa la carga
„ Reg[ IR [ 20-16 ] ] = MDR
„
El resultado de la operación de la ALU,
que esta en ALUOut, debe escribirse en
el registro especificado en el campo rd.
„ RegDst =1.
„ RegWrite debe acertarse
„ MemtoReg = 0
„ Aquí terminan las instrucciones tipo R
„
El dato que está en el registro MDR debe
escribirse en el registro especificado en
el campo rt.
„ RRegDst =0
„ RegWrite debe acertarse
„ MemtoReg = 1
„
53
55
Resumen
54
56
14
Instruction fetch and decode
El control multiciclos
„
„
„
„
„
„
En la implementación de un sólo ciclo, por medio
de una tabla de verdad se determinó la
habilitación de las señales para cada clase de
instrucción.
Para la implementación del control, usaremos
una máquina de estados finitos.
Una máquina de estados finitos consiste de un
conjunto de estados y direcciones sobre cómo
cambiar de estado.
Las direcciones son definidas por la función del
estado siguiente, la cual hace un mapeo entre el
estado actual y sus entradas con el estado
siguiente.
Para la implementación de la máquina, las salidas
de habilitación que no estén explícitamente
acertadas estarán desacertadas, no se tendrá una
57
condición no importa.
Para pasar de 0 a 1 no hay ninguna
restricción
59
Aproximación al control multiciclos
„
El paso 1 y 2 es el mismo para todos los
tipos de instrucción. A partir de ese
momento cada instrucción realiza cosas
independientes.
„
58
Máquina
finita para
controlar
referencias
a memoria
60
15
„
Instrucciones tipo R
61
63
|
Branch
Implementación
final de la
máquina de
estados
Jump
62
64
16
65
67
66
17

Documentos relacionados