ACE16k-DS: Un Sistema Autónomo Programable para el Preprocesamiento de Imágenes en Tiempo Real L. Carranza, Francisco Jiménez-Garrido, Gustavo Liñán-Cembrano, Elisenda Roca, Servando Espejo Meana, y Angel Rodríguez-Vázquez Instituto de Microelectrónica de Sevilla - CNM-CSIC Edificio CICA-CNM Avda./ Reina Mercedes s/n, 41012 Sevilla, SPAIN [email protected] Resumen. Este artículo describe un sistema electrónico autónomo y programable, denominado ACE16k-DS, que permite sensar y procesar imágenes en tiempo real. La arquitectura del sistema está basada en el chip ACE16k y en la FPGA Xc4028xl de Xilinx en la que se han sintetizado una Unidad de Control Programable de propósito específico y un generador de vídeo digital. Las imágenes son sensadas y procesadas, en modo analógico, en el chip ACE16k, siguiendo instrucciones secuenciadas por la Unidad de Control Programable. El generador de vídeo digital permite visualizar, en una pantalla TFT, las imágenes procesadas en tiempo real. 1 Introducción El continuo aumento de las densidades de integración de las tecnologías CMOS VLSI han hecho posible el desarrollo de sistemas electrónicos cada vez más potentes y compactos. La posibilidad de integrar circuitería analógica y digital CMOS dentro del mismo substrato semiconductor ha permitido la realización de sistemas completos de propósito específico “on” chip (SoC). Un ejemplo claro de estos sistemas son los procesadores programables masivamente paralelos de señal mixta para el preprocesamiento de imágenes. La complejidad y potencia de estos chips ha ido en aumento en los últimos años [1]-[4]. Estos circuitos, debido a su complejidad y versatilidad, son difíciles de testar y programar, pasos previos necesarios para el desarrollo de aplicaciones completas de visión artificial para las que están diseñados. Hasta la fecha, los sistemas electrónicos para el desarrollo de aplicaciones con estos chips de señal mixta se han llevado a cabo apoyándose en microprocesadores de propósito general y potentes DSPs [5]. Esta estrategia presenta numerosas ventajas, la principal de ellas es que las arquitecturas basadas en microprocesadores y DSPs comerciales incluidas en estas plataformas cuentan con sistemas operativos, librerías, potentes paquetes de aplicación y ayudas para la programación que facilitan el desarrollo de aplicaciones. Sin embargo, hacen difícil la programación fina, de bajo nivel, de los chips preprocesadores, consumen mucha energía, no están pensadas para estudiar arquitecturas optimizadas de futuros Sistemas de Visión “on” Chip (VSoC) y no suelen estar diseñadas teniendo en cuenta la naturaleza analógica del núcleo de los chips preprocesadores de imágenes, lo que obliga a un diseño cuidadoso de los circuitos impresos de las plataformas que los soportan. El chip ACE16k [4] está compuesto, esencialmente, por un array de 128 x 128 elementos de sensado y procesamiento analógico diseñado para realizar tareas de preprocesamiento de imágenes a muy alta velocidad con una resolución de 7 bits. Otros bloques de circuito incluidos en el chip, principalmente bancos de memoria estática y juegos de conversores AD y DA permiten, por una parte, almacenar instrucciones y datos en el ACE16k con el fin de prepararlo para realizar determinadas tareas, y por otra, integrarlo en un sistema completamente digital. Las instrucciones y datos, previamente almacenados en los bloques de memoria, se seleccionan y transmiten al array de procesamiento en paralelo, siguiendo una secuencia establecida desde el exterior del ACE16k. En este artículo, se presenta el sistema de desarrollo ACE16k-DS, que está compuesto por elementos de hardware y software y ha sido diseñado para programar y ejecutar algoritmos de preprocesamiento de imágenes usando el chip ACE16k. El sistema incluye un núcleo digital, sintetizado en una FPGA, compuesto por una Unidad de Control Programable, un generador de vídeo digital y un selector de memoria de imágenes. Dos bloques de memoria permiten almacenar y leer las imágenes preprocesadas por el ACE16k. Un conversor DA y un mezclador generan vídeo compuesto analógico a partir de las señales proporcionadas por el módulo de vídeo digital y una tarjeta de memoria de programa almacena las rutinas que ejecuta la Unidad de Control. Las herramientas de programación, escritas en C sobre el sistema operativo Linux, permiten desarrollar rutinas de preprocesamiento de imágenes, obtener código binario directamente ejecutable en el sistema y descargarlo en la tarjeta de memoria del ACE16k-DS. La descripción del sistema se presenta en la sección 2, mientras que los elementos centrales del ACE16k-DS se detallan posteriormente: las principales características del chip ACE16k en la sección 3 y el núcleo digital en la sección 4. En la sección 5 se describen las herramientas de programación desarrolladas y las conclusiones finales del trabajo en la sección 6. 2 Descripción del Sistema La Fig. 1 ilustra un diagrama de bloques del sistema ACE16k-DS. Una placa de circuito impreso principal contiene los elementos centrales: el ACE16k y su circuitería de polarización, una FPGA Xc4028xl de Xilinx, una tarjeta de memoria de programa, dos memorias de imágenes, una placa con un conversor DA y un mezclador de vídeo, un generador de reloj, pulsadores, un display de 7 segmentos, una EEPROM y diodos LEDs que monitorizan algunas señales del ACE16k. La placa principal incluye además un soporte en el que se coloca un zócalo ajustable sobre el ACE16k; en este zócalo se instala un objetivo tipo C. Tres tornillos de ajuste permiten alinear el objetivo sobre el ACE16k. En la FPGA se han sintetizado cuatro subsistemas. Un divisor de reloj, que genera relojes de 40, 20 y 10 Mhz a partir del generador principal externo de 80 Mhz, un generador de vídeo digital, un selector de memoria de imágenes y una Unidad de Control Programable con un juego de instrucciones específico. La Unidad de Control permite programar y secuenciar instrucciones en el ACE16k, modificar el contenido de algunos registros del generador de vídeo, y sincronizar la frecuencia de salida de imágenes del ACE16k con la frecuencia de salida de imágenes del generador de vídeo. Los programas que ejecuta la Unidad de Control están almacenados en una placa de memoria secundaria conectable a la placa principal. La tarjeta de memoria de programa contiene una memoria RAM estática de 256Kx16bits, baterías y circuitería de sensado y control, cuya función es conectar las líneas de alimentación Fig. 1. Diagrama de bloques del ACE16k-DS de la RAM a las baterías cuando la alimentación externa, suministrada por la placa principal, no está presente. En la memoria estática se pueden almacenar hasta 8 rutinas de preprocesamiento de imágenes. La tarjeta de memoria se conecta primero a un PC y con la ayuda de las herramientas de programación desarrolladas y un puerto de entrada/salida universal se almacena el código binario de las rutinas a ejecutar por el ACE16k-DS en la SRAM. Una vez hecho esto se desconecta la tarjeta del PC y se inserta en el sistema. Después del encendido, la selección de una de las rutinas, entre las 8 disponibles, se realiza secuencialmente usando el pulsador de cambio de programa. El display LED de 7 segmentos monitoriza el número del programa que se está ejecutando en cada momento. Dos memorias RAM estáticas de 512Kbyte se usan para escribir y leer las imágenes procesadas por el ACE16k. El selector de memoria de imágenes conmuta entre las funciones de lectura y escritura de las memorias de manera que la unidad de almacenamiento de imágenes, incluida en la Unidad de Control, tenga siempre accesible, en modo escritura, una de las memorias, para almacenar una nueva imagen procesada por el ACE16k y el generador de vídeo tenga siempre accesible, en modo lectura, la memoria en la que se almacenó la imagen procesada en un momento anterior. Puesto que no todas las rutinas de preprocesamiento de imágenes invierten el mismo tiempo de ejecución, se ha incluido una instrucción especial, en el juego de instrucciones de la Unidad de Control que, por una parte, sincroniza el generador de vídeo y la unidad de almacenamiento de imágenes y, por otra, gobierna el selector de memoria. La circuitería de la tarjeta de vídeo está compuesta básicamente por un convertidor DA de vídeo, un conmutador analógico CMOS, desplazadores de niveles y amplificadores. Estos circuitos mezclan las señales de sincronía y de imagen, producidas por el generador de vídeo digital, y generan vídeo compuesto monocromo estardard PAL. La salida de esta tarjeta se conecta a la entrada de una pequeña pantalla TFT, no incluida en la placa de circuito impreso principal. La configuración de la FPGA se realiza a través de una EEPROM serial, aunque si se desea depurar funciones o añadir nuevos bloques al núcleo digital es posible hacerlo usando un conector JTAG incluido junto a la EEPROM. La placa de circuito impreso principal contiene microinterruptores que permiten cambiar el esquema de configuración de la FPGA, haciendo operativo el conector JTAG cuando es necesario. La Fig. 2 muestra la placa principal del sistema una vez terminada. Fig. 2. Placa principal del ACE16k-DS 3 Descripción del ACE16k El ACE16k está compuesto por los siguientes bloques funcionales: el núcleo central formado por un array de 128x128 celdas elementales junto con un anillo de celdas que lo rodean, que sirven para establecer las condiciones de contorno espaciales para el procesamiento analógico; la circuitería de programación, compuesta por bloques de memoria digitales estáticas donde se almacenan instrucciones y datos; el bloque de entrada/salida que contiene conversores AD y DA y permiten integrar el núcleo central de procesamiento en un entorno completamente digital; bloques de testado y un sistema autónomo y síncrono de direccionamiento de celdas. Cada celda del array incluye las siguientes funciones: sensado óptico programable, procesamiento analógico (esencialmente convoluciones locales), procesamiento digital (operaciones lógicas) y memoria analógica (para almacenar resultados de forma temporal). Los parámetros analógicos de convolución, la circuitería digital lógica de procesamiento y los fotoreceptores se programan con los mismos valores en todas las celdas del array. En una rutina de preprocesamiento de imágenes típica para este chip, los bloques de memoria del ACE16k se escriben por completo con las instrucciones y los datos necesarios para realizar dicha rutina. El orden de almacenamiento no es importante, puesto que las instrucciones y datos son seleccionados (esto es, ejecutados en el array de procesadores analógicos) en un orden que se establece desde el exterior del chip. 4 El Núcleo Digital Como se mencionó anteriormente, el núcleo digital, sintetizado en la FPGA, está compuesto por un divisor de reloj, un generador de vídeo digital, un selector de memoria de imágenes y una Unidad de Control Programable. Además se han añadido registros de entrada/ salida en pipeline para aumentar la velocidad de intercambio de datos entre el ACE16k y la Unidad de Control y entre el selector de memoria y las memorias de imágenes. 4.1 Generador de Vídeo Digital Este sub-bloque se ocupa de la generación de las señales de sincronía e imagen de vídeo. Las señales de sincronía horizontal y vertical se obtienen a partir de la información almacenada en una memoria ROM sintetizada en la FPGA y las señales de imagen a partir del contenido de la SRAM de imagen elegida por el selector de memoria. La Unidad de Control tiene acceso a un registro interno del generador de vídeo (que se usa para cambiar de vídeo normal a vídeo inverso) y a la información de sincronía (que permite a la Unidad de Control sincronizar la frecuencia de salida de imágenes de ACE16k con la frecuencia de salida de imágenes del generador). 4.2 Unidad de Control La Unidad de Control interactúa con el ACE16k, así como con la memoria de programa, las memorias de imágenes, el selector de memoria, el generador de vídeo digital, los pulsadores de reset y de cambio de programa y el display de 7 segmentos. El juego de instrucciones específico que ejecuta está diseñado para controlar todas las unidades a la que está conectada y hacer sencilla la programación del sistema. Ha sido completamente diseñada en VHDL sintetizable y se ha realizado un testado post-síntesis exhaustivo con ayuda de las herramientas de programación desarrolladas como parte del ACE16k-DS. La Unidad de Control tiene las siguientes características: • Dispone de una unidad de búsqueda de instrucciones, otra de decodificación, optimizada para la decodificación rápida de las instrucciones que secuencian operaciones en el ACE16k y dos unidades de ejecución que permiten la realización en paralelo de procesos de descarga y escritura de imágenes. • Las instrucciones y los datos residen en la misma memoria, no existe separación estricta entre memoria de instrucciones y de datos. • Usa el formato big endian. • Sólo acepta una línea de interrupción de hardware: el pulsador de cambio de programa, que se comprueba durante la búsqueda de cada nueva instrucción. Juego de instrucciones de la Unidad de Control. El juego de instrucciones de la Unidad de Control se puede clasificar en tres grupos: • Instrucciones de control y programación del ACE16k. Estas instrucciones se usan para programar el ACE16k, secuenciar instrucciones previamente almacenadas en su memoria y descargar imágenes. La Unidad de Control está diseñada para decodificar las instrucciones que secuencian las operaciones del ACE16k más rápido que cualquier otra, con el fin de incrementar el rendimiento de las rutinas de preprocesamiento de imágenes. • Instrucciones de Control de flujo de ejecución. Estas incluyen llamadas a subrutinas saltos incondicionales y bucles anidados. • Instrucciones relacionadas con la generación de imágenes de vídeo. Permiten invertir la señal de vídeo y sincronizar la salida de imágenes del ACE16k con la del generador de vídeo. 5 Herramientas de Programación Las herramientas de programación, ensamblador, cargador y grabador de memoria, escritas en C sobre el sistema operativo Linux, han sido desarrolladas para hacer posible la programación y depuración de rutinas para el ACE16k-DS y para facilitar el testado postsíntesis de su núcleo digital. 5.1 Ensamblador El ensamblador genera tres ficheros distintos a partir del código fuente de entrada. Es un ensamblador de dos pasadas; en la primera crea la tabla de símbolos y en la segunda usa la tabla de símbolos y el resto del código fuente para generar tres ficheros de salida codificados en hexadecimal, formato de impresión de listado (PRN) y código VHDL comportamental. El analizador de código del ensamblador detecta errores de programación en la segunda pasada, cuando ya está creada la tabla de símbolos. Las características principales del ensamblador son las siguientes: • Permite al usuario asignar nombres a posiciones de memoria y permite el uso de comentarios en el código fuente. • Ordena al cargador almacenar los programas en cada uno de los 8 bloques de memoria de acuerdo con las preferencias del programador. • Detecta 9 tipos de errores comunes. • Genera código hexadecimal que representa el contenido de la memoria de programa y código PRN para tareas de depuración. • Genera un fichero VHDL comportamental de toda la circuitería del sistema excluyendo el núcleo digital. En este fichero la memoria de programa contiene el código binario correspondiente al código fuente de entrada del ensamblador, de esta manera es posible realizar simulaciones post-síntesis de los bloques de circuito sintetizados en la FPGA. 5.2 Cargador y Grabador de Memoria El cargador genera código binario directamente ejecutable por el sistema a partir del código hexadecimal que produce el ensamblador. El programa grabador de memoria controla el puerto de entrada/salida de propósito general que escribe y verifica el código binario en la tarjeta de memoria de programa del sistema, además comprueba la carga de las baterías de salvaguarda. 6 Conclusiones Se ha presentado un sistema autónomo programable para el preprocesamiento de imágenes en tiempo real basado en elementos de hardware y software de propósito específico: un chip de procesadores analógicos masivamente paralelos, un núcleo digital programable sintetizado en un circuito integrado de lógica reconfigurable y un paquete de herramientas de programación desarrollado para este sistema. La naturaleza flexible del diseño del ACE16k-DS lo deja abierto a mejoras arquitecturales y funcionales tales como la inclusión de memoria caché, etapas de pipeline en la secuencia búsqueda-decodificación- ejecución de instrucciones y una ampliación en el repertorio de instrucciones de la Unidad de Control para tareas de postprocesado de imágenes, toma de decisiones y actuación Agradecimientos Los autores agradecen a Carlos Jesús Jiménez Fernández y a José Miguel Mora Gutiérrez la dedicación, ayuda e interés prestados en la configuración y uso de las herramientas de síntesis digital y sus consejos y orientaciones para explotar los recursos de las FPGAs de Xilinx. Este trabajo ha sido financiado parcialmente por los proyectos IST2001 – 38097 (LOCUST), TIC2003 – 09817- C02 – 01 (VISTA), y ONR-NICOP N000140210884. Referencias 1. R. Domínguez-Castro, S. Espejo, A. Rodríguez-Vázquez, R. Carmona, P. Foldesy, A. Zarándy, P. Szolgay, T. Sziranyi, and T. Roska: A 0.8µm CMOS programmable mixed-signal focal-plane array processor with on-chip binary imaging and instructions storage, IEEE J. Solid-State Circuits, vol. 32, (1997) 1013–1026 2. G. Liñán, S. Espejo, R. Domínguez-Castro, and A. Rodríguez-Vázquez: ACE4k: An analog I/O 64x64 visual microprocessor chip with 7-bit analog accuracy, Int. J. Circuit Theory Applicat., vol. 30, no. 2/3 (2002) 89–116 3. T. Roska and A. Rodríguez-Vázquez (Editores): Towards the Visual Microprocessor, John Wiley & Sons Ltd. (2000) 4. Angel Rodríguez-Vázquez, Gustavo Liñán-Cembrano, L. Carranza, Elisenda RocaMoreno, Ricardo Carmona-Galán, Francisco Jiménez-Garrido, Rafael Domínguez-Castro, and Servando Espejo Meana: ACE16k: The Third Generation of Mixed-Signal SIMD-CNN ACE Chips Toward VSoCs, IEEE Transactions on Circuits and Systems—I: Regular Papers, vol. 51, no. 5 (2004) 851-863 5. Akos Zarandy and Csaba Rekeczky: Bi-i: a Standalone Cellular Vision System, Part I. Architecture and Ultra High Frame Rate Processing Examples, aceptado para ser presentado en la CNNA 2004, Budapest (Hungría), 22-24 de Julio de 2004. Se publicará en los Proceedings de la CNNA 2004.