# Seminario ARM organizado por Facultad de Ingeniería



## Loktar (Jul 28, 2009)

*Seminario ARM organizado por Facultad de Ingeniería*
_Joe Bungo y Bill Hohl - ARM Ltd, USA_
Idioma Inglés

INSCRIPCIÓN SIN CARGO: lse.fiuba@gmail. com

*Viernes 31 de Julio de 2009 19:00hs
Salón Constantini - Centro Argentino de Ingenieros
Cerrito 1250 - P.B. - C.A.B.A.*

*Introduction to ARM Processors*
ARM announces a technical seminar specifically  for university students, staff, and others interested at UBA. In 2 hours, the workshop covers the company business model, ARM processors and architectures (new and old), programmers models, the ARM InstructionSet Architecture, basic system design, new core pipelines, power issues, GPUs, development tools, and a demonstration of the latest ARM technology. The seminar is free to students, faculty, and others. If you are an engineering or computer science student studying hardware or software, computer architecture, embedded, real-time systems/ applications, low-power applications, cryptography, interpreters and compilers, or you’re starting a project, you will find this short course useful. Think of it as a crash course on ARM. 
For more informaciónrmation visit www.arm.com

Les adjunto el flyer.
Saludos.


----------



## Ardogan (Jul 28, 2009)

Buenísimo! siempre quise por lo menos tener una noción básica de estos dispositivos, que segun escuché es lo que más se utiliza para cualquier aparato de consumo masivo.

Ya mismo me voy inscribiendo, muchas gracias Loktar.

Ojalá que hablen inglés a hablando despaciiito con terminos sencillos.

Saludos


----------



## Loktar (Jul 28, 2009)

Ardogan dijo:
			
		

> Ojalá que hablen inglés a hablando despaciiito con terminos sencillos.



Seguramente, calculo que deben tener experiencia en charlas en el exterior.

Saludos.


----------



## Chico3001 (Jul 28, 2009)

por que no hacen de esos en Mexico?


----------



## Ardogan (Ago 2, 2009)

Bueno, voy a comentar lo que se habló del seminario, que estuvo interesante y el inglés de los expositores era muy claro y con buena dicción.

Comenzaron hablando de qué es ARM (www.arm.com). Nos hablaron de historia, lo que no me interesó mucho que digamos, así que mi mente no registró esa parte.

ARM es una compañía que vende IP: intellectual property - propiedad intelectual (no confundir con IP de internet protocol   ).
Ellos no fabrican NADA, venden diseños de núcleos de procesadores a compañías en forma de licencias, software asociado (compiladores, debuggers, simuladores...), y algunas herramientas de desarrollo (ok, sí fabrican algo).
Pero no existe un chip fabricado por ARM.
Tienen una diversidad impresionante de clientes, y de los pesados: ST, TI, National, Atmel, Samsung, Nokia, etc, etc.

Entonces el negocio de esta gente es vender licencias de propiedad intelectual. Luego alguna compañía, digamos Atmel, compra una licencia, adquiere el diseño del núcleo de un procesador, y agrega los periféricos que les venga en gana (temporizadores, pwm, usb, SPI, USART, etc) y lo fabrica. Luego ARM cobra un royaltie por cada chip vendido.

Aparte de núcleos de procesadores también diseñan periféricos. Recientemente ha empezado a desarrollar/comerciar el diseño puesto en silicio, cosa que antes no hacían.

¿Por qué vale la pena conocer la arquitectura ARM?: porque hay una cantidad abrumadora de dispositivos basados en ARM, de multitud de fabricantes de dispositivos, en una gama de aplicaciones también muy amplificadora.
En esto destaco que no es que uno aprende como programar un pic y se queda atado solo a lo que produzca microchip. Al aprender ARM estas aprendiendo sobre dispositivos de National, ST, TI, Atmel, etc.

¿Quién es el principal cliente?: las compañías de la industria de los dispositivos móviles: celulares, notebooks, netbooks, palms...

Bueno, hasta acá fué la sección del seminario donde hablaron sobre la compañía en sí.
A continuación voy a comentar lo que se habló de arquitectura, que prácticamente ocupó todo el seminario de ahí en adelante.

-- Continuará --


----------



## Ardogan (Ago 4, 2009)

Lo primero que hay que aclarar es que los procesadores ARM son todos de 32 bits. No hay de 8 ni de 16 bits.
Hay distintas versiones de núcleos, adaptados a distintas aplicaciones.
Cuando se habla de ARM7 estamos diciendo que la versión de ARM es la 7.

La versión 4 es la línea base. La versión 5 está orientada a procesamiento digital de señales. La versión 6 a encriptación de datos y motores gráficos.
La versión 7 se subdivide en tres ramas:

A: de "Advance", se utiliza para dispositivos que requieren potencia de cálculo, como celulares y notebooks.
R: de tiempo real, para aplicaciones donde se requiere que el sistema sea determinístico.
M: de microcontroladores, se hace foco en el bajo consumo de energía con prestaciones intermedias.
La arquitectura ARM sigue los lineamientos de procesadores RISC (reduced instruction set computer). De hecho ARM significa Advanced RISC Machine. Los lineamientos son:

 Ejecución de instrucciones en 1 solo ciclo de reloj: esto si bien para alguien que programa en C no tiene mayor importancia, sí es importante para preservar una arquitectura sencilla, porque los pipelines se mantienen sencillos; mejor dicho menos complicados que con instrucciones de más de 1 ciclo. Y esto a su vez incide en el tamaño de silicio requerido para hacer la arquitectura, el consumo, etc, etc.
 Conjunto reducido de instrucciones: mentira ! ! !. Esto en realidad ya no es así, hay ARM's con más de 600 instrucciones distintas (sí, 600 ! ! !   ).  A medida que se van agregando funcionalidades (unidades de punto flotante, soporte multi-procesador, etc) inevitablemente se agranda el conjunto de instrucciones.
 Instrucciones de manejo de memoria load/store: no se pueden hacer operaciones memoria a memoria, por ejemplo, no hay una instrucción que haga una operación con numeros almacenados en memoria, solo se opera con los registros.
Cuando les preguntaron con que linea conviene empezar para aprender, recomendaron la línea ARM7 y la Cortex-M3.

Una característica que destacaron de los ARM en general, es la baja relación mW/MHz (miliwatts a megahertz).
Para un ARM7 suele andar en 0.35 mW/MHz pudiendo correr a 200 MHz.
Para un Cortex-A8 corriendo a 1200 MHz anda en 0.43 mw/MHz.

Nótese que esa es una característica fundamental cuando pensamos en dispositivos móviles con potencia de procesamiento, mayor disipación requiere refrigeración, y mayor tamaño del dispositivo lo que no es para nada deseable.

Luego mencionaron distintas variantes de la arquitectura:
NEON, Cortex-A: pensada para gŕaficos, reconocimiento de habla, punto flotante.
Cortex-M1: es un procesador especialmente adaptado para meterlo en una FPGA, para que entre ocupando mínimos recursos de la FPGA.
MPCORE: para múltiples núcleos

Hay versiones de conjunto de instrucciones reducidas: Thumb y Thumb2.
Son conjuntos de instrucciones de 16 bits que cubren las instrucciones más utilizadas en los ARM.
Por ejemplo, en vez de hacer una especie de:

add r1,r2,3 (r1=r2+r3) se puede hacer
add r2,r2,r3 que en thumb se trasladaría a add r2,r3. Ahí me ahorra de especificar un operando, y más o menos de esa forma se reduce el tamaño de instrucción de 32 a 16 bits.

¿Por qué es deseable usar instrucciones de 16 bits en vez de 32?:

Densidad de código: se obtiene una mayor cantidad de instrucciones para el mismo tamaño de memoria
Precio: la memoria de 16 bits es más barata que la de 32 bits.
Mayor performance
Solo las instrucciones pueden ser de 16 bits, los datos siempre son de 32 bits, no importa si usa thumb o no.

Thumb2 es otro conjunto de instrucciones de 16 bits, con el que se logra un 25% más de velocidad que thumb, con igual densidad de código.

Dado el pantallazo de las diferencias entre las familias ARM, pasaron a hablar de las cosas comunes de ARM que son distintas a núcleos de otras empresas.

Modos de operación:

User: modo de operación normal
FIQ: modo de interrupción rápida
IRQ: modo de interrupción
Supervisor: cuando se reinicia (resetea) el dispositivo se entra en este modo
Abort
Undef
System
Los modos Abort, Undef entraban en juego si uno accedía a una posición de memoria inválida, o se cargaba una instrucción con código de operación desconocido. No recuerdo cual es cual, pero esa información está disponible en la web.

Una característica interesante, en particular para el modo FIQ (fast interrupt request, modo de interrupción rápida) es que se usa un conjunto distinto de registros.
Es decir, uno se sigue refiriendo a los registros con los nombres de siempre (R1, R4, etc) pero físicamente son registros diferentes a los de los otros modos. Son registros gemelos.
Esto da un ahorro de tiempo ya que se elimina la necesidad de salvar los valores de los registros, para lo cual se necesita a acceder a memoria que siempre es lenta y consume tiempo.

Hablaron también de excepciones, si mal no recuerdo se referían a los estados Abort y Undef. No recuerdo mucho más de eso, igualmente la intención no es dar una explicación detallada de todas las características de la arquitectura, sino remarcar que es lo que se hablo en el seminario.

La ejecución de todas las instrucciones es condicional, en todos los códigos de operación se incluyen bits para eso.
¿A que me refiero con eso?, a que cualquier instrucción se le pueden poner como sufijo las mismas condiciones que en un salto.
Es extender las clásicas instrucciones bne, beq, bz, bc, bnc, etc; a las demás instrucciones (add, sub, ldr, etc).
Y para terminar, tambien hay especificadores de tamaño.
Por ejemplo, LDREQB cargaría un valor en un registro (LDR) si una comparación de igualdad previa se cumplió (EQ), y el valor a cargar sería de tamaño byte (B).
Esto ahorra saltos, los que siempre hacen perder eficiencia al pipeline.

Bueno, dejo para después una 3ra parte cortita donde hablaron de AMBA (bus de interfaz con el ARM) y desarrollo.

-- Continuará --


----------



## Ardogan (Ago 5, 2009)

AMBA: es el bus de interfaz del ARM con el mundo exterior. Usa un protocolo abierto, tiene un bus de alta velocidad para la memoria e interfaz con otros micros, y un bus de baja velocidad para periféricos (timers, spi, etc).

Manejo inteligente de energía (IEM): hay herramientas de soft y hard para lograr un bajo consumo. Por un lado se puede bajar la frecuencia de reloj, y también se puede bajar la tensión de operación. Hay un soft que utiliza ganchos (hooks) para interceptar la utilización del micro, se obtiene un modelo de ejecución clasificando tareas en distintas clases para predecir las necesidades de tensión y frecuencia de trabajo.

Depuración: mencionaron las herramientas Embedded ICE Logic, JTAG.

ETM: trace macro cell, funciona en tiempo real, hay un puerto específico para utilizar esta característica.

Ya en la parte final del encuentro se habló de herramientas de desarrollo y hubo una pequeña demostración.

Se recomendó empezar con una versión gratuita de KEIL (compañía recientemente adquirida por ARM) en www.keil.com/demo
Para propósitos de aprendizaje recomendaron visitar www.arm.com/community/university.
Se pueden enviar consultas técnicas a university_arroba_arm.com .

Luego se hizo la demostración de un micro de arquitectura ARM en una placa (beagleboard).
La beagleboard (http://beagleboard.org/) es una placa de desarrollo popular para todo tipo de aplicaciones. Tiene un precio de U$S150 con puerto usb otg (puede ser maestro o esclavo), ethernet, ranura para tarjetas de memoria, puerto jtag, salida dvi y de video, puerto serie I2C, salida de audio, es compatible con OpenGL... bueno, un verdadero monstruito.
El micro es un ARM Cortex-8 que alcanza a correr (volar sería un término más justo) hasta a 600 MHz.

En la demostración pusieron esa placa corriendo ubuntu reproduciendo video, con conexión a internet..... todo con un consumo de 2 W ! ! ! (dos, aclaro por las dudas).
La verdad fué bastante impresionante, al principio mostraban una pantalla con Ubuntu y uno no sabía muy bien que era lo que querían mostrar. Pusieron a reproducir un video y mostraban que había conexión a internet, después recién cuando me acerqué vi que todo eso estaba corriendo en la beagleboard, que no había ninguna PC por ahí cerca, jajaja.

También se mostró una placa realizada por un miembro del laboratorio de sistemas embebidos de la facultad de ingeniería de la UBA (Universidad de Buenos Aires).
Lo que hacía era un gateway de Wi-Fi a ethernet, con el que daban conexión a la beagleboard.
-----------------------------------------------

Bueno, para terminar con esta pequeña serie de posts, debo decir que el seminario fue muy interesante; especial para alguien (como yo) que no conocía ARM y que no sabía como empezar, ni que se podía hacer con ARM.
Los expositores (no anoté los nombres) hicieron un muy buen trabajo, eran personas con excelente trayectoria (ya me gustaría tener la mitad del currículum en especial de uno de ellos, uno pelado) con amplios conocimientos de desarrollo.
Hubo una buena afluencia de gente, excediendo las expectativas de los organizadores y los expositores.
Muchos estudiantes, y había 2 mujeres! ! !  
Sobre el final hubo que acelerar un poco los tiempos, empezamos a las 19 hs y decidieron saltear algunas cosas para terminar antes de las 22:30.
Por mi parte voy a tratar (si los tiempos me lo permiten) de aprender un poco más sobre esta arquitectura, que quizás es un cañonazo para hacer algo sencillo, pero es más que interesante si uno precisa algo con potencia. Vale la pena conocer que existen, y saber que están ahí por si el día de mañana necesitamos hacer algo complejo.

Ojalá le sirva a quien lea este post como me sirvió a mí concurrir a ese seminario.

Saludos

-- FIN --


----------



## Ardogan (Ago 11, 2009)

Les adjunto una presentación que utilizan para enseñar arquitectura de ARM, que nos enviaron los organizadores del seminario. Está en zip por la limitación de tamaño para subir archivos.
Saludos


----------



## ERNESTO REYES (Dic 29, 2011)

alguno de ustedes a usado la siguiente placa TS-7250 o alguna derivada de esa. lo que pasa es que la estoy usando y quiero utilizar el A/D solo que estoy teniendo unos problemitas con esto, espero y me puedan ayudar, saludos


----------

