Está en la página 1de 25

Un vistazo a la arquitectura ARM

Mauro Parra Miranda


mauro@ciencias.unam.mx
Junio 25, 2001

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

La arquitectura ARM (Advanced RISC Machine) fue creado en 1985 por el


Acorn Computer Group, como el primer procesador RISC con gran impacto
comercial en el mundo.
La filosofia RISC (Reduced Instruction Set Computer) es que la eficiencia
viene de hacer las cosas menos complicadas. Gracias a su dise
no sencillo, el
ARM tiene relativamente pocos componentes en el chip, por lo que no alcanza altas temperaturas y tiene bajos requerimientos de energia. Lo anterior
lo ha hecho candidato perfecto para el mercado de aplicaciones incrustradas
(embedded aplications) que van desde un telefono celular hasta una lavadora.
1

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

El microprocesador Intel StrongARM SA-1110 implementa el conjunto de


instrucciones de la arquitectura ARM, con las siguientes caracteristicas:
1. Soporte para Big endian y Little endian
2. Cache de Datos (Dcache) de 8 kbytes, cache asociativo de 32 vias
3. Cache de Instrucciones (Icache) de 16 Kbytes, cache asociativo de 32
vias
4. minicache, para guardar los datos que sean desechados de los caches
superiores (cache de datos, cache de instrucciones)
5. MMUs de 32 entradas, mapea 4kbyte, 8 kbyte o 1 Mbyte
6. Buffer de escritura de 8 entradas, entre 1 y 16 bytes cada una
7. Buffer de lectura de 4 entradas, con 1, 4 o hasta 8 words
Los MMUs del SA-1110 proveen de TLBs de 32 entradas separados, uno para
el flujo de instrucciones y otro para el flujo de datos.
Cada uno de estas 32 entradas pueden mapear segmentos, paginas grandes
o paginas peque
nas de la memoria.
El cache de datos y el cache de instrucciones estan implementados como
bloques de 32 bytes, proveen de asociatividad de 32 vias con reemplazo de
victimas implementado con una variante del algoritmo round-robin.
El minicache tiene 16 entradas y es asociativo en 2 vias, implementando l
2

algoritmo LRU (Last recent used) para el reemplazo de victimas.


El buffer de lectura permite hacer un prefetch de datos importantes a traves
de software, previniendo esperas de pipeline durante las lecturas a memoria.
El buffer de lectura tiene cuatro entradas, y cada entrada puede contener 1,
4 u 8 palabras (words).
El buffer de escritura aumenta el desempe
no global del sistema al fungir como
buffer entre la frecuencia de reloj del CPU y el bus de la memoria cuando los
datos comienzan a ser escritos del CPU a la memoria. El buffer de escritura
es de 8 entradas y puede contener desde 1 hasta 16 bytes cada uno.
El controlador rutea todas las fuentes de interrupcion al CPU, sin importar si son del tipo FIQ o IRQ. IRQ tiene una prioridad menor, puede ser
interrumpido por FIQ. FIQ es unico para la arquitectura ARM y permite
proveer de un servicio rapido para fuentes de interrupcion determinadas por
el usuario. Hay dos niveles en el servicio de interrupciones. El primer nivel
alerta al usuario o al sistema operativo acerca de la interrupcion y cual fue el
modulo que lo produjo. El segundo nivel provee informacion acerca de cual
es el evento especifico en el modulo que causo una interrupcion.

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

El sistema esta organizado de la siguiente forma:

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

El cache de instrucciones tiene 256 bytes. Debido a que el cache es grande, el


campo tag tambien sera grande, por lo que para combinarlo con la direccion
actual de la entrada es necesario utilizar logica combinacional. El cache de
instrucciones tiene 4 secciones, cada seccion contiene 4 lineas y cada linea
posee 4 palabras. La direccion [5:4] selecciona la seccion, entonces el controlador del cache compara [31:6] con cada campo tag de las cuatro lineas en
esta seccion, si se encuentra la direccion deseada entonces usa la direccion
[3:2] para seleccionar la palabra correspondiente a esta linea.
Si ningun tag coincide con [31:6] entonces pone la se
nal de espera en uno
para detener al que hizo la peticion y va a la memoria para traer el bloque
necesario.
4

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

Actualmente nnARM unicamente soporta little endian, i.e.


El byte menos significativo esta en la direccion mas baja y la direccion de
una palabra (word) es la direccion de su byte menos significativo. Big endian
no esta soportado aun.

4.6

Ancho del bus

En la arquitectua ARM, antes de la version 3 hay dos modos de ancho del


bus de direcciones: 26 y 32 bits. Actualmente si se tiene un ARM con
arquitectura version 3 se tiene soporte para modos de 26 y 32 bits, por
compatibilidad haca atras. A partir de la version 4 se utilizan 32 bits y puede
5

implementarse el soporte a 26 bits de manera opcional. nnARM unicamente


da soporte a 32 bits.

4.7

Modo del procesador

nnARM tiene 6 modos de operacion:


1. User Mode. El modo normal para la ejecucion de programas
2. FIQ Mode: Dise
nado para dar soporte a transferencia de datos o procesos de canal
3. IRQ Mode: Receptor de interrupciones de proposito general
4. Supervisor Mode: Modo protegido para sistemas operativos
5. Abort Mode: Modo para cuando falla un el traer datos de la memoria
6. Undefined Mode: Una instruccion desconocida se ha ejecutado
El cambio de modo es controlado por software o interrupciones externas. La
mayoria de los programas de usuario son ejecutados en modo usuario. Los
otros modos son llamados privilegiados y son utilizados principalmente para
atender una interrupcion o excepcion.

4.8

Registros del procesador

nnARM posee 31 registros de proposito general. El conjunto de registros


a los cuales tiene uno acceso esta determinado por el modo del procesador.
En cualquien momento, 16 registros pueden ser accesados por software. Van
del R0 al R15. El R15 es el PC (contador del programa), los otros pueden
ser utilizados como registros generales. El R14 es utilizado para salvar la
direccion de la siguiente instruccion cuando se lleva a cabo un branch. En
diferentes modos de procesador cada registro puede cambiar su significado.

4.9

Registros del estado del procesador

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

estado anterior de varios modos del procesador es almacenado en SPSR XXX


(donde XXX es el modo del procesador). En total hay 6 registros PSR. El
formato de los registros PSR es el siguiente:
1. 31: Negative
2. 30: Zero
3. 29: Carry
4. 28: Overflow
5. 7: IRQ disable
6. 6: FIQ disable
7. 4:0 Processor mode
el modo del procesador en 4:0 es mostrado a continuacion:
1. 10000: User
2. 10001: FIQ
3. 10010: IRQ
4. 10011: Supervisor
5. 10111: Abort
6. 11011: Undefined

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

La jerarquia de almacenamiento en nnARM incluye varios niveles. El primer


nivel es el de buffer prefetch de instrucciones, y el componente load/store de
la etapa MEM del pipeline. El siguiente nivel es el cache, incluyendo cache
de datos y cache de instrucciones. El nivel mas bajo es el del controlador de
la memoria.

5.1

Controlador de la Memoria

El controlador de memoria tiene un bus de datos bidireccional de 32 bits.


Como entrada puede recibir: un bus de direcciones de 32 bits, una bandera read/write, una se
nal de peticion, una bandera de entrada de tama
no
byte/word, una bandera de modo secuencial/no-secuencial. Como salida
puede tener una se
nal de espera (wait signal).

5.2

Pipeline

El pipeline es muy similar a el utilizado en DLX o MIPS. Posee cuatro etapas:


IF, ID, ALU y MEM. Formalmente no existe etapa de WB, es llevada a cabo
al final de la etapa MEM. La primera etapa es IF, trae una instruccion del
buffer de prefetch de instrucciones cada ciclo. Tambien es llamado pipeline
8

de 1 evento (1 issue pipeline).


La segunda etapa es la etapa de ID. En esta etapa, el decodificador traducira
la instruccion en multiples microinstrucciones y estas siguen su camino por
la estructura de pipeline.
Despues de que las microinstrucciones van a la etapa de ALU para llevar a
cabo varias operaciones, como and, eor, sub, rsb, add, adc, sbc, rsc, tst,
teq, cmp, cmn, orr, mov, bic, mvn. Al mismo tiempo un multiplicador
esta encadenado con el ALU para llevar a cabo las operaciones MUL y MLA.
Despues de que la etapa ALU llevo a cabo la correspondiente operacion,
pasara la respuesta y la microoperacion de la etapa MEM a la etapa MEM.
En esta etapa la operacion load/store accedera a la memoria. Al final de esta
etapa, los resultados que tengan que ir a los registros seran escritos.
El pipeline retroalimentara la ALU con la respuesta del ALU, previniendo
el siguiente esquema: Si la instruccion n usa el registro Rn como registro
destino, y la instruccion n+1 utiliza Rn como operando, entonces cuando
n complete su etapa ALU, el resultado no sera escrito en Rn, pero la operacion n+1 necesita utilizarlo para llevarse a cabo, por lo cual se debera
retroalimentar la ALU para la operacion n+1.

5.2.1

Etapa IF

La etapa IF lleva a cabo las siguientes operaciones:


1. Incrementar PC hacia la siguiente instruccion siempre que estemos en
condiciones normales
2. Atender las peticiones de branch provenientes de la etapa ALU o MEM
3. Mandar el PC para traer la siguiente instruccion del buffer de prefetch
Incrementar PC IF tiene un puerto de lectura conectado todo el tiempo
al registro R15. Al mismo tiempo, mantiene un puerto de escritura conectado todo el tiempo al registro R15. Es utilizado un sumador simple para
incrementar el valor de PC que viene del puerto de lectura y la salida es
enviada al puerto de escritura.

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

Branch Cuando haya una instruccion de branch o una instruccion de la


ALU con PC como su destino al terminar la etapa de ALU, el PC requerira
ser cambiado.
De igual manera, cuando una instruccion de load con PC como destino pase
la etapa de MEM requerira ser cambiado.
La peticion proveniente de la etapa de MEM sera procesada primero, la
direccion que viene de la etapa de MEM sera enviada al PC. Al mismo
tiempo, una se
nal sera enviada a todas las etapas entre la etapa IF y la
MEM para limpiar los registros de pipeline. Debido a que si una instruccion
de load ocurre, todas las intrucciones detras de ella no seran ejecutadas.
Si no hay peticiones de la etapa de MEM, y la etapa de ALU requiere cambiar
el PC, entonces todas las etapas entre la etapa IF y la ALU se limpiaran. La
direccion que viene del ALU sera enviada al PC.
Fetch Instruction La etapa IF enviara el valor de PC leido del puerto de
lectura al buffer de prefetch.
Si la se
nal de espera del buffer de prefetch esta activa en el flanco de subida
del reloj quiere decir que el buffer de prefetch no puede satisfacer la peticion
en este momento, entonces IF debe obligar a lanzar una instruccion blank al
pipeline y continuar esperando.
Si la se
nal de espera del buffer de prefetch no esta activa, IF puede leer la
instruccion y enviarla al decodificador.

5.3

Decodificador del conjunto de instrucciones de ARM


(ID)

La etapa ID unicamente decodifica las instrucciones en micro operaciones


para la etapa ALU y la etapa MEM.
La etapa ALU y la etapa MEM tienen tres hilos cada una. El hilo principal,
un hilo simple y un hilo PSR.
El hilo principal lleva a cabo todo el computo en el ALU, y lleva a cabo
las operaciones de load/store en la etapa MEM, finalmente lleva a cabo la
escritura del primer registro.
El hilo simple lleva a cabo una seleccion sencilla de datos en la etapa de ALU,
y lleva a cabo la escritura del segundo registro (si este existiese) en la etapa
de MEM.
El hilo PSR lleva a cabo las operaciones de escritura en los registros PSR.
11

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

El decodificador tiene la obligacion de enviar una peticion de lectura a los


registros del procesador y regresar el valor inmediato. Esto tambien es llamado preparacion obligada de operandos.
El caso mas complicado es aquel en el que una instruccion requiere tres operadores, como una instruccion del ALU que implique tambien un cambio en
algun registro.
Debido a esto, el decodificador tiene tres canales de lectura. Los llamaremos
primero, segundo y tercer canal. Cada canal tiene la siguiente se
nal:
12

13

1. Habilitar el registro de lectura, ir a los registros, cuando este operando


venga de los registros, mandar una se
nal de HIGH, en otro caso enviamos una se
nal de LOW
2. Leer el n
umero de registro, ir a los registros del procesador
3. Si este operando es un valor inmediato, ir a la etapa de ALU. Si la
se
nal esta en HIGH el preenvio no se llevara a cabo en este canal. En
otro caso, el preenvio usara el valor mas reciente del registro tomado
del pipeline si es que hay una instruccion que desea escribir en este
mismo registro y se ha obtenido el resultado pero no se ha escrito en el
registro
4. El bus de salida de los registros del procesador a la etapa de ALU.
Cuando este operando provenga de los registros del procesador el bus
contendra el contenido del registro respectivo. En otro caso, el bus
contendra el valor inmediato tomado del decodificador.
Hay un caso especial: El PC. El decodificador nunca lee el PC directamente
de los registros. Este siempre va con su respectiva instruccion. Esto es,
cualquier instruccion que va de la etapa de IF a la etapa de decodificacion
traera su propio PC. El PC en el pipeline nunca es afectado por el preenvio
(forwarding).
5.3.2

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

En algunos casos, el decodificador tendra que introducir BULK (operaciones


nulas) al pipeline, porque de otra manera nnARM no funcionara. Considere
el siguiente ejemplo: Cuando hay que cargar el registro Rn, donde Rn es
un registro de proposito general y la siguiente instruccion utiliza Rn como
operando fuente. En este caso, si la siguiente instruccion es enviada a ALU
inmediatamente, no tendra el valor mas reciente de Rn, debido a que cuando
es enviada, la instruccion de cargar el Rn todavia esta en el ALU, y no ha
recibido el resultado de la memoria.
Si insertamos bulk, el decodificador debera esperar a que bulk vaya a la etapa
MEM, lo cual implica que la operacion de carga ya se llevo a cabo y esta
lista para enviarle el valor de Rn a la siguiente instruccion.

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

La estructura del modulo ALUComb esta descrita en la siguiente figura:


Este modulo da soporte a todas las instrucciones ALU del conjunto de instrucciones de ARM.
Las dos entradas son in LeftOperation e in RightOperation. in RightOperation
es cambiada por el Barrel shifter.
Los switch tienen la tarea de decidir cual sera el operador derecho y cual el
izquierdo, debido a que las operaciones en ALU pueden ser tanto del tipo
operand1 op operand2 como del tipo operand2 op operand1.
Despues de esto, para poder llevar a cabo la operacion sub, el complementario de RightTmp es calculado.
Despues de esto, los operandos pueden ser enviados al sumador. Los operandos como sub, rsb, sbc y adc son calculados de forma parecida.
De manera reciente se proporciona soporte a MLA, y ahora los dos switch cercanos al sumador son utilizados para seleccionar cual operando sera sumado.
5.4.3

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

Procesamiento del campo de condici


on

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

1. 0000=EQ Z set (equal)


2. 0001=NE Z clear (not equal)
3. 0010=CS C set (unsigned higher or same)
4. 0011=CC C clear (unsigned lower)
5. 0100=MI N set (negative)
6. 0101=PL N clear (positive or zero)
7. 0110=VS V set (overflow)
8. 0111=VC V clear (no overflow)
9. 1000=HI C set and Z clear (unsigned higher)
10. 1001=LS C clear or Z set (unsigned lower or same)
11. 1010=GE N set and V set, or N clear and V clear (greater or equal)
12. 1011=LT N set and V clear, or N clear and V set (less than)
13. 1100=GT Z clear, and either N set and V set, or N clear and V clear
(greater than)
14. 1101=LE Z set, or N set and V clear, or N clear and V set (less than
or equal)
15. 1110=AL always
16. 1111=NV never
Si una instruccion no puede continuar corriendo, un bulk sera insertado en la
etapa ALU y esta instruccion desaparecera. Un salto condicional (conditional
branch) es ejectuado de la misma forma.
5.4.7

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

El hilo principal tiene las siguientes microoperaciones:


1. MEMType MovMain escribe el resultado del hilo principal de ALU al
registro
2. MEMType MovSimple escribe el resultado del hilo simple de ALU al
registro
3. MEMType LoadMainWord utiliza el resultado del hilo principal de
ALU como direccion para cargar una palabra (word)
4. MEMType LoadMainByte usa el resultado del hilo principal de ALU
como direccion para cargar un byte
5. MEMType LoadSimpleWord usa el resultado del hilo simple del ALU
como direccion para cargar una palabra (word)
6. MEMType LoadSimpleByte usa el resultado del hilo simple del ALU
como direccion para cargar un byte
7. MEMType StoreMainWord utiliza el resultado del hilo principal de
ALU como direccion para guardar una palabra (word)
8. MEMType StoreMainByte usa el resultado del hilo principal de ALU
como direccion para guardar un byte
9. MEMType StoreSimpleWord usa el resultado del hilo simple del ALU
como direccion para guardar una palabra (word)
21

10. MEMType StoreSimpleByte usa el resultado del hilo simple del ALU
como direccion para guardar un byte
5.5.2

Hilo simple

El hilo simple tiene las siguientes microoperaciones:


1. MEMType MovMain escribe el resultado del hilo principal de ALU en
un registro
2. MEMType MovSimple escribe el resultado del hilo simple de ALU en
un registro
5.5.3

Hilo PSR

El hilo PSR tiene las siguientes microoperaciones:


1. MEMPSRType WriteSPSR escribe el SPSR mas reciente del pipeline
a los registros SPSR
2. MEMPSRType SPSR2CPSR escribe el SPSR mas reciente del pipeline
a los registros CPSR
3. MEMPSRType WriteCPSR escribe el CPSR mas reciente del pipeline
a los registros CPSR
4. MEMPSRType WriteConditionTable escribe el codigo de condicion a
los registros CPSR, debido a que al hacer forwarding esto sera lo mismo
que MEMPSRType WriteCPSR
5.5.4

Cambio de PC

Cuando la microoperacion actual se va a cargar al PC, y despues que load


haya terminado, el nuevo PC debe ser enviado a la etapa IF. Al mismo
tiempo, una peticion de branch debe enviar una se
nal a todas las etapas
entre IF y MEM, para que estas tiren lo que estan haciendo.

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.

Jazelle: Java + ARM

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

Si quieres saber mas de la arquitectura ARM, te recomiendo:


1. The ARM architecture reference Manual. David Seal.
AddisonWesley
2. ARM, Ltd. www.arm.com
3. Intel www.intel.com
4. Opencores www.opencores.org

Ap
endice 1: Dispositivos portatiles que utilizan ARM

Presentare el nombre del producto, la compa


nia que lo fabrica y una breve
descripcion:
1. IOMega HipZip. IOMega. Reproductor de MP3 portatil
23

2. GameBoy Advance. Nintendo. Consola de videojuegos portatil


3. Rio Car. Rio. Reproductor de MP3 para el automovil
4. Ipaq. Compaq. Handheld
Esta es una lista muy corta, sin embargo es muy probable que al menos una
vez en su vida haya utilizado un dispositivo con un ARM como microprocesador. Seg
un ARM Ltd. se producen 5 mil millones de microprocesadores al
a
no.

10

Ap
endice 2: Linea del tiempo para ARM

1. 1985. Acorn Computer Group desarrolla el primer procesador RISC


con gran impacto comercial
2. 1987. El ARM de Acorn debuta como el primer procesador RISC utilizado en computadoras de bajo costo
3. 1991. ARM introduce su primer core RISC para aplicaciones incrustradas,
el ARM6
4. 1993. ARM introduce el core ARM7
5. 1994. ARM presenta el ARM7500 chip de sistema para aplicaciones
multimedia
6. 1995. Una extension a la tecnologia ARM permite un desempe
no de
32 bits RISC al costo de la tecnologia de los 16 bits.
Se crea el primer StrongARM de Digital Semiconductor y ARM.
ARM extiende su familia de microprocesadores con el ARM8.
ARM lanza el ARM7100 pda-on-a-chip
7. 1996. ARM y la tecnologia VLSI presentan el ARM810
ARM anuncia su ARM7500FE chip de multimedia para la NC (Network Computer).
ARM y Microsoft trabajan juntos para extender WindowsCE a la arquitectura 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

ARM lanza la familia SecurCore para tarjetas inteligentes.


presenta la tecnologia Jazelle para aplicaciones Java.
anuncia tecnologia SIMD para aplicaciones multimedia.
presenta el core ARM922T

Ap
endice 3: Sistemas Operativos que dan
soporte a ARM

1. NetBSD
2. GNU Linux
3. WindowsCE

25

También podría gustarte