Un Vistazo a La Arquitectura ARM

25
 Un vistazo a la arquitectura ARM Mauro Parra Miranda [email protected] Junio 25, 2001 1 Resumen En este documento se revisa la arquitectura del microprocesador ARM (Ad- vanced Risc Machine) de ARM, Ltd. Primero se comenta algo de la historia de la arquitectura, despues analizaremos la implementaci´on de la arquitec- tura en dos sabor es : St rongARM de In te l y nnARM (nnARM is not an ARM) del grupo opencores. Para nalizar le daremos un vistazo a aspectos interesantes de la arquitectura ARM, como el soporte a tecnologias como Bluetooth y Ja v a. En el ap´ endi ce 1 menc iono los disposi tivos que hoy en ıa utilizan la a rquitectura ARM. En el ap´endice 2 hay una linea de ti empo con algunos de los eventos importantes alrededor de la arquitectura ARM. En el ap´ endi ce 3 hay una lista de sistemas operativos que dan soporte a la arquitectura ARM. 2 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 losoa RISC (Reduced Instruction Set Computer) es que la eciencia 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 al- canza 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

Transcript of Un Vistazo a La Arquitectura ARM

Un vistazo a la arquitectura ARMMauro Parra Miranda [email protected] Junio 25, 2001

1

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 implementacin de la arquiteco tura en dos sabores: StrongARM de Intel y nnARM (nnARM is not an ARM) del grupo opencores. Para nalizar le daremos un vistazo a aspectos interesantes de la arquitectura ARM, como el soporte a tecnologias como Bluetooth y Java. En el apndice 1 menciono los dispositivos que hoy en e d utilizan la arquitectura ARM. En el apndice 2 hay una linea de tiempo a e con algunos de los eventos importantes alrededor de la arquitectura ARM. En el apndice 3 hay una lista de sistemas operativos que dan soporte a la e arquitectura ARM.

2

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 losoa RISC (Reduced Instruction Set Computer) es que la eciencia viene de hacer las cosas menos complicadas. Gracias a su dise o sencillo, el n 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 ms rpido que el anterior, utilizando menos energia que el a a actual.

3

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. Buer de escritura de 8 entradas, entre 1 y 16 bytes cada una 7. Buer 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 ujo de instrucciones y otro para el ujo de datos. Cada uno de estas 32 entradas pueden mapear segmentos, pginas grandes a o pginas peque as de la memoria. a n 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 buer de lectura permite hacer un prefetch de datos importantes a travs e de software, previniendo esperas de pipeline durante las lecturas a memoria. El buer de lectura tiene cuatro entradas, y cada entrada puede contener 1, 4 u 8 palabras (words). El buer de escritura aumenta el desempe o global del sistema al fungir como n buer 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 buer de escritura es de 8 entradas y puede contener desde 1 hasta 16 bytes cada uno. El controlador rutea todas las fuentes de interrupcin al CPU, sin imporo tar 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 rpido para fuentes de interrupcin determinadas por a o el usuario. Hay dos niveles en el servicio de interrupciones. El primer nivel alerta al usuario o al sistema operativo acerca de la interrupcin y cual fue el o modulo que lo produjo. El segundo nivel provee informacin acerca de cual o es el evento especico en el modulo que causo una interrupcin. o

44.1

nnARM de opencoresOpencores

En los ultimos a os, el software producido en el esquema de cdigo abierto n o (open source) ha demostrado poseer calidad, gran exibilidad 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 o e implen mentaciones 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 eciencia que d soporte al cone junto de instrucciones de la arquitectura ARM.

3

Processor I Cache

D Cache

Coprocessor

Memory Controller

4.2

Organizacin o

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 lgica combinacional. El cache de o instrucciones tiene 4 secciones, cada seccion contiene 4 lineas y cada linea posee 4 palabras. La direccin [5:4] selecciona la seccion, entonces el controo lador del cache compara [31:6] con cada campo tag de las cuatro lineas en esta seccin, si se encuentra la direccion deseada entonces usa la direccion o [3:2] para seleccionar la palabra correspondiente a esta linea. Si ningun tag coincide con [31:6] entonces pone la se al de espera en uno n para detener al que hizo la peticin y va a la memoria para traer el bloque o 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 direccin [5:4] escoge la o seccion, entonces el controlador de cache compara [31:6] con cada campo tag de las 4 lineas en esta seccion. Si encuentra la direccin deseada entonces o 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 seccin. Si si la hay, va a la memoria para traer el bloque o 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 armativo 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 buer que contiene 8 entradas, cada una puede contener una instruccin de 32 bits. El buer de prefetch es particionado en 2: Las primeras o 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 direccin solicitada no esta en ninguna de las mitades, es lanzada una o se al de espera al solicitante y se va al cache para traer el bloque de cache n adecuado.

4.5

Modos de Memoria

Actualmente nnARM unicamente soporta little endian, i.e. El byte menos signicativo esta en la direccin ms baja y la direccin de o a o una palabra (word) es la direccin de su byte menos signicativo. Big endian o 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 versin 3 se tiene soporte para modos de 26 y 32 bits, por o compatibilidad hac atrs. A partir de la versin 4 se utilizan 32 bits y puede a a o 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 operacin: o 1. User Mode. El modo normal para la ejecucin de programas o 2. FIQ Mode: Dise ado para dar soporte a transferencia de datos o pron cesos 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. Undened Mode: Una instruccin desconocida se ha ejecutado o 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 interrupcin o excepcin. o o

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 direccin de la siguiente instruccin cuando se lleva a cabo un branch. En o o diferentes modos de procesador cada registro puede cambiar su signicado.

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: Overow 5. 7: IRQ disable 6. 6: FIQ disable 7. 4:0 Processor mode el modo del procesador en 4:0 es mostrado a continuacin: o 1. 10000: User 2. 10001: FIQ 3. 10010: IRQ 4. 10011: Supervisor 5. 10111: Abort 6. 11011: Undened

4.10

Excepciones

Actualmente nnARM no soporta excepciones. Se pretende primero dar soporte a todo el conjunto de instrucciones del ARM7.

7

Instruction Prefetch buffer

MEM load/store

Instruction Cache

Data cache

Memory Controller

5

Jerarquia de almacenamiento

La jerarquia de almacenamiento en nnARM incluye varios niveles. El primer nivel es el de buer 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 ms bajo es el del controlador de a 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 al de peticin, una bandera de entrada de tama o n o n byte/word, una bandera de modo secuencial/no-secuencial. Como salida puede tener una se al de espera (wait signal). n

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 nal de la etapa MEM. La primera etapa es IF, trae una instruccion del buer 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 decodicador traducir a la instruccin en multiples microinstrucciones y estas siguen su camino por o 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 nal de esta etapa, los resultados que tengan que ir a los registros sern escritos. a 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 instruccin n+1 utiliza Rn como operando, entonces cuando o 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 instruccin siempre que estemos en o condiciones normales 2. Atender las peticiones de branch provenientes de la etapa ALU o MEM 3. Mandar el PC para traer la siguiente instruccin del buer de prefetch o 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.

9

Instruction Cache Fetched Instruction cache block Fetched instruction cache block address

Instruction Prefetch Buffer Fetched instruction

Fetched instruction address IF Register File

PC read and write

instruction Three register request ID micro operation for MEM PSR Registers Three register read bus

micro operation for ALU

Three immediate operand

ALU Fowarding from ALU output to ALU input Fowarding from MEM to ALU D Cache MEM Write Result Write PSR register

micro operation for MEM

ALU result and other operand used by MEM

10

Branch Cuando haya una instruccin de branch o una instruccin de la o o ALU con PC como su destino al terminar la etapa de ALU, el PC requerira ser cambiado. De igual manera, cuando una instruccin de load con PC como destino pase o la etapa de MEM requerira ser cambiado. La peticin proveniente de la etapa de MEM sera procesada primero, la o direccin que viene de la etapa de MEM ser enviada al PC. Al mismo o a tiempo, una se al sera enviada a todas las etapas entre la etapa IF y la n MEM para limpiar los registros de pipeline. Debido a que si una instruccin o de load ocurre, todas las intrucciones detras de ella no sern ejecutadas. a 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 direccin que viene del ALU sera enviada al PC. o Fetch Instruction La etapa IF enviar el valor de PC leido del puerto de a lectura al buer de prefetch. Si la se al de espera del buer de prefetch esta activa en el anco de subida n del reloj quiere decir que el buer de prefetch no puede satisfacer la peticin o en este momento, entonces IF debe obligar a lanzar una instruccin blank al o pipeline y continuar esperando. Si la se al de espera del buer de prefetch no esta activa, IF puede leer la n instruccin y enviarla al decodicador. o

5.3

Decodicador del conjunto de instrucciones de ARM (ID)

La etapa ID unicamente decodica 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, nalmente lleva a cabo la escritura del primer registro. El hilo simple lleva a cabo una seleccin sencilla de datos en la etapa de ALU, o 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 multiplicacin. o 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 describir como decodicar estas instrucciones en micro operaciones. En a la siguiente gura unicamente se muestra el hilo principal y el simple, el hilo psr ser tratado en unqa seccin ms adelante. a o a

5.3.1

Preparacin de los operandos o

El decodicador tiene la obligacin de enviar una peticin de lectura a los o o registros del procesador y regresar el valor inmediato. Esto tambien es llamado preparacin obligada de operandos. o El caso ms complicado es aquel en el que una instruccin requiere tres opa o eradores, como una instruccin del ALU que implique tambien un cambio en o algun registro. Debido a esto, el decodicador tiene tres canales de lectura. Los llamaremos primero, segundo y tercer canal. Cada canal tiene la siguiente se al: n 12

13

1. Habilitar el registro de lectura, ir a los registros, cuando este operando venga de los registros, mandar una se al de HIGH, en otro caso envin amos una se al de LOW n 2. Leer el n mero de registro, ir a los registros del procesador u 3. Si este operando es un valor inmediato, ir a la etapa de ALU. Si la se al esta en HIGH el preenvio no se llevara a cabo en este canal. En n otro caso, el preenvio usara el valor mas reciente del registro tomado del pipeline si es que hay una instruccin que desea escribir en este o 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 contendr el contenido del registro respectivo. En otro caso, el bus a contendra el valor inmediato tomado del decodicador. Hay un caso especial: El PC. El decodicador nunca lee el PC directamente de los registros. Este siempre va con su respectiva instruccin. Esto es, o cualquier instruccion que va de la etapa de IF a la etapa de decodicacin o traer su propio PC. El PC en el pipeline nunca es afectado por el preenvio a (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 instruccin escribira o no en CPSR. o Si el bit S esta encendido y el registro destino no es PC, entonces si escribiremos en CPSR, por lo que el decodicador generar las microoperaciones a ALUPSRType WriteConditionCode y MEMPSRType WriteCPSR para el hilo PSR. Si el bit S esta encendido y el registro destino es PC, el decodicador generar las microoperaciones ALUPSRType SPSR2CPSR y MEMPa SRType WriteCPSR para el hilo PSR. Si el bit S esta apagado ning n registro PSR ser escrito. u a El bit S tendr el mismo comportamiento para las operaciones MLA y MUL a con excepcin en que PC no puede ser el registro destino de MLA y MUL. o 14

MRS mover un registro de proposito general de CPSR a SPSR. El mia crocodigo correspondiente ser generado. a 5.3.3 Seal out ALUMisc n

Esta se al proporciona algunas caracteristicas de valor agregado. n out ALUMisc[31:28]: Este campo contiene un cdigo acerca de la condicin o o de esta instruccin que ser utilizado por la etapa ALU para decidir si esta o a instruccin se satisface con el estado actual del procesador y puede seguir o corriendo. o out ALUMisc[0]: Cuando una instruccin normal es decodicada, 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 decodicando una instruccin de tipo store, la cuenta de cambios (shift count) siempre es o 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 decodicando una instruccin de tipo branch o o ALU que requiera modicar PC, se pone en HIGH a out ALUMisc[6]. out ALUMisc[7]: Se pondr en HIGH cuando se decodique una instruccin a o load al PC. 5.3.4 Insertando BULK

En algunos casos, el decodicador tendr que introducir BULK (operaciones a nulas) al pipeline, porque de otra manera nnARM no funcionar. Considere a el siguiente ejemplo: Cuando hay que cargar el registro Rn, donde Rn es un registro de proposito general y la siguiente instruccin utiliza Rn como o operando fuente. En este caso, si la siguiente instruccin es enviada a ALU o inmediatamente, no tendr el valor ms reciente de Rn, debido a que cuando a a es enviada, la instruccin de cargar el Rn todavia esta en el ALU, y no ha o recibido el resultado de la memoria. Si insertamos bulk, el decodicador debera esperar a que bulk vaya a la etapa MEM, lo cual implica que la operacin de carga ya se llevo a cabo y esta o lista para enviarle el valor de Rn a la siguiente instruccin. o

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 sern enviadas a un modulo llamado ALUa Comb, que ser descrito a continuacin. a o 16

5.4.2

ALUComb

La estructura del modulo ALUComb esta descrita en la siguiente gura: 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 operacin sub, el complemeno tario de RightTmp es calculado. Despus de esto, los operandos pueden ser enviados al sumador. Los operane dos 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 ser sumado. a 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 o 5. ALUType MvNextInstructionAddress. Utiliza la direccin de la siguiente instruccin como salida o 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 ejecucin condicional, o por lo que todas las instrucciones deben usar forwarding para obtener los valores de CPSR ms recientes y asi decidir si pueden continuar ejecutandose a antes de entrar a la etapa ALU. 17

+

switch switch

ComplementResult *

complementary RightTmp LeftTmp switch switch shift result Barrel shifter

in_LeftOPerand

in_ThirdOperand

in_RightOperand

18

5.4.5

Forwarding

El siguiente programa mostrar como el forwarding de los registros de proposa ito 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 condicin o

Los 4 bits ms signicativos de cada instruccin indican bajo que condiciones a o esta instruccin puede seguir ejecutandose y escribir su resultado. o Se utiliza el CPSR procesador por adelantado para saber si una instruccin o 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 (overow) 8. 0111=VC V clear (no overow) 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 instruccin no puede continuar corriendo, un bulk ser insertado en la o a etapa ALU y esta instruccin desaparecera. Un salto condicional (conditional o branch) es ejectuado de la misma forma. 5.4.7 Branch

Para una instruccin de branch, se generar una peticin de salto a todas las o a o etapas entre IF y ALU, todas las etapas se limpian por esta se al. n Tambien es enviado la direccin destino del salto (branch), para que el If o puede llevar a cabo un fetch de esa direccin. o 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 direccin base en una instruccin o o load/store). El hilo PSR lleva a cabo la operacin de escribir en los registros PSR. o 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 direccin para cargar una palabra (word) o 4. MEMType LoadMainByte usa el resultado del hilo principal de ALU como direccin para cargar un byte o 5. MEMType LoadSimpleWord usa el resultado del hilo simple del ALU como direccin para cargar una palabra (word) o 6. MEMType LoadSimpleByte usa el resultado del hilo simple del ALU como direccin para cargar un byte o 7. MEMType StoreMainWord utiliza el resultado del hilo principal de ALU como direccin para guardar una palabra (word) o 8. MEMType StoreMainByte usa el resultado del hilo principal de ALU como direccin para guardar un byte o 9. MEMType StoreSimpleWord usa el resultado del hilo simple del ALU como direccin para guardar una palabra (word) o 21

10. MEMType StoreSimpleByte usa el resultado del hilo simple del ALU como direccin para guardar un byte o 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 ms reciente del pipeline a a los registros SPSR 2. MEMPSRType SPSR2CPSR escribe el SPSR ms reciente del pipeline a a los registros CPSR 3. MEMPSRType WriteCPSR escribe el CPSR ms reciente del pipeline a a los registros CPSR 4. MEMPSRType WriteConditionTable escribe el codigo de condicion a los registros CPSR, debido a que al hacer forwarding esto ser lo mismo a que MEMPSRType WriteCPSR 5.5.4 Cambio de PC

Cuando la microoperacin actual se va a cargar al PC, y despus que load o e haya terminado, el nuevo PC debe ser enviado a la etapa IF. Al mismo tiempo, una peticin de branch debe enviar una se al a todas las etapas o n entre IF y MEM, para que estas tiren lo que estan haciendo.

22

6

Bluetooth y ARM

La tecnologia Bluetooth es la b squeda de estndares para que los diversos u a dispositivos portatiles puedan comunicarse de manera transparente. Una de las compa ias que ms ha desarrollado esta tecnologia es Ericsson, n a quien rmo 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.

7

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.

8

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

Si quieres saber ms de la arquitectura ARM, te recomiendo: a

9

Apndice 1: Dispositivos portatiles que utie lizan ARM

Presentar el nombre del producto, la compa ia que lo fabrica y una breve e n descripcin: o 1. IOMega HipZip. IOMega. Reproductor de MP3 porttil a 23

2. GameBoy Advance. Nintendo. Consola de videojuegos porttil a 3. Rio Car. Rio. Reproductor de MP3 para el automvil o 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 n ARM Ltd. se producen 5 mil millones de microprocesadores al u a o. n

10

Apndice 2: Linea del tiempo para ARM e

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 extensin a la tecnologia ARM permite un desempe o de o n 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 versin sintetizada del procesador ARM7TDMI. o ARM anuncia la nueva generacin de la familia ARM10 o 10. 1999. ARM9E es anunciado en un foro de microprocesadores incrustrados. ARM y Ericsson colaboran en Bluetooth 11. 2000. ARM ARM ARM 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

11

Apndice 3: Sistemas Operativos que dan e soporte a ARM

1. NetBSD 2. GNU Linux 3. WindowsCE

25