Actualizado el 12 de Julio del 2020 (Publicado el 21 de Junio del 2019)
788 visualizaciones desde el 21 de Junio del 2019
1,5 MB
10 paginas
Creado hace 9a (17/11/2015)
UPMDIE
INDUSTRIALES
3 - Arquitectura interna de un uP
Componentes básicos
Lenguaje ensamblador y código máquina
Ciclo básico de ejecución de una instrucción
Algunos ejemplos
©Universidad Politécnica de Madrid
s
e
.
m
p
u
@
e
c
i
Componentes básicos de la CPU: Registros, ALU y CU
▪ CPU: Es la encargada de todas las operaciones y movimiento de datos.
Banco de registros: almacena datos y resultados de operaciones con la ALU. El tamaño de los
registros suele coincidir con el de la memoria de datos, y define el tipo de CPU (8 bits, 32 bits,…)
Unidad Aritmético Lógica (ALU): Realiza operaciones entre registros (+, -, and, or…)
Unidad de control (CU): Secuencia las acciones en función de la instrucción a ejecutar
Señales de control
generadas por la CU
Bus de datos de
la memoria de prog.
Memoria
de
programa
R/W
CS0
CS1
Reset
Clock
R/W
CS0
Unidad de
Control
R15
R14
R13
...
...
R1
R0
ALU
Bus de datos de
la memoria de datos
Memoria
de datos
Banco de
registros
R/W
CS1
Unidad
Aritmético
Lógica
Bus de direcciones de
la memoria de programa
Bus de direcciones de
la memoria de datos
UPMDIE
INDUSTRIALES
Fundamentos de Electrónica: Microprocesadores
2
Lenguaje ensamblador y código máquina (I)
¿Qué tipo de instrucciones ejecuta una CPU?
En principio son instrucciones muy básicas:
Respecto a los datos, puede:
• Cargar un registro con un dato de la memoria o una constante
– Ejemplos:
LD R0, 1000 == R0 M(1000)
LDI R0, 5 == R0 5
• Operar dos registros con la ALU (guardando el resultado el uno de ellos)
– Ejemplos:
ADD R0, R3 == R0 R0 + R3
NOT R4 == R4 R4
• Guardar el contenido de un registro en la memoria o en otro registro
– Ejemplos:
ST R3, FC00 == M(FC00) R3
MOV R5, R4 == R4 R5
Respecto a las instrucciones, puede:
• Ejecutar secuencialmente una instrucción detrás de otra (según están en la
memoria)
• Saltar de una parte a otra del programa de forma incondicional
– Ejemplo:
JMP 2000 == saltar a la instrucción que está en la posición 2000
y continuar la ejecución desde allí
• Saltar unas cuantas instrucciones de forma condicional en función de los
resultados de la última operación que hizo la ALU
– Ejemplo:
BREQ 100 == Salta 100 instrucciones más adelante
si el resultado de la última operación con la ALU fue 0
• Saltar a una parte del programa en función de alguna señal externa (se verá)
UPMDIE
INDUSTRIALES
Fundamentos de Electrónica: Microprocesadores
3
Lenguaje ensamblador y código máquina (II)
▪ ¿Cómo se ejecutaría un programa escrito, por ejemplo, en C?
• El compilador transforma el código en C para realizar la funcionalidad descrita a
través de ese conjunto de instrucciones básicas
• Ejemplo: (versión algo simplificada respecto a cómo resultaría en la realidad):
Código en C
// Declaración variables
byte a = 0;
byte i = 0;
// Bucle for
for(i = 0; i < 20; i++) {
a = a + i;
}
...
...
Código en «ensamblador»
LDI r0, 0
ST r0, 200
LDI r0, 0
ST r0, 204
; cargamos r0 con 0, y lo almacenamos en la
; posición de memoria 200, que albergaría el valor
; de la variable ‘a’ (lo decide el compilador)
; idem con la posición 204,
; que albergaría la variable ‘i’
LDI r0, 0
ST r0, 204
; inicializamos la variable ‘i’ con 0
; lo guardo en su sitio
LD r3, 200
ADD r3, r0
ST r3, 200
; cargo r3 con el valor de la variable ‘a’
; le sumo el valor de ‘i’
; y guardo el valor en su lugar (o sea, a = a + i)
INC r0
ST r0, 204
LDI r1, 20
SUB r1, r0
BRGT -7
...
; incremento el valor de ‘i’
; lo guardo en su sitio para que el valor en
; la memoria y en los registros sea coherente
; cargamos r1 con 20 (el valor del final del bucle)
; le restamos r0 (‘i’), para comparar si i < 20
; si el resultado es mayor que 0 entonces i < 20 y
; (BRanch if Greater Than) salto 7 posiciones
; hacia atrás. Si no, continuaría con la siguiente
; instrucción que hubiese después
UPMDIE
INDUSTRIALES
Fundamentos de Electrónica: Microprocesadores
4
Lenguaje ensamblador y código máquina (III)
•
¿Cómo se codifican y almacenan las instrucciones en la memoria?
– Las instrucciones en «lenguaje ensamblador» se codifican en un código binario. Según el micro, esta
codificación podría hacerse en una o varias palabras por instrucción.
– Para realizar la codificación, se usa un «programa ensamblador», que se encarga de traducir las
instrucciones en «lenguaje ensamblador» a «código máquina»
– Normalmente se utiliza una codificación por «campos»
Ejemplo: Cómo quedarían algunas instrucciones del anterior programa en la memoria
Código
ensamblador
...
...
3FF
400
401
403
404
406
408
40A
40B
40D
40E
410
411
412
413
...
...
...
...
LDI r0, 0
ST r0, 200
LDI r0, 0
ST r0, 204
LD r0, 204
LD r3, 200
ADD r3, r0
ST r3, 200
INC r0
ST r0, 204
LDI r1, 20
SUB r1, r0
BRGT -7
...
...
ADD r3, r0
Cod. op.
Reg dest.
Reg orig.
Type
Operación
con la ALU
3
0
Suma
1001
0011 0000
0001
LDI r1, 20
Cod. op.
Reg dest.
Cargar
constante
1
val
20
0001
0001 00010100
ST r3, 200
Cod. op.
Reg dest.
El código ensamblador es una
representación «legible» del
código máquina
Guardar en
memoria
3
val
200
no importa el valor
UPMDIE
INDUSTRIALES
0010
0011 00000000
0000000011001000
Fundamentos de Electrónica: Microprocesadores
...
...
3FF
400
401
403
404
406
408
40A
40B
40D
40E
410
...
...
...
...
...
...
0001000000000000
0010000000000000
0000000011001000
0001000100000001
0010000000000000
0000000011001100
0011000000000000
0000000011001100
0011001100000000
0000000011001000
1001001100000001
0010001100000000
0000000011001000
etc
etc
...
Código
máquina
5
Ciclo básico de ejecución de una instrucción (III)
▪ ¿Cómo se ejecutan las instrucciones?
La CPU va leyendo cíclicamente instrucciones de la memoria de programa, las
interpreta (en función de su codificación en binario), y la unidad de control (máquina de
estados compleja) activa las señales de control correspondientes para ejecutarlas.
Memoria
de
instrucciones
...
3FF
400
401
402
403
404
405
406
407
408
409
40A
40B
...
...
LDI r0, 0
ST r0, 200
LDI r0, 0
ST r0, 204
LD r0, 204
LD r3, 200
ADD r3, r0
ST r3, 200
INC r0
ST r0, 204
LDI r1, 20
SUB r1, r0
BRGT -7
...
UPMDIE
INDUSTRIALES
--
Memoria
de datos
2
ADD r3, r0
4
Registro de instrucciones
0000000011001000
Unidad
de
Control
Contador
de programa
0405
R/W
CS
Reset
Clock
R15
R14
R13
R3
R1
R0
3
--
--
--
...
6
20
4
ALU
5
...
...
1FD
1FE
200
201
202
203
204
205
206
207
...
...
405
1
--
5
1 – Búsqueda de la instrucción
2 – Decodificación de la instrucción
3 – Operación/Ejecución
4 – Carga/Almacenamiento en registros/memoria
5 – Incremento del contador de programa
Fundamentos de Electrónica: Microprocesadores
6
Ciclo básico de ejecución de una instrucción (III)
▪ ¿Cómo se ejecutan las instrucciones?
La CPU va leyendo cíclicamente instrucciones de la memoria de programa, las
interpreta (en función de su codificación en binario), y la unidad de control (máquina de
estados compleja) activa las señales de control correspondientes para ejecutarlas.
2
ADD r3, r0
1001001100000001
4
Registro de instrucciones
1001001100000001
Unidad
de
Control
Contador
de programa
0405
R/W
CS
Reset
Clock
Memoria
de
instrucciones
...
3FF
400
401
402
403
404
405
406
407
408
409
40A
40B
...
...
LDI r0, 0
ST r0, 200
LDI r0, 0
ST r0, 204
LD r0, 204
LD r3, 200
ADD r3, r0
ST r3, 200
INC r0
ST r0, 204
LDI r1, 20
SUB r1, r0
BRGT -7
...
--
Memoria
de datos
R15
R14
R13
R3
R1
R0
3
--
--
--
...
6
20
4
ALU
5
...
...
1FD
1FE
200
201
202
203
204
205
206
207
...
...
405
1
--
5
1 – Búsqueda de la instrucción
2 – Decodificación de la instrucción
3 – Operación/Ejecución
4 – Carga/Almacenamiento en registros/memoria
5 – Incremento del contador de programa
Fundamentos de Electrónica: Microprocesadores
7
UPMDIE
INDUSTRIALES
Ciclo básico de ejecución de una instrucción (IV)
▪ ¿Cómo se ejecutan las instrucciones?
Terminada una instrucción, se repite el ciclo con la siguiente (o con la que corresponda
si es que ha habido algún salto a otra parte del código)
2
ST r3, 200
R/W
CS
Reset
Clock
Unidad
de
Control
Contador
de programa
0406
4
10
Memoria
de datos
10
...
...
1FD
1FE
200
201
202
203
204
205
206
207
...
...
R15
R14
R13
R3
R1
R0
--
--
--
...
10
20
4
ALU
406
1
200
3
5
1 – Búsqueda de la instrucción
2 – Decodificación de la instrucción
3 – Operación/Ejecución
4 – Carga/Almacenamiento en registros/memoria
5 – Incremento del contador de programa
Fundamentos de Electrónica: Microprocesadores
8
Memoria
de
instrucciones
...
3FF
400
401
402
403
404
405
406
407
408
409
40A
40B
...
...
LDI r0, 0
ST r0, 200
LDI r0, 0
ST r0, 204
LD r0, 204
LD r3, 200
ADD r3, r0
ST r3, 200
INC r0
ST r0, 204
LDI r1, 20
SUB r1, r0
BRGT -7
...
UPMDIE
INDUSTRIALES
Ejemplo: arquitectura AVR
Memoria de programa
Banco de registros
Elementos de la Unidad de
Control
Unidad Aritmético Lógica
CPU
Memoria de datos
Dispositivos de E/S
Extraído de la hoja de características de los
microcontroladores AtMega de Atmel
UPMDIE
INDUSTRIALES
Fundamentos de Electrónica: Microprocesadores
9
Comparando: Un Intel I7 frente a un AtMega168
Cracterística
Ancho de bus
AtMega168
Intel Core I7 (Quad)
Ratio (aprox)
8
64
Nº de transistores
< 100.000
~731.000.000
Nº de pines
28
Frecuencia de trabajo
16MHz
~1155
~3.2GHz
x8
x10.000
x40
x200
Memoria de trabajo típica
16KB prog. / 1KB datos ~4-8GBytes
x1.000.000
MIPS/MFLOPS
Consumo
Precio
16/0,5
20mW
< 2$
~75.000/60.000
x5.000/x120.000
~100W
~350$
x5.000
x200
Intel Core i7 - 263 mm2
AtMega - 24 mm2
UPMDIE
INDUSTRIALES
http://blog.ioactive.com/2008_01_01_archive.html
http://blog.sina.com.cn/s/blog_54f48a4b01009bdf.html
Fundamentos de Electrónica: Microprocesadores
10
Comentarios de: 3 - Arquitectura interna de un uP (0)
No hay comentarios