viernes, 2 de junio de 2017

Arquitecturas


Arquitecturas

Para trabajar con microprocesadores hay que repasar un poco las distintas arquitecturas y sus diferencias.

Existen dos arquitecturas básicas en el diseño de procesadores: Harvard y Von Neumann
  • Von Neumann: Tradicionalmente los sistemas con microprocesadores se basan en esta arquitectura, en la cual la unidad central de proceso (CPU), está conectada a una memoria principal única (casi siempre sólo RAM) donde se guardan las instrucciones del programa y los datos. A dicha memoria se accede a través de un sistema de buses único (control, direcciones y datos).



En un sistema con arquitectura Von Neumann el tamaño de la unidad de datos o instrucciones está fijado por el ancho del bus que comunica la memoria con la CPU.
  •  Arquitectura Harvard: este modelo tiene la unidad central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes. Una de las memorias contiene solamente las instrucciones del programa (Memoria de Programa), y la otra sólo almacena datos (Memoria de Datos).




Ambos buses son totalmente independientes lo que permite que la CPU pueda acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes, estos pueden tener distintos contenidos en la misma dirección y también distinta longitud. También la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso de la memoria en general.

AVR

Los AVR son una familia de microcontroladores RISC del fabricante estadounidense Atmel. La arquitectura de los AVR fue concebida por dos estudiantes en el Norwegian Institute of Technology, y posteriormente refinada y desarrollada en Atmel Norway, la empresa subsidiaria de Atmel, fundada por los dos arquitectos del chip. Se pueden dividir en los siguientes grupos:

  • ATxmega: procesadores muy potentes con 16 a 384 kB de memoria flash programable, encapsulados de 44, 64 y 100 pines (A4, A3, A1), capacidad de DMA, eventos, criptografía y amplio conjunto de periféricos con DACs.
  • ATmega: microcontroladores AVR grandes con 4 a 256 kB de memoria flash programable, encapsulados de 28 a 100 pines, conjunto de instrucciones extendido (multiplicación y direccionamiento de programas mayores) y amplio conjunto de periféricos.
  • ATtiny: pequeños microcontroladores AVR con 0,5 a 8 kB de memoria flash programable, encapsulados de 6 a 20 pines y un limitado set de periféricos.
  • AT90USB: ATmega integrado con controlador USB
  • AT90CAN: ATmega con controlador de bus CAN
  • Tipos especiales: algunos modelos especiales, por ejemplo, para el control de los cargadores de baterías, pantallas LCD y los controles de los motores o la iluminación.
  • AT90S: tipos obsoletos, los AVRs clásicos




Bajo el nombre AVR32, Atmel tiene una arquitectura RISC de 32 bits con soporte de DSP y SIMD. A pesar de la similitud de sus nombres y logotipos, las dos arquitecturas tienen poco en común.

El AVR es una CPU de arquitectura Harvard. Tiene 32 registros de 8 bits. Algunas instrucciones sólo operan en un subconjunto de estos registros. La concatenación de los 32 registros, los registros de entrada/salida y la memoria de datos conforman un espacio de direcciones unificado, al cual se accede a través de operaciones de carga/almacenamiento. A diferencia de los microcontroladores PIC, el stack se ubica en este espacio de memoria unificado, y no está limitado a un tamaño fijo.

El AVR fue diseñado desde un comienzo para la ejecución eficiente de código C compilado. Como este lenguaje utiliza profusamente punteros para el manejo de variables en memoria, los tres últimos pares de registros internos del procesador son usados como punteros de 16 bit al espacio de memoria externa, bajo los nombres X, Y y Z.
El set de instrucciones AVR está implementado físicamente y disponible en el mercado en diferentes dispositivos, que comparten el mismo núcleo AVR pero tienen distintos periféricos y cantidades de RAM y ROM: desde el microcontrolador de la familia Tiny AVR ATtiny11 con 1KB de memoria flash y sin RAM (sólo los 32 registros), y 8 pines, hasta el microcontrolador ATmega2560 de la familia Mega AVR con 256KB de memoria flash, 8KB de memoria RAM, 4KB de memoria EEPROM, conversor análogo digital de 10 bits y 16 canales, temporizadores, comparador analógico, JTAG, etc. La compatibilidad entre los distintos modelos es preservada en un grado razonable.
Los microcontroladores AVR tienen una pipeline con dos etapas (cargar y ejecutar), que les permite ejecutar la mayoría de las instrucciones en un ciclo de reloj, lo que los hace relativamente rápidos entre los microcontroladores de 8-bit.
El set de instrucciones de los AVR es más regular que la de la mayoría de los microcontroladores de 8-bit (por ejemplo, los PIC). Sin embargo, no es completamente ortogonal:
  • Los registros punteros X, Y y Z tienen capacidades de direccionamiento diferentes entre sí (ver más arriba por qué).
  • Los registros 0 al 15 tienen diferentes capacidades de direccionamiento que los registros 16 al 31.
  • Las registros de I/O 0 al 31 tienen distintas características que las posiciones 32 al 63.
  • La instrucción CLR afecta los 'flag', mientras que la instrucción SER no lo hace, a pesar de que parecen ser instrucciones complementarias (dejar todos los bits en 1, y dejar todos los bits en 0, respectivamente).
  • Los códigos de operación 0x95C8 y 0x9004 hacen exactamente lo mismo (LPM).

Algunos conceptos que son interesantes de aclarar:

La arquitectura en pipeline consiste en ir transformando un flujo de datos en un proceso comprendido por varias fases secuenciales, siendo la entrada de cada una la salida de la anterior.





Un procesador digital de señales o DSP (digital signal processor) es un sistema basado en un procesador o microprocesador que posee un conjunto de instrucciones, un hardware y un software optimizados para aplicaciones que requieran operaciones numéricas a muy alta velocidad.

En computación, SIMD (Single Instruction, Multiple Data, en español: "una instrucción, múltiples datos") es una técnica empleada para conseguir paralelismo a nivel de datos. Los repertorios SIMD consisten en instrucciones que aplican una misma operación sobre un conjunto más o menos grande de datos. Es una organización en donde una única unidad de control común despacha las instrucciones a diferentes unidades de procesamiento. Todas éstas reciben la misma instrucción, pero operan sobre diferentes conjuntos de datos.
RISC (Reduced Instruction Set Computer, en español Computador con Conjunto de Instrucciones Reducidas) es un tipo de diseño de CPU generalmente utilizado en microprocesadores o microcontroladores con las siguientes características fundamentales:
1.     Instrucciones de tamaño fijo y presentadas en un reducido número de formatos.
2.     Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos.
Además estos procesadores suelen disponer de muchos registros de propósito general. El objetivo de diseñar máquinas con esta arquitectura es posibilitar la segmentación y el paralelismo en la ejecución de instrucciones y reducir los accesos a memoria. 
En el caso del ATmega328p con el que vamos a trabajar, tiene una arquitectura RISC con 131 instrucciones, la mayoría de ellas ejecutadas en un solo ciclo de reloj.

El ciclo por reloj hace referencia a la velocidad del reloj de la CPU, en nuestro caso 16MHz, con lo que un ciclo de reloj tiene una duración de 0,0000000625 segundos = 0,0625 microsegundos = 62,5 nanosegundos.

El ciclo máquina se define como el tiempo mínimo necesario para ejecutar una instrucción. En el caso del ATmega 328p será: ciclo máquina=ciclo de reloj.

Un ciclo de instrucción (también llamado ciclo de fetch-and-execute o ciclo de fetch-decode-execute) es el período que tarda la unidad central de proceso (CPU) en ejecutar una instrucción de lenguaje máquina.





Como podemos ver en la imagen, en nuestro caso un ciclo de instrucción está compuesto por cuatro ciclos de reloj (que en este caso equivalentes a los ciclos máquina). 


No hay comentarios:

Publicar un comentario