Publicado el 16 de Septiembre del 2019
889 visualizaciones desde el 16 de Septiembre del 2019
360,2 KB
10 paginas
Creado hace 5a (23/07/2018)
Fundamentos de Microprocesadores
Índice
Unidad 4. El Procesador II: Diseño y control
de la ruta de datos. Arquitectura uniciclo
Escuela Politécnica Superior ‐ UAM
Copyright © 2007 Elsevier, “Digital Design and Computer Architecture”
1
Introducción
APLICACIÓN
SOFTWARE
SISTEMAS
OPERATIVOS
PROGRAMAS
DRIVERS
ARQUITECTURA
MICRO‐
ARQUITECURA
LÓGICA
CIRCUITOS
DIGITALES
CIRCUITOS
ANALÓGICOS
DISPOSITIVOS
INSTRUCCIONES
REGISTROS
CAMINO DE DATOS
CONTROLADORES
SUMADORES
MEMORIA
PUERTAS LÓGICAS
AMPLIFICADORES
FILTROS
TRANSISTORES
DIODOS
FÍSICA
ELECTRONES
• Arquitectura:
Es la visión que desde el punto de vista del
sistema
tiene
del
se
programador
computador (U3).
• Microarquitectura:
Es la implementación en hardware del
computador (U4 y U5).
Ruta de datos: bloques funcionales
Ruta de control: señales de control internas
3
• Introducción
• Ruta de datos uniciclo
• Control uniciclo
• Añadir más instrucciones
Microarquitectura
• Hay múltiples implementaciones de la misma
arquitectura (juego de instrucciones):
– Uniciclo (U4)
• Cada instrucción se ejecuta en un ciclo de reloj
– Multiciclo (U5)
reloj mucho más rápido
– Segmentado (pipelined)
• Cada instrucción se divide en pasos cortos, cada uno de un ciclo de
• Cada instrucción se divide en pasos cortos
• Se ejecutan múltiples instrucciones a la vez, cada una en un paso
(segmento) distinto.
2
4
1
Microarquitectura
‐ Uniciclo (U4)
INSTR 1
‐ Multiciclo (U5)
INSTR 2
1 2 3
INSTR 1
1 2 3 4 5
INSTR 2
‐ Segmentado (ARQ 3º)
1 2 3
INSTR 1
1 2 3 4 5
INSTR 2
1 2 3 4
INSTR 3
1 2 3 4 5
INSTR 4
Índice
• Introducción
• Ruta de datos uniciclo
• Control uniciclo
• Añadir más instrucciones
5
7
Subconjunto del MIPS
• Para estudiar
inicialmente sólo un subconjunto del
instrucciones:
la microarquitectura consideramos
juego de
R‐Type: and, or, add, sub, slt
I‐Type, de memoria : lw, sw
I‐Type, de saltos: beq
• Luego añadiremos más instrucciones (addi, j(J‐Type)).
• En el laboratorio de prácticas se añadirán algunas más.
Estado de la arquitectura
• Se puede conocer en qué situación se encuentra el
micro conociendo los valores de:
– PC
– Banco de registros (los 32 registros)
– Memoria (de código y de datos)
• Primeros elementos a considerar en la ruta de datos:
CLK
PC'
32
PC
32
32
A
RD
Instruction
Memory
32
CLK
A1
A2
WE3
RD1
RD2
32
32
A3
WD3
Register
File
5
5
5
32
CLK
WE
RD
A
Data
Memory
WD
32
32
6
32
8
2
Ruta de datos: lectura de registros lw
PASO 2: lectura de los operandos fuente del banco de registros
CLK
PC'
PC
25:21
Instr
A
RD
Instruction
Memory
CLK
A1
A2
A3
WD3
WE3
RD1
RD2
Register
File
CLK
WE
A
RD
Data
Memory
WD
Ruta de datos: captura lw
El análisis de la ruta de datos comienza con la instrucción:
(0x8C112000)
y los pasos para ejecutarla:
lw $s1,0x2000($0)
PASO 1: captura de instrucción (fetch)
CLK
PC'
PC
Instr
A
RD
Instruction
Memory
CLK
A1
A2
A3
WD3
WE3
RD1
RD2
Register
File
Instr <= “100011 00000 10001 0010000000000000”
=>
=>
=>
=>
“100011”
“00000”
“10001”
“0010000000000000”
op: Instr [31:26] =
rs: Instr [25:21] =
rt: Instr [20:16] =
imm: Instr [15:0] =
Ruta de datos: dato inmediato lw
PASO 3: extensión en signo del dato inmediato
CLK
PC'
PC
A
RD
Instruction
Memory
CLK
Instr
25:21
A1
WE3
RD1
RD2
A2
A3
WD3
Register
File
CLK
WE
A
RD
Data
Memory
WD
lw
$0
$s1
0x2000
9
CLK
WE
A
RD
Data
Memory
WD
15:0
Sign Extend
SignImm
SignImm <= 0x00002000 = Sign Extend (0x2000)
15:0
Sign Extend
SignImm
ALUResult <=
0x00002000 = 0x00000000 + 0x00002000
lw $s1,0x2000($0)
11
lw $s1,0x2000($0)
A1: Instr [25:21] = “00000”; RD1 <=“0x00000000” = ($0)
lw $s1,0x2000($0)
Ruta de datos: dirección lw
PASO 4: calcular la dirección para acceso a memoria de datos
sumando ([rs] + SignImm) en la ALU
CLK
Instr
25:21
A1
WE3
CLK
PC'
PC
A
RD
Instruction
Memory
A2
A3
WD3
Register
File
ALUControl2:0
010
SrcA
SrcB
Zero
ALUResult
U
L
A
RD1
RD2
CLK
WE
A
RD
Data
Memory
WD
10
12
3
Ruta de datos: leer memoria lw
PASO 5: leer el dato buscado de memoria y escribirlo en el
registro destino, rt
CLK
PC'
PC
A
RD
Instruction
Memory
RegWrite
CLK
Instr
25:21
A1
20:16
A2
A3
WD3
1
WE3
RD1
RD2
Register
File
ALUControl2:0
010
Zero
ALUResult
SrcA
SrcB
U
L
A
CLK
WE
RD
A
Data
Memory
WD
ReadData
15:0
Sign Extend
SignImm
A3: Instr [20:16] = “10001” ($s1)
$s1 <= WD3 = MEM[0x00002000]
lw $s1,0x2000($0)
+ Ruta de datos: instrucción sw
Sobre esta ruta de datos, vemos qué falta para otras instrucciones:
Empezamos con sw $s1,0x2000($0) (0xAC112000)
Pasos 1, 2, 3 y 4 iguales que en el caso de lw
ALUControl2:0
CLK
PC'
PC
A
RD
Instruction
Memory
CLK
Instr
25:21
A1
WE3
010
U
L
A
Zero
ALUResult
SrcA
SrcB
RD1
RD2
A2
A3
WD3
Register
File
CLK
WE
A
RD
Data
Memory
WD
15:0
Sign Extend
SignImm
ALUResult <= 0x00002000 = 0x00000000 + 0x00002000
Ruta de datos: incrementar PC
PASO 6: incrementar el PC en 4 para tener la dirección de la
próxima instrucción
CLK
PC'
PC
A
RD
Instruction
Memory
RegWrite
CLK
Instr
25:21
A1
20:16
A2
A3
WD3
1
WE3
RD1
RD2
Register
File
ALUControl2:0
010
Zero
ALUResult
SrcA
SrcB
U
L
A
CLK
WE
A
RD
Data
Memory
WD
ReadData
PCPlus4
+
4
15:0
Sign Extend
SignImm
$PC <= $PC + 4
lw $s1,0x2000($0)
Result
14
+ Ruta de datos: instrucción sw
Falta una forma de leer un segundo registro y escribirlo en memoria
CLK
PC'
PC
A
RD
Instruction
Memory
RegWrite
CLK
Instr
25:21
A1
20:16
20:16
A2
A3
WD3
0
WE3
RD1
RD2
Register
File
ALUControl2:0
010
SrcA
SrcB
U
L
A
Zero
ALUResult
WriteData
MemWrite
1
WE
RD
CLK
A
Data
Memory
WD
ReadData
PCPlus4
+
4
15:0
Sign Extend
SignImm
A2: Instr [20:16] = “10001” ($s1)
sw $s1,0x2000($0)
MEM[0x00002000] <= RD2 = ($s1)
Result
16
4
13
15
+ Ruta de datos: Instrucciones tipo-R
Ejemplo: add $s1, $t1, $t2
Leer dos registros fuente, rs y rt. Ambos son entradas de la ALU
Lo que se escribe en registro es ALUResult y no lo que viene de memoria
Se escribe en rd (en lugar de rt).
(0x012A8820)
RegWrite
RegDst
ALUSrc
1
0
ALUControl2:0
varies
SrcA
SrcB
U
L
A
Zero
ALUResult
WriteData
0
1
MemWrite
MemtoReg
0
0
1
ReadData
CLK
0
WE
RD
A
Data
Memory
WD
CLK
PC'
PC
RD
A
Instruction
Memory
CLK
Instr
25:21
A1
A2
A3
WD3
20:16
20:16
15:11
1
WE3
RD1
RD2
Register
File
0
1
WriteReg4:0
PCPlus4
+
4
15:0
Sign Extend
SignImm
+ Ruta de datos: instrucción beq
Se decide si se salta o no con la bandera Z
Cálculo de la dirección de salto (Branch Target Address):
BTA = (PC+4) + (Sign Extend {imm << 2})
RegWrite
RegDst
ALUSrc
x
0
ALUControl2:0
110
Branch
1
PCSrc
MemWrite
MemtoReg
CLK
PC'
PC
0
1
A
RD
Instruction
Memory
CLK
Instr
25:21
A1
A2
A3
WD3
20:16
20:16
15:11
0
WE3
RD1
RD2
Register
File
0
1
WriteReg4:0
PCPlus4
+
4
SrcA
SrcB
0
1
U
L
A
Zero
ALUResult
WriteData
15:0
Sign Extend
SignImm
<<2
PCBranch
+
x
0
1
ReadData
CLK
0
WE
RD
A
Data
Memory
WD
Result
A3: Instr [15:11] = “10001” ($s1) $s1 <= WD3 = ALUResult ($t1+$t2)
Result
17
Branch se pondrá a 1 si se está ejecutando un beq
PCSrc se pondrá a 1 si Branch=1 y la condición de salto se cumple (Z=1)
18
Ruta de datos y de control
Índice
Las señales de control se generan según cada instrucción
(Hay que decodificar opcode y funct)
15:0
Sign Extend
SignImm
<<2
PCBranch
+
Result
19
20
5
MemtoReg
MemWrite
Branch
ALUControl2:0
ALUSrc
RegDst
RegWrite
Control
Unit
31:26
5:0
Op
Funct
CLK
RD1
RD2
A2
A3
WD3
20:16
20:16
15:11
Register
File
0
1
WriteReg4:0
CLK
PC'
PC
0
1
RD
A
Instruction
Memory
Instr
25:21
A1
WE3
PCPlus4
+
4
PCSrc
SrcA
SrcB
0
1
U
L
A
Zero
ALUResult
WriteData
CLK
WE
RD
A
Data
Memory
WD
ReadData
0
1
• Introducción
• Ruta de datos uniciclo
• Control uniciclo
• Añadir más instrucciones
Unidad de Control
Decodificador de la ALU
• La Unidad de Control UC, genera dos buses de control:
ALUControl (3 bits): depende de opcode y funct
Resto (6 bits): sólo depende de opcode, no depende de funct
Control
Unit
Opcode5:0
Main
Decoder
MemtoReg
MemWrite
Branch
ALUSrc
RegDst
RegWrite
Funct5:0
ALU
Decoder
ALUControl2:0
Ruta de control
Señal
Significado
Significado de valores
0
1
MemToReg
Decide si al banco de registros les llega un dato de la memoria de
datos o si le llega el resultado de la ALU
Resultado de la ALU
Dato de la memoria
de datos
MemWrite
Decide si se va a escribir un registro en la memoria de datos.
Branch
PcSrc
ALUSrc
Indica si se está ejecutando una instrucción beq
Indica si hay que realizar el salto del beq. Sólo activa cuando
Branch=1 y Z=1
Decide cuál será el segundo operando de la ALU
RegDst
Indica la dirección de registro destino
No
No
No
Registro RT
[20:16]
Registro RT
[20:16]
RegWrite
Indica si el banco de registros debe guardar un resultado
No
+
Sí
Sí
Sí
Dato Inm
Registro RD
[15:11]
Sí
U
L
A
+
21
23
X
OPCODE
100011 (lw)
101011 (sw)
000100 (beq) X
000000
000000
000000
000000
000000
Funct
100000 (add)
100010 (sub)
100100 (and)
100101 (or)
101010 (slt)
ALUControl2:0
010 (Sumar)
110 (Restar)
010 (Sumar)
110 (Restar)
000 (Y lógico)
001 (O lógico)
111 (SetLessThan)
Ruta de control
Señal
Significado
Significado de valores
0
1
MemToReg
Decide si al banco de registros les llega un dato de la memoria de
datos o si le llega el resultado de la ALU
Resultado de la ALU
Dato de la memoria
de datos
MemWrite
Decide si se va a escribir un registro en la memoria de datos.
Branch
PcSrc
ALUSrc
Indica si se está ejecutando una instrucci
Comentarios de: Unidad 4. El Procesador II: Diseño y control de la ruta de datos. Arquitectura uniciclo (0)
No hay comentarios