UNIVERSIDAD AUTÓNOMA DE ZACATECAS IMPLEMENTACIÓN DE UN PROCESADOR ELEMENTAL EN UN DISPOSITIVO LÓGICO PROGRAMABLE Lizbet Jaquelene González Carrillo - Arturo Aref Rico Sabag. Tesis de Licenciatura presentada a la Unidad Académica de Ingeniería Eléctrica de acuerdo a los requerimientos de la Universidad para obtener el título de INGENIERO EN COMUNICACIONES Y ELECTRÓNICA Directores de tesis: M.I.A. Oscar Osvaldo Ordaz García y Dr. Jose Guadalupe Arceo Olague UNIDAD ACADÉMICA DE INGENIERÍA ELÉCTRICA Zacatecas, Zac., 21 de junio de 2010 APROBACIÓN DE TEMA DE TESIS DE LICENCIATURA Lizbet Jaquelene González Carrillo - Arturo Aref Rico Sabag. PRESENTES De acuerdo a sus solicitudes de tema de Tesis de Licenciatura del Programa de Ingeniería Eléctrica, con fecha 28 de Mayo de 2009, se acuerda asignarles el tema titulado: IMPLEMENTACIÓN DE UN PROCESADOR ELEMENTAL EN UN DISPOSITIVO LÓGICO PROGRAMABLE Se nombran revisores de Tesis a los profesores M.I.A. Oscar Osvaldo Ordaz García y Dr. Jose Guadalupe Arceo Olague, notificándoles a ustedes que disponen de un plazo máximo de seis meses, a partir de la presente fecha, para la conclusión del documento final debidamente revisado. Atentamente Zacatecas, Zac., 28 de Junio de 2009 Dr. José Ismael de la Rosa Vargas Director de la Unidad Académica de Ingeniería Eléctrica AUTORIZACIÓN DE IMPRESIÓN DE TESIS DE LICENCIATURA Lizbet Jaquelene González Carrillo - Arturo Aref Rico Sabag. PRESENTES La Dirección de la Unidad Académica de Ingeniería Eléctrica les notifica a ustedes que la Comisión Revisora de su documento de Tesis de Licenciatura, integrada por los profesores M.I.A. Oscar Osvaldo Ordaz García y Dr. Jose Guadalupe Arceo Olague, ha concluido la revisión del mismo y ha dado la aprobación para su respectiva presentación. Por lo anterior, se les autoriza a ustedes la impresión definitiva de su documento de Tesis para la respectiva defensa en el Examen Profesional, a presentarse el 21 de junio de 2010 Atentamente Zacatecas, Zac., 7 de junio de 2010 Dr. José Ismael de la Rosa Vargas Director de la Unidad Académica de Ingeniería Eléctrica APROBACIÓN DE EXAMEN PROFESIONAL Se aprueba por unanimidad el Examen Profesional de Lizbet Jaquelene González Carrillo - Arturo Aref Rico Sabag., presentado el 21 de junio de 2010 para obtener el título de: INGENIERO EN COMUNICACIONES Y ELECTRÓNICA Jurado: Presidente: M.I.A. Oscar Osvaldo Ordaz García Primer vocal: Dr. Jose Guadalupe Arceo Olague Segundo vocal: M. en C.N. Alejandro Chacon Ruiz Tercer vocal: M. en A. Manuel Haro Macías Cuarto vocal: Ing. Amando Castañeda Carrillo RESUMEN En esta tesis se realiza una investigación sobre la implementación de arquitecturas paralelas en un dispositivo lógico programable, estas arquitecturas son usadas en microprocesadores para el procesamiento de imágenes, el análisis se enfoca en el Procesador Elemental (PE) del chip Xetal fabricado por Philips. Dentro de su arquitectura el funcionamiento paralelo de los procesadores es de taxonomía SIMD (Single Instruction Multiple Data), en la cual se encuentra el PE del microprocesador Xetal. Se investigan las instrucciones de la ALU (Unidad Aritmética Lógica) que utiliza el PE. Estas instrucciones se desarrollan sobre un FPGA que es un dispositivo lógico programable en el cual se pueden realizar diseños en diferentes lenguajes descriptivos de hardware. La arquitectura y el set de instrucciones del PE se describen en los lenguajes de descripción de hardware Handel-C y VHDL. El diseño descriptivo se exportó utilizando la herramienta Xilinx ISE. Esta herramienta sintetiza los lenguajes descriptivos para implementar los circuitos digitales sobre un FPGA. Los resultados obtenidos de la implementación se establecen en términos de la cantidad de elementos utilizados, como son las compuertas lógicas y el conjunto de recursos usados en el FPGA requeridos para la implementación del hardware. Finalmente se muestran resultados de los lenguajes descriptivos Handel-C y VHDL en las versiones 9.1i y 11.1 de Xilinx ISE. v Agradecimientos Agradecemos la valiosa colaboración del M.I.A Oscar Osvaldo Ordaz García y el Dr. Jose Guadalupe Arceo Olague de la Unidad Académica de Ingeniería Eléctrica de la Universidad Autónoma de Zacatecas, Mexico. Gracias por sus amables recomendaciones en el desarrollo del presente trabajo. Los datos proporcionados fueron clave para las conclusiones logradas. Nuestro infinito agradecimiento a la directiva de los profesores por permitir el uso de su equipo especializado para la verificación de pruebas experimentales. Y finalmente un infinito agradecimiento a cada miembro de la familia González Carrillo y Rico Sabag por su gran apoyo. vi Contenido General Pag. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv Lista de figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Lista de tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii 1 INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 1.2 1.3 . . . . . . 1 4 4 4 5 5 PARALELISMO Y ARQUITECTURAS PARALELAS . . . . . . . . . . . . . . 7 1.4 1.5 2 2.1 2.2 2.3 3 Antecedentes . . . . . . . . Hipótesis . . . . . . . . . . Objetivo General . . . . . . 1.3.1 Objetivos Específicos Limitaciones . . . . . . . . Estructura de la Tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos De Paralelismo . . . . . . . . . . . 2.1.1 Paralelismo a Nivel de Bit. . . . . 2.1.2 Paralelismo a Nivel de Instrucción 2.1.3 Paralelismo de Datos. . . . . . . . 2.1.4 Paralelismo de Tarea. . . . . . . . Taxonomías de Flynn . . . . . . . . . . . Arquitecturas Sistólicas . . . . . . . . . . 2.3.1 Características . . . . . . . . . . 2.3.2 Tipos . . . . . . . . . . . . . . . 2.3.3 Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 8 9 9 9 14 16 17 18 MICROPROCESADOR XETAL . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 3.2 Introducción a SIMD . . . . 3.1.1 Modelos de Memoria Arquitectura del Xetal . . . . 3.2.1 Descripción General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 22 23 26 vii Pag. 3.3 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 30 31 32 33 34 34 MATERIALES Y MÉTODOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1 4.2 4.3 4.4 4.5 5 3.2.2 Señal de Entrada. . . . . . . . . . . . . 3.2.3 Arreglo Lineal de Procesadores. (LPA) 3.2.4 Líneas de Memoria (MU). . . . . . . . 3.2.5 Procesador de Control Global (GCP). . 3.2.6 Interfase I2C. . . . . . . . . . . . . . . 3.2.7 Procesador Serie (SP). . . . . . . . . . Instrucciones Usadas por el Xetal. . . . . . . . Lenguajes de Descripción de Hardware . 4.1.1 Handel-C . . . . . . . . . . . . . 4.1.2 Software de Diseño Celoxica . . . 4.1.3 VHDL . . . . . . . . . . . . . . 4.1.4 Software de Diseño Aldec . . . . Software de Desarrollo Xilinx . . . . . . FPGA . . . . . . . . . . . . . . . . . . . 4.3.1 Tarjeta . . . . . . . . . . . . . . Software Adept . . . . . . . . . . . . . . Metodología y Diseño . . . . . . . . . . . 4.5.1 Desarrollo en Handel-C y VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 38 41 42 46 47 50 50 55 56 58 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.1 5.2 5.3 Resultados para el caso de Handel-C . . . . . . . . . 5.1.1 Resultados obtenidos en Xilinx versión 9.1i. . 5.1.2 Resultados obtenidos en Xilinx versión 11.1 . Resultados para el caso de VHDL . . . . . . . . . . 5.2.1 Resultados obtenidos en Xilinx versión 9.1i. . 5.2.2 Resultados obtenidos en Xilinx versión 11.1. Comparación de Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 64 66 68 68 71 74 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Apéndice Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 viii Lista de figuras Figura Pag. 2.1 Taxonomía de Flynn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 Clasificación de las Arquitecturas Paralelas. . . . . . . . . . . . . . . . . . . . . . 11 2.3 Clasificación de Alto Nivel para Arquitecturas de Computadoras Paralelas. . . . . 13 2.4 Clasificación de Flynn Ampliada . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Diagrama de Bloques de; a) Arquitectura Monoprocesador y b) Matriz Sistólica Lineal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6 Estructura de un Arreglo Sistólico. . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7 Procesamiento de Datos en un Arreglo Sistólico. . . . . . . . . . . . . . . . . . . 16 2.8 Algunas Topologías de Arreglos Sistólicos. . . . . . . . . . . . . . . . . . . . . . 17 3.1 Ejemplo de la Operación de Incremento en SIMD. . . . . . . . . . . . . . . . . . 21 3.2 Ejemplo de Desplazamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 Descripción del Microprocesador Xetal. . . . . . . . . . . . . . . . . . . . . . . . 25 3.4 Arquitectura del Xetal (Diagrama de Bloques del Xetal). . . . . . . . . . . . . . . 27 3.5 Patrón RGB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.6 Formato de Imagen VGA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.7 Arreglo Lineal de Procesadores en el Xetal. . . . . . . . . . . . . . . . . . . . . . 31 3.8 Procesador de Control Global. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.9 Detalles del Registro de Control (Registro 27). . . . . . . . . . . . . . . . . . . . 33 ix Figura Pag. 4.1 Áreas de Trabajo del DK de Celoxica. . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2 Flujo de Diseño Mediante HDL’s. . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3 Áreas de Trabajo del Active-HDL 8.2 de ALDEC. . . . . . . . . . . . . . . . . . 46 4.4 Distintas Áreas de Trabajo del Paquete Xilinx-ISE 8.2i. . . . . . . . . . . . . . . . 47 4.5 Propiedades del Proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.6 Diagrama de Bloques de la Placa con FPGA. . . . . . . . . . . . . . . . . . . . . 51 4.7 Foto de la Placa BASYS, que Contiene un FPGA Spartan XC3S250E-TQ144 de Xilinx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.8 Circuito de Poder en la Basys . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.9 Localizaciones de Programación para el Circuito de la Basys . . . . . . . . . . . . 53 4.10 Programación del Circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.11 Osciladores en la Tarjeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.12 Circuito de Entradas y Salidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.13 Diagrama del Diseño para la Descripción del PE. . . . . . . . . . . . . . . . . . . 57 4.14 Diagrama de Interruptores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.15 Funciones del Display. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.16 Funciones de los Botones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.17 Significado de los Leds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.1 "Static Timing Report" en Xilinx version 9.1i de Handel-C. . . . . . . . . . . . . 64 5.2 Resumen de la Síntesis del Diseño en Xilinx version 9.1i de Handel-C. . . . . . . 65 5.3 Reporte de Retardos del Place & Route en Xilinx version 9.1i de Handel-C. . . . . 65 5.4 "Static Timing Report" en Xilinx version 11.1 de Handel-C. . . . . . . . . . . . . 66 5.5 Resumen de la Síntesis del Diseño en Xilinx version 11.1 de Handel-C. . . . . . . 67 x Figura Pag. 5.6 Reporte de Retardos del Place & Route en Xilinx version 11.1 de Handel-C. . . . . 67 5.7 "Static Timing Report" en Xilinx version 9.1i. de VHDL. . . . . . . . . . . . . . . 68 5.8 Resumen de la Síntesis del Diseño en Xilinx version 9.1i. de VHDL. . . . . . . . 69 5.9 Reporte de Retardos del Place & Route en Xilinx version 9.1i. de VHDL. . . . . . 70 5.10 Estimación de Tiempos de la Síntesis en Xilinx version 9.1i de VHDL. . . . . . . 70 5.11 "Static Timing Report" en Xilinx version 9.1i. de VHDL. . . . . . . . . . . . . . . 71 5.12 Resumen de la Síntesis del Diseño en Xilinx version 11.1 de VHDL. . . . . . . . . 72 5.13 Reporte de Retardos del Place & Route en Xilinx version 11.1 de VHDL. . . . . . 73 5.14 Estimación de Tiempos de la Síntesis en Xilinx version 11.1 de VHDL. . . . . . . 73 5.15 Sistemático de el Diseño en VHDL . . . . . . . . . . . . . . . . . . . . . . . . . 76 xi Lista de tablas Tabla Pag. 2.1 Algoritmos para Creación de Procesadores Sistólicos en 3 Ramas Fundamentales. 19 3.1 Set de Instrucciones del LPA del Xetal. [5] . . . . . . . . . . . . . . . . . . . . . 36 4.1 Funciones del Display. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2 Función de los Botones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.3 Significado de los Leds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.1 Tabla de Resultados Obtenidos en el Diseño de Handel-C y VHDL. . . . . . . . . 75 xii Nomenclatura GOP S Giga-operaciones por segundo Hz Hertz Kbit Kilobits KHz Kilohertz M bps Megabits por segundo mm2 Milímetros cuadrados nm Nanometros mW s Miliwatts V Voltaje W Watts xiii ACCU Acumulador ASIC Application-specific Integrated Circuit AP Is Application Programming Interfaces ADC Analog-to-Digital Converter COM A Cache Only Memory Architecture CP U Central Processing Unit CCD Charge-Coupled Device CF A Color Filter Array CM OS Complementary Metal Oxide Semiconductor CSP Communicating Sequential Processes DP U 0 s Data Process Units EDA Electronic Design Automation F P GA Field Programmable Gate Array F SM Finite State Machine GP U Graphics Processing Unit HDL Hardware Description Language IC Integrated Circuit ESL Electronic System Level ISE Integrated Software Environment LU T Look-up Table xiv LP A Linear Processor Array M IM D Multiple Instruction Multiple Data NUMA Non-Uniform Memory Architecture PE Procesador Elemental SP Procesador Serie GCP Procesador de Control Global P LD Programmable Logic Device RISC Reduced Instruction Set Computer RGB Red, Green y Blue RT L Register Transfer Level SISD Single Instruction Single Data SIM D Single Instruction Multiple Data SRAM Static Random Access Memory AU Unidad Aritmética MU Unidad de Memoria UMA Uniform Memory Architecture V HDL Very High Description Language V LSI Very Large Scale Integration V HSIC Very High Speed Integrated Circuits Y eM aCy Yellow Magenta Cyan Capítulo 1 INTRODUCCIÓN 1.1 Antecedentes Los seres humanos poseemos cinco sentidos, de los cuales la vista es el mas importante, ya que es el sentido humano más perfecto y evolucionado; éste nos permite conocer mediante las impresiones luminosas el volumen, la forma, el color, el tamaño y las demás cualidades de los objetos que nos rodean. Por lo tanto el estudio de la tecnología de formación de visualizaciones en las pantallas (ya sea video cámaras, monitores, etc) tiene una amplia investigación, teniendo en cuenta que las visualizaciones actuales ya se muestran en tiempo real y se basan en las unidades de procesamiento de imágenes, desarrolladas principalmente para procesar datos gráficos en video cámaras y otros dispositivos visuales. El proceso de representar imágenes en tiempo real, es un gran reto, al igual que la detección de rostros ha sido un ámbito de investigación muy activo durante mas de 25 años [29], han surgido nuevas técnicas basadas en esta tecnología. Por medio de estas técnicas se ha podido alcanzar la modificación y ajuste de imágenes en tiempo real. Esto lo podemos observar en la captura de imagen mediante una cámara digital, pues trata de obtener una imagen con la menor cantidad de errores posibles mediante el procesamiento en hardware sin necesidad de un proceso posterior para modificarlas con software, ya que se puede aplicar en diversos campos como la vigilancia, las aplicaciones comerciales y la atención de salud. 2 Con los avances de la tecnología CMOS (Complementary Metal Oxide Semiconductor), un número de aplicaciones en el área de tecnología que eran restringidas al dominio de profesionales y científicos de la computación van gradualmente entrando al dominio del consumidor. Ejemplo típico en el area de procesamiento de video se usa en las aplicaciones de la codificación de video basado en objetos y en el monitoreo o seguimiento de escena. [3] Dentro de las cámaras digitales, Fujifilm tiene la confianza de desarrollar cámaras con un mejor procesamiento en tiempo real; al igual los celulares se han transformado y su fase siguiente es procesar imágenes con mejor calidad. [13] El procesamiento de vídeo es una tarea difícil, que involucra el uso de sistemas de alta eficiencia. [57] Por otra parte, hay una creciente migración de sistemas de vídeo analógico a digital, por el interés que existe en las tecnologías inteligentes para diversas aplicaciones comerciales, industriales o militares. [24] Este tipo de aplicaciones necesitan hardware de propósito específico. [26] Las GPU’s (Graphics Processing Units) no deben menospreciarse, ya que se ha demostrado que sobrepasan en ocasiones la potencia de las CPU’s (Central Processing Units). [61, 54, 27] El Xetal es el nombre de la familia de microprocesadores paralelos masivos desarrollados entre Philips Research y NXP Research, fue concebido en 1999, cuando los investigadores estudiaron las posibilidades de la combinación de un sensor de imagen CMOS con la potencia de procesamiento lógico de imagen. Desde sensores de imagen CMOS contrariamente a los sensores CCD (Charge-coupled Device) pueden ser producidos utilizando el mismo proceso de fabricación de procesadores, ambos pueden ser combinados en un solo IC (Integrated Circuit). Con el sensor de imagen y procesamiento de imágenes combinadas en la misma etapa es esencialmente posible el paralelismo de procesamiento de imágenes hasta el nivel en que cada píxel tiene su lógica de procesamiento de imágenes dedicado. En el diseño del Xetal, el sensor de imagen esta en las capas superiores de el IC, mientras que el procesamiento de imágenes se realiza en las capas inferiores, de modo que los datos de imagen se transfieren de una capa a otra, en lugar de sus patas o alambres externos. El procesamiento de imágenes es un adecuado dominio de forma masiva usando un enfoque de arquitectura paralela SIMD (Single Instruction, Multiple Data). [34] 3 El microprocesador de imágenes resultante fue el Xetal 1, por primera vez en 2001 se fabrica mediante un proceso de 180 nanometros y fue diseñado para ejecutarse en 18 MHz, con 320 PEs y 16 líneas de memoria. Desde cada PE se puede realizar una operación por ciclo de reloj con un rendimiento de velocidad de 5.7 GOPS. Como resultado de ello, combinado con un sensor de imagen CMOS y una resolución de ejecución QVGA de 15 fotogramas por segundo. El Xetal1 podría realizar 5000 operaciones por píxel. Durante las pruebas en relación con el Xetal 1 se logro usar incluso el reloj hasta 38 MHz, más del doble de la especificación original, lo que resulta en un rendimiento de más de 12 GOPS. El rendimiento alcanzado es con un muy bajo consumo de energía (1-2 watts). Pronto se descubrió que con estos niveles de rendimiento es posible hacer mucho más que el procesamiento de imágenes. El equipo de investigación creo demostraciones en las que el Xetal 1 fue capaz de ejecutar algoritmos de vision tales como de reconocimiento de objetos y seguimiento, incluyendo un auto-juego máquina de pinball, procesamiento de video, y control de robots. [41] 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 que influye muchas unidades de procesamiento bajo la supervisión de una unidad de control común. Es decir una unidad de control envía las instrucciones a diferentes unidades de procesamiento. Todos los procesadores reciben la misma instrucción de la unidad de control, pero operan sobre diferentes conjuntos de datos. La misma instrucción es ejecutada de manera síncrona por todas las unidades de procesamiento. Una aplicación SIMD sería cambiar el brillo de una imagen, ya que cada píxel de una imagen consta de tres valores para el brillo de porciones de colores Red, Green y Blue. Los valores a R, G y B se leen de la memoria, un valor agregado (o substraído) de ellos y los valores resultantes se escriben de nuevo en la memoria. Un modulo lógico programable FPGA (Field Programmable Gate Array) es un dispositivo semiconductor que contiene bloques de lógica cuya interconexión y funcionalidad se puede programar. La lógica programable puede hacer desde funciones tan sencillas como las llevadas 4 a cabo por una puerta lógica o un sistema combinacional hasta complejos sistemas en un chip. [18] Los FPGAs se programan utilizando una lógica de circuito o de un código fuente en un HDL para especificar la forma en que el chip funcionará, contienen componentes de lógica programable llamados "lógica de bloques" y una jerarquía de interconexiones reconfigurables que permiten a los bloques estar interconectados. La lógica de los bloques se puede configurar para realizar complejas funciones combinadas o simple lógica de compuertas como AND y XOR. [19] Las aplicaciones de FPGAs incluyen procesamiento de señales digitales, radio definido por software, aeroespacial, defensa, sistemas, ASIC prototipos, imágenes médicas, visión por ordenador, reconocimiento de voz, criptografía, bioinformática, emulación de hardware, radioastronomía y una gama cada vez mayor de otras zonas. [62] El conocimiento en la arquitectura de cualquier procesador es fundamental en el area de desarrollo de electrónica y computación, esto es fundamental también para comprender de la mejor manera el proceso de las diferentes aplicaciones que se realizan con los procesadores, un análisis inicial de la arquitectura es necesario para lograr pruebas eficientes para su funcionamiento. 1.2 Hipótesis La arquitectura de un Procesador Elemental del Xetal puede ser implementada en un FPGA, además de que puede ser desarrollada en los lenguajes de descripción de Handel-C y VHDL, con diferencias en la utilización de recursos en el diseño. 1.3 Objetivo General Conocer el funcionamiento y la arquitectura del PE del Xetal e implementarlo en un FPGA. 1.3.1 Objetivos Específicos • Conocer la tecnología de integración y los Parámetros eléctricos del Xetal. 5 • Comprender el funcionamiento del Procesador Elemental, del Arreglo de Procesadores Lineales y de la Unidad de Memoria del Xetal. • Comprender el proceso de señales en el Procesador de Control Global y la Unidad Aritmética. • Comprender y utilizar las herramientas necesarias para la implementación, como el software y la tarjeta de desarrollo. • Conocer los recursos utilizados de los diseños en Handel-C y VHDL. 1.4 Limitaciones La propuesta de la investigación, plantea el conocimiento de la arquitectura del Procesador Elemental del Xetal, se restringe a la literatura disponible y facilitada por el fabricante, con esto también al desarrollo físico descrito en Handel-C y VHDL, esta propuesta no se enfoca en la generación de fotografía, ni de procesamiento de video, se enfocara en la organización de la arquitectura del Procesador Elemental del Xetal para la implementación en el FPGA. La simulación y descripción estarán restringidas al software disponible. 1.5 Estructura de la Tesis La tesis esta organizada de la siguiente manera: En el capitulo 1 se da una introducción en la cual se habla de los antecedentes del microprocesador Xetal, procesamiento de imágenes y las plataformas de diseño. Se incluye la hipótesis, los objetivos y las limitaciones. En el capitulo 2 se da una introducción al paralelismo y se muestran los tipos ya sea, a nivel bit, tarea, instrucción y dato. También se introducen las taxonomías de Flynn además de otras, donde se enfoca en la sistólica que muestra las características, tipos y aplicaciones. En el capitulo 3 se comienza con el microprocesador Xetal en el cual se introduce al SIMD y a los modelos de memoria para el análisis, después se describe cada parte del procesador finalizando con su programación. En el capitulo 4 se habla de los materiales y métodos para la implementación del Procesador Elemental en el FPGA, como son los lenguajes de descripción de hardware, 6 Handel-C con su software de diseño Celoxica, VHDL con su software de diseño Aldec y el software de desarrollo Xilinx ISE para su implementación incluyendo la tarjeta utilizada. Además se comenzó con el diseño y la implementación del PE del chip Xetal en el FPGA con los lenguajes descriptivos Handel-C y VHDL, dentro de esta sección se explica primeramente la descripción de Handel-C posteriormente la de VHDL. En el capitulo 5 se muestran los resultados del diseño de ambos lenguajes. Finalmente se contiene las conclusiones. Capítulo 2 PARALELISMO Y ARQUITECTURAS PARALELAS La computación paralela es una forma de computación en la que muchos cálculos se llevan a cabo simultáneamente, [7] trabajando bajo el principio de que "grandes problemas pueden ser divididos en pequeños", entonces son resueltos concurrentemente ("en paralelo"). Hay varias y distintas formas de computación paralela: a nivel bit, instrucción, de datos y de tarea. El paralelismo se emplea en computación de alto rendimiento, pero el interés ha crecido debido a las limitaciones físicas en la ampliación de frecuencia. [5] El consumo de energía de las computadoras se ha convertido en una preocupación en los últimos años, [11] la computación paralela se ha colocado como el paradigma dominante de las arquitecturas de computadoras, principalmente en forma de procesadores multi-núcleo. [10] 2.1 Tipos De Paralelismo La computación paralela puede clasificarse de acuerdo con el nivel en que el hardware soporta el paralelismo; como computadoras con multi-núcleo y multi-procesador con múltiples PE’s en una sola máquina; mientras que clúster y la computación multiusuario utilizan múltiples computadoras para trabajar en la misma tarea. En ocasiones especializadas arquitecturas de computadoras en paralelo se usan junto con procesadores tradicionales, para acelerar tareas específicas. La programación paralela de computadoras es más difícil de realizar que la de 8 tipo secuencial, [49] porque introducen nuevas clases de problemas al software, los más comunes son las condiciones de "ejecución"; la comunicación y la sincronización entre diferentes sub-tareas son uno de los mayores obstáculos para obtener programas paralelos con buenos resultados. 2.1.1 Paralelismo a Nivel de Bit. Con la llegada de la VLSI la tecnología de fabricación de los chips de computadoras para la década de los 70’s y hasta aproximadamente 1986. El aumento de la velocidad en la arquitectura de computadoras fue impulsada, duplicando el tamaño de palabra ya que la cantidad de información por ciclo, la puede manipular el procesador. [17] El aumento en el tamaño de la palabra reduce el número de instrucciones que el procesador puede ejecutar para realizar una operación sobre las variables, cuyo tamaño es mayor a la longitud de la palabra. Por ejemplo, un procesador de 8 bits debe añadir dos enteros para ejecutar instrucciones de 16 bits, en primer lugar el procesador debe insertar los 8 bits de menor orden de cada entero usando la instrucción de suma, después, agregar los 8 bits de orden superior utilizando una instrucción suma con acarreo y el bit de acarreo de la suma de menor orden; por lo tanto, un procesador de 8 bits requiere dos instrucciones más para completar una sola operación, y un procesador de 16 bits sería capaz de completar la operación con una sola instrucción. Históricamente, microprocesadores de 4 bits fueron sustituidos por otros de 8 bits, y luego de 16 bits, así sucesivamente hasta que ésta tendencia termino con la introducción de microprocesadores de 32 bits, los que han sido usados en computación de propósito general durante dos décadas. Hace pocos años (dc. 2003-2004), con la llegada de arquitecturas "x86-64", han sido creados procesadores de 64 bits. 2.1.2 Paralelismo a Nivel de Instrucción El paralelismo a nivel instrucción es cuando un programa tiene un flujo de instrucciones, que se ejecutan por un procesador. Estas instrucciones pueden estar combinadas en grupos para ejecutarse en paralelo, sin cambiar el resultado del programa. Los avances en paralelismo a nivel instrucción dominaron la arquitectura de computadoras entre los 80’s y los 90’s. [17] 9 Modernos procesadores tienen instrucciones interconectadas en multi-etapas. Cada etapa de la instrucción corresponde a una acción diferente que el procesador realiza en esa fase, un procesador con N etapas, tiene un máximo de N instrucciones diferentes en las distintas etapas del funcionamiento. Un ejemplo de este tipo es un procesador RISC con cinco etapas, la instrucción: extraer, decodificar, ejecutar, acceso a memoria y escribir. El procesador Pentium 4 tiene 35 etapas. [48] Además del paralelismo a nivel instrucción, algunos procesadores pueden realizar más de una instrucción a la vez; a estos se les llama procesadores superescalares. 2.1.3 Paralelismo de Datos. El paralelismo de datos es inherente en los ciclos del programa; se enfoca en la distribución de datos a través de diferentes nodos de cálculo para ser procesados en paralelo. "La paralelización de los ciclos frecuentemente guía a similares (no forzosamente idénticas) secuencias de operaciones o funciones, que se realizan sobre elementos de una gran estructura de datos." [17] En aplicaciones científicas y de ingeniería se realiza paralelismo de datos. 2.1.4 Paralelismo de Tarea. El paralelismo de tarea, es la característica de un programa paralelo en donde "diferentes cálculos pueden ser realizados en conjuntos de datos iguales o distintos", [17] es usado en la programación concurrente que consiste en asignar distintas tareas a cada uno de los procesadores de un sistema de cómputo. En consecuencia, cada procesador efectuará su propia secuencia de operaciones. Lo que contrasta con el paralelismo de datos, donde el mismo cálculo es realizado sobre conjuntos de datos iguales o distintos. [17] 2.2 Taxonomías de Flynn Michael J. Flynn creo un sistema de clasificación para computadoras, programas en paralelo y secuenciales, conocido como taxonomía de Flynn; ésta se basa en atender el flujo de datos e instrucciones en un sistema. Un flujo de instrucciones es el conjunto de rutinas secuenciales que son ejecutadas por un procesador y una serie de datos es el flujo secuencial requerido 10 por las instrucciones. Flynn clasifico los programas y las computadoras que funcionan usando un conjunto simple o múltiple de instrucciones y si estas instrucciones usan un conjunto simple o múltiple de datos, en base a esto proponen cuatro categorías: La clasificación SISD equivalente a un programa puramente secuencial. La clasificación SIMD es similar a repetir la misma operación en un conjunto de datos; (realizado frecuentemente en aplicaciones de procesamiento de señales). MISD (Multiple Data Single Instruction) es raramente usada. Las arquitecturas de computadoras para realizar este tipo de operaciones han sido llamadas arreglos sistólicos. El MIMD (Multiple Data Multiple Instruction) es una clasificación común en programas paralelos. Según David A. Patterson y John L. Hennessy "en la actualidad, algunas máquinas son combinaciones de estas categorías, ya que esta clasificación es usada ampliamente." [49] Figura 2.1 Taxonomía de Flynn. 11 La Figura 2.1 muestra la taxonomía de Flynn clasificada por flujos de instrucciones y datos, desde UC = Unidad de Control, UP = Unidad de Procesamiento, MU = Unidad de Memoria, PE = Procesador Elemental, ML = Memoria Local, FI = Flujo de Instrucciones, FD = Flujo de datos. La taxonomía de Flynn ha funcionado de buena forma, pero no para clasificar varias computadoras modernas; los avances en tecnología y diferentes topologías, han realizado sistemas no fáciles de clasificar, por ejemplo, los procesadores vectoriales no tan fácilmente encajan en la clasificación mencionada, ni tampoco las arquitecturas hibridas; por esto se han propuesto clasificaciones, como la mostrada en la Figura 2.2, en donde los tipos SIMD y MIMD de Flynn se suelen conservar. Figura 2.2 Clasificación de las Arquitecturas Paralelas. La Figura 2.2 es una taxonomía ampliada que incluye avances en arquitecturas de computadoras de los últimos años, pero no pretende ser una caracterización completa de las arquitecturas paralelas existentes. [47] Como se puede observar, los tipos MIMD pueden ser subdivididos en multiprocesadores, multicomputadoras, multi-multiprocesadores y máquinas de flujo de datos. Los multiprocesadores pueden ser subdivididos en NUMA, UMA y COMA 12 según el modelo de memoria compartida. El tipo SIMD estaría con los procesadores matriciales y el MISD se subdividiría en procesadores vectoriales y en arreglos sistólicos. Se han añadido dos tipos más que son el híbrido y los de aplicación específica. [47] La Figura 2.3 es otra clasificación, donde se observa a los procesadores vectoriales incluidos como arquitecturas paralelas, por mostrar concurrencia substancial en la ejecución aritmética y además pueden manejar cientos de elementos de vectores en forma paralela, esto no se ajusta a la clasificación de Flynn debido a que, si se consideran SIMD carecen de procesadores que ejecutan la misma instrucción en pasos delineados, y si se clasificaran en MIMD les falta la autonomía asincrónica de esta categoría. Para proveer una taxonomía satisfactoria hay que modular una definición de arquitecturas paralelas; esta debe incluir computadoras que la clasificación de Flynn no puede presentar y excluir las de paralelismo de bajo nivel. Por tanto, una arquitectura paralela facilita un claro marco de referencia de alto nivel para el desarrollo de soluciones de programación paralela, logrado mediante múltiples procesadores (simples o complejos) que cooperan para resolver problemas a través de ejecución concurrente. Esta taxonomía utiliza cualidades de alto nivel para delinear los principales planteamientos sobre arquitecturas de computadoras paralelas y para mostrar que estos planteamientos definen una alternativa coherente. Esta taxonomía no intenta suplantar a aquellas construidas con un mayor esfuerzo formal; tales taxonomías proveen subcategorías que reflejan alteraciones de las características de las arquitecturas y también comprenden las características de bajo nivel. Para tratar de apilar la taxonomía de Flynn existen otras clasificaciones de arquitecturas paralelas, como la que se presenta en la Figura 2.4. Como está en las clasificaciones anteriores, se añaden las arquitecturas sistólicas, ya sea como arreglos sistólicos o arreglos de procesadores sistólicos; lo que permite ser un tema de importancia para poder desarrollar investigación. En el siguiente apartado se consideran las arquitecturas sistólicas. 13 Figura 2.3 Clasificación de Alto Nivel para Arquitecturas de Computadoras Paralelas. Figura 2.4 Clasificación de Flynn Ampliada 14 2.3 Arquitecturas Sistólicas En arquitectura de computadoras, un arreglo sistólico es una estructura interconectada por unidades de procesamiento llamadas celdas. Esta es una forma especial de computación paralela, donde las celdas (es decir, procesadores), calculan y almacenan datos de manera independiente uno de otro. En general un arreglo sistólico esta compuesto por una matriz con filas de unidades de procesamiento de datos llamadas celdas. Las DPU’s (Data Process Units) son similares a las CPU’s. Cada celda comparte la información con sus vecinos, inmediatamente después de su procesamiento. Existen formas diferentes para definir los arreglos sistólicos. La primera definición menciona que un arreglo sistólico es una red interconectada de procesadores, en la cual dichos procesadores se pueden colocar en puntos de una matriz finita, de tal manera que se puede ver desde dos perspectivas la topológica y la computacional. [55] La topológica menciona: si existe una relación del procesador a la localización I, hacia el procesador en la localización (I + d) para cierta d, entonces existe una relación para cada I dentro de la matriz. La Computacional argumenta: si un procesador recibe un valor en la relación de entrada en un tiempo t, entonces recibe un valor en el tiempo (t + ∆) en la relación de salida correspondiente, donde ∆ es el período de tiempo que es independiente del tamaño de la red, la orientación de la relación y la localización del procesador. [55] La segunda definición comenta que un arreglo sistólico es una red de procesamiento computacional que posee las características de: sincronía, modularidad y regularidad, localidad espacial, repetibilidad y alto paralelismo. [39] El término de arquitectura sistólica fue utilizado por primera vez por H. T. Kung y Charles E. Leiserson, que publicaron el primer documento describiendo arreglos sistólicos en 1978. [37] El termino arreglo sistólico fue introducido en las ciencias computacionales por H. T. Kung en 1982; [38] el cual se basa en la descomposición de un problema en simples PE’s idénticos y localmente conectados sólo con sus vecinos más cercanos. Los PE’s normalmente funcionan de forma sincronía, también hay la posibilidad de que funcionen de manera asíncrona, pero ya no serían arreglos sistólicos propiamente dichos si no arreglos de onda frontal. [56] 15 Los procesadores sistólicos son el resultado de avances en tecnología de semiconductores y en aplicaciones que requieren gran rendimiento. El nombre "systolic" es derivado de la analogía de la circulación sanguínea del cuerpo humano, en el cual el corazón entrega y recibe una gran cantidad de sangre como resultado del bombeo rítmico e ininterrumpido de pequeñas cantidades de ese fluido a través de venas y arterias. En esta analogía el corazón corresponde a la fuente y destino de los datos, como si fuera una memoria global; y la red de venas es equivalente al arreglo de procesadores y sus conexiones. Para apreciar la diferencia entre una arquitectura convencional y una matriz sistólica, la Figura 2.5 presenta ambas arquitecturas en bloques. La arquitectura monoprocesador a), y una matriz sistólica lineal b). Se puede ver que la matriz sistólica lineal reemplaza a un solo PE por un conjunto de PE’s de las mismas características. Dirigiendo así el flujo de datos para obtener un alto rendimiento con menos acceso a memoria. [60] Figura 2.5 Diagrama de Bloques de; a) Arquitectura Monoprocesador y b) Matriz Sistólica Lineal. Un arreglo sistólico consiste en un gran número de PE’s simples e idénticos, los cuales están interconectados únicamente entre procesadores adyacentes (comunicación local) y con los cuales interactúan como se ilustra en la Figura 2.6. Los datos se mueven a una velocidad constante a través del arreglo pasando de un PE al siguiente, y cada uno de los elementos realiza una cierta parte del procesamiento contribuyendo de manera conjunta a la culminación del proceso. Los datos que se reciben en el sistema desde una memoria externa, son pulsados cíclicamente a través de los procesadores antes de regresar a la memoria, como se muestra en la Figura 2.7. La palabra sístole, anatómicamente se refiere a un latido y a un flujo sanguíneo pulsado 16 Figura 2.6 Estructura de un Arreglo Sistólico. por el corazón, lo cual trasladado al dominio de sistemas digitales como sistólico, significa un flujo de información en línea controlado por un pulso de reloj. [25] Figura 2.7 Procesamiento de Datos en un Arreglo Sistólico. 2.3.1 Características Un arreglo sistólico se caracteriza por las siguientes propiedades: • Modularidad. Está integrado por PE’s cuya función está definida en una forma clara y simple. • Regularidad. Está compuesto por módulos o sub-módulos similares. • Interconexión local. Cada PE tiene conexión solo con sus vecinos. 17 • Alto grado de procesamiento en línea. Para arreglos que operan en forma serial, la característica de interconexión opera de una manera natural debido a la propia arquitectura. • Multiprocesamiento sincronizado. Ya que todo el arreglo está bien sincronizado por una señal de reloj, cada Procesador Elemental ejecuta su correspondiente proceso en forma cíclica. 2.3.2 Tipos Los PE’s se colocan en matrices de diferentes tipos, por lo que se pueden formar distintas tipologías de redes sistólicas, que pueden ser en forma lineal, ortogonal o hexagonal, como se muestra en la Figura 2.8. Además, en estos sistemas no son permitidos los flujos de información, por lo que las únicas señales globales son las líneas de alimentación y tierra (Vdd y Gnd), y la señal de sincronización y control que es el reloj (Clk). Mediante las arquitecturas sistólicas se optimizan las operaciones sobre los datos, ya que estos al entrar al arreglo son transferidos de manera armónica por medio de procesadores, que requieren datos para realizar su función, sin ningún requerimiento de memoria local. Los puertos de entrada y salida son los procesadores que se encuentran localizados en la periferia del arreglo y son los únicos que se comunican con la memoria externa, como se ha mostrado en la Figura 2.6. Figura 2.8 Algunas Topologías de Arreglos Sistólicos. 18 Se pueden resumir ciertas ventajas de los sistemas diseñados con esta filosofía en los siguientes puntos: • Altos rendimientos operacionales con moderadas capacidades de memoria. • Control de información sencillo y regular. • Uso de un número reducido de celdas simples y uniformes. • Comunicación local. • Alta velocidad. • Facilidad de construcción. • Expansibilidad y reconfigurabilidad. 2.3.3 Aplicaciones A continuación se enlistan algunas aplicaciones disponibles sobre diferentes diseños de procesadores sistólicos, divididas en tres ramas fundamentales. Como un caso particular de las arquitecturas sistólicas, se puede considerar al Xetal fabricado por Philips, el cual se usó como plataforma inicial de la investigación. 19 Tabla 2.1 Algoritmos para Creación de Procesadores Sistólicos en 3 Ramas Fundamentales. Procesamiento señales/imágenes y de Aritmética de matri- re- ces Aplicaciones No-numéricas conocimiento de patrones Filtros digitales Multiplicación y trian- Estructuras de datos - stacks gulación de matrices Figuras en dos dimensiones Descomposición QR Algoritmos gráficos - clausura transitiva, minimización de árboles de máxima dimensión Transformadas discretas de Fourier Operaciones sobre ma- Conexión de componentes trices dispersas Interpolación Solución de sistemas Reconocimiento del lenguaje lineares y triangulares Alabeo geométrico Programación dinámica Lineamientos de extracción Operaciones sobre bases de datos relacionales Estadísticas de orden Clasificación de distancia mínima Cálculo de covarianza de matrices Coincidencia de patrones (pattern matching) Reconocimiento de patrones sintácticos Procesamiento de señales de radar Detección de curvas Animación de figuras Comparación de imágenes Aritmética sobre arrays Capítulo 3 MICROPROCESADOR XETAL 3.1 Introducción a SIMD En computación, SIMD es una técnica empleada para obtener paralelismo a nivel de datos. El repertorio de instrucciones SIMD consiste en aplicar una misma operación sobre un conjunto de datos. Su organización incluye muchas unidades de procesamiento, manejadas por una unidad de control. Es decir, solo una unidad de control administra las instrucciones para las diferentes unidades de procesamiento. Todos los procesadores reciben la misma instrucción de la unidad de control, pero operan sobre diferentes conjuntos de datos; dicha instrucción se ejecuta de manera síncrona por todas las unidades de procesamiento. El primer SIMD desarrollado ampliamente para videojuegos fue el MMX de Intel con extensiones de la arquitectura x86. Una aplicación usada en SIMD es dónde el mismo valor se agrega o se substrae a un número de datos, una operación para aplicaciones multimedia cuando se cambia el brillo de una imagen. Cada píxel de una imagen consta de tres valores para el brillo de colores: R, G y B. Para cambiar el brillo, los valores del rojo, verde y azul se leen de la memoria, después un valor es agregado o sustraído y los valores resultantes se guardan nuevamente en la memoria. Un procesador de tipo SIMD puede mejorar de dos maneras este proceso. La primera, es que los datos se encuentren en bloques y pueden cargarse varios a la vez, en lugar de una serie de instrucciones para "obtener píxel por píxel"; esto porque un procesador SIMD tiene una instrucción para "obtener un lote de píxeles"; por diferentes razones, lleva menos tiempo que el "obtener" cada píxel de manera individual. Otra ventaja es 21 que sistemas SIMD incluyen instrucciones que pueden aplicarse a todos los datos en una sola operación. En otras palabras, si el sistema SIMD carga hasta ocho datos a la vez, la operación add se aplica a los datos con los 8 valores al mismo tiempo. Las instrucciones SIMD son ampliamente usadas para procesar gráficos en 3D, aunque otras tarjetas gráficas que poseen SIMD han adjudicado esta tarea al CPU. Algunos sistemas incluyen permutación de funciones para reempacar elementos dentro de vectores, haciendo esto útil para el procesamiento y compresión de los datos. También se utilizan en la criptografía. [52, 14, 53] La tendencia de usar GPU’s en computadoras puede acarrear un incremento en el futuro del uso de procesadores SIMD. Xetal es un chip SIMD que trabaja en paralelo, [34] Un procesador SIMD contiene varios PE’s combinados dentro de un LPA. Cada PE realiza la misma operación pero con diferentes datos. Un PE generalmente tiene una AU y una MU. El flujo del programa es controlado por el GCP (Procesador de Control Global) , el cual controla al contador del programa y el paso de instrucciones a cada PE’s del LPA. Para comentar el funcionamiento de un procesador SIMD en la Figura 3.1, se muestra un ejemplo de la instrucción de incremento (INCR). Figura 3.1 Ejemplo de la Operación de Incremento en SIMD. Hay cuatro PE’s en el LPA, cada uno opera con su propia memoria. El GCP envía la instrucción INCR a los cuatro PE’s y el contenido de memoria de los cuatro elementos es incrementado con esa instrucción. En un procesador secuencial, es diferente, pues esto requeriría cuatro instrucciones, ya que cada elemento tiene que ser incrementado por separado. 22 3.1.1 Modelos de Memoria Se pueden mencionar dos modelos de memoria para un procesador SIMD: la memoria distribuida y la compartida. [6] Un procesador SIMD usa memoria distribuida cuando cada PE sólo usa su propia memoria, es decir, si un PE necesita la información en otro PE, realiza una petición al GCP que gestiona la transferencia de información. La ventaja de este tipo de memoria es la facilidad para agregar más memoria y PE’s al microprocesador. La desventaja del modelo distribuido es la cantidad de tiempo que invierte el GCP para gestionar los intercambios de memoria. En el caso del uso de memoria compartida, cada PE comparte su memoria con otros PE’s. Los elementos de memoria de cada PE están interconectados por una red o una unidad de conmutación; esto beneficia al GCP para poder realizar intercambios de memoria. La desventaja de este modelo es la dificultad de agregar más memoria. Existen diferentes formas de clasificar el modelo de memoria compartida, a continuación se describen brevemente los modelos de memoria dependiendo del tipo de conexión, ya sea de forma total o limitada: La memoria compartida con una conexión total es cuando cada PE esta conectado a todos los demás PE’s. La ventaja de este tipo de conexión, es que cada PE puede leer directamente desde los demás PE’s. La desventaja es que el número de cables necesarios para las conexiones crece exponencialmente con el número de PE’s. Por esta razón no se utilizan de forma común los modelos con conexión total y menos cuando hay un gran número de PE’s en el LPA. En el tipo de memoria compartida que se conecta en forma limitada, cada PE no se conecta a todos los PE’s. Tiene como ventaja que sólo se necesita un pequeño número de conexiones para la comunicación con cada PE. La desventaja es la forma de lectura, pues cada PE sólo puede leer directamente desde las conexiones que tienen con los otros PE’s. El desplazamiento es usado para localizar otros PE’s; en la Figura 3.2 se muestra lo anterior. El problema con el desplazamiento es que el número de desplazamientos se incrementa linealmente con la distancia entre el PE fuente y destino. Para obtener los valores de los PE’s más lejanos se realiza por consiguiente una gran cantidad de instrucciones. 23 Figura 3.2 Ejemplo de Desplazamiento. En la Figura 3.2, se observan cinco PE’s y cada PE esta conectado sólo a su vecino izquierdo y derecho. Supóngase que el PE central desea leer el valor 7 (a la izquierda del PE), pero el PE central sólo puede leer el valor 2 y 5 de sus vecinos directos, con el fin de alcanzar el valor 7, cada PE lee y guarda el valor de su vecino izquierdo, mientras la fila se desplaza a la derecha; para que el PE central pueda leer el valor 7. Se puede comentar que en un modelo de memoria con conexión total, el valor 7 podría obtenerse inmediatamente. 3.2 Arquitectura del Xetal El Xetal es un microprocesador paralelo desarrollado por la compañía Philips Research y NXP Research, en el año 1999. El microprocesador digital Xetal esta fabricado con tecnologías CMOS, es de 0.18 ηm y tiene un área de 20 mm2 . Su función es especial es para el procesamiento de vídeo y puede obtener 30 fotogramas/segundo en un formato VGA, a través de un sensor de imagen o de cualquier otra fuente de datos de vídeo digital. Su arquitectura permite el procesamiento de datos en modo paralelo. Por consiguiente, el tiempo para realizar cálculos se reduce significativamente en comparación con un procesador secuencial. El realizar diseños para aplicaciones con el chip Xetal puede ser de gran interés, ya que es adaptable a un ambiente de software compuesto de lenguaje ensamblador y de un lenguaje basado en "C" llamado "XTC" y de herramientas de simulación. El simulador, emula el chip y permite la depuración de código del programa. El LPA de Xetal contiene 320 PE’s, cada uno con su propia AU y MU. La AU contiene un acumulador, un sumador y un multiplicador con instrucciones de comparación, peso de datos, suma, resta y multiplicación acumulativa. [1], [35]. Los PE’s tienen una bandera que se 24 utiliza para instrucciones de paso condicional. Xetal usa el modelo de memoria compartida de conexión limitada. Una descripción del microprocesador Xetal se observa en la Figura 3.3, en la que la AU opera en dos columnas de memoria para una imagen de 640 píxeles de ancho. Cada elemento de memoria es de 10 bits. Una sola imagen contiene 480 líneas y la AU puede ejecutar un máximo de 1,560 instrucciones por PE. Cada AU tiene acceso a las MU’s de sus vecinos directos, lo que hace posible leer desde ellas. Puesto que no existe ningún vecino izquierdo del PE 1 y ningún vecino derecho del PE 320, la lectura de un vecino se traduce en la lectura de su propia MU. Los datos de entrada de la imagen o vídeo son VGA de un tamaño de 640 x 480 con hasta 10 bits de precisión a una velocidad máxima de 30 fotogramas/segundo. Estos datos se leen por línea, en la línea de memoria secuencial de entrada. Los datos originados de un sensor o una cámara, pueden ser convertidos a formato RGB o YCbCr, usando interpolación y algunas líneas de memoria para almacenamiento temporal. El formato ya convertido se envía al SP (Procesador Serie) a través de tres líneas de memoria secuenciales de salida. El SP lee la salida de las tres líneas de memoria secuenciales y monitorea las estadísticas (valor mínimo, máximo y promedio) de los datos de la imagen, que pueden ser leídas por el GCP. Las estimaciones estadísticas son utilizadas por el GCP para actualizar drásticamente coeficientes o fijar los parámetros de control del sensor. La interfaz al exterior es realizada con un canal secuencial del puerto de entrada de vídeo y por tres canales secuenciales de los puertos de salida de vídeo o datos. Los datos se extraen del chip usando tres puertos, cada uno de 10 bits a 16 MHz. La Memoria del Programa (PM) contiene el código del programa. El GCP lee la PM y envía las instrucciones a cada PE a través del bus de instrucciones. 25 Figura 3.3 Descripción del Microprocesador Xetal. 26 3.2.1 Descripción General Un GCP y un LPA, son los componentes principales del circuito integrado Xetal, utilizados para alcanzar alto desempeño computacional. Esta arquitectura paralela reduce significativamente la frecuencia de reloj del LPA, y por consecuencia, reduce el consumo de energía y el área de silicio necesaria. La frecuencia de procesamiento puede ser de hasta 5 GOPS a 16 MHz con un consumo de energía bajo, 30 mWs para una aplicación simple. El diagrama de bloques de la arquitectura del Xetal se puede ver en la Figura 3.4. El Arreglo Lineal de Procesadores ejecuta operaciones al entrar los datos de vídeo y almacena datos en las líneas de memoria. El Procesador de Control Global realiza operaciones como la ejecución condicional, iteración y sincronización. Como comentamos anteriormente el LPA, está formado por 320 PE’s idénticos, que ejecutan la misma instrucción en una parte de la línea de memoria SRAM. Hay 16 líneas de memoria que se utilizan para almacenar datos en forma temporal. Otras 4 líneas de memoria llamadas líneas de memoria secuencial, permiten por una parte, la conversión serie a paralelo de datos de entrada de video y por otra parte, la conversión paralelo a serie de los datos procesados. Con el Procesador Serie se realiza el formateo de imágenes y los cálculos estadísticos, convierte el formato de video antes de que los datos sean enviados a la salida, éste también se puede configurar para obtener valores estadísticos de los datos. A través del puerto I2C se pueden recibir parámetros del exterior y también la programación del sistema. El chip Xetal es programado descargando el código del programa y los parámetros por medio de la interfaz I2C [51, 30]. Su forma de programar y su capacidad para controlar ajustes en los parámetros, hacen de Xetal un dispositivo flexible; esto permite un alto rendimiento para adquirir imágenes en entornos de operación dinámicos. El LPA y el GCP son procesadores totalmente programables. En la arquitectura del Xetal la Memoria del Programa es compartida por el LPA y por el GCP. Con la ayuda de un bit de selección, el GCP puede determinar si la instrucción es para él o para el LPA. Como se comento líneas atrás; la Memoria del Programa es compartida por el GCP y LPA, además puede almacenar hasta 1,024 instrucciones. [2] Los datos de entrada de la imagen 27 Figura 3.4 Arquitectura del Xetal (Diagrama de Bloques del Xetal). tienen una resolución VGA de 640 x 480 con 10 bits de precisión con una velocidad de 30 fotogramas por segundo, la cual esta directamente ligada con el número máximo de instrucciones posibles de ejecutar con el LPA en una línea de la imagen. Partiendo de la frecuencia de reloj y del marco de la imagen, el número de líneas por segundo se calcula de la siguiente forma, 30 * 480 = 14,400 líneas/s, esto es una línea cada 69.4 µs. Conociendo la duración de una instrucción, 1/16 MHz o 62.5 ns, obtenemos el número disponible de instrucciones por línea, el cual es 1,111. 3.2.2 Señal de Entrada. Una vez conociendo los límites del procesador a una determinada velocidad de reloj, también es necesario conocer el contenido de la información de entrada. El microprocesador Xetal está diseñado para recibir datos en formato blanco y negro, color y YUV. En el caso del color, el método usado para dar sensibilidad RGB al color de una imagen obtenida por sensores, es la aplicación de un CFA (Color Filter Array) que se coloca encima de una imagen en blanco y negro. En la mayoría de los casos se usa un patrón de 3 colores: R,G y B, como el que se observa en la Figura 3.5. Existen otros métodos para dar sensibilidad al color de una imagen, como el método de los 3 colores complementarios: YeMaCy (Yellow Magenta Cyan). 28 Razones técnicas y físicas conducen a la elección de uno de los patrones para filtrar color, pero en general el patrón de elección se determina en base a lo siguiente: 1. Inmunidad a los artefactos de color y el color muaré. 2. Reacción del patrón a las imperfecciones del sensor de imagen. 3. Facilidad de reconstrucción de color. 4. Inmunidad al cruce óptico/eléctrico hablando entre píxeles vecinos. Los puntos mencionados en primer y segundo lugar requieren componentes R, G y B para reconstruir de la mejor manera posible cada píxel. Los componentes de color R, G y B deben estar disponibles en los vecinos de cada píxel. El mejor patrón para usar como CFA es el patrón de Bayer. Este es el empaquetado RGB más denso y simétrico, pero es sensible a dispositivos verticales y horizontales. Existen diferentes patrones, como el patrón Bayer de 2 * 2 píxeles que es uno de los más populares (ver Figura 3.6). Este patrón de entrada tiene importancia en la arquitectura especial del Arreglo Lineal de Procesadores del Xetal. Figura 3.5 Patrón RGB. El estándar YUV, es un modelo de representación de color dedicado a video análogo. Se basa en un modo de transmisión de video con componentes separados, que utiliza tres señales diferentes para llevar información utilizando un componente de luminancia (luminosidad) y 29 a dos componentes de crominancia (color). El parámetro Y representa la luminancia (es decir, información en blanco y negro), mientras que U y V representan la crominancia (es decir, información con respecto al color). Este modelo se desarrolló para permitir la transmisión información en televisores a color y a la vez garantizar que los televisores en blanco y negro existentes continuaran mostrando una imagen en tonos de grises. Este formato codifica una imagen o vídeo a color, tomando en cuenta la percepción humana, permitiendo la reducción de ancho de banda para componentes de crominancia, de ese modo hace que los errores de transmisión o las imperfecciones de compresión se oculten de forma eficaz para la percepción de la vista humana. Figura 3.6 Formato de Imagen VGA. El Patrón Bayer, conocido también como filtro, máscara o mosaico de Bayer, por su inventor Bryce Bayer de Eastman Kodak, es un arreglo o malla cuadriculada de filtros de color con el fin de organizar filtros de color RGB en una cuadrícula de fotosensores, para poder hacer llegar a cada fotodiodo una tonalidad de distintos colores primarios. Interpolando las muestras de varios fotodiodos se obtiene un píxel de color. En particular la disposición de filtros de color es usada en la mayoría de los sensores que obtienen imágenes digitales usados en cámaras digitales, videocámaras y escáneres, para crear la imagen a color. El mosaico de Bayer se forma por un 50% de filtros verdes, un 25% de rojos y un 25% de azules, interpolando dos muestras verdes, una roja, y una azul se obtiene un píxel de color, conocido como GRGB, [16] o llamada permutación RGGB. [44] En la patente de Bryce Bayer, se les llama elementos sensores de luminosidad a los filtros verdes, y elementos sensores de color a los filtros rojos y azules. 30 La razón por la que se usa una mayor cantidad de filtros verdes es por que el ojo humano es más sensible a ese color. La disposición de los colores suele ser rojo-verde-rojo-verde, así sucesivamente en una línea, y verde-azul-verde-azul sucesivamente en la siguiente línea. 3.2.3 Arreglo Lineal de Procesadores. (LPA) Como se mencionó en la descripción general, el LPA consta de 320 PE’s. Este número es óptimo con respecto al formato básico de datos del patrón de Bayer de 2 * 2 píxeles. De hecho, el diseño de un LPA con 640 elementos sería ineficaz con respecto al área de silicio necesaria para su construcción, ya que la mitad de los PE’s permanecerían inactivos. En realidad, el cálculo sólo se realiza una vez en un color. Debido a la programación del LPA, el formato de entrada puede ser de diferente tipo lo que permite una gran flexibilidad de acceso en el formato de entrada. [2] La Interfaz ADC es un bus de 10 bits. Los canales izquierdo, central y derecho, permiten a cada procesador acceder directamente a los datos de las seis columnas de las memorias locales. Por ejemplo, es posible realizar un cambio derecha/izquierda de los datos locales. La ejecución de una instrucción por parte del LPA activa al mismo tiempo todos los PE’s. Esto ahorra energía y tiempo, [42] ya que todos los PE’s comparten la misma lógica de control y el acceso a memoria, contrariamente a un procesador secuencial. Por esta razón, es muy eficiente la estructura del LPA para aplicaciones de procesamiento de imagen. El direccionamiento de control y la decodificación, se realizan solo una vez en lugar de 320 veces. Por otra parte, las arquitecturas paralelas son muy eficientes para aplicaciones de procesamiento de imagen. [31] Cada PE tiene un acumulador, que se usa como operando para la siguiente instrucción. El microprocesador Xetal tiene una arquitectura de orientación lineal, lo que significa que cada línea de una imagen es procesada de forma inmediata. Las imágenes de entrada tienen en cada línea 640 píxeles, por esta razón, cada PE puede conectarse a las dos columnas de la memoria asignada a los vecinos. La AU realiza operaciones de suma, multiplicación acumulativa, resta, comparación y multiplicación constante. En la Figura 3.7 se puede observar el Arreglo Lineal de Procesadores. 31 El PE realiza las operaciones aritméticas básicas en un solo ciclo de reloj, incluso la función de multiplicar el acumulador. Cada PE posee una interconexión a la izquierda y derecha de los PE’s vecinos, con el fin de obtener información de los píxeles vecinos, es decir, para poder tener acceso a la memoria local de los vecinos de la izquierda y derecha. La interfaz de datos de entrada es un bus de 10 bits, que es "multiplexado" entre los píxeles pares e impares. Figura 3.7 Arreglo Lineal de Procesadores en el Xetal. Una arquitectura SIMD tiene la ventaja de tener un sólo decodificador de instrucción. La instrucción SIMD, que es transmitida por el GCP, es interpretada por el decodificador y convertida en operaciones para la AU y el multiplexor. Los decodificadores también extraen el coeficiente y lo envían a todos los PE’s, dependiendo de la instrucción que se trate. De esta manera, cada PE realiza la misma operación sobre diferentes datos. Para permitir la retroalimentación del LPA al GCP una línea de transmisión está disponible directamente. 3.2.4 Líneas de Memoria (MU). Las memorias locales de los PE’s están divididas en 2 columnas de 16 líneas paralelas de 10 bits, construidas en módulos SRAM (10 bits por píxel), lo que permite que en un solo ciclo se pueda realizar la lectura y el almacenamiento del resultado; las líneas de memoria se pueden 32 usar para almacenar líneas de imágenes completas que consisten de un máximo de 640 píxeles. Se pueden también usar estas 16 líneas de memoria para almacenar datos en forma temporal, lo que hace posible ejecutar (N x N) operaciones de procesamiento de bloques para N ≤ 7 con el chip Xetal (por ejemplo, convolución, filtrado, etc.). La Memoria de Programa del Xetal puede almacenar hasta 1024 instrucciones. 3.2.5 Procesador de Control Global (GCP). El rol del GCP esta divido en tareas de: sincronización y toma de decisiones. Las funciones principales del GCP se encargan de sincronizar todas las operaciones que se realizan dentro del chip y también de la sincronización del puerto serie I2C el cual se encarga de la comunicación con el exterior. Lo anterior incluye tareas de sincronización de señal para controlar el flujo del programa del LPA. La toma de decisiones usa la información estadística del Procesador Serie, como es el máximo, el mínimo, el promedio de los niveles de intensidad la referencia del color negro y la región de interés, para poder ajustar el tiempo de exposición del sensor. Internamente, el GCP controla el flujo de información destinado al LPA, en otras palabras, se encarga de actualizar el contador del programa, recupera y decodifica las instrucciones para poder enviárselas al LPA. Lo que permite realizar también operaciones lógicas, aritméticas, instrucciones de salto condicional y llamadas a procedimientos. La arquitectura del GCP se basa en tres buses que habilitan la ejecución de una instrucción en un solo ciclo de reloj. Los operandos son transportados a unidades funcionales a través del bus-0 y el bus-1, mientras que el resultado es transferido al registro a través del bus-2. Todos los buses son de 12-bits, ancho suficiente para el procesamiento posterior de las salidas del LPA que tienen 10 bits de precisión. Un diagrama de bloques del GCP se muestra en la Figura 3.8. Entre los registros del GCP, el registro 27 es particularmente importante, pues tiene una función especial, este se encarga de establecer el control y la sincronización de las señales del código del programa; en la Figura 3.9 se muestra un diagrama del registro 27. Puesto que el contenido del registro de control es independiente a los registros del chip Xetal, los campos de bits no utilizados, pueden ser asignados para banderas de estado condicional y/o para líneas de solicitud de interrupción [2]. 33 Figura 3.8 Procesador de Control Global. Figura 3.9 Detalles del Registro de Control (Registro 27). 3.2.6 Interfase I2C. El funcionamiento del chip Xetal inicia con la descarga del código a la memoria del programa para después fijar los valores de los parámetros. Los parámetros son almacenados en un registro de desplazamiento REG1 de 189 bits, que se llena secuencialmente byte por byte. Hay también un segundo registro REG2, el que tiene bytes de señales de control que pueden ser configurados para lectura datos desde el exterior del chip Xetal a través del bus I2C. Mediante 34 la entrada I2C del Xetal son introducidos los datos para posteriormente sean procesados por el Procesador Serie que se explica a continuación. 3.2.7 Procesador Serie (SP). El resultado del procesamiento es transferido a la salida serie mediante un formato apropiado (por ejemplo, YUV, 4:4:4, 4:2:2, 4:2:0, 4:0:0, ... ) o en otras palabras, píxel por píxel, a través de tres puertos paralelos, de 10 bits cada uno. Los tres canales igualan tres escrituras en paralelo con lecturas en serie de las líneas secuenciales de memoria. También, el Procesador Serie realiza procesamiento estadístico, con el fin de obtener el máximo, el mínimo y el promedio de los valores de los datos enviados a la salida de los tres canales. Aunque limitada, esta característica permite al usuario preestablecer los registros para los valores deseados en cualquier momento durante el procesamiento de la imagen. Por lo tanto, se puede obtener el máximo, el mínimo y el promedio de los valores por línea, por región o por imagen completa. En caso de datos de vídeo, el Procesador Serie puede realizar operaciones para preparar los datos en el formato de vídeo deseado, RGB o YUV. 3.3 Instrucciones Usadas por el Xetal. El la Tabla 3.1, se muestra el conjunto de instrucciones del Xetal para la programación del Arreglo Lineal de Procesadores. Excepto para la instrucción NOP, el resultado de una instrucción es escrito en una línea de las dos columnas de la memoria opcional (res[i]) y en el ACCU. El valor del índice i es 0 ó 1, ya que cada Procesador Elemental sólo puede escribir en su propia unidad de memoria, que contiene dos columnas: 0 y 1. Para aclarar este proceso es recomendable observar el diagrama de bloques de la Figura 3.7 nombrada arreglo lineal de procesadores en el Xetal. Tanto, el ACCU, una línea de las dos columnas de la memoria, o un valor del GCP, pueden servir como fuente de operandos para una instrucción. La fuente del operando llamado oprd0 puede ser una línea de las dos columnas de la memoria (lmem[i]) o un valor del GCP, mientras que para el operando llamado oprd1 sólo puede ser una línea de las 2 columnas de la memoria. 35 Como el Xetal puede leer desde sus vecinos directos, el valor del índice i oscila entonces entre los rangos de -2 a 3, cuando i = 0 o 1, Los datos asignados al PE son directamente accesados, pues se encuentran en la memoria local de ese PE. Los datos de un vecino izquierdo se obtienen estableciendo i = -2 o -1, y los datos de un vecino derecho estableciendo i = 2 o 3. Mientras el acumulador es afectado por todas las instrucciones, la bandera nombrada en el conjunto de instrucciones como flag, sólo es afectada por 4 instrucciones de comparación: MAX, MIN, ABSMAX, ABSMIN. Esta bandera se utiliza para ejecutar las instrucciones PASSC y PASSCR. La instrucción paso condicional (PASSC) almacena en el acumulador y en la memoria, el valor del operando (oprd0) si la bandera es igual con 1; de lo contrario carga en el ACCU y en la memoria el valor del ACCU. La instrucción PASSCR realiza un paso condicional inverso al anterior, pues en esta se verifica que el valor de la bandera sea igual a 0. El LPA del Xetal carece de instrucciones de salto condicional como if, pero cabe señalar que el GCP si puede realizar esta instrucción. 36 Tabla 3.1 Set de Instrucciones del LPA del Xetal. [5] Instrucción Uso Efecto 1 NOP NOP do nothing 2 PASS PASS res[i], oprd0; res[i], ACCU ← oprd0 3 PASSC PASSC res[i], oprd0; res[i], ACCU ← oprd0 res[i], ACCU ← ACCU, 4 PASSCR PASSCR res[i], oprd0; res[i], ACCU ← oprd0 res[i], ACCU ← ACCU, if flag = 1 otherwise if flag = 0 otherwise 5 ADD ADD res[i], oprd0; res[i], ACCU ← ACCU + oprd0 6 SUB SUB res[i], oprd0; res[i], ACCU ← ACCU - oprd0 7 SUBA SUBA res[i], oprd0; res[i], ACCU ← oprd0 - ACCU 8 MUL MUL res[i], oprd1, coef; res[i], ACCU ← oprd1 * coef 9 MULA MULA res[i], coef; res[i], ACCU ← ACCU * coef 10 MAC MAC res[i], oprd1, coef; res[i], ACCU ← ACCU + (oprd1 * coef) 11 ABS ABS res[i], oprd0; res[i], ACCU ← |oprd0| 12 ABSA ABSA res[i]; res[i], ACCU ← |ACCU| 13 MIN MIN res[i], oprd0; res[i], ACCU ← min(ACCU, oprd0) flag = 1, Flag = 0, 14 15 MAX ABSMIN MAX ABSMIN res[i], oprd0; res[i], oprd0; if oprd0 ≤ ACCU otherwise res[i], ACCU ← max(ACCU, oprd0) flag = 1, if oprd0 > ACCU flag = 0, otherwise res[i], ACCU ← oprd0, res[i], ACCU ← ACCU, 16 ABSMAX ABSMAX res[i], oprd0; if |oprd0| ≤ |ACCU| otherwise flag = 1, if |oprd0| * |ACCU| flag = 0, otherwise res[i], ACCU ← oprd0, if |oprd0| >|ACCU| res[i], ACCU ← ACCU, otherwise flag = 1, if |oprd0| > |ACCU| flag = 0, otherwise Capítulo 4 MATERIALES Y MÉTODOS 4.1 Lenguajes de Descripción de Hardware En electrónica, un lenguaje de descripción de hardware es una clase de programación y/o descripción formal de circuitos electrónicos y más específicamente de lógica digital. Que permite la organización, diseño y simulación de la descripción del funcionamiento de un circuito para probarlo. Estos lenguajes son expresiones de texto basado en estándares especiales, estructura temporal y comportamiento de sistemas electrónicos. Al igual que los lenguajes de programación concurrente, la sintaxis y la semántica incluyen notaciones explícitas para la expresión de la concurrencia. Sin embargo, a diferencia de la mayoría del software para lenguajes de programación, también incluyen una noción explícita de tiempo, que es un atributo primario de hardware. Estos lenguajes cuya única característica es la de expresar la conectividad de un circuito entre una jerarquía de bloques, están clasificadas en netlist, como los lenguajes utilizados en el diseño asistido por computadora. Existen diferentes lenguajes de descripción de hardware, entre ellos VHDL, Handel-C y otros lenguajes. 38 4.1.1 Handel-C A medida que aumentaron los sistemas de tamaño y complejidad, los diseñadores se beneficiaron de generaciones de herramientas que se han complementado con las utilizadas hoy en día. Estas nuevas herramientas simplifican el proceso de describir la funcionalidad de hardware a través de la aplicación de un enfoque de alto nivel para EDA (Electronic Design Automation) que se inspira en el mundo del software. La fusión de software y metodologías de hardware son herramientas que pueden introducir tres aspectos del desarrollo de software para el diseñador: uno basado en lenguaje C para la descripción de la funcionalidad, un sistema de diseño con la depuración simbólica o sintaxis, y las bibliotecas de funciones predefinidas como el acceso a los periféricos y los procesadores en el hardware a través de APIs (Application Programming Interface) comunes. Las metodologías de diseño de hardware, desde la captura esquemática de HDL, han evolucionado desde un enfoque de abajo hacia arriba, en el que se desarrolla la funcionalidad del hardware mediante la descripción de la estructura del circuito. Con tal fin dichos enfoques se han centrado en mantener bajo control el nivel de diseño, pero hay limitaciones sí tales métodos se utilizan exclusivamente para hacer frente a un área de diseño de gran tamaño. Uno de los primeros problemas se debe a que la mayoría de la funcionalidad se compone de dos procesos lógicos, secuenciales y paralelos, sin embargo en HDL se ha desarrollado de un mundo exclusivamente paralelo para describir el hardware en lugar de describir la función deseada. Lo que se necesita es un lenguaje que eleve lo suficiente el nivel de abstracción como para permitir que el diseñador describa en la menor forma posible la función deseada en lugar de sus detalles estructurales subyacentes. Si bien los RTL (Register Transfer Level) subconjuntos de HDL, tales como VHDL y Verilog, van acompañados de una interpretación funcional de la descripción de hardware para permitir la generación de la estructura de hardware con tiempo de compilación, su carácter paralelo necesita el diseño de un ingeniero para agregar lógica adicional y ejecuciones secuenciales, por ejemplo, una FSM (Finite State Machine) se puede expresar como una sentencia "case". Mediante la introducción de un lenguaje que es similar a ANSI-C para el proceso de diseño de hardware, diseñadores pueden utilizar un lenguaje con un flujo de alto nivel que está orientado para la funcionalidad de programación. Pero el hardware 39 es paralelo y esto debe tenerse en cuenta si una metodología de diseño de hardware está basada enteramente en C, para poder llegar a un éxito a nivel RTL. Handel-C es un HDL para compilar programas de representación de hardware en FPGAs o ASICs. Aunque en el sentido estricto no es un lenguaje de descripción de hardware, sino más bien describe los algoritmos que serán implementados posteriormente en hardware. Es un subconjunto de lenguaje C, que incluye todas las características comunes del lenguaje C necesarias para describir algoritmos complejos. A fin de facilitar una forma de describir el comportamiento paralelo, algunos de los CSP (Communicating Sequential Processes) son un lenguaje adecuado para describir los patrones de interacción en sistemas concurrentes que utilizan palabras clave, junto con la estructura del archivo general de Occam que es un lenguaje de programación concurrente y álgebra de procesos. Las raíces históricas de Handel-C se encuentran en la Universidad de Oxford en el Laboratorio de Computación, el lenguaje de descripción de hardware fue desarrollado por el grupo de compilación de hardware. Handel HDL se convirtió en Handel-C a principios de 1996. La tecnología desarrollada en Oxford, dio pie a evolucionar como un producto fundamental para la empresa ESL (Integrated Solutions Limited) en 1996. ESL fue renombrada "Celoxica" en septiembre de 2000. Handel-C fue adoptado por muchos grupos de investigación después de su liberación por parte de ESL, en consecuencia, era capaz de establecerse como una herramienta de diseño de hardware dentro de la comunidad académica, especialmente en el Reino Unido. A principios de 2006, el negocio de ESL Celoxica fue adquirido por Catalytic, comenzando con la elaboración de una herramienta de MATLAB para C. Poco después, Celoxica y Catalytic se fusionaron para formar Agility, que desarrolló para su venta, entre otros productos, herramientas de apoyo de ESL (Electronic System Level) Handel-C. A principios de 2009, Agility cesó sus operaciones luego de no obtener nuevas inversiones de capital y de crédito. Otro subconjunto C HDL que se desarrolló en la misma época es Transmogrifier C en 1994 en la Universidad de Toronto (actualmente proyecto de código abierto para FPGA-C) y 40 Streams-C en el Laboratorio Nacional de los Álamos, actualmente con licencia para impulsar tecnología bajo el nombre de Impulso C. Handel-C es un ejemplo de un lenguaje de programación de hardware con un flujo de control claro para el diseñador. Handel-C corresponde estrechamente con un flujo de software típico y proporciona las extensiones esenciales necesarias para describir hardware. Estas incluyen anchos de datos flexibles, procesamiento en paralelo y las comunicaciones entre las conexiones en paralelo. Handel-C tiene una instrucción "par"; cuando un bloque de código es calificado "par", se ejecutan las instrucciones simultáneamente y sincronizadas al final del bloque. Esta instrucción permite combinar flujos secuenciales y paralelos en código compacto y de fácil lectura. El diseñador puede gradualmente usar las instrucciones paralelas para optimizar el diseño. Un enfoque de alto nivel, como la metodología de Handel-C proporciona un nivel de abstracción, que hace más fácil a los diseñadores hacer frente a un espacio de diseño más grande y encontrar la solución correcta para hacer un diseño más pequeño y/o más rápido. Las metodologías de diseño de hardware hoy en día son interpretaciones basadas en las primeras herramientas informáticas, como placas universales y analizadores lógicos. Aunque el diseño del hardware ha progresado en la abstracción a RTL, las metodologías reflejan sus orígenes en el mundo estructural. Existen beneficios significativos a un enfoque que se deriva del mundo del software. La suite de diseño DK1 tiene el aspecto y la sensación de un entorno de software. El depurador ofrece reportes en profundidad que normalmente se encuentran sólo en el desarrollo de software. Estos incluyen puntos de ruptura, ejecución paso a paso, ciclos relojes variable y la capacidad de seguir las ejecuciones paralelas. Un beneficio clave de esto es que el hardware/software en la toma de decisiones en el proceso de diseño se puede cambiar en cualquier momento. La síntesis del diseño en Handel-C es rápida. Esto permite hacer modificaciones y volver a compilar nuevamente en forma rápida. El sistema Celoxica eleva la velocidad en el diseño del hardware. Bibliotecas predefinidas al igual que bibliotecas estándar de ANSI-C y otros entornos de software para diseño de hardware, crean oportunidades para simplificar el desarrollo de nuevas 41 funcionalidades, así como fomentar la reutilización del diseño. Además los usuarios tienen la posibilidad de crear sus propios bloques funcionales e importar otros. Este planteamiento puede combinar la capacidad de abordar con facilidad los registros, la memoria y los periféricos. Las capacidades para construir en Handel-C memoria interna y externa, así como registros es accesible. 4.1.2 Software de Diseño Celoxica El software de diseño DK de Celoxica, es un paquete de bibliotecas, herramientas y código fuente para ayudar a los usuarios en el diseño con lenguaje Handel-C y para el uso de otras plataformas de hardware a las que puede dar servicio. Este software fue el que se utilizó para la descripción en Handel-C. En la Figura 4.1 se puede ver el área de trabajo del DK de Celoxica. Figura 4.1 Áreas de Trabajo del DK de Celoxica. 42 4.1.3 VHDL La necesidad de construir circuitos digitales cada vez más complejos es patente día a día. Ya en el siglo XXI somos capaces de construir microprocesadores de muy altas prestaciones que están compuestos por millones de unidades funcionales (transistores) que realizan tareas de gran importancia para la sociedad. En la práctica, el 100% de la electrónica de control y supervisión de los sistemas, elaboración de datos y transferencia de los mismos se realiza mediante circuitos integrados digitales, constituidos por una gran cantidad de transistores: son los llamados circuitos integrados de muy alta escala de integración, o VLSI. En los años 50’s y 70’s, a comienzos de la electrónica integrada los circuitos eran analógicos, en los que el número de elementos constituyentes de los circuitos no pasaba de la centena; en la actualidad el hombre dispone de tecnologías de integración capaces de producir circuitos integrados con millones de transistores a un costo no muy elevado. A mediados de los años 70’s Gordon E. Moore ya pronosticaba un desarrollo de la tecnología en el que cada año la escala de integración, la capacidad de integrar funciones más complejas y la velocidad de procesamiento de esas funciones aumentaría de la misma forma. Las predicciones de Moore se cumplieron con gran exactitud durante los siguientes 30 años, y que la tendencia continuará durante los próximos 20. En el año 2012 Intel espera integrar 1000 millones de transistores funcionando a 10GHz. En el año 1982 el Departamento de Defensa de los Estados Unidos promovió un proyecto para desarrollar un lenguaje de descripción de hardware (conocido como MIL-STD-454L) que: • Describiera los circuitos digitales de forma amplia: funcionalidad, tecnología y conexión. • Permitiera describir y verificar los circuitos a todos los niveles: funcional, arquitectura y tecnológico. • Describiera la tecnología misma, para poder diseñar circuitos que sean independientes de la propia tecnología o bien durante la puesta a punto del proceso de fabricación. 43 • Describiera modelos del entorno en el que se va a insertar el circuito de forma que hubiese unas posibilidades de verificación más amplias del propio circuito. El lenguaje resultante es el VHDL, que responde a las siglas VHSIC HDL y es ratificado por el Instituto para la Ingeniería Eléctrica y Electrónica (IEEE, en 1987) en el estándar IEEE-1076. VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware Description Language. Aunque en este sentido el Verilog cumple las propuestas anteriormente anunciadas, el VHDL se impone como lenguaje estándar de diseño. Los HDL´s son lenguajes alfanuméricos comprensibles para describir circuitos electrónicos en sentido amplio. A continuación se comenta cuál ha sido la aportación de los HDL´s en la metodología clásica de diseño.[12] 4.1.3.1 Los HDL´s en la Metodología de Diseño La introducción de los HDL´s como métodos de descripción de circuitos han enriquecido los procesos para la creación de diseños, los han acelerado, asegurado y abaratando los costos de desarrollo. La figura 4.2 muestra el flujo al utilizar esta técnica, para la realización de un diseño clásico. Existen varias mejoras sustanciales: La librería de diseño es independiente de la tecnología para la que se utiliza en un diseño, por lo que la reusabilidad de los módulos constituyentes es total. No solo se puede compartir entre diseños, si no en diferentes procesos; es independiente de la tecnología. El código introducido es de alto nivel y la simulación para su comprobación es asimismo de alto nivel. Solamente cuando se obtiene una imagen física del diseño puede predecirse con cierta certeza si cumple o no las especificaciones. La síntesis se obtiene mediante el diseño, las condiciones de contorno en que funcionará y la tecnología disponible del fabricante del dispositivo. El resultado será un código HDL de bajo nivel o lo que es lo mismo una representación alfanumérica del circuito compuesto por sus conexiones, lo que se conoce como una netlist. Esta netlist se podría representar en un plano esquemático, con una ordenación racional y comprensible entre las primitivas y sus conexiones. Se utiliza para alimentar el flujo de síntesis física. 44 La parte negativa ha sido la pérdida de cierto control en la generación del circuito, ya que en esta metodología hay una fase de síntesis automática en la que se cede a una herramienta de software la responsabilidad de la resolución del circuito final. Se acerca a la situación ideal de la obtención totalmente automática del circuito a partir de las especificaciones. Actualmente existen nuevas versiones donde se puede hacer manipulación para cambiar los procesos de síntesis. Figura 4.2 Flujo de Diseño Mediante HDL’s. El lector habrá notado que se ha procurado eludir la palabra "programa" a la hora de referirnos a la elaboración de un código HDL, a esto se refiere siempre como "diseño". Ya que como programa se conoce a una secuencia ordenada de comandos y funciones, que realizan tareas definidas. En cambio los HDL’s son un lenguaje usado por ingenieros definido por el IEEE que se usa para diseñar circuitos digitales. Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero éstos no son prácticos en diseños complejos. En VHDL los comandos y funciones están expresados en un 45 lenguaje alfanumérico que es comprensible fácilmente por el hombre y tiene una proyección directa sobre el lenguaje de la computadora, y por tanto, fiel a su arquitectura. 4.1.3.2 HDL: Programa o Diseño Los lenguajes HDL´s, están diseñados, para describir hardware con un comportamiento propio de un circuito en sentido amplio. Representan un comportamiento paralelo inherentemente. Esto tiene un conjunto de implicaciones que han de tenerse en cuenta a la hora de elaborar un diseño, lo que se particulariza en el VHDL. La primera implicación de la simulación y síntesis están provistas de mecanismos que emulen el paralelismo y que inciden directamente en la formulación del código. La segunda implicación es un cambio de mentalidad en el diseñador a la hora de elaborar la descripción, cuando se esta habituado a realizar programas con ejecución secuencial. El mencionado cambio en este caso exige una cuidadosa elaboración en la planificación del diseño. Existen descripciones típicas de programación en forma secuencial, que están absolutamente prohibidas para la formulación de un diseño de hardware. Aunque el VHDL puede ser usado de forma general para describir cualquier circuito se usa principalmente para programar FPGA, PLD, ASIC y similares. Primeramente, VHDL es un lenguaje en el que se define el sentido del flujo de las señales, es decir, una señal puede ser definida en el código como entrada y/o salida, no por el cambio de la señal en si misma. La importancia de este comentario radica en que el nivel de descripción más bajo que podemos alcanzar en VHDL es el nivel de compuertas lógicas y no de transistor. El primer paso del diseño consiste en la construcción del diagrama de bloques del sistema. En diseños complejos al igual que en programación orientada a objetos, el VHDL ofrece un buen marco de trabajo para definir módulos que integren el sistema y sus interfaces, dejando los detalles para pasos posteriores. El segundo paso es la elaboración del código en VHDL para cada modulo, sus interfaces y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se puede utilizar cualquier editor para esta tarea, aunque el entorno de los programas de VHDL incluye su propio editor de texto. Después que se ha escrito algún código es necesario compilarlo. El compilador de VHDL analiza este código y determina los errores de sintaxis y analiza la 46 compatibilidad entre los módulos. Crea toda la información necesaria para la simulación. El próximo paso es la simulación, el cual permite establecer los datos a cada modulo y observar los resultados. VHDL da la posibilidad de crear bancos de prueba, que automáticamente aplican entradas y comparan las salidas con las respuestas deseadas. La simulación es un paso dentro del proceso de verificación. El propósito de la simulación es verificar que el circuito trabaje como se desea, es decir es más que comparar entradas y salidas. 4.1.4 Software de Diseño Aldec El software de diseño Active-HDL 8.2 de ALDEC, es un paquete de bibliotecas, herramientas y código fuente para ayudar a los usuarios en el diseño con lenguaje VHDL y para el uso de otras plataformas de hardware a las que puede dar servicio. Este software fue el que se utilizó para la descripción en VHDL. En la Figura 4.3 se puede ver el área del trabajo del Active-HDL 8.2 de ALDEC. Figura 4.3 Áreas de Trabajo del Active-HDL 8.2 de ALDEC. 47 4.2 Software de Desarrollo Xilinx Para la implementación de un proyecto en una tarjeta de desarrollo, se utilizó el entorno de R de XILINX Inc. diseño Webpack, que ofrece el paquete informático Project Navigator ISE en sus versiones 9.1i y 11.1. Xilinx ISE es una herramienta de diseño de circuitos profesional que permite, entre otras funciones la realización de desarrollos esquemáticos, la descripción de hardware, así como también agregar códigos realizados en lenguajes descriptivos de otras plataformas; para su posterior simulación y síntesis. El Xilinx ISE importa el diseño descriptivo realizado en Handel-C o los bloques descriptivos realizados en VHDL; que se quieren simular e implementar en una placa de desarrollo. En la Figura 4.4 se muestran las distintas áreas de trabajo de la herramienta Xilinx-ISE 11.1. [67] Figura 4.4 Distintas Áreas de Trabajo del Paquete Xilinx-ISE 8.2i. 48 Se debe seleccionar el FPGA en el que se desea implementar el sistema digital que se va a diseñar, esto se realiza en la ventana de propiedades del proyecto que es la que se muestra en la Figura 4.5, para poder especificar las características del FPGA. Además en el software de desarrollo también se pueden crear descripciones nuevas o incluir otras realizadas anteriormente, esto también se puede hacer una vez creado el proyecto mediante el menú principal seleccionando: crear ("Project New source") o añadir ("Project Add Source o Add Copy of Source") los archivos que describen al sistema digital, ya sean las descripciones realizadas esquemáticamente, en Handel-C , VHDL, etc. Figura 4.5 Propiedades del Proyecto. Antes de probar una aplicación en la tarjeta de desarrollo, es necesario realizar tareas como la asignación de las distintas terminales de entrada y salida del sistema digital, las cuales son las terminales físicas de la tarjeta, como interruptores, botones, LEDs, displays, etc. A lo anterior se le llama "restricciones de asignación de terminales" y es imprescindible, pues permite indicar a qué terminal del FPGA se conecta cada señal de entrada o salida del sistema digital. Estas restricciones se pueden definir mediante los procesos que se encuentran dentro del 49 apartado "User Constraints", en la ventana de procesos. De igual forma la asignación de terminales se puede realizar a través de un archivo de texto, de tipo "Implementation Constraints File", que se crea mediante el menú "Project New Source", y se debe asociar al archivo que describe el sistema digital completo; el archivo de restricciones tiene la extensión .ucf. Posteriormente se hace la Síntesis, que es el proceso de optimización para la adaptación del diseño lógico a los recursos lógicos disponibles en el FPGA, como Look-up-tables. Las LUTs son estructuras de datos, que usualmente están estructuradas en arreglos o asociaciones, usados para reemplazar una rutina de computo con arreglos de operaciones indexados, en este caso son implementadas con un multiplexor cuyas líneas de selección son las entradas de la LUT y cuyos resultados son constantes, una LUT de n bits puede codificar cualquier entrada como la función de Boole al modelar funciones tales como tablas de verdad. Las LUT’s son comúnmente de 4 a 6 bits de la lógica de los FPGAs. Los Slices, son los componentes básicos para la construcción de bloques en los arreglos del FPGA. Sin embargo, cada Slice contiene un número de LUT’s, flip-flops, y elementos lógicos que constituyen la lógica de diseño. Todas las LUT’s y flip-flops se empaquetan en "Slices", pero no necesariamente se llenan los "Slices". es decir, un "Slice" con dos LUT’s y dos flip-flops puede estar en uso aunque solo un LUT se utilice. El "Mapping" precede de la síntesis, es el proceso de asignación de porciones del diseño lógico de la recursos físicos en el FPGA. En el reporte "Map" cualquier "Slice" que se utiliza como se muestra en el "occupied slices" hace notar que el porcentaje de uso de "Slices" es mayor que el de LUTs y flip-flops, es decir, el diseño puede utilizar alrededor del 25% de LUT’s y flip-flops, pero debido a un empacado espaciado puede tener cerca del 50% de "Slices" ocupadas. El siguiente paso es el "Place and Route", que es el estado del FPGA que se compone de 2 pasos, de la colocación y del enrutamiento. El primer paso, la colocación, implica decidir dónde colocar todos los componentes electrónicos, circuitos y elementos de la lógica general en una cantidad limitada de espacio. Esto es seguido por el enrutamiento, que decide el diseño exacto de todos los cables necesarios para conectar los componentes colocados. En este paso se debe aplicar todas las conexiones necesarias siguiendo las reglas y limitaciones del proceso de 50 fabricación de acuerdo principalmente al modelo del FPGA y a los componentes que contiene la tarjeta. Finalmente el software de desarrollo genera un archivo con extensión .bit, el cual se debe de transmitir a la placa de desarrollo. La transferencia se puede realizar mediante el programa adaptador "Adept" de Digilent. 4.3 FPGA Un FPGA es un dispositivo semiconductor que contiene bloques de lógica cuya interconexión y funcionalidad se puede programar. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema combinacional. El tamaño, estructura, cantidad de bloques y conectividad de las conexiones varían en las distintas arquitecturas. El FPGA, es un circuito integrado que contiene celdas lógicas idénticas (que van desde 64 o hasta 8’000,000) que se pueden ver como componentes estándar. Las celdas lógicas se interconectan por medio de una matriz de cables e interruptores programables.[15] 4.3.1 Tarjeta El FPGA puede ser conectado físicamente a diferentes periféricos a través de pines específicos. La tarjeta de desarrollo usada en el proyecto es una BASYS la cual contiene un FPGA de Xilinx, Spartan 3-E XC3S250E-TQ144 con 250,000 compuertas. El FPGA dispone de multiplicadores de 18 bits y bloques de memoria RAM con puerto dual de rápido acceso. La tarjeta de desarrollo cuenta además con un puerto USB para la configuración de FPGA y la transferencia de datos, puede trabajar con frecuencias de 25, 50, y 100 MHz, dispone de 8 LEDs, 4 display de siete segmentos, cuatro botones que se activan mediante pulsos, 8 interruptores, un puerto PS/2, y un puerto VGA. [23] Un esquema de la configuración de la tarjeta de desarrollo BASYS con un FPGA de Xilinx Spartan XC3S250E-TQ144 se muestra en la Figura 4.6. En la Figura 4.7 se puede observar una ilustración de la tarjeta de desarrollo usada en el proyecto. La tarjeta Basys esta diseñada e implementada de tal forma que su uso sea fácil y así ganar experiencia en la construcción real de circuitos digitales. Está construida con un chip de 51 Figura 4.6 Diagrama de Bloques de la Placa con FPGA. Figura 4.7 Foto de la Placa BASYS, que Contiene un FPGA Spartan XC3S250E-TQ144 de Xilinx. Xilinx Spartan-3E, un arreglo de compuertas programables y un controlador Cypress EZUSB. La placa Basys tiene un gran contenido de entradas y salidas, con los circuitos de apoyo para el FPGA. Diseños innumerables pueden ser creados sin la necesidad de cualquier otro componente. Cuatro conectores de expansión estándar permiten realizar diseños para una creación más allá de la tarjeta Basys utilizando placas universales, tablas para diseño de circuitos o Pmods ( Los Pmods son baratos y contienen entradas-salidas analógicas y digitales, convertidores A/D y D/A, controladores de motor, sensor de insumos y muchas otras características). La tarjeta Basys obtiene la energía a través del puerto USB2 de la placa como en la Figura 4.8. La interface para el FPGA y la Plataforma Flash Rom, permite una transferencia de datos 52 Figura 4.8 Circuito de Poder en la Basys hasta de 400Mbytes/sec. La tarjeta también se puede programar desde el entorno de herramientas Xilinx ISE utilizando un JTAG3 Digilent. La tarjeta BASYS está diseñada para trabajar con el programa ISE WebPack CAD de Xilinx. WebPack puede ser usado para definir circuitos utilizando diseños esquemáticos o HDL, para simular y sintetizar circuitos, y para crear archivos de programación. La tarjeta BASYS suele alimentarse a partir de un cable USB, pero una toma de corriente y conector de la batería también se proporciona para que los suministros externos puedan ser utilizados. La energía de entrada es a través del interruptor de alimentación (SW8), a los conectores de expansión de 4 a 6 pines y a un regulador de voltaje de National Semiconductor LP8345. El LP8345 produce el suministro principal de 3.3 V para la tarjeta, y también para las unidades reguladoras secundarias para producir tensiones de alimentación de 2.5 V y 1.2 V requeridas por el FPGA. El FPGA en la tarjeta BASYS se debe configurar en las localizaciones como se muestra en la Figura 4.9 antes de poder realizar alguna función. Durante la configuración como en la Figura 4.10, un bit del archivo es transferido a las celdas de memoria dentro del FPGA para definir las funciones lógicas y las interconexiones del circuito. La tarjeta BASYS incluye un oscilador primario de silicio que produce una frecuencia de 25MHz, 50MHz, 100MHz basado en la posición del jumper JP4 selector de frecuencia de reloj. 53 Figura 4.9 Localizaciones de Programación para el Circuito de la Basys Figura 4.10 Programación del Circuito Un enchufe para un segundo oscilador proviene del IC7 (el IC7 puede adaptarse a cualquier oscilador CMOS de 3.3V). Los osciladores primarios y secundarios están conectados a los pines de entrada de reloj global en el pin 54 y la 53 respectivamente como se muestra en la Figura 4.11. Cuatro pulsadores y ocho interruptores deslizantes se proporcionan para entradas del circuito como se muestra en la Figura 4.12. Las Entradas de los pulsadores son normalmente bajos 54 Figura 4.11 Osciladores en la Tarjeta y controlan altos solamente cuando se presiona el pulsador. Los interruptores deslizantes generan constantes entradas altas o bajas dependiendo de la posición. Pulsadores e interruptores tienen resistencias en serie para la protección contra cortocircuitos (un corto circuito podría ocurrir si un pin del FPGA asignado a un botón o interruptor deslizante se define como una salida sin darse cuenta). Ocho LEDs y cuatro displays de siete segmentos se proporcionan para salidas del circuito. Para cada uno de los cuatro dígitos que aparecen continuamente brillantes e iluminados, deben tener un pulso a 16 ms (para una frecuencia de actualización de 60Hz a 1KHz). Por ejemplo, en un régimen de actualización de 60Hz, toda la pantalla se actualiza una vez cada 16 ms, y cada dígito se ilumina durante 1/4 del ciclo de actualización, o 4 ms. 55 Figura 4.12 Circuito de Entradas y Salidas 4.4 Software Adept Adept es un programa creado por Digilent que se utiliza para transferir al FPGA el archivo .bit almacenado y creado por Xilinx. Adept utiliza un cable USB o JTAG para transferir archivos desde la PC a la tarjeta que contiene el FPGA (a través del puerto del FPGA JTAG de programación). Adept también puede programar un archivo en la ROM no volátil llamada Plataforma Flash de la tarjeta. El archivo de configuración se enviará al FPGA o plataforma Flash y el software le indicará si la programación se ha realizado correctamente. El mensaje de configuración "LED" (LD_D) se ilumina después de que el FPGA se ha configurado correctamente. 56 4.5 Metodología y Diseño Con el objetivo inicial de comprender el desarrollo de un diseño en el cual es esencial realizar la descripción de hardware en un lenguaje para este fin, como es el Handel-C y VHDL, para después poder exportar dicho proyecto hacia la plataforma ISE y enseguida realizar la implementación en el FPGA; se tomo la decisión de describir el repertorio de instrucciones del Procesador Elemental del Xetal 1; por lo que fue necesario realizar un programa que permita visualizar la ejecución de las instrucciones de forma individual, así como también almacenar pequeños programas para ejecutarlos posteriormente; es por esto, que es de suma importancia conocer algunas especificaciones esenciales para el manejo de las herramientas que se usaron en el proyecto, las cuales se comentaron anteriormente. El diseño se realizó en base a los apartados anteriores y para lo cual se utilizó como referencia funcional el diagrama del Arreglo Lineal de Procesadores, éste se puede observar en la Figura 3.7. Una vez comprendido el funcionamiento del Procesador Elemental mediante la investigación plasmada en los capítulos anteriores, se creo un diseño que sirvió como base para su descripción en hardware, realizado de acuerdo a los datos teóricos del microprocesador Xetal, este diseño se muestra en la Figura 4.13. En este diagrama están las partes del diseño del Procesador Elemental para la tarjeta BASYS, como el GCP, la ALU, las memorias, los multiplexores, los interruptores y botones para la asignación de las entradas de datos, los circuitos necesarios para la visualización de resultados en los displays con sus respectivas conexiones y anchos de buses. 57 Figura 4.13 Diagrama del Diseño para la Descripción del PE. 58 4.5.1 Desarrollo en Handel-C y VHDL El análisis inicial de las instrucciones de un PE, dio pauta para realizar el diseño mostrado en la Figura 4.13 en ambos lenguajes como se comenta a continuación: Un bloque de memoria de 1024 filas con un ancho de 8 bits dentro del GCP en el que se pueden almacenar las instrucciones del PE, las cuales definen la operación que el PE realizara y también definen con que datos se realizaran los cálculos, esto debido a que el PE puede tomar datos de las memorias de sus vecinos adjuntos, de su memoria, o datos generados por el coeficiente; la instrucción precisa que canal de la memoria (impar o par) se usa. La instrucción se genera en 7 bits, los cuales son seleccionados a través de los interruptores de la placa, estas instrucciones se mandan a la memoria del GCP donde son almacenadas y posteriormente son enviadas de manera codificada a la ALU, a las memorias y a los multiplexores, para realizar sus tareas especificas. El proceso de selección de la instrucción de la memoria de datos a utilizar ya sea derecha, izquierda o central son funciones correspondientes al GCP. Una vez que se introduce la instrucción por medio de los switches se guarda en memoria y en modo ejecución el GCP envía los datos de la instrucción a la salida, ya que la memoria es de lectura y escritura, en ese instante se manda a la ALU, a las memorias, y a los multiplexores en sincronía con el reloj usado por el GCP a 4Hz para poder visualizarlo en los displays, el multiplexor de selección del Operando (Mux_Oprd) envía el dato correspondiente de la memoria y columna. Los datos son mandados por medio del bus del Operando a la ALU la que contiene el repertorio de instrucciones lógicas y aritméticas. Una vez realizada la operación el resultado es enviado a la salida de la ALU, y se conecta a un multiplexor que separa la salida por vectores de 4 bits para colocarlos en los displays. El proceso que nos ayuda a visualizar los displays, es mediante un circuito que contiene un prescalador de frecuencia de reloj del FPGA, necesaria para que el ojo humano pueda visualizar los resultados en los displays, de esta forma se aparenta que los displays están siempre encendidos aunque realmente prenden de uno por uno. Como la entrada de instrucciones en el diseño era necesaria para las pruebas, los datos de entrada son seleccionados mediante switches en la tarjeta para esto en la Figura 4.14 se muestra un diagrama del uso de los interruptores utilizados en Handel-C y VHDL. 59 Figura 4.14 Diagrama de Interruptores. Una vez que la memoria del GCP ya tiene almacenadas las instrucciones estas se pueden ejecutar, por el PE. Al momento de ingresar los datos a la memoria del programa, que es la que se puede decir toma el lugar del GCP, los 2 primeros display 7 segmentos de la placa de desarrollo visualizan la dirección de memoria, y los siguientes 2 display muestran la instrucción que se almacena, cabe hacer mención que los leds 0 y 1 de la placa son usados para visualizar los 2 bits más significativos de la dirección de memoria. En la Tabla 4.1 y en la Figura 4.15 de describe la función de los display BCD 7 segmentos. Figura 4.15 Funciones del Display. 60 Tabla 4.1 Funciones del Display. En modo de programación: Los 2 display de la izquierda contienen los 8 bits menos significativos de la dirección de memoria. Los 2 bits más significativos de la dirección de memoria se muestran con los LEDS 1 a 0. Los 2 display de la derecha contienen el código de la instrucción. Si el botón: BTN1 Esta Los 2 display de la izquierda con- desactivado (Cero) tienen los 8 bits menos significativos de la dirección de memoria. Los 2 bits más significativos de la dirección de memoria se muestran con los LEDS 1 a 0. En modo de ejecución: Los 2 display de la derecha contienen el código de la instrucción. Si el botón: BTN1 Esta Los 2 display de la derecha visual- activado (Uno) izan el contenido del Acumulador. Los interruptores de la placa de desarrollo son fundamentales, a partir de estos se insertan los valores para la instrucción. Los 4 botones, tienen 2 formas de trabajar, bajo la perspectiva de carga o programación de la memoria y bajo la perspectiva de ejecución del programa. El botón BTN3 se encarga de la selección del modo de funcionamiento, ya sea programación o ejecución. El botón BTN2 funciona de 2 diferentes formas, en programación ejecuta el decremento de la dirección de memoria, y en ejecución realiza el RESET. El botón BTN1 funciona de dos maneras, en programación se encarga de efectuar el incremento de la dirección de memoria, y en ejecución visualiza el contenido del acumulador al finalizar el programa. El botón BTN0 solo funciona en modo de programación y se encarga de generar una escritura en 61 memoria y realizar el avance automático a la siguiente dirección de memoria. En la Tabla 4.2 y en la Figura 4.16 se desglosa el funcionamiento de los botones. Tabla 4.2 Función de los Botones. BTN3 Conmuta entre modo de programación y ejecución BTN2 En programación, decremento de la dirección de memoria En ejecución, RESET BTN1 En programación, realiza el incremento de la dirección de memoria En ejecución, visualiza el contenido del acumulador BTN0 En programación, genera una escritura en memoria y avanza automáticamente a la siguiente dirección. En ejecución, No se usa. Figura 4.16 Funciones de los Botones. Los leds muestran diferentes funciones, el LED7 se enciende cuando la bandera es 1 y apaga cuando es 0. El LED6 es visible cuando se esta realizando la ejecución del programa y se apaga cuando esta en modo de carga para almacenar las instrucciones en la memoria. El LED5 se enciende cuando el acumulador es visualizado en los display. El LED4 se enciende cuando se lee un dato de la memoria del PE del canal par (1) y se desactiva cuando el valor es del canal impar (0). A continuación se muestra en la Tabla 4.3 y en la Figura 4.17 la descripción del funcionamiento de los leds. Finalmente para su comprobación se utilizaron los mismos datos en las pruebas. 62 Tabla 4.3 Significado de los Leds. LED7 Bandera LED6 Modo de programación y ejecución LED5 Se activa si se esta visualizado el contenido del acumulador LED4 Canal de la memoria de datos utilizado 0 – impar y 1 - par LED1 a LED0 PC9 a PC8 Figura 4.17 Significado de los Leds. Una vez realizado el proyecto en Handel-C y VHDL, fue exportado al Xilinx ISE a través de un archivo .VHD y .EDF respectivamente para poder proceder a realizar la síntesis del diseño al ejecutar la opción "Synthesize" que se encuentra dentro del área de procesos del Xilinx únicamente cuando en la ventana del proyecto esté seleccionado el archivo principal. Esto nos ayuda también a ver la descripción del procedimiento y los resultados podrán consultarse a través de los informes ("View Synthesize Report"). Capítulo 5 RESULTADOS En este capitulo se presentan los resultados obtenidos de la implementación en el FPGA de Xilinx (Spartan 3-E XC3S250E-TQ144). Se realiza la síntesis de la descripción de HandelC y VHDL en las versiones de Xilinx ISE 9.1i y 11.1, específicamente en términos de la cantidad de elementos utilizados, los dispositivos lógicos como Slices, LUT’s, memoria RAM, Flip Flops, los tiempos de configuración, colocación, asignación, enrutamiento e inactividades de reloj. Finalmente se hace un comparativo con los resultados obtenidos de la síntesis de ambos lenguajes de descripción. Los resultados se obtienen de los informes "FPGA Design Summary", que consiste en el resumen de los recursos necesarios para la implementación en el FPGA. En el informe se consideran 4 aspectos, el primero es el "Static Timing Report" muestra el tiempo para la configuración generada, que es el rango de tiempo entre un nodo fuente y nodo destino después del "Place & Route" la colocación y enrutamiento. El segundo es el resumen de los resultados de la síntesis que muestra el consumo aproximado de Slices, LUT’s y bloques de memoria RAM, con los que cuenta el FPGA. El tercero es el Reporte de Tiempos del "Place & Route" muestra el "Net Skew" que trata de la diferencia de los retardos de tiempo para la asignación de la ruta mínima y máxima del circuito diseñado, retardo promedio de conexión en las 10 peores rutas para este circuito y la estimación de restricciones para la frecuencia de reloj en el menor caso de inactividad. Finalmente la estimación de tiempos de la síntesis indica el periodo mínimo y la frecuencia máxima del diseño el cual se puede ver en "Synthesis Report". A continuación se muestran los resultados obtenidos para Handel-C y VHDL mediante el software de diseño Xilinx ISE en sus versiones 9.1i y 11.1. 64 5.1 5.1.1 Resultados para el caso de Handel-C Resultados obtenidos en Xilinx versión 9.1i. En la Figura 5.1 se muestran los resultados del "Static Timing Report", donde el tiempo para la configuración del diseño esta entre 16.732ns y 23.763ns, que es el rango de tiempo entre un nodo fuente y nodo destino. Figura 5.1 "Static Timing Report" en Xilinx version 9.1i de Handel-C. El resumen de los resultados de la síntesis en la Figura 5.2, muestra que el diseño del Procesador Elemental ha consumido aproximadamente el 28% de los Slices, el 25% de las LUT’s y el 33% de los bloques RAM’s utilizados con los que cuenta el FPGA. En el Reporte de Tiempos del "Place & Route" se muestra en la Figura 5.3 se puede observar que "Net Skew" es la diferencia o sesgo del tiempo de un nodo a otro y es de 0.052ns, el retardo máximo es de 0.121ns, el retardo promedio para la conexión de este diseño es: 1.064ns, la demora máxima de conexión es de: 5.116ns, el retardo promedio de conexión en las 10 peores rutas para este circuito es: 4.056ns, la estimación de restricciones para la frecuencia de reloj en el menor caso de inactividad es de 0.974ns y en el mayor caso factible es de 34.770ns. Estos resultados representan los tiempos necesarios para la colocación y del enrutamiento del diseño. En la siguiente sección se indican los resultados para la version 11.1 de Xilinx ISE del diseño realizado en Handel-C. 65 Figura 5.2 Resumen de la Síntesis del Diseño en Xilinx version 9.1i de Handel-C. Figura 5.3 Reporte de Retardos del Place & Route en Xilinx version 9.1i de Handel-C. 66 5.1.2 Resultados obtenidos en Xilinx versión 11.1 Los resultados de la configuración del diseño se observan en la Figura 5.4 que van del rango de 16.460ns a 23.983ns que es el "Static Timing Report". Figura 5.4 "Static Timing Report" en Xilinx version 11.1 de Handel-C. La Figura 5.5 indica los resultados de la síntesis, que son los elementos ocupados en el FPGA, donde los Slices ocupan el 28%, el 25% las LUT’s y el 33% los bloques RAM’s. El sesgo del tiempo de un nodo a otro es de 0.051ns, el cual aparece en el reporte de tiempos del "Place & Route" que se muestra en la Figura 5.6, ahí también se especifica el retardo máximo de 0.120ns. La estimación de restricciones para la frecuencia de reloj en el caso de inactividad minima es de 0.958ns y en el caso mayor es de 35.158ns. Al realizar la síntesis en las dos versiones de Xilinx ISE de la descripción realizada en Handel-C los componentes ocupados por el FPGA fueron prácticamente iguales, el tiempo para la configuración del diseño en la version 11.1 tiene una ligera disminución. Las restricciones en la frecuencia de reloj para los casos de inactividad en ambas versiones de Xilinx tienen diferencias insignificantes y el rango de inactividad es aproximadamente de 30ns. A continuación se indican los resultados para el proyecto descrito en VHDL. 67 Figura 5.5 Resumen de la Síntesis del Diseño en Xilinx version 11.1 de Handel-C. Figura 5.6 Reporte de Retardos del Place & Route en Xilinx version 11.1 de Handel-C. 68 5.2 5.2.1 Resultados para el caso de VHDL Resultados obtenidos en Xilinx versión 9.1i. Los resultados del "Static Timing Report" se muestran en la Figura 5.7 donde el tiempo para la configuración del diseño es 4.956s. Figura 5.7 "Static Timing Report" en Xilinx version 9.1i. de VHDL. El proceso de optimización para adaptar la descripción del Procesador Elemental en los diferentes recursos lógicos disponibles en el FPGA es la síntesis, que se muestra en la Figura 5.8, ocupando el 24% de los Slices y el 19% de las LUT’s. Se muestra en la Figura 5.9 el reporte de tiempos del "Place & Route" donde el "Net Skew" es de 0.17ns para la entrada de reloj principal, y el retardo máximo es de 0.111ns. El retardo promedio de conexión para este diseño es: 1.275ns. La demora máxima de conexión es de: 5.027ns. El retardo promedio de conexión en las 10 peores rutas para este circuito es: 3.571ns. La estimación de restricciones para la frecuencia del reloj, en el caso de inactividad menor es de 1.409ns, y en el caso mayor es de 4.956ns. Estos tiempos son indispensables para el enrutamiento de los buses. Una ventaja de las descripciones en VHDL, es que al sintetizarlo en Xilinx ISE se puede obtener una estimación de tiempos, donde la Figura 5.10 indica que el periodo mínimo es de 20.99ns a una frecuencia maxima de 47.643Mhz para este diseño. En el punto consecutivo se señalan los resultados para la version 11.1 de Xilinx ISE. 69 Figura 5.8 Resumen de la Síntesis del Diseño en Xilinx version 9.1i. de VHDL. 70 Figura 5.9 Reporte de Retardos del Place & Route en Xilinx version 9.1i. de VHDL. Figura 5.10 Estimación de Tiempos de la Síntesis en Xilinx version 9.1i de VHDL. 71 5.2.2 Resultados obtenidos en Xilinx versión 11.1. El tiempo para la configuración del diseño es 4.753s, y se observa en la Figura 5.11 "Static Timing Report". Figura 5.11 "Static Timing Report" en Xilinx version 9.1i. de VHDL. Los resultados de la síntesis de la Figura 5.12, indican que el diseño consumió el 13% de los Slices, el 12% de las LUT’s y el 8% de bloques RAM’s. El reporte de tiempos del "Place & Route" se muestra en la Figura 5.13 donde se observa que el "Net Skew" es de 0.010ns y el retardo máximos es de 0.101ns. La estimación de restricciones para la frecuencia del reloj en el caso de inactividad menor es de 1.631ns y en el caso mayor es de 4.753ns. La estimación de tiempos de la síntesis se ve en el "Synthesis Report" de la Figura 5.14 indica que el periodo mínimo es de 15.853ns a una frecuencia maxima de 63.080Mhz. En el diseño realizado en VHDL y sintetizado en la version 9.1i de Xilinx ISE el tiempo para la configuración del diseño es un poco mayor que en la version 11.1. En la version 11.1 se ocupan menos Slices, LUT’s y bloques RAM’s. En las restricciones de la frecuencia de reloj para los casos de inactividad no existe diferencia significativa en la sintetización en ambas versiones de Xilinx ISE, cabe mencionar que el rango de inactividad es aproximadamente de 3ns. En la estimación de tiempos del "Synthesis Report" de la version 11.1 de Xilinx ISE el periodo mínimo es menor que en la version anterior, por lo tanto en la version 11.1 el diseño puede trabajar con una frecuencia maxima mayor. 72 Figura 5.12 Resumen de la Síntesis del Diseño en Xilinx version 11.1 de VHDL. 73 Figura 5.13 Reporte de Retardos del Place & Route en Xilinx version 11.1 de VHDL. Figura 5.14 Estimación de Tiempos de la Síntesis en Xilinx version 11.1 de VHDL. 74 5.3 Comparación de Resultados Las secciones anteriores se enfocan en mencionar los diferentes resultados de la sintetización entre las versiones 9.1i y 11.1 de Xilinx ISE para la descripción en cada lenguaje. En Handel-C no existieron diferencias significativas en las dos versiones. Para la descripción en VHDL cabe resaltar que en la version 11.1 se lograron mejores resultados. A continuación se comentan las diferencias del sintetizado en Xilinx ISE version 11.1 de VHDL y las de HandelC. En VHDL el tiempo para la configuración del diseño, se muestra en el "Static Timing Report" presenta que es 3 veces menor que el tiempo mínimo para Handel-C, por lo que en este rubro VHDL es más rápido. Se observó que al sintetizar el diseño de VHDL utilizó menos porcentaje de recursos, ya que Handel-C ocupó aproximadamente el doble de Slices, el doble del porcentaje de LUT’s, cerca de 4 veces mas de bloques de memoria RAM, es decir que el diseño en VHDL ocupa menor espacio en la memoria del FPGA. Además el diseño tiene menores retardos para la asignación de rutas, en otras palabras VHDL tiene una mayor velocidad para la asignación en las rutas del diseño. En el caso de la inactividad minima Handel-C tiene menor tiempo y para el caso de la inactividad maxima VHDL tiene menor tiempo, pero el rango entre inactividad minima y maxima es mayor en Handel-C, superando por 8 veces el rango de VHDL, es decir Handel-C tiene más inactividad en su totalidad. El retardo promedio de conexión para este diseño, es un poco más elevado en su descripción en VHDL que en la de Handel-C, este resultado se obtuvo en el Xilinx ISE 9.1i. Se pudo constatar que los cambios de version del software Xilinx ISE project navigator, generan mejoras puesto que utiliza la menor memoria posible en los diseños y logra un aumento en la frecuencia maxima, entre otras cosas; es por esto que la sintetización de este proyecto en la version 11.1 genero mejores resultados que la version anterior. 75 Tabla 5.1 Tabla de Resultados Obtenidos en el Diseño de Handel-C y VHDL. Handel-C VHDL Resultados De Síntesis Xilinx v.9.1i Xilinx v.11.1 Xilinx v.9.1i Xilinx v.11.1 Número de Flip Flops 5% 5% 3% 1% 22% 22% 13% 11% 28% 28% 24% 13% 25% 25% 19% 12% 33% 33% por Slice Número de LUTs de 4 entradas Número de Slices Ocupados Número Total de LUTs de 4 Entradas Número de Memoria 8% RAM Utilizada Retardos de Reloj por Min Max Min Max Min Max Min Max CLK50MHZ 0.052 0.121 0.051 0.120 0.017 0.111 0.010 0.101 Restricciones en la Frecuencia Min Max Min Max Min Max Min Max 0.974 34.770 0.958 35.158 1.409 4.956 1.631 4.753 Asignación de Ruta de Reloj en Caso de Inactividad CLK50MHZ Finalmente en el sintetizado del proyecto del ISE Project Navigator de Xilinx, se obtuvo la descripción en diagrama de bloques del Top del circuito implementado, mediante la opción de "view technology schematic", el cual se muestra en la Figura 5.15. 76 Figura 5.15 Sistemático de el Diseño en VHDL 77 CONCLUSIONES Éste trabajo logró conocer y describir el Procesador Elemental que pertenece a una arquitectura paralela, procesó el conjunto de instrucciones de la ALU y cumplió con cada una de las condiciones. Se cambió un razonamiento de programación secuencial a un razonamiento para la descripción de hardware, ya que fue necesario describir dispositivos electrónicos como multiplexores, compuertas lógicas, decodificadores, etc. Se implementó la arquitectura del PE en el FPGA, y se describió en dos diferentes lenguajes, que fueron Handel-C y VHDL, se obtuvieron las diferencias de la cantidad de recursos utilizados en el diseño, lo cual fue cubierto en su totalidad. El uso de Handel-C para la descripción del diseño, da pauta a comentar que es una herramienta muy útil para describir hardware dado que es un lenguaje de alto nivel y con él se pueden lograr conexiones de forma instantánea dentro de una misma instrucción, en otras palabras ejecuciones en paralelo. En el proceso de investigación para el manejo del lenguaje VHDL se detecto que existe documentación actualizada para realizar diseños con FPGAs de ultima generación; en contraste Handel-C tiene limitantes en la plataforma de desarrollo para FPGAs de ultima generación. En Handel-C la realización de paralelismo puede entrar en conflicto debido a la descripción de los componentes por parte del diseñador, limitando funcionalidad y mejoras. Cabe hacer notar que este trabajo no fue una comparación de lenguajes, dado que las características de funcionamiento de cada uno son diferentes. Se concluye que el desarrollo realizado en el lenguaje VHDL es más eficiente en la mayoría de los aspectos necesarios para la implementación en un FPGA, a diferencia de Handel-C, debido a un menor consumo de recursos como Slices, LUT’s y bloques RAM’s en el FPGA. Otra cosa importante es que la forma de descripción en el lenguaje Handel-C es más sencilla 78 porque esta basado en el lenguaje "C" clásico el razonamiento lógico, condicional y sus funciones son similares, por lo que si la necesidad principal fuese la facilidad de descripción se puede utilizar Handel-C, ahora si bien se busca mayor eficiencia en el uso de los recursos se debe usar VHDL. Un trabajo a futuro seria lograr disminuir el uso de recursos en el FPGA en la descripción del Procesador Elemental, por lo que realizar un diseño esquemático, para conocer los recursos ocupados y contrastarlos con lo obtenido en esta investigación seria de gran valor. Lo anterior con el fin de que posteriormente se tenga la posibilidad de realizar un trabajo para la implementación de un pequeño microprocesador paralelo, que contenga varios Procesadores Elementales, por lo que es necesario consumir el mínimo de recursos del FPGA para evitar saturarlo. En este trabajo la descripción de la ALU del Procesador Elemental se realizó con una decodificación de las instrucciones de forma interna, pero para llevar a cabo la implementación de un pequeño microprocesador paralelo, será necesario que la decodificación de cada instrucción se realize desde el Procesador de Control Global y no internamente en cada ALU, puesto que generaría el uso de más recursos en el FPGA. 79 Apéndice Definiciones La unidad central de procesamiento o CPU (Central Processing Unit), o simplemente el procesador o microprocesador, es el componente en un ordenador, que interpreta las instrucciones y procesa los datos contenidos en los programas de la computadora. La unidad de procesamiento gráfico o GPU (Graphics Processing Unit) es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como videojuegos y/o aplicaciones 3D interactivas. Un FPGA es un dispositivo semiconductor que contiene bloques de lógica cuya interconexión y funcionalidad se puede programar. La lógica programable puede reproducir desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema combinacional hasta complejos sistemas en un chip. Las tablas de consulta LUTs son estructuras de datos, que usualmente están estructuradas en arreglos o asociaciones, usados para reemplazar una rutina de computó con arreglos de operaciones indexados, en este caso son implementadas con un multiplexor cuyas líneas de selección son las entradas de la LUT y cuyos resultados son constantes, una LUT de n bits puede codificar cualquier entrada como la función de Boole al modelar funciones tales como tablas de verdad. Las LUTs son comúnmente de 4 a 6 bits de la lógica de los FPGAs. Slices son los componentes básicos para la construcción de bloque en el arreglo del FPGA. Sin embargo, cada Slice contiene un número de LUT’s, flip-flops, y elementos lógicos que constituyen la lógica de su diseño antes del "Mapping". Después del "Mapping", todas las LUT y flip - flops se empaquetan en "Slices", pero no necesariamente se llenan los "Slices". es decir, un "Slice" con dos LUT’s y dos flip-flops puede estar en uso por solo un LUT. En el reporte "Map" cualquier "Slice" que se utiliza, incluso parcialmente, se cuenta en el "occupied slices". Usualmente se notará que el porcentaje de uso de "Slices" es mayor que el de LUT’s 80 y flip-flops, es decir, su diseño puede utilizar alrededor del 25% de LUT’s y flip-flops, pero debido a un empacado espaciado puede tener cerca del 50% de "Slices" ocupadas. La Síntesis es un proceso de optimización de adaptación de un diseño lógico a los recursos lógicos disponibles en el chip, como Look-up-tables (LUTs), acarreo dedicado. La Síntesis precede al mapeo. Diseño basado en Arreglos de Compuertas (Gate Array) El diseño basado en Arreglos de Compuertas es un método de manufactura en donde las capas difundidas, es decir, los transistores y otros elementos activos están predefinidos, y las obleas que contienen estos dispositivos se mantienen almacenadas antes de la metalización, es decir, desconectadas. Block RAM - La memoria de acceso aleatorio es la memoria desde donde el procesador recibe las instrucciones y guarda los resultados. En FPGAs comúnmente se usan bloques de 2k a 4k bits de memoria RAM. Con operaciones de dos puertos con posibilidad de sincronización como sea deseable. CMOS o estructuras semiconductor-óxido-metal complementarias. Es una de las familias lógicas empleadas en la fabricación de circuitos integrados (chips). Su principal característica consiste en la utilización conjunta de transistores de tipo pMOS y tipo nMOS configurados de tal forma que, en estado de reposo, el consumo de energía es únicamente el debido a las corrientes parásitas. Compilador es el software que convierte una descripción de alto lenguaje en una representación de bajo nivel. Para FPGAs: la partición completa, lugar y ruta de proceso. La Configuración es aquella que es almacenada internamente en un archivo que controla el FPGA para que realice la función lógica deseada. También: El acto de cargar un FPGA con ese archivo. Las Restricciones son aquellas que tienen efecto en el rendimiento requerido impuesto en el diseño, por lo general en forma de retraso máximo permisible, o la frecuencia de operación requerida. Mapping o Mapeo es el proceso de asignación de porciones del diseño lógico de la recursos físicos chip (ACLs). Con FPGAs, el mapeo es un proceso más importante que los arreglos de compuertas. 81 La Optimización es el cambio de diseño para mejorar el rendimiento. Occam es un lenguaje de programación imperativo y estructurado (al igual que Pascal). La interconexión de enrutamiento o Routting es el proceso de creación de la deseada interconexión, la lógica de las células en la que puede realizar la función deseada. El enrutamiento sigue después de la separación y la colocación. 82 Referencias [1] Abbo, Anteneh., and Kleihorst, Richard. (2001). Xetal Software Framework Programming Guidelines. Philips Research Laboratories, NatLab,. [2] Abbo, Anteneh., & Kleihorst, Richard. (2002) Xetal Software Framework (programming guidelines) Philps Natlab Technical Note. /410. [3] Abbo, Anteneh A., Kleihorst, Richard P., Choudhary, Vishal., Sevat, Leo., Wielage, Paul., Mouy, Sebastien., Vermeulen, Bart., and Heijligers, Marc. (2007). Xetal-II: A 107 GOPS, 600 mW Massively Parallel Processor for Video Scene Analysis. Solid-State Circuits, IEEE Journal of Volume 43, Issue 1, Page(s):192 - 201 Digital Object Identifier 10.1109/JSSC.2007.909328. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4443179&isnumber=4443178 [4] Abbo, Anteneh A., Kleihorst, Richard P., and Schueler, Ben. (2009). Xetal-II: A Low-Power Massively-Parallel Processor for Video Scene Analysis. Journal of Signal Processing Systems. Springer New York. ISSN-1939-8018 (Print) 1939-8115 (Online). Springer Science + Business Media, LLC. Manufactured in The United States http://www.springerlink.com/content/m961tlv44652p7l1/fulltext.pdf [5] Adve, Sarita V., Adve, Vikram S., Agha, Gul. and others. (2008). "Parallel Computing Research at Illinois: The UPCRC Agenda" Parallel@Illinois, University of Illinois at Urbana-Champaign. Department of Computer Science. Department of Electrical and Computer Engineering. Coordinated Science Laboratory. November 2008. http://www.upcrc.illinois.edu/documents/UPCRC_Whitepaper.pdf [6] Alaghband, Gita. (1997). Parallel computing http://carbon.cudenver.edu/ galaghba/csc6551.html and architectures. [7] Almasi, G.S. and A. Gottlieb (1989). Highly Parallel Computing. Benjamin-Cummings publishers, Redwood City, CA. Source IBM Systems Journal. Volume 29. Issue 1. Pages: 165 - 166. ISSN:0018-8670 [8] Anil K. (1989) Fundamentals of Digital Image Processing; Prentice Hall. United States of America. 83 [9] Arakawa, S., et al. (2008). A 512GOPS fully-programmable digital image processor with full hd 1080p processing capabilities. In ISSCC dig. of tech. papers 2008 (pp. 312-313) Feb. [10] Asanovic, Krste., Bodik, Ras., Catanzaro, Bryan Christopher ., and others. et al. (2006). "The Landscape of Parallel Computing Research: A View from Berkeley". University of California, Berkeley. Technical Report No. UCB/EECS-2006-183. December 18, 2006. http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.html [11] Asanovic et al. Old [conventional wisdom]: Power is free, but transistors are expensive. New [conventional wisdom] is [that] power is expensive, but transistors are "free". [12] The Designers" Guide to VHDL, Ashenden, Peter J., Elsevier Books, Oxford, 759 páginas, Idioma: Inglés, ISBN: 1558606742 ISBN-13: 9781558606746, 3 edición (2008). [13] Bajarin, Tim (2009). "Olvídate de los anteojos roji-azules, las tres dimensiones evoluciona y llega a tu casa." La llegada de 3D a tu sala. PC Magazine. Pag. 4-6. [14] Bernstein, D. J. (2005) Salsa20 speed; Salsa20 software, showing a stream cipher implemented using SSE2 http://cr.yp.to/snuffle.html#speed [15] Betz, Vaughn (2000 FPGA Architecture for the Challenge. The "FPGA Place-and-Route Challenge" http://www.eecg.toronto.edu/ vaughn/challenge/fpga_arch.html [16] Brown, Margaret. (2004). Advanced Digital Photography. Media Publishing. http://books.google.com/books?id=nTWr_Lvkzu8C&pg=PT8&dq=GRGB+bayer&lr=&as _brr=0&ei=QNfjR-DgGYWusgPSqv3FBA&sig=yWVUowZLr-w8b7OGIyI79LGTkB8. [17] Culler, David E.; Jaswinder, Pal Singh., and Anoop, Gupta. (1999). Parallel Computer Architecture - A Hardware/Software Approach. Morgan Kaufmann Publishers, p.15, 124, 125. ISBN 1558603433. [18] Clive Maxfield, May 15, 2006, "Xilinx unveil revolutionary 65nm FPGA architecture: the Virtex-5 family", , International Conf. on Programmable Logic DesignLine. [19] Bob Pencek, February 5, 2009. "Reconfigurable Application-Specific Computing: How Hybrid Computer Systems using FPGAs are Changing Signal Processing", Industrial Embedded Systems. [20] Cheng, C., et al. (2008). An intelligent visual sensor soc with 2790 fps cmos image sensor and 205GOPS/W vision processor. In ISSCC dig. of tech. papers 2008 (pp. 306-307), Feb. [21] Córdoba, C. (2005) Génesis y desarrollo del procesamiento y Análisis de Imágenes Digitales. [22] Danescu, R.. (2002) Image Processing; http://users.utcluj.ro/ danescu/Labs/L8.htm Technical University of Cluj. 84 [23] Reference Manual. Digilent Basys Board. Revision: August http://www.digilentinc.com/Data/Products/BASYS/BASYS_E_RM.pdf 18, 2007. [24] Dockstader, S Shiloh L., Tekalp, Murat A. (2001). On the Tracking of Articulated and Occluded Video Object Motion, Real-Time Imaging, 7: 415-432. [25] García Martínez, Mario Alberto., Morales Luna, Guillermo (2004). Construcción de operadores básicos sobre Campos Finitos GF(2m). Centro de Investigación y de Estudios Avanzados del Instituto Politécnico Nacional. Departamento de Ingeniería Eléctrica. Sección Computación. [26] Haritaoglu, Ismail, Harwood, David, Davis, Larry S. (2000). W4: Real-Time Surveillance of People and Their Activities, IEEE Trans. on Pattern Analysis and Machine Intelligence, 22: 809-830. [27] Harris, Mark Jason (2003). Real-Time Cloud Simulation and Rendering, Ph. D Thesis, Univ. of North Carolina at Chapel Hill. [28] Hsieh, Jeff Y. F., van der Avoird, Andre., Kleihorst, Richard P., and Meng, Teresa H. Y. (2000). Transpose memory for video rate JPEG compression on highly parallel singlechip digital CMOS imager. International Conference on Image Processing Volume 3, 1013 http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=899305&isnumber=19455 [29] Jeanne, Vincent., Jegaden, Francois-Xavier., Kleihorst, Richard., Danilin, Alexander., Schueler, Ben. (2006). REAL-TIME FACE DETECTION ON A "DUAL-SENSOR" SMART CAMERA USING SMOOTHEDGES TECHNIQUE. DSC 2006 (Workshop on Distributed Smart Cameras), Boulder, CO, USA, October 31 2006. ISEN (Institut Superieur d’Electronique et du Numerique). 29 rue Cuirasse Bretagne, 29200 Brest, France. Philips Research Laboratories, High Tech Campus 5, 5656 AE, Eindhoven, The Netherlands http://www.iti.tugraz.at/dsc06/CR/dsc06_p12_cr.pdf [30] Jonge, C. de. (1992) "I2C module for D.V.C.," Technical specification RWB557-CJ92083, Philips Semiconductors - Microtel IC Design Group, Nov. For internal use only. [31] Jonker, Pieter P. (1994). Why linear arrays are better image processors Proc. 12th IAPR Conf. on Pattern Recognition, Jerusalem, Israel. [32] Kamat, Rajanish K., Shinde, Santosh A., and Shelake, Vinod G. (2009) "Unleash the System on Chip Using FPGAs and Handel C". Springer. ISBN: 978-1-4020-9361-6 [33] Kim, K., et al. (2008). A 125GOPS 583mW network-on-chip based parallel processor with bio-inspired visual-attention engine. In ISSCC dig. of tech. papers 2008 (pp. 308309), Feb. [34] Kleihorst, R.P.; Abbo, A.A.; van der Avoird, A.; Op de Beeck, M.J.R.; Sevat, L.;Wielage, P.; van Veen, R.; van Herten, H. (2001). Xetal: a low-power high-performance smart camera processor. In IEEE Int. Symposium on Circuits and Systems (ISCAS) Volume 5. pages 215-218, Sydney, NSW, Australia, May. 85 [35] Kleihorst, Richard., Lee, Mi-Suen., Abbe, Anteneh., Cohen-Salal, Eric. (2001). Real time skin-region detection with a single-chip digital camera. In ICIP 2001, Thessaloniki, Greece. [36] Kleihorst, Richard., Abbo, Anteneh., Schueler, Ben., and Danilin, Alexander. (2007). Camera Mote With a High-Performance Parallel Processor for Real-Time FrameBased Video Processing. ICDSC ’07. First ACM/IEEE International Conference on Distributed Smart Cameras. Object Identifier: 10.1109 ICDSC.2007.4357513. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4357513&isnumber=4357491 [37] Kung, H. T. y Leiserson, Charles E. (1978). Systolic arrays (for VLSI), in Sparse Matrix Proceedings. [38] Kung, H. T. (1982). Why systolic architectures? IEEE Trans. on Comp., pp.37-46. [39] Kung., S. Y. (1988). VLSI Array Processors, Prentice-Hall, Englewood Cliffs, New Jersey. [40] Kyo, S., Koga, T., Okazaki, S., & Kuroda, I. (2005). An integrated memory array processor for embedded image recognition systems. In Proc. of ISCA (pp. 134-145), June. [41] Kronenberg, I.R. Kleihorst, R.P. (mentor) Abbo, A.A. (mentor) 2003, Optical Character Recognition with Xetal, Philips Research Technical Note.Unclassified Koninklijke Philips Electronics N.V. 2003 http://www.extra.research.philips.com/publ/rep/nl-ur/PR-TN200300759.pdf [42] Manniesing, Rashindra., Kleihorst, Richard., van der Avoird, André., and Endricks, Emile. (2004). Power analysis of parallel processing of low level imaging algorithms Journal of VLSI signal processing systems. ISSN: 0922-5773. [43] Martínez Hernando, Víctor J., Arroyo Montoro, Fernando., y Castellanos Peñuela, Juan B. (2008) "Desarrollo de Sistemas Físicos para Implantar Modelos de Computación con Membranas." Universidad Politécnica de Madrid. Facultad de Informática Departamento de Inteligencia Artificial. Febrero. [44] Maschke, Thomas. (2004). Digitale Kameratechnik: Technik digitaler Kameras in Theorie und Praxis. Springer. http://books.google.com/books?id=-THNPhdVIF8C&pg=PA40&dq=RGGB+bayer&lr= &as_brr=0&ei=J9jjR7iWH4T0sQPpxOHgBA&sig=jSD3s5BrxyOo9RJ0F-alfqVJwOA. [45] Maxfield, Clive, (2006). "Xilinx unveil revolutionary 65nm FPGA architecture: the Virtex-5 family". International Conf. on Programmable Logic Design Line. 15 / Mayo. [46] Nakajima, M. et al., (2006) "A 40 GOPS 250 mw massively parallel processor based on matrix architecture," in IEEE ISSCC Dig. Tech. Papers. pp. 410-411. [47] Pardo Carpio, Fernando. (2002). Arquitecturas Avanzadas. Ingeniería Informática. Universidad de Valencia, España. 30 de enero de 2002 86 [48] Patt, Yale (2004). "The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them? Distinguished Lecturer talk at Carnegie Mellon University. [49] Patterson, David A., and John L. Hennessy. (1998). Computer Organization and Design, Second Edition, Morgan Kaufmann Publishers, p. 715, 748. ISBN 1558604286. [50] Pencek, Bob. (2009). "Reconfigurable Application-Specific Computing: How Hybrid Computer Systems using FPGAs are Changing Signal Processing". Silicon Graphics, Inc. Industrial Embedded Systems. 5 / February. [51] Philips Semiconductors. (1998) "The I2C bus Specification". [52] Polyakov, Andy. (2004) RE: SSE2 speed, showing how SSE2 is used to implement SHA hash alorithms http://marc.info/?l=openssl-dev&m=108530261323715&w=2 [53] Polyakov, Andy. (2004) Subject: up to 1.4x RSA throughput using SSE2, showing RSA implemented with SSE2. [54] Purcell, Timothy John (2004). Ray Tracing on a Stream Processor, Ph. D Thesis, Univ. of Stanford. [55] Rao, Sailesh K. (1985) Regular Iterative Algorithms and their implementation on Processor arrays. Ph.D. Dissertation, Stanford University, Stanford, CA. [56] Rubio Camarillo, Míriam., Peris Iniesta, Sergio. López Fernández, Javier, y Mozos Muñoz, Daniel. Comparación de secuencias genómicas e identificación de proteínas utilizando FPGAS. (Memoria). Universidad Complutense de Madrid, Facultad de Informática, Sistemas Informáticos. [57] Sanz, Antonio; Cabido, Raúl; Pantrigo, Juan José y Sánchez, Ángel (2005). Procesamiento de Flujos de Vídeo mediante Hardware Gráfico de Consumo. XV Conferencia Española de Informática Gráfica (CEIG 2005), integrada en el I Congreso Español De Informática (CEDI 2005). Granada (España), Septiembre. [58] Schalkoff, R. (1989) Digital Image Processing and computer vision; Wiley, 1989, United States of America. [59] Soro, Stanislava., and Heinzelman, Wendi. (2009). A Survey of Visual Sensor Networks. Hindawi Publishing Corporation. http://www.hindawi.com/RecentlyAcceptedArticlePDF.aspx?journal=am&number=640386 [60] Sosa Savedra, Julio César., Pardo Carpio, Fernando., y Boluda Grau, Jose Antonio. (2007). Sistema de visión basado en procesado guiado por cambios y lógica reconfigurable para el análisis de movimiento de alta velocidad Departamento de Informática. Escuela Técnica Superior de Ingeniería. Universidad de Valencia. 87 [61] Thompson, Chris J., Hahn, Sahngyun, Oskin, Mark (2002). Using Modern Graphics Architectures for General-Purpose Computing: A Framework and Analysis, Int. Symposium on Microarchitecture (MICRO). [62] Tim Erjavec, February 2, 2009, "Introducing the Xilinx Targeted sign Platform: Fulfilling the Programmable Imperative" http //www.xilinx.com/publications/prodm ktg/T argetedD esignP latf orms.pdf. De: [63] Viola, P., and Jones, M. 2001 Robust real-time object detection. Technical Report CRL 2001/01, The Cambridge Research Laboratory, February. [64] William B. Pennebaker and Joan L. Mitchell. (1992). "JPEG Still Image Data Compression Standard". New York. Van Nostrand Reinhold. [65] Wu, Chen., Aghajan, Hamid., and Kleihorst, Richard. (2007). Mapping vision algorithms on SIMD architecture smart cameras. ICDSC ’07. First ACM/IEEE International Conference on Distributed Smart Cameras. Page(s):27 - 34 Digital Object Identifier 10.1109/ICDSC.2007.4357502. http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4357502&isnumber=4357491 [66] Wu, Chen., Aghajan, Hamid., and Kleihorst, Richard. (2008). Real-Time Human Posture Reconstruction in Wireless Smart Camera Networks. IPSN ’08. International Conference on Information Processing in Sensor Networks. Page(s):321 - 331 Digital Object Identifier 10.1109/IPSN.2008.20 http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4505484&isnumber=4505449 [67] Manuals Software Xilinx ISE 8. (2006). http://www.xilinx.com/support/sw_manuals/xilinx8/index.htm [68] Yuras, G. (2002) Introducción a la percepción remota del océano, Principios de Procesamiento Digital de Imágenes; Universidad de Chile. http://www.casadomo.com/revista_domotica_articles.asp