Download Implementación de un procesador elemental en un dispositivo

Document related concepts
no text concepts found
Transcript
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