Blackfin es una familia de microprocesadores de 16/32 bits desarrollados, fabricados y comercializados por Analog Devices . Los procesadores tienen una funcionalidad de procesador de señal digital (DSP) de punto fijo integrada realizada por multiplicadores-acumuladores (MAC) de 16 bits, acompañados en el chip por un microcontrolador . [1] Fue diseñado para una arquitectura de procesador unificada de bajo consumo que puede ejecutar sistemas operativos mientras maneja simultáneamente tareas numéricas complejas como la codificación de video H.264 en tiempo real . [2] [3]
Los procesadores Blackfin utilizan un modelo de programación de microcontrolador RISC de 32 bits en una arquitectura SIMD , que fue desarrollada conjuntamente por Intel y Analog Devices , como MSA (Micro Signal Architecture).
La arquitectura se anunció en diciembre de 2000 y se demostró por primera vez en la Conferencia de Sistemas Integrados en junio de 2001.
Incorpora aspectos de la antigua arquitectura SHARC de ADI y la arquitectura XScale de Intel en un solo núcleo, combinando el procesamiento de señales digitales (DSP) y la funcionalidad del microcontrolador. Existen muchas diferencias en la arquitectura del núcleo entre Blackfin/MSA y XScale/ARM o SHARC, pero la combinación fue diseñada para mejorar el rendimiento, la capacidad de programación y el consumo de energía en comparación con los diseños de arquitectura DSP o RISC tradicionales.
La arquitectura Blackfin abarca varios modelos de CPU, cada uno de ellos orientado a aplicaciones específicas. [4] La serie BF-7xx, presentada en 2014, comprende la arquitectura Blackfin+, que amplía la arquitectura Blackfin con algunas nuevas características e instrucciones de procesador.
Lo que se considera el "núcleo" de Blackfin depende del contexto. Para algunas aplicaciones, las características del DSP son fundamentales. Blackfin tiene dos MAC de hardware de 16 bits, dos ALU y acumuladores de 40 bits , un desplazador de barril de 40 bits y cuatro ALU de video de 8 bits; los procesadores Blackfin+ agregan un MAC de 32 bits y un acumulador de 72 bits. Esto permite que el procesador ejecute hasta tres instrucciones por ciclo de reloj, dependiendo del nivel de optimización realizado por el compilador o el programador . Dos bucles anidados de sobrecarga cero y cuatro DAG (generadores de direcciones de datos) de búfer circular están diseñados para ayudar a escribir código eficiente que requiere menos instrucciones . Otras aplicaciones utilizan las características RISC , que incluyen protección de memoria, diferentes modos operativos (usuario, núcleo), códigos de operación de ciclo único , cachés de datos e instrucciones e instrucciones para accesos de prueba de bits, bytes, palabras o enteros y una variedad de periféricos en chip.
El ISA está diseñado para un alto nivel de expresividad , lo que permite al programador (o compilador ) de ensamblaje optimizar un algoritmo para las características del hardware presentes. El lenguaje ensamblador estándar de Blackfin está escrito utilizando una sintaxis algebraica: en lugar de los comandos de prefijo que se utilizan en muchos otros lenguajes ensambladores.
El Blackfin utiliza un mapa de memoria plano direccionable por bytes . La memoria interna L1, la memoria interna L2, la memoria externa y todos los registros de control mapeados en memoria residen en este espacio de direcciones de 32 bits, de modo que, desde un punto de vista de programación, el Blackfin tiene una arquitectura de Von Neumann .
La memoria SRAM interna L1 , que funciona a la velocidad del reloj del núcleo del dispositivo, se basa en una arquitectura Harvard . La memoria de instrucciones y la memoria de datos son independientes y se conectan al núcleo a través de buses de memoria dedicados, diseñados para velocidades de datos sostenidas más altas entre el núcleo y la memoria L1.
Porciones de instrucciones y datos de la SRAM L1 se pueden configurar opcionalmente como caché de forma independiente.
Algunos procesadores Blackfin también tienen entre 64 KB y 256 KB de memoria L2. Esta memoria funciona más lentamente que la velocidad del reloj del núcleo. El código y los datos se pueden mezclar en L2.
Los procesadores Blackfin admiten una variedad de memorias externas, incluidas SDRAM , DDR-SDRAM , flash NOR , flash NAND y SRAM . Algunos procesadores Blackfin también incluyen interfaces de almacenamiento masivo como ATAPI y SD/SDIO . Pueden admitir cientos de megabytes de memoria en el espacio de memoria externa.
Junto con el núcleo y el sistema de memoria hay un motor DMA que puede funcionar entre cualquiera de sus periféricos y la memoria principal (o externa). Los procesadores suelen tener un canal DMA dedicado para cada periférico, que está diseñado para un mayor rendimiento para las aplicaciones que pueden usarlo, como la codificación y decodificación de vídeo de definición estándar (D1) en tiempo real.
La arquitectura de Blackfin contiene la CPU, la memoria y la E/S habituales que se encuentran en los microprocesadores o microcontroladores . Estas características habilitan los sistemas operativos.
Todos los procesadores Blackfin contienen una unidad de protección de memoria (MPU). La MPU proporciona estrategias de protección y almacenamiento en caché en todo el espacio de memoria. La MPU permite a Blackfin admitir sistemas operativos, sistemas operativos en tiempo real (RTOS ) y núcleos como ThreadX , μC/OS-II o NOMMU Linux . Aunque la MPU se conoce como unidad de administración de memoria (MMU) en la documentación de Blackfin, la MPU de Blackfin no proporciona traducción de direcciones como una MMU tradicional, por lo que no admite memoria virtual ni direcciones de memoria independientes por proceso. Es por eso que Blackfin actualmente no puede admitir sistemas operativos que requieren memoria virtual, como WinCE o QNX .
Blackfin admite tres modos de ejecución : supervisor, usuario y emulación. En el modo supervisor, todos los recursos del procesador son accesibles desde el proceso en ejecución. Sin embargo, cuando está en modo usuario, los recursos del sistema y las regiones de memoria se pueden proteger (con la ayuda de la MPU). En un sistema operativo moderno o RTOS, el núcleo normalmente se ejecuta en modo supervisor y los subprocesos/procesos se ejecutarán en modo usuario. Si un subproceso falla o intenta acceder a un recurso protegido (memoria, periférico, etc.), se lanzará una excepción y el núcleo podrá apagar el subproceso/proceso infractor. La guía oficial de ADI sobre cómo usar Blackfin en entornos que no sean de SO es reservar la interrupción de menor prioridad para el código de propósito general, de modo que todo el software se ejecute en el espacio del supervisor.
Blackfin utiliza un conjunto de instrucciones de longitud variable similar a RISC que consta de instrucciones de 16, 32 y 64 bits. Las instrucciones de control de uso común se codifican como códigos de operación de 16 bits, mientras que las funciones complejas de procesamiento de señales digitales y de uso intensivo de las matemáticas se codifican como códigos de operación de 32 y 64 bits. Esta codificación de código de operación de longitud variable está diseñada para lograr una equivalencia de densidad de código con las arquitecturas de microprocesadores modernas.
El conjunto de instrucciones Blackfin contiene extensiones de procesamiento de medios para ayudar a acelerar las operaciones de procesamiento de píxeles comúnmente utilizadas en algoritmos de compresión de video y de compresión y descompresión de imágenes .
Los procesadores Blackfin contienen una variedad de periféricos de conectividad, según el procesador específico:
Todos los registros de control periférico están mapeados en la memoria en el espacio de direcciones normal.
ADI proporciona sus propias cadenas de herramientas de desarrollo de software. El IDE VisualDSP++ original aún recibe soporte (su última versión fue 5.1.2 en octubre de 2014 ), pero se acerca al final de su vida útil y no se ha agregado soporte para los nuevos procesadores BF6xx y BF7xx. La cadena de herramientas más nueva es CrossCore Embedded Studio, que admite todos los procesadores Blackfin y Blackfin+ utilizando versiones mejoradas del mismo compilador y herramientas internamente, pero con una interfaz de usuario basada en Eclipse CDT . No hay disponible una versión gratuita de ninguna de las herramientas; una licencia de usuario único para VisualDSP++ cuesta $3500 USD y CrossCore Embedded Studio $995 USD.
Otras opciones incluyen MULTI IDE de Green Hills Software y GNU GCC Toolchain para la familia de procesadores Blackfin. Sin embargo, al igual que VisualDSP++, no se han actualizado para admitir los procesadores BF6xx y BF7xx más nuevos. Además, ninguno de ellos admite todos los procesadores BF5xx. Green Hills MULTI no admite BF50x, BF51x, algunos BF52x, BF547 y BF59x. GCC no admite BF50x, BF566 y BF59x, y tiene un soporte incompleto para BF561.
Blackfin también es compatible con el módulo LabVIEW Embedded de National Instruments , que requiere VisualDSP++.
Varios sistemas operativos comerciales y de código abierto admiten el funcionamiento de Blackfin.
Anteriormente, Blackfin contaba con soporte de μClinux y más tarde de Linux con la función NOMMU, pero como nunca se usó ampliamente y ya no tenía un mantenedor, [8] [9] el soporte se eliminó de Linux el 1 de abril de 2018; 4.16 fue la última versión que incluyó soporte de Blackfin. [10] [11] [12]