Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un Vistazo A La Arquitectura ARM: 1 Resumen
Un Vistazo A La Arquitectura ARM: 1 Resumen
Resumen
En este documento se revisa la arquitectura del microprocesador ARM (Advanced Risc Machine) de ARM, Ltd. Primero se comenta algo de la historia
de la arquitectura, despues analizaremos la implementacion de la arquitectura en dos sabores: StrongARM de Intel y nnARM (nnARM is not an
ARM) del grupo opencores. Para finalizar le daremos un vistazo a aspectos
interesantes de la arquitectura ARM, como el soporte a tecnologias como
Bluetooth y Java. En el apendice 1 menciono los dispositivos que hoy en
da utilizan la arquitectura ARM. En el apendice 2 hay una linea de tiempo
con algunos de los eventos importantes alrededor de la arquitectura ARM.
En el apendice 3 hay una lista de sistemas operativos que dan soporte a la
arquitectura ARM.
Historia
En 1987, la arquitectura ARM tuvo su primera aparicion en productos comerciales con los asistentes digitales personales Newton de Apple.
En 1995, Digital Semiconductor y ARM, Ltd. crean el StrongARM, que basicamente es un core que utiliza el conjunto de instrucciones de la arquitectura
ARM, pero es implementado con la tecnologia de la serie Alpha de Digital
Semiconductor. De aqu nace el StrongARM de 200 Mhz.
En 1998, Intel obtiene una licencia de Digital Semiconductor y ARM, Ltd.
para producir el StrongARM a partir del 2000, con algunos cambios que lo
hacen tres veces mas rapido que el anterior, utilizando menos energia que el
actual.
StrongARM de Intel
4
4.1
nnARM de opencores
Opencores
En los ultimos a
nos, el software producido en el esquema de codigo abierto
(open source) ha demostrado poseer calidad, gran flexibilidad y tiempos de
desarrollo cortos.
Ejemplo de lo anterior, es el sistema operativo GNU/Linux, conformado por
Linux como kernel y multiples herramientas GNU para completar un sistema
operativo completo.
El grupo opencores piensa que esta receta puede aplicarse al dise
no e implementaciones de cores.
Uno de los projectos de opencores es el lidereado por ShengYu Shen, de
NUDT. El projecto nnARM (nnARM is not ARM) tiene como objetivo crear
un procesador incrustrado sintetizado de alta eficiencia que de soporte al conjunto de instrucciones de la arquitectura ARM.
Processor
I
Cache
D
Cache
Coprocessor
Memory Controller
4.2
Organizaci
on
4.3
Cache
El procesador posee un cache de datos y uno de instrucciones. Estan organizados de las siguientes maneras:
4.3.1
Cache de instrucciones
4.3.2
Cache de datos
El cache de datos tiene 256 bytes. El cache tiene 4 secciones, cada seccion
tiene 4 lineas, cada linea contiene 4 palabras. La direccion [5:4] escoge la
seccion, entonces el controlador de cache compara [31:6] con cada campo tag
de las 4 lineas en esta seccion. Si encuentra la direccion deseada entonces
usa [3:2] para seleccionar la palabra correspondiente en esta linea.
Si ocurre un cache miss, el controlador determina si existe o no una linea en
blanco en esta seccion. Si si la hay, va a la memoria para traer el bloque
deseado y lo pone en la linea en blanco. En otro caso, ve si hay una linea
que no este siendo ocupada en este momento, en caso afirmativo trae los
datos necesarios de la memoria a este lugar. Si no la hay, traemos los datos
necesarios de la memoria y lo ponemos en un linea seleccionada al azar.
4.4
Prefetch de instrucciones
Este es un buffer que contiene 8 entradas, cada una puede contener una instruccion de 32 bits. El buffer de prefetch es particionado en 2: Las primeras
cuatro instrucciones y las cuatro ultimas. Cuando uno esta utilizando la
primera mitad, el circuito logico del prefetch pedira al cache de instrucciones
las otras cuatro y viceversa.
Si la direccion solicitada no esta en ninguna de las mitades, es lanzada una
se
nal de espera al solicitante y se va al cache para traer el bloque de cache
adecuado.
4.5
Modos de Memoria
4.6
4.7
4.8
4.9
nnARM guarda los estados del procesador algunos registros, llamados registros PSR (Processor Status Register). El estado actual del procesador es
alamacenado en los registros CPSR (Current Processor Status Register). El
6
4.10
Excepciones
Actualmente nnARM no soporta excepciones. Se pretende primero dar soporte a todo el conjunto de instrucciones del ARM7.
Instruction
Prefetch buffer
Instruction
Cache
MEM
load/store
Data
cache
Memory Controller
Jerarquia de almacenamiento
5.1
Controlador de la Memoria
5.2
Pipeline
5.2.1
Etapa IF
Instruction
Cache
Fetched instruction
cache block address
Fetched Instruction
cache block
Instruction
Prefetch Buffer
Fetched instruction
Fetched instruction
address
IF
PC read
and write
Register
File
instruction
Three register
request
ID
micro
operation
for ALU
micro
operation
for MEM
Three
immediate
operand
PSR
Registers
Three register
read bus
ALU
micro
operation
for MEM
ALU result
and other
operand used
by MEM
Fowarding from
ALU output to
ALU input
Fowarding
from MEM
to ALU
D Cache
MEM
Write
Result
10
Write
PSR
register
5.3
Note que unicamente el hilo principal puede detener el pipeline, debido a que
en el estan las operaciones de load/store, asi como las operaciones complejas
como la multiplicacion.
Cuando el hilo principal se detiene, todos los demas hilos en todas las etapas
detras de el tambien se detienen.
Las siguientes operaciones estan soportadas:
1. multiple (MUL) y multiple then add (MLA)
2. branch (B) y branch with link (BL)
3. Transferencia de PSR (MRS y MSR)
4. Todas las instrucciones de la ALU
5. Transferencia simple de datos (LDR/STR)
Las siguientes operaciones todavia no estan soportadas:
1. Swap de datos simples (SWP)
2. Transferencia de bloque de datos (LDM/STM)
3. Todas las operaciones del coprocesador
4. Interrupciones por software (SWI)
Se describira como decodificar estas instrucciones en micro operaciones. En
la siguiente figura unicamente se muestra el hilo principal y el simple, el hilo
psr sera tratado en unqa seccion mas adelante.
5.3.1
Preparaci
on de los operandos
13
Hilo PSR
Solo las instrucciones del MUL, MLA y MRS del ALU pueden cambiar los
registros PSR.
En todas las instrucciones de la ALU, hay un bit S que indica si esta instruccion escribira o no en CPSR.
Si el bit S esta encendido y el registro destino no es PC, entonces si escribiremos en CPSR, por lo que el decodificador generara las microoperaciones
ALUPSRType WriteConditionCode y MEMPSRType WriteCPSR para el hilo
PSR. Si el bit S esta encendido y el registro destino es PC, el decodificador generara las microoperaciones ALUPSRType SPSR2CPSR y MEMPSRType WriteCPSR para el hilo PSR.
Si el bit S esta apagado ning
un registro PSR sera escrito.
El bit S tendra el mismo comportamiento para las operaciones MLA y MUL
con excepcion en que PC no puede ser el registro destino de MLA y MUL.
14
MRS movera un registro de proposito general de CPSR a SPSR. El microcodigo correspondiente sera generado.
5.3.3
Se
nal out ALUMisc
Esta se
nal proporciona algunas caracteristicas de valor agregado.
out ALUMisc[31:28]: Este campo contiene un codigo acerca de la condicion
de esta instruccion que sera utilizado por la etapa ALU para decidir si esta
instruccion se satisface con el estado actual del procesador y puede seguir
corriendo.
out ALUMisc[0]: Cuando una instruccion normal es decodificada, el tercer
canal de lectura es utilizado para acarrear la cuenta de cambios (shift count)
de los registros o como valor inmediato. Pero cuando estamos decodificando
una instruccion de tipo store, la cuenta de cambios (shift count) siempre es
un valor inmediato de 5 bits y al mismo tiempo el valor guardado ocupa el
tercer canal, por lo que se pone a out ALUMisc[0] en HIGH y se manda el
conteo de cambios en out ALUMisc[5:1].
out ALUMisc[6]: Cuando se esta decodificando una instruccion de tipo branch
o ALU que requiera modificar PC, se pone en HIGH a out ALUMisc[6].
out ALUMisc[7]: Se pondra en HIGH cuando se decodifique una instruccion
load al PC.
5.3.4
Insertando BULK
15
5.4
Etapa ALU
La etapa ALU tiene tres hilos: El hilo principal, el hilo simple y el hilo PRS.
5.4.1
Hilo Principal
Este hilo es el que lleva a cabo todos los calculos. Tenemos las siguientes
microoperaciones:
1. ALUType Add. LeftOperand + RightOperand
2. ALUType Sub. LeftOperand - RightOperand
3. ALUType And. LeftOperand And RightOperand
4. ALUType Eor. LeftOperand Eor RightOperand
5. ALUType Rsb. RightOperand - LeftOperand
6. ALUType Adc. LeftOperand + RightOperand + Carry
7. ALUType Sbc. LeftOperand - RightOperand + Carry -1
8. ALUType Rsc. RightOperand + LeftOperand + Carry -1
9. ALUType Tst. Como And, pero sin escribir el resultado
10. ALUType Teq. Como Eor, pero sin escribir el resultado
11. ALUType Cmp. Como Sub, pero sin escribir el resultado
12. ALUType Cmn. Como Add, pero sin escribir el resultado
13. ALUType Orr. LeftOperand Or RightOperand
14. ALUType Mov. RightOperand
15. ALUType Bic. LeftOperand And RightOperand
16. ALUType Mvn. RightOperand
17. ALUType Mul. LeftOperand Mul RightOperand
18. ALUType Mla. (LeftOperand Mul RightOperand) + ThirdOperand
Todas estas microoperaciones seran enviadas a un modulo llamado ALUComb, que sera descrito a continuacion.
16
5.4.2
ALUComb
Hilo Simple
Este hilo es utilizado para llevar a cabo operaciones simples, tiene las siguientes microoperaciones:
1. ALUType Mvl. Usa el operando izquierdo como salida
2. ALUType Mvr. Usa el operando derecho como salida
3. ALUType MvCPSR. Usa CPSR como salida
4. ALUType MvSPSR. Usa SPSR como salida
5. ALUType MvNextInstructionAddress. Utiliza la direccion de la siguiente instruccion como salida
5.4.4
Hilo PSR
El hilo PSR lleva a cabo los calculos y escribe en PSR. Al mismo tiempo, debido a que todas las instrucciones tienen un campo de ejecucion condicional,
por lo que todas las instrucciones deben usar forwarding para obtener los valores de CPSR mas recientes y asi decidir si pueden continuar ejecutandose
antes de entrar a la etapa ALU.
17
switch
switch
ComplementResult
*
complementary
RightTmp
LeftTmp
switch
switch
shift result
Barrel
shifter
in_LeftOPerand
in_ThirdOperand
18
in_RightOperand
5.4.5
Forwarding
El siguiente programa mostrara como el forwarding de los registros de proposito general se lleva a cabo. Suponga que Rn es el operando fuente:
if (Rn viene de un valor inmediato)
leelo del bus correspondiente
else if (el hilo principal de ALU quiere escribir en Rn)
haz forward del resultado de el hilo principal de ALU actual
else if (el hilo simple de ALU quiere escribir en Rn)
haz forward del resultado de el hilo simple de ALU actual
else if (el hilo principal de MEM quiere escribir en Rn)
haz forward del resultado de el hilo principal de MEM actual
else if (el hilo simple actual de MEM quiere escribir en Rn)
haz forward del resultado de el hilo simple de MEM actual
else
leelo del bus correspondiente
El siguiente programa muestra como se lleva a cabo el forwarding de los
registros de CPSR:
if (el CPSR del actual es de un valor inmediato)
leelo del bus de lectura
else if (la ALU actual quiere escribir en CPSR)
leelo de ALU
else if (MEM quiere escribir en SPSR)
leelo de MEM
else
leelo del bus de lectura
El forwarding de los registros SPSR se llevan a cabo de manera similar.
5.4.6
Los 4 bits mas significativos de cada instruccion indican bajo que condiciones
esta instruccion puede seguir ejecutandose y escribir su resultado.
Se utiliza el CPSR procesador por adelantado para saber si una instruccion
puede seguir ejecutandose o no.
19
Branch
Para una instruccion de branch, se generara una peticion de salto a todas las
etapas entre IF y ALU, todas las etapas se limpian por esta se
nal.
Tambien es enviado la direccion destino del salto (branch), para que el If
puede llevar a cabo un fetch de esa direccion.
20
5.5
Etapa MEM
La etapa MEM consta de tres hilos: El hilo principal, el hilo simple y el hilo
PSR.
El hilo principal lleva a cabo todas las operaciones load/store y escribe el
valor cargado a los registros.
El hilo simple lleva a cabo una segunda escritura a los registros (por ejemplo,
el writeback del registro que contiene la direccion base en una instruccion
load/store).
El hilo PSR lleva a cabo la operacion de escribir en los registros PSR.
5.5.1
Hilo principal
10. MEMType StoreSimpleByte usa el resultado del hilo simple del ALU
como direccion para guardar un byte
5.5.2
Hilo simple
Hilo PSR
Cambio de PC
22
Bluetooth y ARM
La tecnologia Bluetooth es la b
usqueda de estandares para que los diversos
dispositivos portatiles puedan comunicarse de manera transparente.
Una de las compa
nias que mas ha desarrollado esta tecnologia es Ericsson,
quien firmo un contrato con ARM Ltd. para utilizar la tecnologia ARM en
Bluetooth IP.
Entre las empresas que tambien estan desarrollando Bluetooth destacan: Alcatel, Lucent, Philips y Sony, entre otras.
ARM provee de soporte para Java de manera nativa, esto es, tiene extensiones
que ejecutan bytecodes en hardware, sin necesidad de tener una maquina
virtual.
Para saber m
as
Ap
endice 1: Dispositivos portatiles que utilizan ARM
10
Ap
endice 2: Linea del tiempo para ARM
24
8. 1997. ARM y Sun ofrecen soporte directo para JavaOS en la arquitectura ARM.
Se anuncia la familia de procesadores ARM9TDMI
9. 1998. ARM entra al consorcio Bluetooth.
Intel obtiene la licencia para producir la familia de microprocesadores
StrongARM.
La familia ARM9 es extendida con el ARM910 y el ARM920 con extensiones para WindowsCE.
ARM crea una version sintetizada del procesador ARM7TDMI.
ARM anuncia la nueva generacion de la familia ARM10
10. 1999. ARM9E es anunciado en un foro de microprocesadores incrustrados.
ARM y Ericsson colaboran en Bluetooth
11. 2000.
ARM
ARM
ARM
11
Ap
endice 3: Sistemas Operativos que dan
soporte a ARM
1. NetBSD
2. GNU Linux
3. WindowsCE
25