Académique Documents
Professionnel Documents
Culture Documents
Por último, se hará una lista de las herramientas software que vienen incluidas, así como el
repositorio de IP-Cores incluidos y los diseños de referencia que sirven como base para cualquier
diseño de un sistema de visión.
5.1 Introducción
El sistema Spartan-6 FPGA Industrial Vídeo Processing Kit es una herramienta de diseño
integral para la creación de prototipos, y el desarrollo de aplicaciones avanzadas de
procesamiento de imágenes en el mundo de la industria. El Kit completo, tanto la parte hardware,
como el software, y los diseños de referencia están especialmente concebidos para permitir a los
ingenieros en hardware realizar sistemas más confiables, disminuyendo al mismo tiempo el
tiempo de diseño y los recursos necesarios para su puesta a punto.
x Spartan-6 LX150T PCI Express Development Kit [65] [66] [67]. Es la placa de
desarrollo en la que se basa todo el sistema de visión. Dispone de una FPGA modelo
Xilinx Spartan-6 XC6SLX150T, así como memoria DDR3 SDRAM, memoria Flash,
conectores USB, Jtag, ranura PCI-Express y otros elementos que se verán más
adelante.
x Sensor OmniVision OV9715 [68]. Es el sensor de imagen, fabricado por OmniVision
para los sistemas de visión de alto rendimiento. Es capaz de capturar imágenes con
resolución de 720p (líneas horizontales), y la lente de la cámara proporciona un ángulo
de visión de casi 180º.
x Tarjetas auxiliares FMC-IMAGEOV / FMC-DVI [69] [70] [71] [72]. Tarjetas controladas
por la FPGA a través de la placa de desarrollo, y que proporcionan las interfaces de
entrada y salida para vídeo DVI proveniente de una cámara digital, o desde el sensor
de imagen OV9715.
Además, el Kit incluye una licencia completa (aunque bloqueada para su uso únicamente
con el dispositivo LX150T) de Xilinx ISE® Design Suite: System Edition DVD, así como algunos
diseños completos de referencia que pueden descargarse desde la Web de Avnet Electronics,
previo registro.
En los siguientes apartados de este capítulo se describirán uno a uno los elementos que
componen el sistema de visión.
La familia Spartan-6 de Xilinx cuenta con unas características ideales para sistemas de alto
rendimiento, proporcionando gran flexibilidad y eficiencia en sistemas de visión. Construida con
tecnología de 45nm y preparada para trabajar con voltajes bajos, estas FPGA proporcionan un
ahorro considerable de consumo con respecto a las familias anteriores, proporcionando además
un balance adecuado entre calidad y precio.
Esta familia de FPGAs incluye una nueva y más eficiente lógica en sus tablas LUT (que
disponen de seis entradas y de un registro dual) además de 18Kb de memoria BlockRAM, Slices
DSP48A1 de nueva generación, controladores de memoria SDRAM, controlador de niveles de
consumo, tecnología SelectIO™, bloques transceptores optimizados de alta velocidad,
transceptores compatibles con PCI Express, entre otros. En [63] se pueden ver en detalle todas
las características de esta familia.
CLBs, Slices, y LUTs. Cada uno de los bloques lógicos configurables (CLB) está
compuesto de dos slices, dispuestos uno al lado del otro en dos columnas. Existen tres tipos de
slices en la arquitectura de la familia Spartan-6: SLICEM, SLICEL, y SLICEX. Cada uno de ellos
contiene cuatro LUTs, ocho biestables y lógica variada. Las LUTs son de propósito general, tanto
para lógica combinacional como para secuencial. Las herramientas de síntesis están preparadas
para sacar el mejor rendimiento de estas celdas, proporcionando una alta eficiencia en la
implementación. Los tres tipos de slices mencionados anteriormente se distribuyen de la
siguiente manera:
x SLICEM. Corresponden al 25% del total en la FPGA, y sus LUTs pueden ser
configuradas como tablas con seis entradas y una salida, o como tablas de cinco
entradas y dos salidas independientes entre sí. Estos slices también pueden ser
configurados como memoria RAM distribuida con 64 bits por cada LUT, como registro
de desplazamiento de 32 bits (SRL32), o dos registros de desplazamiento de 16 bits
(SRL16s) con todos elementos accesibles mediante direccionamiento. La salida de
cada LUT es registrada por un biestable dentro de la CLB. Para operaciones
aritméticas, contiene un registro de acarreo de alta velocidad, que propaga la señal de
acarreo a través de las columnas de slices.
x SLICEL. Corresponden a otro 25% del total en la FPGA, y agrupa todas las
características anteriores, a excepción de las funciones de memoria y registro de
desplazamiento.
x SLICEX. Abarcan el 50% restante del total de la FPGA, y tienen la misma estructura
que los SLICEL, a excepción de los registros de acarreo para operaciones aritméticas.
Administración de Reloj. Cada FPGA Spartan-6 tiene hasta seis CMTs (Clock
Management Tile), cada uno compuesto de dos DCMs (Digital Clock Manager) y un PLL (Phase-
Locked Loops), que pueden ser utilizados individualmente o en cascada. El DCM proporciona
cuatro fases diferentes para el reloj de entrada (CLKIN), a 0º, 90º, 180º y 270º (CLK0, CLK90,
CLK180 y CLK270 respectivamente). Además, es capaz de proporcionar relojes al doble de
frecuencia del reloj de entrada, así como un divisor de cualquier fracción entera entre 2 y 16,
alineada con la señal CLK0. El PLL sirve como sintetizador y soporta un mayor rango de
frecuencias. También es capaz de funcionar en conjunto con los DCM. El corazón del PLL es un
oscilador controlado por tensión (VCO) con un rango que va desde los 400Mhz hasta los
1080Mhz. Tres divisores de frecuencia independientes adaptan el PLL a la aplicación que se
desee.
Bloques BlockRAM. Cada FPGA Spartan-6 contiene entre 12 y 268 BlockRAM de doble
puerto, cada uno con capacidad de almacenar 18Kb. Cada uno de estos bloques contiene dos
puertos completamente independientes, que solamente comparten la información almacenada.
Los accesos a memoria están controlados por la señal de reloj, por lo cual son completamente
síncronos. Los datos de salida se almacenan en un registro, que mantiene su valor hasta la
siguiente operación. Existe también un registro opcional que proporciona mayores frecuencias de
trabajo, a costa de incrementar las operaciones de lectura y escritura en un ciclo de reloj. Cada
puerto puede configurarse como 16Kx1, 8Kx2, 4Kx4, 2Kx9 (u 8), 1Kx18 (o 16), o 512x36 (o 32).
Algunos de estos modos incluyen salidas con bits de paridad. Cada Block RAM puede
configurarse como dos bloques independientes de 9Kb, con un solo puerto de acceso y escritura.
Entradas y salidas. El número de pines de entrada y salida varía desde 102 hasta 576.
Cada uno de estos pines es configurable, y soporta una larga lista de estándares, con voltajes de
hasta 3.3V. Todos los pines de entrada y salida están organizados en bancos (generalmente de 4
a 6 bancos). Cada banco posee recursos en común, como la fuente de alimentación de salida.
Para más detalles acerca de la familia Spartan-6 de Xilinx, consúltese [63]. Las siguientes
referencias proveen extensa documentación sobre conceptos de diseño en Spartan-6,
herramientas, técnicas, consideraciones de implementación, y otros aspectos de interés en esta
familia de FPGAs [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93].
El Kit incluye diseños de referencia, que permiten al ingeniero partir de una base a la hora
de realizar sus diseños, pudiendo acceder de forma fácil a los periféricos de la placa de desarrollo
[65].
En los siguientes apartados se hará una breve descripción de los elementos principales,
indicando aquellos que son indispensables en cualquier sistema de visión.
Los elementos de la placa de desarrollo LX150T están conectados a los pines de la FPGA
de forma predefinida. Aunque es posible realizar cualquier diseño partiendo de cero, el fabricante
proporciona un diseño de referencia base con un sistema SCP incrustado (Soft-core Processor),
donde se han añadido los bloques básicos de control de los elementos de la placa, así como el
procesador Microblaze.
En la Figura 5.3 se puede observar el diagrama de bloques de alto nivel que compone el
sistema de referencia de la placa de desarrollo. Los bloques amarillos representan elementos
hardware situados en la placa de desarrollo, mientras que los bloques azules son los bloques
periféricos implementados en la FPGA que controlan estos elementos externos. Cada periférico
se comunica con el procesador Microblaze a través del bus PLB (Processor Local Bus), y sus
registros ocupan un espacio en el mapa de memoria del procesador, para la tarea de lectura y
escritura de los mismos por parte de Microblaze.
Figura 5.3. Diagrama de bloques de alto nivel del diseño base del Xilinx® Spartan®-6 LX150T Development Kit [65].
Algunos de los periféricos del diseño de referencia han sido creados y configurados desde
el asistente para sistemas embebidos (BSB, "Base System Builder"), mientras que otros son
plantillas GPIO (General Purpose I/O) que posteriormente han sido modificadas para que
desempeñen diferentes tareas, como el manejo de los botones, switches y leds de la placa de
desarrollo.
Los periféricos de control para el lector de tarjetas SD, el conector SATA o la expansión
PCI-Express entre otros, no se incluyen en el diseño de referencia básico, y deberán ser
añadidos en caso de necesitarse a través de la herramienta EDK.
La placa de desarrollo LX150T proporciona una interfaz eléctrica compatible con el estándar
PCI-Express. Esta interfaz consta de cuatro pistas, cada una de las cuales incluye un par
diferencial de transmisión y recepción. Cada pista soporta velocidades de hasta 2.5Gbps,
compatible con la primera generación de PCI-Express. Para proporcionar la señal de reloj de
referencia, la placa utiliza un circuito integrado que puede programarse, cuya función es la de
atenuador de jitter (ICS874003-05).
La interfaz SFP (Small Form-factor Pluggable) es un conector tipo "jaula" que se conecta a
uno de los transceptores Gigabit (GTP) de la FPGA. Éste permite añadir al sistema conexiones
ópticas de alta velocidad, a través de módulos transceptores ópticos al conector SFP.
Otro de los transceptores GTP de la FPGA Spartan-6 está conectado a la interfaz SATA,
permitiendo añadir al sistema dispositivos de almacenamiento, como por ejemplo un disco duro
externo. El conector proporciona sólo la interfaz necesaria para los datos, y el dispositivo que se
conecte tendrá que ser alimentado de forma externa.
Este dispositivo proporciona 128MB de memoria RAM de alta velocidad en un solo circuito
integrado, operando a 1.5V. Las señales de la memoria DDR3 están conectadas al banco 4 de la
FPGA, tal y como se muestra en la Figura 5.6.
La placa de desarrollo LX150T posee numerosas fuentes de reloj, para abarcar una gran
cantidad de diseños y aportar la flexibilidad necesaria para diferentes tipos de aplicaciones.
También existen pines dispuestos para que el diseñador use fuentes externas de reloj para
aplicaciones específicas. Los diferentes relojes están dispuestos para derivar las señales hacia
los diferentes dispositivos de memoria y de comunicaciones, así como la lógica existente en la
placa. La Figura 5.8 muestra un diagrama de conexión de las fuentes de reloj con la FPGA.
Figura 5.8. Señales de reloj conectadas a las entradas globales de reloj de la FPGA [65].
El dispositivo que realiza las funciones de capa física Ethernet es un circuito integrado
National DP83865DVH Gig PHYTER® V, que trabaja a 1.8V. También existe diversa lógica
alrededor, tales como resistencias y leds que informan cuando los datos están transmitiéndose y
recibiéndose. La Figura 5.9 muestra de qué forma están conectados estos dispositivos a la
FPGA. Existen además algunos jumpers que se utilizan para configurar parámetros de la
conexión, tales como activar o desactivar la autonegociación, seleccionar entre una comunicación
Full-Duplex o Half-Duplex, o la velocidad del enlace, entre otros.
Al igual que en el caso anterior, la placa de desarrollo cuenta con un dispositivo que
implementa la capa física y la interfaz necesaria para una conexión de tipo USB 2.0. El circuito
integrado en cuestión es el NXP ISP1504A1, que proporciona una conexión de alta velocidad que
soporta tres modos, uno a 480Mbps, otro a 12Mbps y el último a 1.5Mbps. La Figura 5.10
muestra la conexión con la FPGA.
Al igual que en el caso anterior, la placa de desarrollo implementa otro transceptor RS232,
aunque en este caso es a través de un conector USB. El puente entre USB y RS232 lo
proporciona un circuito integrado Cypress CP2102. Este conector USB se utiliza para acceder a
la placa de desarrollo a través de un PC que no disponga de conexión serie estándar, utilizando
cualquier puerto USB, previa instalación de los drivers que vienen incluidos en el Kit.
La placa de desarrollo cuenta también con cuatro botones tipo "push", ocho switches de
posición, y ocho leds discretos (sólo pueden estar encendidos o apagados). Estos dispositivos
pueden ser usados como elementos de propósito general, como botones de reset, conmutadores
de estado, y otras funciones similares.
La placa de desarrollo implementa dos buses I2C (Inter Integrated Circuit), cuyo objetivo es
establecer una conexión de baja velocidad y pocas líneas entre ciertos dispositivos de la placa.
Estos dispositivos pueden conectarse o desconectarse de los buses a través de una serie de
jumpers dispuestos como en la Figura 5.13.
El primer bus I2C interactúa con los dos conectores FMC, mientras que el segundo accede
a los dispositivos Real Time Clock, un sensor de temperatura y la interfaz para el LCD ALI (Avnet
LCD Interface).
En [73] se encuentra una guía de las especificaciones físicas de esta interfaz, así como una
lista de las pantallas LCD que soporta este tipo de conexiones.
Estas dos tarjetas de expansión han sido diseñadas como plug-in adicionales, que se
conectan a los conectores FMC de la placa de desarrollo, aportando nuevas características a la
misma.
El módulo "Dual Image Sensor FMC", o FMC-IMAGEOV es una placa que proporciona dos
interfaces de vídeo compatibles con los sensores de imagen Omnivision OV7915. Entre sus
características se destacan [71]:
x Dos interfaces para sensores de imagen Omnivision que pueden funcionar a la vez.
x Conector HDMI, que proporciona una interfaz de salida DVI.
x Sintetizador de reloj de vídeo.
x Registros de configuración de periféricos (sintetizador de reloj, sensor de imagen, entre
otros).
x Pines de entrada/salida de propósito general.
Figura 5.16. Módulo Dual Image Sensor FMC visto desde abajo y arriba [71].
El módulo DVI I/O FMC es otra tarjeta compatible con la interfaz FMC, que aporta las
siguientes características [69]:
Este sensor de imagen es capaz de trabajar con condiciones de luz mínimas, y sus 3300
mV/lux-seg permite imágenes reales en prácticamente cualquier condición de iluminación [68].
Además, el sensor es altamente configurable, pudiéndose trabajar en diferentes resoluciones y
fotogramas por segundo, y teniendo total control sobre el formato de salida y la transferencia de
datos. Este sensor es capaz de trabajar a una resolución de 1280x720 píxeles a 30 fotogramas
por segundo, pudiendo llegar a 60 fotogramas por segundo para una resolución VGA.
Por último, destacar que el sensor de imagen Omnivision OV8715 cumple con las estrictas
especificaciones del AEC (Automotive Electronics Council).
La placa de desarrollo Spartan-6 LX150T PCI Express Development Kit, junto todos los
demás elementos descritos anteriormente, se muestran ensamblados y montados sobre una
base de metacrilato, tal y como se aprecia en la Figura 5.19.
El sensor de imagen Omnivision se monta sobre un poste flexible, que permite a la cámara
mantenerse en cualquier posición. Junto a ella, se encuentran las dos placas de expansión,
situadas en los conectores FMC de la placa de desarrollo. El Kit también incluye un programador
JTAG, drivers para la conexión RS232-USB con el PC, y un cable de alimentación, formando en
su conjunto el sistema de visión Xilinx® Spartan®-6 FPGA Industrial Video Processing Kit.
El sistema de desarrollo Xilinx® Spartan®-6 FPGA Industrial Video Processing Kit trae
un repositorio de PCOREs incluidos (También llamados IP-Cores o simplemente periféricos),
para los diseños de referencia y para su implementación en cualquier aplicación. Estos PCOREs
se listan a continuación [75].
El sistema de desarrollo Xilinx® Spartan®-6 FPGA Industrial Video Processing Kit trae
varios diseños de referencia que hacen uso de las características más destacadas del Kit.
Todos los diseños de referencia comparten una estructura general, donde se establecen
algunos periféricos principales controlados por Microblaze. Esta estructura general consta de
elementos como:
x Procesador Microblaze.
x Buses de memoria y datos.
x Controlador de memoria.
x Controlador de conexión UART.
x Controladores de LEDs, Switches y pulsadores.
x Controladores de bus I2C.
El objetivo de este bloque común es crear un entorno base para el desarrollo de los
sistemas de visión, proporcionando un método de conexión de los bloques PCORE a los buses
de Microblaze. De esta forma se podrá usar el procesador para rutinas tales como:
x Tareas de diagnóstico.
x Recepción de mensajes de información de los bloques hardware.
x Adquisición de información sobre la transferencia de datos desde las tarjetas de
expansión.
x Configuración de parámetros y registros de los bloques.
x Carga de coeficientes en los filtros.
x Reset por software.
x Recopilación de estadísticas del sistema.
x Envío de mensajes a un PC a través del puerto UART.
x Recepción de órdenes enviadas desde un PC y ejecución de las mismas.
Figura 5.20. Partes comunes y específicas de los diseños de referencia (figura derivada de [75]).
En los sucesivos apartados se hará una breve descripción de la funcionalidad de cada uno
de estos sistemas de referencia. Téngase en cuenta que, tal y como se mencionó anteriormente,
los diagramas de bloques que se mostrarán a continuación sólo corresponden con la estructura
específica de cada sistema. La estructura común no aparecerá en las figuras, pero no debe
olvidarse que está presente en cada uno de los diseños.
Una característica común a todos los diseños de referencia es que, gracias a las tarjetas de
expansión FMC y su capacidad para generar múltiples señales de sincronismo y reloj, el sistema
admite varios tipos de resolución de vídeo, tal y como se muestra en la siguiente tabla.
Este diseño de referencia tiene como objetivo mostrar las siguientes características.
La Figura 5.22 muestra el diagrama de bloques de este diseño, que incluye dos PCOREs
de transformación de gamma [78] y un filtro FIR 5x5 con coeficientes configurables.
Figura 5.22. Diagrama de bloques del diseño de referencia base con entrada DVI [75].
Este sistema se conecta con un PC a través de Microblaze, usando para ello el puerto
UART de la placa de desarrollo. Usando Hyperterminal en el PC, se pueden configurar los
coeficientes del filtro FIR, así como otros parámetros de interés.
La Figura 5.23 muestra el diagrama de bloques de este diseño, en el que se han añadido
dos PCOREs DMA [79] que controlan el frame buffer, junto al MPMC (Multy-Port Memory
Controller) [80]. El PCORE "Video DMA" posee una licencia gratuita que permite su prueba en
hardware, y tiene como restricción el cese de su funcionamiento tras un periodo de tiempo
determinado. La licencia completa de este IP se puede adquirir desde [64].
Figura 5.22. Diagrama de bloques del diseño de referencia con entrada DVI y frame buffer [75].
Figura 5.23. Diagrama de bloques del diseño de referencia con sensor de imagen y frame buffer [75].
El bloque "Camera Imput" provee los codecs necesarios para decodificar el formato
BT656 del sensor y generar las señales de sincronismo de vídeo para adaptarlo a las
especificaciones del bus XSVI. El bloque "Video Detect" no altera en ninguna forma el vídeo, sino
que provee un mecanismo que detecta la resolución de la ventana activa de vídeo (píxeles de
información sin contar los espacios de blanking, para posteriormente hacer uso del PCORE Video
DMA que guardará el fotograma en una memoria externa.