sofisticación de estos dispositivos aumenta, considerando el
in
cremento de requerimientos de usuario (conectividad,
precisión, resolución, interoperabilidad, entre otros).
Tradicionalmente, lograr el rendimiento necesario ha
requerido el diseño manual de circuitos personalizados a
nivel de transferencia de registro (RTL) en un lenguaje de
descripción de hardware. Este es un enfoque muy eficaz,
pero impone una gran carga de desarrollo debido al bajo
nivel de abstracción del diseño.
Con el fin de aumentar la productividad y promover las
FPGA a una comunidad de usuarios más amplia, en los
últimos años se han presentado nuevas metodologías de
diseño con gran abstracción, incluida la síntesis de alto nivel
(High-Level Synthesis) [7]. Esta metodología acepta el
diseño en varios lenguajes (por ejemplo C, C++ y SystemC)
y genera un nivel de transferencia de registro (RTL)
sintetizable con precisión de ciclo a través de
transformaciones de código y optimizaciones de síntesis.
Dentro de las ventajas ofrecidas por esta tecnología de
síntesis se destaca su capacidad de lograr una
implementación del diseño a partir de una abstracción de
alto nivel sin requerir un conocimiento exhaustivo del
hardware, así como también la posibilidad de realizar una
exploración del espacio de diseño con pocas modificaciones
del algoritmo. Además las herramientas ofrecen métodos de
depuración y verificación convenientes que disminuyen el
tiempo de desarrollo. Estos métodos de entrada de diseño
se han utilizado recientemente en una variedad de
aplicaciones (por ejemplo, imágenes médicas, redes
neuronales convolucionales y aprendizaje automático), con
beneficios significativos en términos de rendimiento y
consumo de energía [8][9]. En [10] se presenta un
relevamiento de experiencias de diseño HLS vs. RTL
demostrando que esta nueva metodología permite obtener
más rendimiento y un uso de recursos FPGA ligeramente
menor, con un incremento considerable en la productividad,
a costa de la pérdida de calidad de resultados (QoR).
El enfoque convencional para desarrollar aplicaciones
de visión embebidas basadas en FPGA parte de la
implementación y prueba de los algoritmos usando software
de propósito general. Esto se debe a que tanto esta primera
implementación como su verificación resultan más fáciles
de realizar en una plataforma de software que directamente
en hardware [11]. Cuando se alcanza la funcionalidad
deseada de un algoritmo se debe crear una descripción RTL
del mismo, pudiendo ser este paso automatizado a través de
herramientas de síntesis de alto nivel [12].. Existe una
amplia gama de herramientas para este tipo de síntesis
disponibles, que difieren significativamente tanto en su
facilidad de uso como en la calidad del hardware derivado
[13].
Si bien las metodologías de desarrollo utilizadas
usualmente permiten a usuarios sin experiencia en hardware
generar soluciones para sus algoritmos con un esfuerzo
mínimo, ahorrando tiempo de desarrollo y reduciendo el
riesgo de cometer errores [14], éstas no contemplan la
integración de la implementación de algoritmos con los
diferentes componentes hardware que integran el sistema.
En este sentido, resulta propicio considerar la disponibilidad
de una configuración base que permita a los expertos en
aplicaciones de procesamiento de imágenes, integrar las
soluciones algorítmicas de forma sencilla.
Existen varios trabajos en la literatura que abordan la
construcción de plataformas de código abierto para el
diseño de soluciones de procesamiento de imágenes basadas
en FPGAs. Por ejemplo, en [15] se detalla una plataforma
reconfigurable en Virtex-4SX35 para la detección de bordes
a partir de los datos capturados de una cámara OV7610. En
[16][17] se han propuesto otros proyectos de código abierto
para el procesamiento de imágenes utilizando Altera DE2-
115. En [18] se presenta otra solución que añade un entorno
de diseño y validación, utilizando como entrada la
información de imágenes capturada por un dispositivo
OV7670, y presenta resultados utilizando una placa Nexys 4
FPGA.
Este trabajo propone una configuración inicial destinada
a usuarios con poca experiencia en el diseño de sistemas en
hardware que requieran implementar sistemas de
procesamiento de imágenes sobre esta tecnología, y que
pueda también ser utilizada como soporte para el desarrollo
rápido de aplicaciones de procesamiento de imágenes.
Además, presenta una guía para su uso, disponible en [19].
La propuesta se basa en el uso de la placa de desarrollo
Zybo Z7-20 [20]. La plataforma admite la incorporación de
algoritmos de procesamiento de imágenes desarrollados en
C++, y mediante la herramienta de síntesis Vivado HLS,
genera el bloque hardware correspondiente al algoritmo.
Luego posibilita la incorporación de este de manera sencilla,
en un diseño preestablecido que contiene la captura de
imágenes, la visualización a través de una interfaz HDMI, y
el soporte para el guardado de las imágenes de entrada en
una tarjeta de memoria microSD. E
l objetivo principal del
trabajo es brindar un entorno y una metodología que
permitan reducir los inconvenientes iniciales respecto al
tiempo de aprendizaje de la tecnología, y generar soluciones
rápidamente.
E
n la sección II de este trabajo se presenta la descripción
de la plataforma, explicando los componentes hardware, el
diseño de la configuración y el soporte para el
almacenamiento de imágenes en la memoria. La sección III
describe la metodología para la implementación de
algoritmos de procesamiento de imágenes. En la sección IV
se presentan algunos de los resultados obtenidos, y
finalmente en la sección V se detallan las conclusiones y
trabajo futuro.
II. DISEÑO DE LA PLATAFORMA
A. Componentes Electrónicos
La plataforma está basada en el uso de un sensor de
captura de imagen Pcam 5C de Digilent [21]. El periférico
cuenta con un sensor de imagen OV5640 con una montura
de lente M12 que permite acoplar una óptica de acuerdo a
las necesidades, e interfaz de conexión MIPI CSI-2 (Mobile
Industry Processor Interface Camera Serial Interface).
Se seleccionó como unidad principal de procesamiento el
kit de desarrollo Zybo Z7-20 que permite ser integrado con
el sensor Pcam 5C. El equipamiento posee un SoC FPGA de
Xilinx, Zynq XC7Z020-1CLG400C, interruptores de
control, interfaces HDMI y microSD, que se consideran
útiles para incluir funcionalidad en versiones futuras.