You are on page 1of 85

Evolución en las Arquitecturas de

microcontroladores

Nuevas tendencias estandarizadoras de


procesadores embebidos, herramientas de
software y debug, y periféricos inteligentes

Guillermo A. Jaquenod - 2010


Evolución en la arquitectura de
microprocesadores

• Consecuencias del avance tecnológico: tamaño, consumo,


velocidad, costo
• Aplicaciones
– Comunicaciones, automatización y control
• Requerimientos:
– Software
• RTOS y stacks. Capacidad de cómputo!
– Hardware
• Analógicos
• Memoria
• RF

2 G. Jaquenod – 2010 - jaquenodg@gmail.com


Consecuencias del avance
tecnológico

• Las geometrías se reducen permanentemente en forma


importante, se observa una escala decreciente 350nm, 250nm,
180nm, 90nm, 65nm, 35nm, 18nm….
• Las ventajas son mucha mayor cantidad de transistores por chip,
mayor velocidad
• Pero el costo del desarrollo de nuevas plantas capaces de fabricar
componentes con esta tecnología también es enorme, por lo que
inicialmente se justifican para dispositivos de alta complejidad
(algunos millones de transistores por chip)
• Las plantas de fabricación existentes, cuyo costo ha sido
parcialmente amortizado, a veces no pueden ser adaptadas a los
nuevos procesos, y muchos de sus recursos pueden son utilizados
para la fabricación de otro tipo de productos.
• Este proceso de reutilización de tecnologías previas es constante

3 G. Jaquenod – 2010 - jaquenodg@gmail.com


Nuevos usos de geometrías
mayores

• Las plantas aptas para procesos litográficos de geometrías mayores


se benefician del mejor control de procesos obtenido por el
aprendizaje
• El control de tamaños, espesor de deposiciones, etc., es más
controlable
• Estas ventajas se acomodan especialmente a las aplicaciones
lineales, y aquellas de tecnología mixta (analógica + digital)
• Dentro del área analógica deben considerarse:
– Etapas lineales de baja frecuencia (amplificadores)
– Etapas lineales de alta frecuencia (RF): LNA y PA
• Y en el área mixta:
– Conversores ADC, DAC
– Moduladores y demoduladores, para aplicaciones cableadas
(USB, Ethernet, CAN) o inalámbricas (ISM)
4 G. Jaquenod – 2010 - jaquenodg@gmail.com
Áreas de avance: autonomía de
dispositivos móviles

• La autonomía de un dispositivo móvil es fundamental, y en general


se busca también reducir peso y tamaño
• Ese objetivo se busca por distintos caminos:
– Mejores baterías, mas pequeñas. Otras fuentes de energía
– Comunicaciones y GUI de baja potencia
– Procesadores acordes a las necesidades de performance
– Tecnologías alternativas a CMOS para ciertos dispositivos
– Periféricos inteligentes
– Administración de energía

5 G. Jaquenod – 2010 - jaquenodg@gmail.com


Áreas de avance: energía
disponible en el ambiente

• Energy Harvesting: aprovecha energía disponible en el ambiente:


– Vibraciones: ideal en aplicaciones automotrices,
– Termoelectricidad: para aplicaciones medicas
– Energía solar
– Campos electro-magnéticos
• Los dispositivos deben tolerar amplios rangos de voltajes, y consumir
cantidades mínimas de energía
• Existen fuentes de alimentación con voltajes de entrada tan bajos
como 0,5V que lo elevan a 2,5V o 3,3V con alto rendimiento (mejor a
90%)
• Y tags RFID que capturan energía, como para alimentar a un
procesador
6 G. Jaquenod – 2010 - jaquenodg@gmail.com
Memorias no volátiles de
consumo nulo: FRAM
• Mientras las E2ROM/FLASH capturan
electrones en un conductor aislado (floating
gate), por efecto túnel, acá se usa la
Pb
formación de dipolos eléctricos biestables en
una estructura cristalina
• El vector desplazamiento en el dieléctrico de
un capacitor tiene comportamiento biestable
• El proceso de lectura detecta esa polarización O
forzando un cambio, y reescribe el dato leído
(algo similar a la lectura en una RAM
dinámica)
• Sin limitaciones de velocidad de pasaje de Zr o Ti
cargas que limiten el tiempo de escritura ni
trampas de electrones que limiten la cantidad
de ciclos de escritura
7 G. Jaquenod – 2010 - jaquenodg@gmail.com
FRAM: performance

• Sin limitación práctica de ciclos de escritura, las hojas de


datos hablan de más de 1014 ciclos !
• La rapidez del ciclo de escritura garantiza que ésta se
complete en caso de falla de energía
• El tiempo de escritura es dado por la lógica de selección y
no por la celda de memoria; los tiempos son similares a
los de una SRAM, menos de 50ns por byte o word
• No requiere alto voltaje como las E2ROM/FLASH (bastan
1.5V para escribir, vs 10V a 14V de una Flash/EEPROM)
• Amplio rango térmico: retención de más de 100 Hrs
@150°C, 1000 Hrs @125°C, 10 años @85°C, ideal para
aplicaciones automotrices
• Muy resistente a Radiación, los cambios inducidos por
partículas alpha a nivel terrestre son indetectables

Lo novedoso es que desaparece la diferencia conceptual entre RAM y


ROM, todo es sólo “memoria”, una tarea puede dormirse al cortarse la
alimentación y continuar cuando la energía retorna
8 G. Jaquenod – 2010 - jaquenodg@gmail.com
Periféricos inteligentes

• En vez de periféricos simples que requieren la atención completa


de la CPU el nuevo enfoque es el desarrollo de periféricos
inteligentes
• Cada subsistema tiene control individual de energía
• Y sale y vuelve a entrar en modos de bajo consumo ni bien realiza
la tarea para la que fue programado
• Pasa a ser un coprocesador disparado por un evento, que a su
vez genera otro evento para avisar cuando termina de hacer lo
que debe
• Permite que mientras tanto la CPU este en bajo consumo, o
atendiendo alguna otra tarea.

Solo se saca de StandBy a lo imprescindible, y


además se simplifica la tarea de la CPU

9 G. Jaquenod – 2010 - jaquenodg@gmail.com


Conversores A/D inteligentes

• En los procesadores modernos es


usual contar con modelos que 1.5V or 2.5V
incluyen ADCs de 10-bit y 12-bit,
con tasas de muestreo de algunos Auto AVSS AVCC
cientos de kilomuestras/segundo
• Para optimizar el consumo y
VR- VR+
aumentar performance es posible S/H 10-bit SAR
que un periférico (ej: timer) inicie
la conversión ADC10SC
• Y que otro periférico (ej: DMA) TA1
TA0
guarde el resultado donde TA2

convenga
Batt Temp
• Que las mediciones sigan una
RAM, Flash,
secuencia de uno o más canales Direct
Direct
Data
Peripherals
Transfer
• El procesador sólo usa los Transfer
Transfer
Controller
Controller
Controller
resultados

Solo se saca de StandBy a lo imprescindible, y


10 G. Jaquenod – 2010 - jaquenodg@gmail.com
además se simplifica la tarea de la CPU
Cambio del dominio analógico al
digital: ADC de alta precisión

• Ciertas aplicaciones masivas


(por ejemplo medición de VREF
1.2V
energía) requieren elevada
precisión, a tasas de
conversión de pocos ksps Dominio digital
• El uso de conversión
Sigma/Delta se acomoda al
8x PGA 16-bit 
mundo digital SD16MEM0

• El filtrado de la señal de un
Temp
comparador es realizado
digitalmente mediante filtrado y
undersampling Batt

• La ganancia digital permite


obtener conversores de 16 o
más bits de resolución
La ganancia de precisión se obtiene por técnicas de
11
DSP, mas económico y con menor consumo
G. Jaquenod – 2010 - jaquenodg@gmail.com
Interfase GUI:
controladores LCD
• El uso de interfase gráficas hace más S39

S38
amigable y comercialmente más
interesante a un producto Display
Segment
Memory
Output
• El uso de displays LCD surge como la 20x
8-bits
Control

opción lógica debido al bajo consumo, S1


desde displays monocromos de pocos S0
segmentos (<200) hasta displays más
complejos (color, QVGA a VGA) COM3
Common
COM2
• Combinado con un sensor “touch Output
Control
COM1
screen” permite una elevada COM0

interactividad R33/LCDCAP
Analog
• Un LCD requiere de un ciclo de Voltage R23
R
Multiplexer
actualización permanente, y por eso ACLK Timing Generator
R13
R

suele ser un periférico inteligente en R


Charge Pump Bias R03
algunos procesadores, con memoria de Contrast Control Generator Rx
imagen propia, o compartida con el
procesador Not
Required

12 G. Jaquenod – 2010 - jaquenodg@gmail.com


Canales de comunicación de
datos

• Cuando el procesador debe compartir datos con otros dispositivos


existen alternativas cableadas o inalámbricas
• Las interfases cableadas más simples son UART, SPI o I2C. Y
pueden ser potenciadas con recursos para soporte de enlaces
infrarrojos (IrDA), procesos de autosincronización de relojes (auto-
baud rate detect en LIN)
• A nivel intermedio algunos uC poseen interfases CAN o USB
• Y para alta tasas de transferencias ciertos procesadores tienen
interfases Ethernet que incluyen el MAC y el PHY, que al igual que
en los periféricos previos suelen operar combinados con timers y
controladores DMA
• A medida que aumenta la tasa de datos, las secciones de hardware
necesitan complementarse con servicios de software (stacks)
13 G. Jaquenod – 2010 - jaquenodg@gmail.com
Canales de comunicación de
datos: RF

• Para el caso de interfases de RF hoy se disponen de transceivers


integrados que operan en las bandas ISM, en la zona de 400MHz,
900MHz o 2,4GHz, con muy bajo consumo de potencia.
• Esto es posible gracias a la posibilidad de integración de:
– Etapas lineales de amplificación de bajo ruido (LNA) para las
etapas de entrada (RX)
– Etapas lineales de potencia tan elevada como 20 dBm dentro de
un chip (TX).
• Con etapas digitales para conformación de señales y modulación,
conversión a digital y FI y demodulación en el dominio digital,
periféricos para armado de paquetes, agregado y validación de
códigos de detección de errores, los métodos de sincronización, etc.
• Estas soluciones definen un amplio abanico de protocolos, desde
aquellos propios hasta los estándar (como ZigBee).
14 G. Jaquenod – 2010 - jaquenodg@gmail.com
Stacks de comunicaciones

• A partir de la aparición de normas como LIN, CAN, USB, Ethernet o de RF, no


basta con disponer de un periférico que atienda la interfase física (PHY):
– En este caso el intercambio de datos es complejo, se compone de una
“transacción”, que requiere fases de sincronización, arbitraje (si hay varios
másters), identificación (del iniciador y destinatario), numeración (para
rearmado de grandes bloques de datos fuera de secuencia), transmisión de
datos (payload), incorporación de códigos de detección o corrección de
errores, y cierre de transacción.
– Y requiere servicios auxiliares, de control de tráfico, descubrimiento y
numeración de nuevos agentes, o administración de canales virtuales
(manejando métodos de recuperación ante errores)
• El periférico cubre una parte de esas acciones, y el resto suele ser resuelto por
software, a través de un “stack”. Y para atender ese software, y las otras
necesidades de la aplicación, suele ser necesario algún tipo de administrador
(Sistema Operativo) multi-tareas de tiempo real, o RTOS.

15 G. Jaquenod – 2010 - jaquenodg@gmail.com


Requerimientos de
procesamiento

• Las necesidades de procesamiento han llevado a la conveniencia de


procesadores de gran ancho de palabra
• Al disponer de 16 a 32 bits en la instrucción se minimizan los ciclos
de acceso
• Las instrucciones pueden incluir mas información sobre operandos,
incluyendo las referencias a dos o mas operandos y el resultado
• Y el ISA es diseñado pensando en aplicaciones en lenguajes de alto
nivel, que se ejecutan administradas por sistemas operativos
• La tendencia obvia es el uso de arquitecturas RISC
• Y pasa a ser de importancia cuanto del tiempo de CPU se ocupa
procesando datos y cuanto es el overhead de las estructuras de
control

16 G. Jaquenod – 2010 - jaquenodg@gmail.com


Overhead en una ramificación
condicional IF con ELSE
Two-Way branch
• En casi todos los lenguajes de mayor nivel TRUE FALSE
existen instrucciones de ramificación (IF) Condición? (ELSE)
condicional más poderosas, de la forma:
SI (cierta condición es verdadera) Instrucciones 1 Instrucciones 2

ENTONCES ejecuta cierta acción


dependencia
SINÓ SI (otra condición es verdadera) temporal
ENTONCES ejecuta otra acción Operación que define algo
SINO SI ... Ramificación condicional
SINÓ ejecuta otra acción Acción 1
• En inglés Ramificación incondicional
if (condición1) then (acción1); Acción 2

elsif (condición2) then (acción2);


else (acción3); Notar que son combinaciones de
ramificaciones condicionales e
incondicionales!! Tarea del compilador!!
17 G. Jaquenod – 2010 - jaquenodg@gmail.com
Overhead en SWITCH,
SELECT o CASE

Multi-Way branch

Cómo mejorar el Multi-Way Branch? Constante1


Constante2
• Es usual que un programa deba saltar Valor? Constante3
a distintos puntos según distintos Restantes
valores de una misma variable
SWITCH (variable) Acción 1
Instrucciones1
CASE (constante1) : acción 1 Ramif.incond.
Acción 2
CASE (constante2) : acción 2 Instrucciones2
Ramif.incond.
CASE ... Acción 3
Instrucciones3
DEFAULT: acción N Ramif.incond.
• Las sentencias de selección múltiple Instrucciones4
Por defecto

son comunes en todos los lenguajes


de alto nivel, sólo se llaman distinto

18 G. Jaquenod – 2010 - jaquenodg@gmail.com


Overhead en el caso de
repeticiones o iteraciones

• En muchísimos casos es necesario realizar Inicialización


una acción una dada cantidad de veces
• Para ello: Instrucción 1

tiempo útil
– Se inicializa una variable a ser usada
como contador
– Se ejecuta una vez la acción Instrucción n
– Se decrementa el contador y ..
• Si el contador no llegó a cero, se salta Instrucción de cierre

overhead
a ejecutar otra vez la acción
• Si en cambio el contador llegó a cero no
se continúa la ejecución secuencial Terminé?
• En muchos lenguajes de programación de alto
nivel se usa para esto una instrucción for si
• Ya algunos viejos microprocesadores (8051) Ramificación condicional!!
incluían DJNZ (Decrement and Jump if Not
Zero) para reducir el overhead

19 G. Jaquenod – 2010 - jaquenodg@gmail.com


Ventajas y desventajas de la
arquitectura Von Neumann

Memoria
Mundo

Interfaz de Entrada y Salida


Exterior
Programa
1
Datos
2 • Datos e instrucciones comparten el
mismo espacio de memoria
CPU Periféricos • Usan un mismo direccionamiento
(bus de direcciones) y transporte
Unidad
de contenidos (bus de datos)
Aritmética
y Lógica • Hardware menor, pero mas ciclos
para realizar una tarea
Unidad
de Control n
A D En que casos conviene?

20 G. Jaquenod – 2010 - jaquenodg@gmail.com


Un microcontrolador tipo
Harvard (relajado)

A D
Mundo
Memoria
Exterior

Interfaz de Entrada y Salida


De datos
1
• Es usual usar memoria no volátil
para el espacio de programa y
CPU 2 volátil (RAM) para el de datos
• En este caso ciertos datos pueden
Periféricos
Unidad
Aritmética ser leídos de memoria de programa
y Lógica con instrucciones especiales
• Permite tener datos no volátiles
Unidad (constantes)
de Control
• Mas hardware pero menos ciclos
n de reloj
Memoria de Programa
En que casos conviene?

21 G. Jaquenod – 2010 - jaquenodg@gmail.com


Alternativas de arquitecturas:
Bridges

• Un bridge es un
Memoria externa intermediario entre dos
buses
A D A D • Estos pueden ser similares
Memoria
o responder a distintos

Bridge

Interfaz de Entrada y Salida


Programa mecanismos de control
• Y a ambos lados del bridge
Datos suceden transacciones al
mismo tiempo
• Pueden tener distintos

Periféricos
CPU tamaños de datos y modos
Unidad de almacenamiento
Aritmética temporario
Bridge

y Lógica • Son comunes los bridges a


Unidad periféricos y a memorias
de Control masivas

Puede ser Harvard, Von Neuman, u otras


En que casos conviene?
22 G. Jaquenod – 2010 - jaquenodg@gmail.com
Mejoras de la arquitectura
básica

• Consumo de potencia: en aplicaciones alimentadas por baterías (celular,


IPhone, Notebook) es importante que el consumo de energía sea mínimo para
que las baterías permitan la máxima autonomía
– Uso de menores voltajes: P = (K x V)(estática) + (f x C x V2 / 2) (dinámica)
– Control de energía individual de recursos no usados (V)
– Sistemas de control de reloj (f)
– Modos de bajo consumo de la CPU (sleep, Halt, etc.) (f)
• Performance: en aplicaciones de cómputo y alta performance (comunicaciones,
procesamiento de datos o imágenes) se desea la máxima cantidad de
instrucciones por segundo
Y en los proyectos modernos
– Procesadores múltiples se quieren ambas mejoras:
– Múltiples buses y bridges Performance y bajo consumo
de energía
– Memorias cache
– Pipelining + predicción de ramificaciones
– Optimización de cambios de contexto
23 G. Jaquenod – 2010 - jaquenodg@gmail.com
Procesadores múltiples

Arbiter
Los procesadores se diseñan
para optimizar su desempeño
ante distintos tipos de
problemas.
Puede convenir que varios
procesadores convivan en un
mismo sistema.
Y usen recursos propios o Distintos procesadores
comunes Recursos
Decode compartidos
Por ejemplo, en un celular: r
• Un procesador general para la interfase a usuario
• Un procesador de señales para las tareas de comunicaciones
• Un procesador gráfico para la captura y compactación de imágenes y video
• Un procesador de audio para reproducir música

24 G. Jaquenod – 2010 - jaquenodg@gmail.com


Procesadores múltiples:
Buses y Switches

Un bus (direcciones más contenido) sólo Master1 Master2 Slave1 Slave2


puede transportar en un dado instante un
dato desde un origen a uno o más destinos
BUS
(realizar una transacción)
Master2 debe esperar
– Si varios procesadores desean realizar
transacciones deben esperar su turno
para evitar colisiones (contention)
Master1 Master2
Un switch permite que varias transacciones
con orígenes y destinos diferentes puedan ser
realizadas simultáneamente Slave1
– Aumenta la tasa de intercambio de datos,
a costa de mayor complejidad del circuito Slave2
– Sigue siendo necesario arbitrar los SWITCH
accesos a recursos comunes

25 G. Jaquenod – 2010 - jaquenodg@gmail.com


Memorias “cache”

En un sistema de procesamiento suele darse en el uso de la memoria los


fenómenos de:
localidad temporal: si se referencia a un elemento en un instante, es muy
probable que se volverá a referenciarlo en corto tiempo
localidad espacial: si se referencia a un dado elemento, es muy probable
que los ubicados próximos a él serán referenciados pronto
Esto lleva a la conveniencia de organizar una jerarquía de memoria:
 Una memoria pequeña y rápida (“cache”) organizada de a bloques
(nivel superior)
 Una memoria masiva de acceso más lento (nivel inferior de la jerarquía)
El uso de cache de datos implica problemas de coherencia y es útil para
aplicaciones muy complejas, en cambio el uso de cache de instrucciones,
que son RO, es una solución mucho mas simple y ofrece ventajas de
performance

26 G. Jaquenod – 2010 - jaquenodg@gmail.com


Evolución de la CPU:
para qué más registros?

• Al haber varios registros se puede 16 a 20 bits


almacenar varios resultados intermedios R0/PC Program Counter
sin necesitad de salvarlos en memoria R1/SP Stack Pointer
(bottleneck del AC único) R2/SR Status Register
R3/CG Constant Generator
• Si los registros contienen tanto datos R4 General Purpose
como direcciones se generan nuevos R5 General Purpose

MAB: Memory Address Bus


R6 General Purpose
posibles modos de direccionamiento R7 General Purpose

MDB: Memory Data Bus


• Al estar dentro de la CPU se pueden R8 General Purpose
R9 General Purpose
realizar instrucciones mucho más veloces, R10 General Purpose
con origen y destino en registros, de R11 General Purpose
acceso simultáneo (dual port) R12 General Purpose
R13 General Purpose
• Es posible reservar registros para ciertas R14 General Purpose
tareas (Ej: interrupciones) y de ese modo R15 General Purpose
SRC DST
acelerar y simplificar los cambios de
16 ALU de 16 bits 16
contexto
Y si uso un bus local?
27 G. Jaquenod – 2010 - jaquenodg@gmail.com
Un procesador elemental:
beneficios de 16 bits vs 8 bits

• En una instrucción de 16 bits caben campos 16 a 20 bits


para identificar un conjunto restringido de R0/PC Program Counter
operaciones (5 a 6 bits), indicar cuáles son R1/SP Stack Pointer
R2/SR Status Register
los registros fuente y destino (4 bits cada
R3/CG Constant Generator
uno), y algún bit extra para funciones R4 General Purpose
especiales (identificar modo de R5 General Purpose

MAB: Memory Address Bus


direccionamiento y si es una instrucción a R6 General Purpose
R7 General Purpose

MDB: Memory Data Bus


byte o word, por ejemplo) R8 General Purpose
• Ello posibilita una instrucción por ciclo de R9 General Purpose
R10 General Purpose
reloj, si la operación es entre registros
R11 General Purpose
• Cuando se usan operandos inmediatos, que R12 General Purpose
R13 General Purpose
no caben en los 16 bits, se usan soluciones
R14 General Purpose
originales, en este caso un registro R3 donde R15 General Purpose
según los bits extra mencionados se lee una SRC DST

constante usual: 0, +1, -1, 2, 4, 8. 16 ALU de 16 bits 16

28 G. Jaquenod – 2010 - jaquenodg@gmail.com


Buscando un procesador más
poderoso: qué cosa mejorar?

Para obtener CPUs cada vez más poderosas se exploran muchos caminos
– Modos de direccionamiento que minimicen tiempos muertos
– Conjunto óptimo de instrucciones para cada relación silicio/performance
– Pipelining y Branch Prediction: uso simultáneo de varios bloques de la CPU
– Cache de instrucciones: mejorar tiempos de lectura de instrucciones
– Ancho de palabra (y lectura de varias instrucciones a la vez): usar palabras
de más bits para mayor velocidad sin gastar más memoria de programa
– Cambios de contexto: mejorar tiempos de atención y retorno de subrutinas
e interrupciones, minimizar tiempos de salvado y recuperación de registros
– Modos Operacionales: agregar modos de operación (usuario, excepción,
supervisor) que faciliten la incorporación de sistemas operativos
– Bancos de registros: poseer múltiples registros que sirvan para datos y
direcciones y que sean propios a cada modo de operación
29 G. Jaquenod – 2010 - jaquenodg@gmail.com
Procesadores avanzados: otros
modos de direccionamiento

Además de los modos Absoluto, Indexado, Registro, Inmediato y Relativo al


Stack, existen variaciones que aumentan la capacidad de procesamiento,
aunque a costa de una unidad de direcciones más compleja:
 Base + Desplazamiento con automodificación, en memoria lineal: Dados
tres registros Ra (base), Rb (desplazamiento) y Rc (cambio), la dirección
del operando surge de la suma de los contenidos de Ra+Rb, y luego el
valor de Rb se actualiza como Rb=Rb+Rc. Este modo acelera el acceso a
tablas multidimensionales de datos.
 Base + Desplazamiento con automodificación, en memoria circular: en este
caso las direcciones se actualizan de modo de reciclar sobre una región de
memoria, tal como es necesario en buffers de comunicaciones
 Direccionamiento bit-reversal: usado en ciertos algoritmos, como FFT
En los DSP hay varios buses de datos y varias unidades de direcciones.
30 G. Jaquenod – 2010 - jaquenodg@gmail.com
Buscando un procesador más
poderoso: RISC versus CISC

Cuántas y cuáles instrucciones conforman el ISA de un procesador es un


tema de permanente discusión.
– En procesadores para algoritmos específicos (DSP), es sensato contar
con instrucciones especializadas en tareas complejas (FIRS, CONV).
– En procesadores de propósito general no es tan claro, y existe gran
variedad de alternativas, desde procesadores con sólo algo más de
veinte instrucciones nativas (RISC: Reduced Instruction Set Computer),
a procesadores con cientos de instrucciones especializadas (CISC:
Complex Instruction Set Computer).
La tendencia actual es el uso de arquitecturas RISC, más primitivas pero
más veloces, donde la acciones especializadas son resueltas por el
compilador concatenando instrucciones simples.
Por eso un RISC debe ser pensado para ser eficiente al ser compilado!

31 G. Jaquenod – 2010 - jaquenodg@gmail.com


Los primeros planteos de una
arquitectura RISC

A partir de trabajos de Patterson y Ditzel (1980) en la Univ. de Berkeley se


desarrolló un proyecto de postgrado sobre el diseño de un procesador con
Conjunto de Instrucciones reducido. La primer propuesta (Berkeley RISC 1)
fue una arquitectura mucho más simple que los procesadores CISC de esa
época, pero que permitía similar performance. Sus características más
notables eran:
– tamaño de palabra fija de 32 bits
– un banco de registros de 32 registros de 32 bits, todos ellos pudiendo
ser usados indistintamente en todas las instrucciones
– el procesamiento es sólo realizado en registros, y el acceso a memoria
es sólo para salvar o cargar registros
– uso de pipeline
– decodificación por lógica (no basada en microprogramación)

32 G. Jaquenod – 2010 - jaquenodg@gmail.com


Hacia un procesador más
poderoso: uso de pipeline

El pipeline descompone una instrucción en acciones elementales de


duración temporal parecida, y asigna recursos físicos distintos para cada
una, a los que luego usa en simultáneo. Por ejemplo: Cuantos niveles
conviene tener??
1. Generación de dirección de
programa 1 2 3 4 5 6 Instrucción N
2. Lectura de la instrucción 1 2 3 4 5 6 Instrucción N+1
3. Decodificación de la 1 2 3 4 5 6 Instrucción N+2
1 2 3 4 5 6 Instrucción N+3
instrucción
1 2 3 4 5 6 Instrucción N+4
4. Lectura del operando Instrucción N+5
1 2 3 4 5 6
5. Procesamiento del operando 1 2 3 4 5 6 Instrucción N+6
6. Escritura del operando
El resultado obtenido es una mucho mayor tasa de instrucciones, aunque:
• qué pasa en el caso de ramificaciones?
• qué pasa si una instrucción usa un dato que modificó la previa?

33 G. Jaquenod – 2010 - jaquenodg@gmail.com


El FLUSH del pipeline en las
ramificaciones

El pipeline contiene varias instrucciones sucesivas; y si una de esas


instrucciones (por ejemplo la N+1) es de ramificación y al fin del paso 5 se
detecta que la ramificación será tomada hacia una dirección X, lo leído de las
instrucciones siguientes (N+2 en adelante) debe ser descartado (pipeline
FLUSH) y el pipeline vuelto a cargar, desperdiciando ciclos
Y los efectos de borde 1 2 3 4 5 6 Instrucción N
del ciclo 4? 1 2 3 4 5 6 Instrucción N+1
1 2 3 4 - - descartada
Cómo es posible mejorar 1 2 3 - - - descartada
este problema? 1 2 - - - - descartada
Mediante BRANCH 1 - - - - - descartada
PREDICTION ! 1 2 3 4 5 6 Instrucción X
tiempo perdido
Especulación si una ramificación será tomada o no, para llenar el pipeline con la secuencia
de instrucciones considerada más probable y minimizar los casos de flush

34 G. Jaquenod – 2010 - jaquenodg@gmail.com


Uso de pipeline:
conflictos de acceso

Cuando una instrucción actúa sobre un dato que será leído por la siguiente
pueden ocurrir conflictos de pipeline que son solucionados insertando ciclos
muertos (stall, sin borrar el pipeline). Ejemplo: la instrucción N+1 escribe en el
paso 6 un dato que es leído por la instrucción N+2 en el paso 4:

1 2 3 4 5 6 Instrucción N
1 2 3 4 5 6 Instrucción N+1
1 2 3 4 5 6 Instrucción N+2
1 2 3 4 5 6 Instrucción N+3
1 2 3 4 5 6 Instrucción N+4
Cómo es 1 2 3 4 5 6 Instrucción N+5
tiempo
posible mejorar perdido 1 2 3 4 5 6 Instrucción N+6
este problema?
El compilador busca estas dependencias y si es posible cambia el orden de
instrucciones (Ej: la N+2 con la N+3) para no tener que insertar ciclos muertos

35 G. Jaquenod – 2010 - jaquenodg@gmail.com


Prefetch y Cache de
instrucciones

El software, secuencial, tiene localidad temporal y espacial inherente, y para


acelerar la lectura de instrucciones se pueden usar varias soluciones:
– Una memoria FIFO que vaya leyendo instrucciones y suministrándola a la
CPU a medida que ésta las necesita (caso del BIU del 8086)
– Una cache de instrucciones (solo lectura, sin problemas de coherencia),
muy próxima a la CPU, de donde puedan leerse las ultimas instrucciones
(y en general próximas, que por localidad espacial es probable que estén
en la línea). Es muy útil en el caso de loops (tipo FOR o WHILE).
– Además, agregando inteligencia de decodificación, el update de la cache
puede realizarse en avance por más de una vía, evitando tiempos muertos
de update causados por el pipeline flush en una ramificación
El tradicional modelo del PC se convierte en una unidad de suministro de
instrucciones a la Unidad de Control

36 G. Jaquenod – 2010 - jaquenodg@gmail.com


Cambios de contexto en
subrutinas

El prototipo de una función es:


<tipo de valor de retorno> nombrefuncion (parámetros);
Para implementar esta operación un compilador debe ejecutar varios pasos:
Antes del CALL:
– reservar lugar en el área de stack para los parámetros, resultados, y variables locales
– copiar allí el valor o direcciones de los parámetros, y la dirección del resultado
– ejecutar el CALL
Durante el CALL:
– realizar las operaciones en forma indexada con el SP, sobre el área reservada
Al final del CALL:
– almacenar el resultado en la dirección correspondiente
– liberar el área de stack
El uso de direccionamiento indirecto es un camino para no
– ejecutar el RETURN desperdiciar tanto tiempo moviendo datos
El uso de registros para las variables elimina escrituras

37 G. Jaquenod – 2010 - jaquenodg@gmail.com


Modos operacionales

En los procesadores modernos es habitual atender varias tareas y usuarios, y


para administrar el uso de recursos y evitar interferencias indeseadas entre
tareas o usuarios surgen alternativas de hardware y de software
 En el caso del software, el uso de un kernel o RTOS permite que la
aplicación se abstraiga del manejo directo del hardware a través del uso de
una capa HAL (Hardware Abstraction Layer) y Device Drivers
 En el hardware, además de disponer de uno o más bancos de registros
para atender las interrupciones, los procesadores poseen otros bancos de
registros asociados a distintos modos USUARIO, SYSTEM, SUPERVISOR,
ABORT, u otros, donde cada modo tiene distintas restricciones. De igual
modo, el manejo de memoria es restringido por hardware (MMU) a zonas
específicas para cada tarea, de modo que una tarea no afecte a otra.

38 G. Jaquenod – 2010 - jaquenodg@gmail.com


El caso de los controladores
basados en procesadores ARM

• El caso de los procesadores ARM es sumamente importante


• Marca una primer tendencia a una estandarización de arquitecturas,
independiente del fabricante del chip
• Es visible que al ser una arquitectura adoptada por múltiples
fabricantes, llevara a la estandarización de muchos otros recursos:
– Compiladores
– Sistemas operativos de tiempo real
– Biblioteca de servicios:
• Stacks de comunicaciones
• File systems

• En tanto sea una iniciativa privada (y no de tipo código abierto)


significa un riesgo de situación hegemónica

39 G. Jaquenod – 2010 - jaquenodg@gmail.com


Un procesador real para SoC:
el caso ARM

ARM corresponde a una arquitectura RISC de 32-bit, siendo la más usada en


la actualidad, y su simplicidad la hace conveniente para aplicaciones de
“sistemas en un chip” (System On Chip, o SoC) de bajo consumo de potencia.
Por eso es predominante en sistemas móviles como PDAs, teléfonos
celulares, reproductores de video o música, o periféricos inteligentes.

Los ARM poseen distintas variaciones de una arquitectura básica similar,


incluyendo los ARM7, ARM9, ARM11, y desde hace poco los Cortex. La
arquitectura ARM no es propia de un fabricante de chips, sino de una empresa
que diseña IP, puede ser usada con licencia, y por eso existen procesadores
ARM/Cortex fabricados bajo licencia de ARM por empresas como Atmel,
Freescale, NEC, NVIDIA, NXP, Samsung, Sharp, ST Microelectronics, Texas
Instruments, y otros.

40 G. Jaquenod – 2010 - jaquenodg@gmail.com


Características básicas de las
arquitecturas ARM

• Diseñados para aplicaciones pequeñas de alta performance y bajo consumo


(es decir, NO para un centro de cómputo)
• RISC 32 bits
• Control simultáneo de la ALU y el shifter en cada instrucción de
procesamiento de datos
• Juego de Registros con funcionalidades uniformes
• Arquitectura Load/Store (las operaciones sólo actúan sobre registros, en
memoria sólo se lee y escribe)
• Modos de direccionamiento simple, de 3 hasta direcciones (source1, source2,
destination)
• Capacidad de auto incremento y auto decremento
• Load y store de múltiples datos mediante una única instrucción (block moves).
• Interfase a recursos extra CPU (memoria y periféricos) mediante un conjunto
de buses estandarizados (AMBA)
41 G. Jaquenod – 2010 - jaquenodg@gmail.com
Arquitectura del Processor Core
de los ARMv4

Registro
Registro hidden
interfase al hidden
mundo externo
mundo interno Destination
de la CPU
Bancos de
registros de
Bus local
32 bits
Source 1

Source 2
Shifter en el
operando 2

Operaciones Unidad de
en 32 bits control

42 G. Jaquenod – 2010 - jaquenodg@gmail.com


Diferencias entre Processor
Core y CPU Core

• Se llama Processor Core al bloque CPU Core Processor Core


funcional que busca y ejecuta
virtual address
instrucciones, por ejemplo: ARM7TDMI,
ARM9TDMI, ARM9E-S
• Se llama CPU Core al sistema formado MMU
instruction &
data cache
ARM7TDMI

EmbeddedICE
por el Processor Core más otros & JTAG

bloques auxiliares inmediatos que


complementan su operación, como:

address
physical
instructions & data

• Manejo de Cache y administración write


buffer CP15
de memoria
• Manejo de interrupciones AMBA interface

Por ejemplo: ARM710T, ARM720T,


ARM74T, ARM920T, ARM922T, AMBA AMBA
address data

ARM940T, ARM946E-S, and


ARM966E-S
43
43 G. Jaquenod – 2010 - jaquenodg@gmail.com
Un procesador real para SoC: el
caso ARM

Los ARM actuales se dividen en cuatro versiones


(v4/v4T, v5/v5E, v6/v6M y v7), donde la letra T
indica aquellos que poseen la opción Thumb.
La versión v4T tiene entre sus procesadores más
exitosos el ARM7TDMI
La versión v5 y v5E se usa en los ARM9, donde
la E indica la adición de instrucciones tipo DSP.
La versión v6 incluye a los ARM11 y la v6-M a
versiones sintetizables, para uso en FPGA
A su vez la arquitectura v7 define tres perfiles: v4/v4T v5/v5E v6 v7
– ARMv7-M: para aplicaciones de bajo costo ARM1136
v7-A
Cortex-A8
1176
– ARMv7-R: para tiempo real. 1156T-2
v7-R
ARM926
– ARMv7-A: para aplicaciones complejas. 946
v6M Cortex-R4
ARM7TDMI
Ciertos v6 y los v7 son llamados Cortex StrongARM 966
Cortex-M0 v7-M
XScale
Cortex-M1 Cortex-M3

44 G. Jaquenod – 2010 - jaquenodg@gmail.com


Un procesador real para SoC: el
caso ARM

Las distintas arquitecturas (v4/v4T, v5/v5E, v6/v6M y v7) fueron agregando nuevas
funcionalidades, tales como:
– El conjunto de instrucciones Thumb (en v4T) y su evolución a Thumb2 (en v7)
– Instrucciones para aplicaciones DSP (v5E)
– Unidad de manejo de memoria MMU, desde la v4T
– Unidad de protección de memoria MPU (en la v5E)
– Instrucciones Java (llamado Jazelle, en la v5E)
– Manejo de instrucciones de punto flotante (en la v5E)
– DMA (en la v5E)
– Extensión NEON para el procesamiento SIMD de datos de 128 bits (en v7-A)
para aplicaciones gráficas y de audio

45 G. Jaquenod – 2010 - jaquenodg@gmail.com


El ARM7TDMI-S

• El ARM7 TDMI-S está basado en un núcleo ARM7, caracterizado por:


– Pipeline de 3 etapas
– Arquitectura Von Neumann
– Relación típica de 1.9 CPI (ciclos de reloj por instrucción), que se
traduce en un tiempo típico de instrucción de 32ns operando a 60MHz
• El apéndice TDMI-S al nombre del núcleo corresponde a:
– T: Acepta el Set de instrucciones Thumb
– D: Incorpora recursos de debug
– M: Con un multiplicador de 32x32 con resultados de 64 bits
– I: Con recursos de emulación EmbeddedICE
– S: Sintetizable (descripto como bloque IP)

46 G. Jaquenod – 2010 - jaquenodg@gmail.com


Estados ARM y Thumb

• En aplicaciones embebidas, el uso de instrucciones de 32 bits (ideales para


procesar datos) puede resultar en uso excesivo de memoria de programa
• Para ello, el ARM7TDMI-S puede operar en dos estados, que buscan e
interpretan instrucciones de distinta longitud:
– Estado ARM: el núcleo ejecuta instrucciones de 32 bits, llamadas
instrucciones ARM
– Estado Thumb: en este caso el núcleo ejecuta instrucciones de 16 bits,
llamadas instrucciones Thumb, que responden a un subconjunto de
las instrucciones ARM
• Los dos estados pueden ser conmutados en tiempo de ejecución, de modo
de elegir en cada momento el conjunto de instrucciones más conveniente

47 G. Jaquenod – 2010 - jaquenodg@gmail.com


Conjunto de Instrucciones ARM

• Todas las instrucciones son de 32 bits


• La mayoría de las instrucciones son ejecutadas en un único ciclo de reloj
• La mayoría de las instrucciones puede ser de ejecución condicional
• Las instrucciones ARM pueden ser clasificadas en 6 clases
– Instrucciones de ramificación (Branch instructions)
– Instrucciones de tratamiento de datos (Data Processing instructions)
– Instrucciones para tratamiento del registro de estado (Status register
transfer instructions)
– Instrucciones de movimiento de datos (Load and Store instructions)
– Instrucciones para manejo de coprocesadores (Coprocessor
instructions)
– Instrucciones para generación de excepciones (Exception-generating
instructions)
Según el tipo de clasificación usado para describirlas, se hablará de 6
clases, 3 clases, etc..

48 G. Jaquenod – 2010 - jaquenodg@gmail.com


Conjunto de Instrucciones
Thumb

• El conjunto de instrucciones Thumb corresponde a un subconjunto del


conjunto de instrucciones ARM
– Las instrucciones ARM más comunes han sido recodificadas en 16 bits
– Luego de leer la instrucción THUMB desde memoria es convertida a su
formato ARM de 32 bits, previo a ser decodificada y ejecutada
– Es decir, las operaciones siguen siendo de 32 bits, usando datos y los
mismos registros de 32 bits
– En general ,las instrucciones THUMB no tienen la posibilidad de
ejecución condicional (sólo las ramificaciones, obviamente)
• Al usar el conjunto de instrucciones THUMB, aunque se requieren más
instrucciones que en el caso ARM, la compresión de 32 a 16 bits resulta en
una mejora de uso de memoria de programa de ~ 30%, si bien con la
penalidad de mayor tiempo de ejecución

49 G. Jaquenod – 2010 - jaquenodg@gmail.com


Modos operacionales del ARM7

El ARM7 tiene siete modos operacionales: USER


– USER: modo sin privilegios bajo el cual corre la
mayoría de las aplicaciones SYSTEM
– SYSTEM: modo privilegiado que usa los mismos
FIQ
registros que el modo USER

Privileged Modes
Exception Modes
– FIQ: atención de la interrupción de mayor prioridad IRQ
– IRQ: atención de interrupción de propósito general
– SUPERVISOR: modo protegido para un sistema SUPERVISOR
operativo al que se ingresa desde Reset, o
mediante la instrucción SOFTWARE INTERRUPT ABORT
– ABORT: atención de violaciones de acceso a
UNDEFINED
memoria
– UNDEFINED: atención de instrucciones indefinidas

50 G. Jaquenod – 2010 - jaquenodg@gmail.com


El pipeline en los ARM7

• Los ARM7 cuentan con un pipeline de 3 niveles en la decodificación y


ejecución de instrucciones que permite mejorar su performance
• Los tres niveles implementados son:
– Búsqueda (FETCH)
– Decodificación (DECODE)
– Ejecución (EXECUTE)
• De este modo muchas instrucciones pueden ser ejecutadas con una
cadencia de una instrucción/ciclo
• El pipeline es resuelto por hardware y resulta prácticamente invisible al
programador, sobre todo cuando éste programa en alto nivel
• Sólo debe ser tenido en cuenta cuando se usa al valor actual del PC
como operando, dado que cuando se ejecuta una instrucción el PC la está
buscando la instrucción que se halla dos words (8bytes) más adelante

51 G. Jaquenod – 2010 - jaquenodg@gmail.com


Registros del ARM7

• El ARM7 tiene 37 registros de 32 bit, de los que 17 son visibles en cada


modo operacional
• Tres de los registros visibles son especiales para cada modo:
– R14: Link Register (LR) con la dirección de retorno de subrutinas
– R13: convencionamente usado como SP al contexto del modo
– Program Status Register: (CPSR) registro de estado de ese modo
– En el caso del modo FIQ los registros R8 a R12 también son propios del
modo
• R15: Program counter (PC) contiene la dirección de instrucciones, en bytes.
Como las instrucciones son de 4 bytes, alineadas por words, los dos últimos
bits son siempre 0
• Todas las instrucciones pueden usar cualquiera de los 16 registros visibles

52 G. Jaquenod – 2010 - jaquenodg@gmail.com


Instrucciones de procesamiento
de datos

El análisis de la figura sólo


interesa a quien escribe el
compilador de Assembler
Ejecución
condicional
La razón de mostrarla es hacer
notar cómo se aprovechan casi Condicion de
actualizacion de
todos los bits para las distintas CZVN
opciones descriptas
previamente (sólo quedan dos
bits sin usarse)
5 bits representan el shift
de 0 a 31 lugares, y 3 bits
uno de los 6 posibles
Permite indicar dos registros tipos de shift
fuente y un registro destino,
entre otras cosas Son 4 bits, podría ser 0
a 15, sólo tiene sentido
0 a 12

53 G. Jaquenod – 2010 - jaquenodg@gmail.com


Instrucciones de movimiento de
datos

Son usadas para transferir bytes o words entre los registros ARM y memoria, y
pueden observarse 3 tipos:
– Escritura o lectura entre registros individuales y memoria, a nivel de byte,
half word o word. Para ello se calcula una dirección del espacio de
memoria formada por una dirección base más un desplazamiento opcional

– Escritura o lectura entre múltiples registros y memoria: es un tipo de


instrucciones útil cuando el valor de un conjunto de registros debe ser
salvado o repuesto (como ocurre en cambios de contexto), aunque con
menos facilidades de direccionamiento que el caso previo

– Instrucciones atómicas (ininterrumpible) de intercambio (swap) de


contenidos entre registros y memoria: es un tipo de instrucción útil para la
implementación de semáforos

54 G. Jaquenod – 2010 - jaquenodg@gmail.com


Intercambio entre registros y
memoria (SWAP)

La forma de la instrucción es SWP{<cond>}{B} Rd,Rm,[Rn]


La instrucción lee el word (B=0) o unsigned byte (B=1) desde la dirección de
memoria apuntada por Rn en el registro Rd, a la vez que almacena el mismo tipo
de dato (dado por B) contenido en el registro Rm en la dirección de memoria
apuntada por Rn.
– Rd y Rm pueden ser iguales (aunque deben ser distintos a Rn), en cuyo caso
se produce un intercambio de valores. Ninguno puede ser el PC.
– Aunque hay una lectura y una escritura el comportamiento es atómico, es
usada para semáforos

..
Rm Rm=Rd ADR r0,semaforo
Rn Rn SWPB r1,r1,[r0] ; exchange
..
Rd

55 G. Jaquenod – 2010 - jaquenodg@gmail.com


El set de Instrucciones THUMB

• El conjunto de instrucciones Thumb es complementario al conjunto ARM, y


no puede operar por sí solo (se verá que el Thumb2 sí lo permite)
• En el reset el procesador inicia en modo ARM y para pasar a Thumb se
requiere ejecutar la instrucción BX
• Otras acciones que también cambian de ARM a THUMB son el retorno de
interrupciones
• Al ser más eficiente en uso de memoria, la enorme mayoría de las
instrucciones ejecutadas serán en modo Thumb, y sólo algunas en modo
ARM. Esto justifica la aparición del Cortex y el modo Thumb2
• En modo Thumb sólo son accesibles los registros r0-r7, y los registros r13,
r14 y r15 tiene funciones predefinidas como Stack Pointer, Link Register y
PC (en modo ARM usar r13 como SP es sólo una convención). Los
registros r8 a r12 tienen acceso restringido

56 G. Jaquenod – 2010 - jaquenodg@gmail.com


Similitudes y diferencias entre los
modos ARM y THUMB

• En ARM todas las instrucciones son de 32 bits, en THUMB son de 16 bits


• Ambos modos usan una arquitectura load/store con procesamiento de
datos, movimiento de datos, y flujo de control. De hecho, la CPU es la
misma, las instrucciones THUMB sólo son casos selectos de instrucciones
ARM expresadas de modo comprimido
• Ambos modos toleran datos de 8, 16 y 32 bits, alineadas según el tamaño
• Las instrucciones ARM son condicionales, de las THUMB sólo algunas
• Las instrucciones ARM son de 3 direcciones (SRC1, SRC2, DEST), en
cambio en muchas instrucciones THUMB el DEST coincide con un SRC
• El formato de instrucciones es menos regular en THUMB que en ARM
• Todas las excepciones regresan la CPU a modo ARM y son atendidas en
modo ARM.

57 G. Jaquenod – 2010 - jaquenodg@gmail.com


Excepciones

•Una excepción es una alteración del flujo de programa que suele cambiar el
MODO de operación de la CPU, desde USER/SYSTEM a otro.
•Existen tres grupos
– Como resultado directo de la ejecución de una instrucción:
• SWI
• Instrucción indefinida o ilegal
• Búsqueda de la instrucción de una dirección ilegal
– Como consecuencia de la ejecución de una instrucción:
• Intento de lectura o escritura de memoria en una dirección ilegal
• Error aritmético (ej. División x cero)
– Como resultado de una señal de hardware externa, tales como:
• Reset
• Fast Interrupt (FIQ)
• Normal Interrupt (IRQ)

58 G. Jaquenod – 2010 - jaquenodg@gmail.com


Excepciones direccionadas
por vector

Una Excepción puede ser vista como un llamado a subrutina “forzado”.


• Su ocurrencia excepción no es predecible (salvo en el caso de SWI)
• Cada excepción tiene una única dirección predefinida (IRQ, FIQ, etc), y el
salto es hecho a esta dirección.
• La dirección al al cual el procesador es forzado a saltar es llamada vector
de interrupción o excepción.
En ARM podemos asignar las interrupciones en tres categorías
• IRQ Vectorizadas y No Vectorizadas
• FIQ Fast Interrupt Request: rápida y de baja latencia, habitualmente solo
hay una por sistema, es la de máxima prioridad, es posible atender la
interrupción sin identificar la fuente.

59 G. Jaquenod – 2010 - jaquenodg@gmail.com


TCMs: Tightly Coupled Modules

El los distintos modelos de ARM suelen existir varios módulos intimamente


acoplados al processor core, entre ellos:
– Memorias cache de Instrucciones y datos
– MMU = Memory Management Unit: El módulo de manejo de memoria
permite hacer un remapeo de direcciones, para que cada aplicación
vea un espacio de direcciones de instrucciones y datos propio
– VIC = Vector Interrupt Controller: el módulo de manejo del vector de
interrupciones permite administrar múltiples fuentes de FIRQ e IRQ.
– AMBA = Advanced Microprocessor Bus Architecture: interfase con
otros módulos como memoria masiva y periféricos
– MPU = Memory Protection Unit: El módulo de protección de memoria,
permite definir qué parte del espacio de memoria es utilizable por
distintas aplicaciones, evitando interferencias (ARMv7)

60 G. Jaquenod – 2010 - jaquenodg@gmail.com


MMU

• La MMU permite administrar las


virtual address
direcciones que se usan,
transformando direcciones lógicas
virtuales en direcciones físicas. instruction & ARM7TDMI
MMU MMU data cache
• Controla los permisos de acceso a EmbeddedICE
& JTAG

cada región de memoria (RW, RO o


No Access) y también la operación

address
physical
instructions & data
de la cache de escritura en la
write
página correcta, para asegurar la buffer CP15

coherencia en cambios de contexto. AMBA interface

• Si la transformación de páginas falla,


o si se violan permisos de acceso, la AMBA AMBA
address data
ARM710T
MMU genera excepciones a la CPU

61
61 G. Jaquenod – 2010 - jaquenodg@gmail.com
Qué es AMBA?

• La CPU Core ARM se conecta virtual address


con la memoria y los periféricos
mediante una interfase
instruction & ARM7TDMI
estandarizada MMU data cache
EmbeddedICE
• Esta característica permite que & JTAG

los distintos fabricantes de

address
physical
procesadores basados en ARM instructions & data

puedan definir y ofrecer write


buffer CP15
periféricos propios
• La interfase AMBA (Advanced AMBA interface

Microcontroller Bus Architecture )


define varios métodos posibles AMBA AMBA
address data
ARM710T
CPU Core

62
62 G. Jaquenod – 2010 - jaquenodg@gmail.com
Qué es AMBA?

• Advanced Microcontroller Bus Architecture es una norma de


comunicaciones on-chip, independiente de la tecnología que se usa para
implementarla, pues sólo define el protocolo del bus
• Originalmente define tres diferentes tipos de bus:
– AHB (Advanced High-performance Bus)
– ASB (Advanced System Bus),
– y APB (Advanced Peripheral Bus).
• En la versión 3 aparece AXI (Advanced )
• Con la aparición del microprocesador Cortex (ARMv7) se define una versión
del AHB llamada AHB Lite, para reducir la complejidad y costo
• Existen distintas generaciones de especificaciones AMBA, que han surgido
con el avance tecnológico y la ampliación del tipo de aplicaciones de los
procesadores ARM en sus distintas variantes

63 G. Jaquenod – 2010 - jaquenodg@gmail.com


Sistema típico

64 G. Jaquenod – 2010 - jaquenodg@gmail.com


Herramientas de Debug
embebidas en la CPU
La presencia de extensiones de Debug es indicada por las letras D/I en el nombre de la
CPU. Por ejemplo, en ARM7TDMI la D representa herramientas de debug básicas por
JTAG y la I la presencia de un módulo EmbeddedICE. Este último es una extensión de la
arquitectura ARM pensada para poder realizar una profunda inspección del sistema, que
en las generaciones ARM7 y ARM9 pasó a ser el estándar de facto para debug.
Se compone de
– Un conjunto de cadenas de hardware (scan chains) alrededor del núcleo, y los pines
BRKPT, DBGRQ y DBGACK usados para el control del comportamiento del núcleo
– un bloque adicional que agregar un controlador JTAG TAP (TAP: Test Access Port),
y la adición de lógica de watchpoints/breakpoints a la lógica de debug existente
– un convertidor de protocolo, para proveer la comunicación de la información de
debug a través de JTAG con el computador de debug. Este protocolo puede ser
provisto en dos opciones, estándar o MultiICE, con diferente velocidad de acceso.
El EmbeddedICE es configurado por la interfase JTAG, y provee dos unidades de
watchpoint en tiempo real, que pueden operar sin detener a la CPU (monitoreando
acceso a datos) o insertar un breakpoint (monitoreando acceso a instrucciones). A
diferencia de las facilidades de debug por software, en este caso no se afecta a la CPU,
no se gasta código extra, y el debug puede ser hecho en ROM (FLASH)

65 G. Jaquenod – 2010 - jaquenodg@gmail.com


La evolución de ARM a Cortex

• La arquitectura ARM7TDMI
(v4,v4T) es muy poderosa, y
la arquitectura v5 (los ARM9)
más aún
• Pero la experiencia mostró
que esa arquitectura tenía
algunas cosas innecesarias
pero le faltaban también
Los cambios que suceden en la arquitectura
otras cosas de los procesadores no es arbitraria
• Eso llevó a las arquitecturas La evolución de la tecnología de fabricación, la
v6 (ARM11) y v7, que aparición de nuevas tendencias de consumo,
actualmente se comercializan la competencia comercial y la evaluación
como Cortex M0, M1, M3, estadística de aplicaciones, éxitos y fracasos
M4, R4, y Cortex A8 y A9 es quien marca el camino al desarrollo de
nuevos productos
66 G. Jaquenod – 2010 - jaquenodg@gmail.com
La evolución de ARM a Cortex:
caso Cortex-M3 (ARMv7-M)
• El Cortex-M3 es un microprocesador de
32 bits (bus de datos, registros e interfase
a memoria). Su arquitectura Harvard
mejora la performance, pues el acceso de
datos no afecta el pipeline de
instrucciones.
• También posee interfases a distintos
buses que pueden operar en forma
simultánea. Define un único espacio de
direcciones para instrucciones y datos y
en ciertos modelos ofrece una unidad de
protección de memoria (MPU) y manejo
de caches externas.
• Con facilidades de debug embebidas, que
no sólo permite watchpoints y System bus
breakpoints, sino también facilidades de El system bus es usado para tener acceso a
trace de instrucciones. memoria (SRAM interna, RAM externa) y
periféricos, dispositivos externos y parte del
espacio de memoria
67 G. Jaquenod – 2010 - jaquenodg@gmail.com
La evolución de ARM a Cortex:
modos operacionales

• Simplificación de los modos operativos: Caso single-thread


dos modos privilegiados (thread y
exception) y un modo Usuario (thread). Manejo de excepciones
• El manejo de interrupciones Nivel base privilegiado
(excepciones) es siempre en modo
privilegiado.
• La estructura provee lo necesario para
incorporar fácilmente un RTOS o
incluso un sistema operativo más
complejo (uC-Linux, Embedded CE,
etc.)
• Ciertas instrucciones sólo son
permitidas en modo privilegiado, para
proteger memoria y datos en sistemas
multi-thread
Nivel base sin privilegios
• En sistemas single thread se trabaja
siempre en modo privilegiado

68 G. Jaquenod – 2010 - jaquenodg@gmail.com


La evolución de ARM a Cortex:
ARM & Thumb versus Thumb2

• Un gran cambio en las arquitecturas v6 y v7 fue definir un nuevo ISA (llamado


Thumb 2) frente a los 2 ISA (ARM y Thumb) de versiones previas
• Las instrucciones Thumb 2 no son de tamaño fijo, sino que en ciertos casos
son de 16 bits y en otros casos de 32 bits
• Un único set de instrucciones evita la necesidad de estar conmutando de
modo (el bit T en los ARM7), y simplifica la realización de compiladores
• Además, Thumb2 agrega a Thumb instrucciones para manejo de bits, de
campos de bits, de direcciones, para la ejecución eficiente de construcciones
de software (como switch, if/then/else, for) propias de lenguajes de alto nivel,
para procesamiento digital de señales, y para cambios de contexto.
• Este nuevo set de instrucciones, más la arquitectura Harvard, a al evaluarse
un conjunto de algoritmos de test estándar para evaluación de performance
(Dhrystone) resulta para los Cortex-M3 en una performance de 1.25
DMIPS/MHz, mientras que la de los ARM7TDMI es sólo 0.95 (en modo ARM) y
0.74 (en modo Thumb).

69 G. Jaquenod – 2010 - jaquenodg@gmail.com


Thumb2: algunas de las nuevas
instrucciones

• RBIT: Inversión de bits de una palabra: El orden de todos los bits de un registro es
invertido (el MSB pasa a ser el LSB) y el valor guardado en otro registro. Junto a las
instrucciones de extracción de campos sirve para elaboración eficiente de una FFT
• REV (convierte un word de 32-bit de big-endian a little-endian data o viceversa)
• REV16 (convierte un half-word de 16-bit de big-endian a little-endian data o viceversa)
• REVSH
• CLZ (count leading zero); Permite analizar la magnitud de un valor y realizar ajustes de
exponente.
• SDIV, UDIV: División con y sin signo
• SXTB, SXTH, UXTB, UXTH: Extensión de signo (signed y unsigned)
• SSAT y USAT: Saturación al pasar de 32 a 16 bits
• TBB y TBH: Para implementación eficiente de la instrucción switch de C, realizando
ramificación por tablas con desplazamiento de bytes o half words
• CBZ y CBNZ: Para la realización eficiente del cierre de un for en C
• ITxxx: permite realizar construcciones simples tipo IF-THEN-ELSE de hasta 4
instrucciones con mínimo overhead de software

70 G. Jaquenod – 2010 - jaquenodg@gmail.com


Thumb2: algunas de las nuevas
instrucciones

• LDRD, STRD: Movimiento de datos de 64 bit entre dos registros y memoria,


• UBFX, SBFX: Separación de un campo de bits de un word (Bit Field Extract)
• Insertar Bit Field (BFI) y borrar Field Bit (BFC)
• DMB, DSB, ISB: Manejo del pipeline al cambiar de contexto para que los accesos a
datos pendientes y las instrucciones en curso se completen antes de la instrucción
siguiente, para cambios de contexto y mapas de memoria:
• WFE, WFI, y SEV: Wait-For-Event, Wait-For-Interrupts, y Send-Event: para detener el
procesador y sincronizar tareas en sistemas multiprocesadores
• MSR y MRS: Para mover contenidos entre registros generales y especiales
• Manejo exclusivo de memoria para la implementación de semáforos:
– LDREX y STREX (word),
– LDREXB y STREXB (byte),
– LDREXH y STREXH (half word)

71 G. Jaquenod – 2010 - jaquenodg@gmail.com


Comparación Thumb 2 vs Thumb
en Cortex M0(v6) y M3(v7)

ADC ADD ADR AND ASR B CLZ

BFC BFI BIC CDP CLREX CBNZ CBZ CMN

CMP DBG EOR LDC

LDMIA BKPT BLX ADC ADD ADR LDMDB LDR LDRB

LDRBT BX CPS AND ASR B LDRD LDREX LDREXB

LDREXH DMB BL BIC LDRH LDRHT LDRSB

LDRSBT DSB CMN CMP EOR LDRSHT LDRSH LDRT


Thumb MCR ISB LDR LDRB LDM LSL LSR MLS

MCRR MRS LDRH LDRSB LDRSH MLA MOV MOVT

MRC MSR LSL LSR MOV MRRC MUL MVN

NOP NOP REV MUL MVN ORR ORN ORR PLD

PLDW REV16 REVSH POP PUSH ROR PLI POP PUSH

RBIT SEV SXTB RSB SBC STM REV REV16 REVSH

ROR SXTH UXTB STR STRB STRH RRX RSB SBC

SBFX UXTH WFE SUB SVC TST SDIV SEV SMLAL

SMULL WFI YIELD SSAT STC STMIA


CORTEX-M0
STMDB STR STRB STRBT

STRD STREX STREXB STREXH STRH STRHT STRT

SUB SXTB SXTH TBB TBH TEQ TST

UBFX UDIV UMLAL UMULL USAT UXTB UXTH

WFE WFI YIELD IT


CORTEX-M3
Present in ARM7TDMI

72
72 G. Jaquenod – 2010 - jaquenodg@gmail.com
Cortex-M3: facilidades de debug

• Se incluyen facilidades de debug para control del programa,


como halt, paso a paso, breakpoints, watchpoints (datos),
inspección o modificación de registros/memoria, profiling, e
historial de instrucciones (trace).
• Las acciones de debug pueden dispararse a causa de eventos
como breakpoints, watchpoints, fault conditions, o señales
externas de pedido de debug. Cuando sucede un evento la
CPU puede detenerse o saltar a la excepción de Debug.
• La interacción no es por JTAG sino mediante una interfase
llamada Debug Access Port (DAP), por la cual se puede
acceder a registros y memoria incluso mientras la CPU está
en ejecución. El manejo de la interfase es realizado por un
módulo llamado Debug Port (DP), del que existen varias
versiones: Serial-Wire JTAG Debug Port (SWJ-DP) que
soporta JTAG y Serial-Wire, y SW-DP (que sólo soporta Serial-
Wire).

73 G. Jaquenod – 2010 - jaquenodg@gmail.com


Cortex: mapa de memoria
predefinido

• Al usar direcciones de 32 bits, los 4


Gigabytes disponibles siempre son
ocupados en una mínima fracción
• En vez de sólo definir la ubicación
de los vectores y dejar libertad total
para elegir la dirección de RAM,
código o periféricos, en los Cortex
existe una asignación predefinida
del mapa de memoria, que facilita
la operación de instrucciones y
periféricos, e incluso define el tipo
de interfase de bus usada para el
acceso a cada región
• Junto a bit-banding, acceso no
alineado a word/half word, y
accesos exclusivos, permite
mejoras de performance

74 G. Jaquenod – 2010 - jaquenodg@gmail.com


Cortex: manejo de datos por
word o bits (bit-banding)

• En el Cortex-M3, es posible
hacer el set/reset de un bit
individual sin necesidad de
procesar toda la palabra que lo
contiene.
• Una región predefinida de 1MB
del mapa de SRAM y otra
región de 1MB del mapa de
periféricos tolera esta Por ejemplo, para setear el bit 2 de la palabra ubicada
funcionalidad, donde cada bit en 0x20000000, en vez de usar 3 para leer la palabra,
de una palabra en esa región hacer el OR con 0x04 y escribir la palabra, basta escribir
0x01 en la dirección 0x22000008 (cada bit está
está asociado al bit 0 de una
asociado a un alias de un word, que ocupa 4
dirección individual (alias) que
direcciones, por eso el bit 2 tiene offset 8)
se refiere a ese bit

75 G. Jaquenod – 2010 - jaquenodg@gmail.com


Evolución de ARM a Cortex:
NVIC

El NVIC, embebido en el Processor Core, presenta ventajas respecto al VIC de los ARM7,
pues el NVIC y el processor core están físicamente conectados, sin necesidad de usar el
AMBA, lo que mejora la rapidez de atención.
El acceso completo al NVIC es realizado en modo privilegiado, aunque en modo usuario
es posible generar excepciones por software, si esta funcionalidad ha sido habilitada.
– Soporte de interrupciones anidadas (Nested Interrupt Support): todas las
interrupciones externas y la mayoría de las internas pueden ser programadas con
diferentes niveles de prioridad. De este modo, al ocurrir una interrupción, el NVIC
compara su prioridad con la prioridad de la tarea actual, y si la interrupción tiene
mayor prioridad fuerza la activación de la ISR correspondiente.
– Soporte de Interrupciones Vectorizadas (Vectored Interrupt Support): cada interrupción
tiene un lugar en una tabla de memoria que guarda la dirección de inicio de su ISR,
que es cargada automáticamente al PC al atender esa interrupción.
– Cambios de prioridad dinámicos (Dynamic Priority Changes Support): los niveles de
prioridad de las interrupciones pueden ser cambiados por software en cualquier
momento, incluso el de la interrupción en curso, aunque en este caso se toma la
prevención de evitar que sea reentrante

76 G. Jaquenod – 2010 - jaquenodg@gmail.com


Evolución de ARM a Cortex:
NVIC

• Reducción de tiempos de latencia: para acelerar la atención de eventos de tiempo real, el


Cortex M3 realiza el salvado/recuperación automático de R0–R3, R12, LR, PC, y Program
Status (PSR) en el Stack Pointer corriente. Como la atención de excepciones siempre se
hace en modo privilegiado, en caso de interrupciones anidadas siempre se usará el Main
Stack Pointer (MSP). Dado que el Cortex tiene arquitectura Harvard, mientras el bus de
datos se usa para salvar los registros, el de instrucciones se usa para buscar la dirección
de la ISR, y el IPSR se carga con el número de interrupción actual.
• Enmascaramiento de interrupciones: las interrupciones pueden ser enmascaradas en
base a su prioridad, o totalmente mediante los registros BASEPRI, PRIMASK, y
FAULTMASK. Esto es útil en tareas críticas que no deben ser interrumpidas.
• SYSTICK: como parte del NVIC existe un timer llamado System Tick (SYSTICK), un timer
descendente que puede generar interrupciones con un ritmo regular, incluso con la CPU
en SLEEP; es de importancia para un eventual OS. Sus registros son:
– SysTick Control and Status: enable, fuente de reloj, actúa por interrupción o polling
– SysTick Reload Value: valor de recarga al llegar a cero
– SysTick Current Value: valor actual.
– SysTick Calibration Value: cantidad de ticks en 10ms

77 G. Jaquenod – 2010 - jaquenodg@gmail.com


El Cortex-M0

• El Cortex-M0 es la solución más simple de


Cortex-M, y ofrece 0.9 DMIPS/MHz, con un
set de instrucciones con menos de 60
instrucciones, apenas algunas más (ej: WFI)
que el set Thumb del ARM7TDMI.
• Su mínimo uso de área sólo requiere el
equivalente a 12K gates en la configuración
mínima, haciéndolo ideal para aplicaciones
de bajo costo, o en sistemas mixed-signal
(digital+analógico, incluyendo RF).
• En ese caso, donde suele seguirse usando
tecnologías de detalles grandes (0.35μm,
0.25μm, 0.18μm), el Cortex-M0 tiene una
performance equivalente al ARM7TDMI con
un tercio de tamaño y consumo de potencia.
• El NVIC incluye al timer SysTick, haciendo
fácil el diseño de aplicaciones de bajo costo
basadas en un RTOS

78 G. Jaquenod – 2010 - jaquenodg@gmail.com


El Cortex-M1

• El Cortex-M1 es la propuesta ARM para Tipo de Ejemplo Frecuencia Área


FPGA (MHz) LUTS
quienes desean incluir un procesador
estándar Cortex-M en una FPGA, con el 65 nm Altera Stratix-III, Xilinx 200 1900
Virtex-5
mismo set de instrucciones del Cortex-
M0. Las diferencias fundamentales son 90 nm Altera Stratix-II, Xilinx 150 2300
Virtex-4
de timing dado que el M0 es para ser
65 nm Altera Cyclone-III 100 2900
sintetizado en ASIC y el M1 en FPGA.
• El diseño se orienta a las FPGA de los 90 nm Altera Cyclone-II, Xilinx 80 2600
Spartan-3
líderes del mercado (ALTERA, XILINX,
130 nm Actel ProASIC3, Actel 70 4300
ACTEL), y posibilita elegir la mejor
Fusion Tiles
implementación para cada proyecto.
• El objetivo es evitar la competencia Los resultados dependen de las herramientas de
entre procesadores propios de cada síntesis y Place & Route usadas, así como de las
fabricante (ej: NIOS II y MicroBlaze) opciones de configuración, que en este caso han sido
ofreciendo una solución estándar de el menor núcleo (ningún TCM, sin extensiones de
hardware y software, así como una fácil Debug), y suponiendo el chip comercial más veloz de
migración a un ASIC. esa familia

79 G. Jaquenod – 2010 - jaquenodg@gmail.com


Casos de Cortex M3:
LPC13xx de NXP

• Opera hasta 72-MHz, con un consumo de energía de (~200uA/MHz) y tres modos de


consumo reducido: Sleep, Deep-sleep, y Deep-power-down
• Memoria FLASH de hasta 32kB y SRAM de hasta 8kB
• Periféricos seriales: USB 2.0 full-speed device controller con on-chip PHY, UART, SPI,
I2C
• Drivers USB en el chip para modos MSD (memoria masiva) y HID (Human Interfase
Device: mouse, teclado)
• Periféricos analógicos: ADC de 10-bit, 8 canales, y hasta 400 ksps
• Pin-to-pin compatible con los LPC111x (Cortex-M0)

80 G. Jaquenod – 2010 - jaquenodg@gmail.com


Casos de Cortex M3:
Stellaris

• SAFERTOS included in the LM3S9B96


High-integrity RTOS in ROM
• Can be used as a standard operating
system OR as part of a high integrity
application which requires certification
to IEC61508 or FDA510(k)
• RTOS value $65k free with Tempest
LM3S9B96
• Integrated hardware/software solution
shortens the time to market and
significantly reduces cost for Industrial
and Medical Applications

81 G. Jaquenod – 2010 - jaquenodg@gmail.com


Casos de Cortex A8
Sitara de Texas Instruments (1)

Bajo el nombre SITARA Texas Instruments comercializa una serie de procesadores


Cortex-A8 y ARM9, de elevadísima capacidad, con relojes de 375 MHz a 1.5 GHz

– OMAP3503/15 ARM Cortex-A8:: con la designación OMAP, estos procesadores


ofrecen una poderosa CPU, periféricos mutimedia, GPU compatible con OpenGL® ES
2.0, aceleradores de video, y un DSP TMS320C64x.
– AM35x ARM Cortex-A8: con alto rango de temperatura de operación, bajo consumo y
capacidad gráfica. Entre sus periféricos se destacan CAM y el MAC de Ethernet.
– AM37x ARM: con reloj de hasta 1GHz, mejora 40% en procesamiento a la familia
previa, duplica su capacidad gráfica, y consume 30% menos. La escalabilidad de la
familia busca facilita la migración de desarrollos a través de las líneas Sitara y DaVinci
– AM389x ARM Cortex-A8: Los AM3892 y AM3894 están orientados a
comunicaciones, redes, computadores de tarjeta (SBC) e industrial. La integración de
periféricos de alta performance, como PCIExpress Gen2, doble USB 2.0, SATA 2.0,
doble Gigabit Ethernet y doble interfase DDR2/3, recursos para gráficos 3D (AM3894)
y controlador de display interno con soporte de hasta dos displays simultáneos, en
resoluciones de hasta 1920 x 1280!
82 G. Jaquenod – 2010 - jaquenodg@gmail.com
CMSIS: Cortex Microcontroller
Software Interface Standard

La evolución del hardware debe tener un acompañamiento similar por el software.


Además de los lenguajes poderosos (C/C++) pasan a ser de importancia:
– los administradores de tareas (RTOS)
– Los servicios de abstracción entre las capas de software y hardware
En el caso de la propuesta Cortex-M se ha definido la norma CMSIS, que define:
– Un modo común de acceso a periféricos
– Una forma estándar de definir los vectores de excepción
– Acuerdo en el uso de denominaciones para losperiféricos propios de Cortex y sus vectores
– Una interfase estándar e independiente del dispositivo (HAL) con el RTOS, y el debugger
– Interfases con aplicaciones típicas (TCP/IP Stack, Flash File System)
Estas definiciones son enriquecidas por cada fabricante con la información propia de sus
periféricos especiales.

83
83 G. Jaquenod – 2010 - jaquenodg@gmail.com
Conclusiones

• CREO QUE ESTAMOS EN UN MOMENTO MUY ESPECIAL, E


INEDITO, DE LA HISTORIA DE LA EVOLUCION DE LOS
MICROCONTROLADORES
• La existencia de un gran mercado con una arquitectura estándar
permite suponer que los fabricantes de compiladores los optimizarán
a un nivel muy superior al de los productos actuales, donde la
constante aparición de nuevas arquitecturas impide la maduración de
un producto antes que este sea reemplazado por uno nuevo
• Las interfases abiertas como Eclipse y compiladores/debuggers GNU
posibilitarán una abierta competencia con productos comerciales
• Es razonable esperar procesadores con RTOS y stacks certificados
en ROM, a costos mínimos o nulos

84 G. Jaquenod – 2010 - jaquenodg@gmail.com


Conclusiones

• Es previsible la estandarización (quizás por el IEEE?) de la


interfase a RTOS, tal como ahora propone ARM con CMSIS.
• La sinergia de CPUs, RTOS, stacks, bibliotecas de hardware y
software, plantean un ambiente de desarrollo totalmente
inexplorado y sumamente poderoso
• La aparición de procesadores estándar permite estimar el
surgimiento de muchos proveedores de IP de software, y la
competencia entre las empresas por sus IP de hardware periféricos,
pero manteniendo la compatibilidad de software
• Es probable que procesadores embebidos para FPGA como NIOS
II o MicroBlaze sucumban frente a Cortex-M1 o nuevos modelos
compatibles con Thumb2

85 G. Jaquenod – 2010 - jaquenodg@gmail.com

You might also like