<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1815-5928</journal-id>
<journal-title><![CDATA[Ingeniería Electrónica, Automática y Comunicaciones]]></journal-title>
<abbrev-journal-title><![CDATA[EAC]]></abbrev-journal-title>
<issn>1815-5928</issn>
<publisher>
<publisher-name><![CDATA[Universidad Tecnológica de La Habana José Antonio Echeverría, Cujae]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1815-59282016000300003</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Modificación automática de arquitecturas de módulos hardware de procesado de imágenes]]></article-title>
<article-title xml:lang="en"><![CDATA[Automatic architecture modification of hardware modules for image processing]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Garcés-Socarrás]]></surname>
<given-names><![CDATA[Luis M.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[Alejandro J.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Sánchez-Solano]]></surname>
<given-names><![CDATA[Santiago]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Brox Jiménez]]></surname>
<given-names><![CDATA[Piedad]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Ieno Junior]]></surname>
<given-names><![CDATA[Egidio]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cleber Pimenta]]></surname>
<given-names><![CDATA[Tales]]></given-names>
</name>
<xref ref-type="aff" rid="A04"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Tecnológica de La Habana José Antonio Echeverría (CUJAE) Departamento de Automática y Computación ]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Centro Nacional de Microelectrónica (IMSE-CNM-CSIC) Instituto de Microelectrónica de Sevilla ]]></institution>
<addr-line><![CDATA[Sevilla ]]></addr-line>
<country>España</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Centro Federal de Educación Tecnológica de Minas Gerais (CEFET MG)  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
<country>Brasil</country>
</aff>
<aff id="A04">
<institution><![CDATA[,Universidad Federal de Itajubá (UNIFEI)  ]]></institution>
<addr-line><![CDATA[Itajubá ]]></addr-line>
<country>Brasil</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2016</year>
</pub-date>
<volume>37</volume>
<numero>3</numero>
<fpage>21</fpage>
<lpage>33</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282016000300003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282016000300003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282016000300003&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[El presente artículo describe el empleo del flujo de diseño basado en modelos para el desarrollo de bloques reconfigurables automáticamente para el procesado de imágenes sobre FPGA. Para ello se han concebido arquitecturas hardware que aprovechan características específicas de algunos algoritmos de procesado y que pueden ser modificadas a través de un novedoso procedimiento software. Este aspecto, unido a las restantes opciones de parametrización de los diferentes módulos, permite liberar al diseñador de los detalles específicos de las implementaciones hardware así como adaptar el consumo de recursos del FPGA a las necesidades de la aplicación. El proceso de reconfiguración automática se ilustra con el bloque de convolución genérico realizando comparaciones entre implementaciones de diferentes arquitecturas sobre un FPGA Spartan-6 LX45.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[This paper describes the use of model-based design flow in the development of self-configurable image processing blocks over FPGAs. For this, some generic hardware architectures has been created and modified using a novel software proceeding using the specific characteristics of the different processing algorithms. This aspect, in addition to others configuration options of the blocks, allows the adjustment the FPGA resources consumption for a specific application. Also the automatic reconfiguration process is analyzed for a generic convolution block making some architectural comparisons over a Spartan-6 LX45 FPGA.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[flujo de diseño basado en modelos]]></kwd>
<kwd lng="en"><![CDATA[Xilinx System Generator]]></kwd>
<kwd lng="es"><![CDATA[reconfiguración automática]]></kwd>
<kwd lng="es"><![CDATA[XIL XSGImgLib]]></kwd>
<kwd lng="en"><![CDATA[model-base deseing flow]]></kwd>
<kwd lng="en"><![CDATA[Xilinx System Generation]]></kwd>
<kwd lng="en"><![CDATA[self-configuration]]></kwd>
<kwd lng="en"><![CDATA[XIL XSGImgLib]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="right"><font face="Verdana" size="2"> <b>ART&Iacute;CULO ORIGINAL</b></font></p>     <p align="justify">&nbsp;</p>     <p align="justify">&nbsp; </p>     <p align="justify"><font face="verdana" size="4"><strong>Modificaci&oacute;n autom&aacute;tica    de arquitecturas de m&oacute;dulos hardware de procesado de im&aacute;genes</strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><b>Automatic architecture modification    of hardware modules for image processing</b></font></p>     <p align="justify"><font face="verdana" size="2">&nbsp;</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2"><b>Luis M. Garc&eacute;s&#45;Socarr&aacute;s    <sup>I</sup>, Alejandro J. Cabrera Sarmiento <sup>I</sup>, Santiago S&aacute;nchez&#45;Solano    <sup>II</sup>, Piedad Brox Jim&eacute;nez <sup>II</sup>, Egidio Ieno Junior    <sup>III</sup>, Tales Cleber Pimenta <sup>IV</sup></b></font></p>     <p align="justify"><font face="verdana" size="2"><sup>I</sup> Departamento de    Autom&aacute;tica y Computaci&oacute;n de la Universidad Tecnol&oacute;gica    de La Habana Jos&eacute; Antonio Echeverr&iacute;a (CUJAE), La Habana, Cuba.    ]]></body>
<body><![CDATA[<br>   <sup>II</sup> Instituto de Microelectr&oacute;nica de Sevilla, Centro Nacional    de Microelectr&oacute;nica (IMSE&#45;CNM&#45;CSIC), Sevilla, Espa&ntilde;a.    <br>   <sup>III</sup> Centro Federal de Educaci&oacute;n Tecnol&oacute;gica de Minas    Gerais (CEFET MG), Brasil.    <br>   <sup>IV</sup> Universidad Federal de Itajub&aacute; (UNIFEI), Itajub&aacute;,    Brasil.</font></p>     <P align="justify">&nbsp;      <P align="justify">&nbsp;  <hr align="JUSTIFY" size="1" noshade>     <P align="justify"><B><font size="2" face="Verdana">RESUMEN</font></B>      <p align="justify"><font face="verdana" size="2">El presente art&iacute;culo describe    el empleo del flujo de dise&ntilde;o basado en modelos para el desarrollo de    bloques reconfigurables autom&aacute;ticamente para el procesado de im&aacute;genes    sobre FPGA. Para ello se han concebido arquitecturas hardware que aprovechan    caracter&iacute;sticas espec&iacute;ficas de algunos algoritmos de procesado    y que pueden ser modificadas a trav&eacute;s de un novedoso procedimiento software.    Este aspecto, unido a las restantes opciones de parametrizaci&oacute;n de los    diferentes m&oacute;dulos, permite liberar al dise&ntilde;ador de los detalles    espec&iacute;ficos de las implementaciones hardware as&iacute; como adaptar    el consumo de recursos del FPGA a las necesidades de la aplicaci&oacute;n. El    proceso de reconfiguraci&oacute;n autom&aacute;tica se ilustra con el bloque    de convoluci&oacute;n gen&eacute;rico realizando comparaciones entre implementaciones    de diferentes arquitecturas sobre un FPGA Spartan&#45;6 LX45.</font></p>     <p align="justify"><font face="verdana" size="2"><b>Palabras claves:</b> flujo    de dise&ntilde;o basado en modelos, Xilinx System Generator, reconfiguraci&oacute;n    autom&aacute;tica, <i>XIL XSGImgLib</i>&nbsp;</font></p>     <p align="justify"><font size="2" face="verdana"><strong>ABSTRACT</strong></font></p>     <p align="justify"><font face="verdana" size="2">This paper describes the use    of model&#45;based design flow in the development of self&#45;configurable image    processing blocks over FPGAs. For this, some generic hardware architectures    has been created and modified using a novel software proceeding using the specific    characteristics of the different processing algorithms. This aspect, in addition    to others configuration options of the blocks, allows the adjustment the FPGA    resources consumption for a specific application. Also the automatic reconfiguration    process is analyzed for a generic convolution block making some architectural    comparisons over a Spartan&#45;6 LX45 FPGA.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><b>Key words:</b> model&#45;base    deseing flow, Xilinx System Generation, self&#45;configuration, XIL XSGImgLib</font></p> <hr align="JUSTIFY" size="1" noshade>     <P align="justify">&nbsp;      <P align="justify">&nbsp;      <p align="justify"><font face="verdana" size="3"><strong>1.&#45; I<B><font size="3" face="Verdana">NTRODUCCI&Oacute;N</font></B></strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2">La visi&oacute;n computacional    es una transformaci&oacute;n de los datos de una imagen o v&iacute;deo para    generar una nueva representaci&oacute;n o decisi&oacute;n. En un sistema de    visi&oacute;n computacional, la unidad de procesado recibe una serie de datos    num&eacute;ricos desde el elemento de adquisici&oacute;n o almacenamiento realizando    el an&aacute;lisis de las im&aacute;genes, as&iacute; como el control del elemento    de captura. Estas operaciones se definen por medio de algoritmos que ejecutan    t&eacute;cnicas conocidas como procesado digital de im&aacute;genes o v&iacute;deo    dentro de la unidad de procesado, cuyo objetivo es convertir la secuencia de    datos num&eacute;ricos en una percepci&oacute;n visual y detectar patrones de    inter&eacute;s en una imagen o secuencia para la toma de decisiones del sistema    al que pertenece &#91;1&#150;5&#93;.</font></p>     <p align="justify"><font face="verdana" size="2">La unidad de procesamiento es    la parte m&aacute;s importante del sistema de visi&oacute;n computacional la    cual se puede implementar sobre computadoras personales (PC), dispositivos secuenciales    empotrados o dispositivos hardware paralelos. El consumo de potencia de una    PC, en conjunto con el tama&ntilde;o, el peso y el costo que pueden alcanzar,    descartan a esta variante como una soluci&oacute;n viable para aplicaciones    portables y aut&oacute;nomas, como los sistemas de c&aacute;maras inteligentes    y v&iacute;deo vigilancia automatizada. Las soluciones secuenciales empotradas    presentan limitaciones en cuanto a la velocidad de procesado en comparaci&oacute;n    con los procesadores disponibles en las PC por lo que, cuando la velocidad sea    un par&aacute;metro cr&iacute;tico, se hace necesario el empleo de dispositivos    hardware paralelos, como los circuitos integrados de aplicaciones espec&iacute;ficas    (ASIC) y los arreglos de compuertas l&oacute;gicas programables (FPGA), para    implementar las unidades de procesado de im&aacute;genes y v&iacute;deos &#91;6&#150;12&#93;.</font></p>     <p align="justify"><font face="verdana" size="2">La implementaci&oacute;n de algoritmos    de visi&oacute;n computacional sobre dispositivos hardware paralelos es una    tarea ardua y compleja, donde es preciso un dominio sobre la plataforma de implementaci&oacute;n    y las herramientas de desarrollo. Una forma de solucionar este inconveniente    es mediante el uso de bibliotecas de procesado de im&aacute;genes y v&iacute;deos    configurables para dispositivos hardware, as&iacute; como el aumento del nivel    de abstracci&oacute;n de las herramientas de dise&ntilde;o electr&oacute;nico,    que faciliten la implementaci&oacute;n de sistemas de procesado complejos de    una forma r&aacute;pida y poco costosa, liberando al dise&ntilde;ador de los    detalles espec&iacute;ficos del hardware de los diferentes componentes &#91;2,3,13&#93;.</font></p>     <p align="justify"><font face="verdana" size="2">El dise&ntilde;o de hardware    digital basado en modelos es un nivel de abstracci&oacute;n intermedio que proporciona    una estrategia de desarrollo de sistemas empotrados que permite la f&aacute;cil    reutilizaci&oacute;n de componentes en ambientes de desarrollo gr&aacute;ficos    &#91;14&#93;. Este presenta la ventaja de ser m&aacute;s intuitivo para el desarrollo    de algunas aplicaciones, entre ellas el procesado de im&aacute;genes y v&iacute;deos,    con respecto a otras t&eacute;cnicas de dise&ntilde;o, ya que posibilita la    creaci&oacute;n de un prototipo con un comportamiento igual a como lo hacen    en el hardware, permitiendo adem&aacute;s la simulaci&oacute;n con condiciones    m&aacute;s reales y complejas. De esta forma la implementaci&oacute;n de algoritmos    sobre hardware se logra con una alta abstracci&oacute;n permitiendo la s&iacute;ntesis    de componentes en hardware &#91;5,12,13,15,16&#93;.</font></p>     <p align="justify"><font face="verdana" size="2">Para la implementaci&oacute;n    de algoritmos de visi&oacute;n computacional es conveniente la disponibilidad    de bibliotecas que incorporen la mayor cantidad posible de funciones para el    procesado. Aunque existe una gran cantidad de bibliotecas de procesado de im&aacute;genes    y v&iacute;deos desarrolladas para plataformas software basadas en PC y para    dispositivos empotrados, existen serias limitaciones para la utilizaci&oacute;n    de las bibliotecas para plataformas hardware. Algunas vienen asociadas a dispositivos    hardware espec&iacute;ficos o al pago de una licencia adicional; otras no se    encuentran disponibles o presentan muy pocos componentes, lo que limita su aplicabilidad    &#91;1,17&#150;24&#93;.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">Un aspecto a considerar en las    bibliotecas de componentes para procesado de im&aacute;genes y v&iacute;deos    en la disponibilidad de opciones de configuraci&oacute;n de los mismos. Las    bibliotecas software no poseen grandes opciones de configuraci&oacute;n, pues    dada la gran capacidad de memoria y la alta velocidad de los procesadores de    las computadoras personales actuales, no necesitan de par&aacute;metros para    optimizar el consumo de recursos de la plataforma de implementaci&oacute;n &#91;1,2,17,18&#93;.    En cambio, en las bibliotecas para sistemas de procesado hardware las opciones    de configuraci&oacute;n de sus componentes es un aspecto muy importante para    obtener las operaciones deseadas con un adecuado nivel de rendimiento y consumo    de recursos en correspondencia con la complejidad de la aplicaci&oacute;n. Las    opciones de configuraci&oacute;n de los bloques disponibles en las bibliotecas    hardware existentes son limitadas y dependen de las operaciones a realizar,    agrup&aacute;ndose en bloques para operaciones espec&iacute;ficas poco vers&aacute;tiles    o bloques gen&eacute;ricos poco adaptables.</font></p>     <p align="justify"><font face="verdana" size="2"><i>XIL XSGImgLib</i>es una biblioteca    de m&oacute;dulos hardware que ha sido desarrollada para la creaci&oacute;n    de sistemas de procesado de im&aacute;genes y v&iacute;deos complejos sobre    FPGA utilizando el flujo de dise&ntilde;o basado en modelos de MATLAB&reg;/Simulink&reg;/Xilinx    System Generator &#91;14,25&#93;. La misma cuenta con una amplia gama de bloques    de procesado que explotan las opciones de configuraci&oacute;n para adaptar    la arquitectura interna de los mismos a las necesidades de la aplicaci&oacute;n,    reduciendo as&iacute; el consumo de recursos hardware de la implementaci&oacute;n    y liberando al dise&ntilde;ador del conocimiento de los detalles de hardware    de la plataforma y la estructura de los diferentes bloques.</font></p>     <p align="justify"><font face="verdana" size="2">En este art&iacute;culo se describe    la reconfiguraci&oacute;n autom&aacute;tica de la arquitectura de algunos de    los m&oacute;dulos hardware disponibles en la biblioteca <i>XIL XSGImgLib</i>,    aprovechando caracter&iacute;sticas espec&iacute;ficas de la arquitectura de    estos m&oacute;dulos y empleando un novedoso procedimiento de modificaci&oacute;n    autom&aacute;tica del hardware sobre el flujo de dise&ntilde;o basado en modelos,    el cual puede ser extendido a otras aplicaciones. La organizaci&oacute;n del    art&iacute;culo es la siguiente. Primeramente se expone el procedimiento de    reconfiguraci&oacute;n autom&aacute;tica del hardware desarrollado sobre Xilinx    System Generator. A continuaci&oacute;n se exponen algunas caracter&iacute;sticas    de los bloques que implementan la operaci&oacute;n de convoluci&oacute;n que    permiten modificar su arquitectura, as&iacute; como la utilizaci&oacute;n del    procedimiento de reconfiguraci&oacute;n autom&aacute;tica de la arquitectura    de estos bloques, mostrando la influencia de las opciones de configuraci&oacute;n    sobre el consumo de recursos sobre un FPGA. Finalmente se resumen las conclusiones    del trabajo.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><strong>2.&#45; Procedimiento    de reconfiguraci&oacute;n autom&aacute;tica</strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2">Dos de las principales ventajas    del flujo de dise&ntilde;o basado en modelos radican en el r&aacute;pido desarrollo    de prototipos de sistemas de procesado y la posibilidad de emplear una m&aacute;scara    de configuraci&oacute;n que permite cambiar los par&aacute;metros y, en algunos    casos, la arquitectura hardware de los bloques de procesado. Para esto &uacute;ltimo    se requiere de un procedimiento (implementado mediante segmentos de c&oacute;digo    en MATLAB&reg;) que permita ajustar la estructura hardware de los diferentes    bloques, seg&uacute;n las opciones de la m&aacute;scara de configuraci&oacute;n,    para adecuar la arquitectura a los requerimientos espec&iacute;ficos de cada    aplicaci&oacute;n, manteniendo as&iacute; una adecuada relaci&oacute;n entre    el consumo de recursos del FPGA y los requerimientos temporales. Estas opciones    aumentan la versatilidad de los bloques de procesado de la biblioteca <i>XIL    XSGImgLib</i> y permiten el desarrollo de sistemas de visi&oacute;n computacional    personalizados.</font></p>     <p align="justify"><font face="verdana" size="2">En el flujo de dise&ntilde;o    convencional utilizando lenguajes de descripci&oacute;n de hardware (HDL) la    configuraci&oacute;n de un m&oacute;dulo de procesado se lleva a cabo mediante    par&aacute;metros gen&eacute;ricos definidos en el c&oacute;digo HDL. Mediante    estos par&aacute;metros se puede ajustar la cantidad de bits de las entradas    y salidas del bloque, as&iacute; como cambiar la arquitectura interna del mismo,    instanciando componentes descritos en el c&oacute;digo e interconect&aacute;ndolos    entre s&iacute;. Para el flujo de dise&ntilde;o basado en modelos la configuraci&oacute;n    se realiza a partir de la ventana de configuraci&oacute;n del bloque principal,    tambi&eacute;n conocida como m&aacute;scara, parametrizando los m&oacute;dulos    que lo componen y permitiendo el cambio de la arquitectura interna del m&oacute;dulo    en caso de ser posible. Para esta tarea se requiere de un procedimiento software    que la realice.</font></p>     <p align="justify"><font face="verdana" size="2">De forma general, el dise&ntilde;o    de un bloque de procesado empleando Simulink&reg; se efect&uacute;a mediante    la inserci&oacute;n y la uni&oacute;n, por el dise&ntilde;ador, de bloques o    m&oacute;dulos disponibles en las bibliotecas de la herramienta, generando un    modelo almacenado en un archivo (<i>Archivo.mdl/slx</i>). Este proceso (<a href="#fig1">Figura    1</a>) se realiza de forma gr&aacute;fica sobre un &aacute;rea cuyo punto superior    izquierdo representa el origen y donde cada m&oacute;dulo que integra el sistema    de procesado se identifica con un nombre (<i>M&oacute;dulo<sub>x</sub></i>)    y un tipo (<i>Tipo<sub>x</sub></i>) situado en una posici&oacute;n conocida,    la cual se especifica por las coordenadas de la esquina superior izquierda (<i>X1</i>,    <i>Y1</i>) y la esquina inferior derecha (<i>X2</i>, <i>Y2</i>). A esta informaci&oacute;n    se le a&ntilde;aden las interconexiones de las entradas y salidas del m&oacute;dulo    con los restantes componentes del dise&ntilde;o, permitiendo realizar un esbozo    de la arquitectura del sistema de procesado mediante un segmento de c&oacute;digo    en MATLAB&reg;. Este dise&ntilde;o es empaquetado en un subsistema de Simulink&reg;,    creando un bloque de procesado.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0103316.jpg"><a name="fig1"/>      
]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">MATLAB&reg; provee una serie    de funciones que permiten obtener y establecer los par&aacute;metros de los    componentes de un dise&ntilde;o, as&iacute; como desconectar, eliminar, conectar    y agregar diferentes m&oacute;dulos disponibles en una biblioteca &#91;26&#150;29&#93;.    Estas funciones son empleadas en la creaci&oacute;n de segmentos de c&oacute;digo    o subrutinas, incluidos en las funcionalidades de la biblioteca de procesado    <i>XIL XSGImgLib,</i> para adquirir la posici&oacute;n y la orientaci&oacute;n    de los m&oacute;dulos del bloque de procesado para la arquitectura gen&eacute;rica    del mismo, donde est&aacute;n presentes todos los posibles componentes del dise&ntilde;o.    La <a href="#fig2">Figura 2</a> muestra el proceso de an&aacute;lisis de la    arquitectura del nivel superior de un bloque de procesado. El archivo del modelo    (<i>Archivo.mdl/slx</i>) es explorado por un segmento de c&oacute;digo desarrollado    en el marco de esta investigaci&oacute;n (<i>Script de an&aacute;lisis.m</i>)    para crear un registro en el espacio de trabajo de MATLAB&reg; (<i>Bloque.mat</i>)    con los datos que definen a cada m&oacute;dulo en la arquitectura gen&eacute;rica.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0203316.jpg"><a name="fig2"/>      
<p align="justify"><font face="verdana" size="2">La <a href="#fig3">Figura 3</a>    muestra el diagrama de flujo para realizar el an&aacute;lisis de la arquitectura    gen&eacute;rica de un bloque de procesado. Todos los m&oacute;dulos (<i>n</i>)    que componen el dise&ntilde;o son analizados empleando como referencia sus nombres    (<i>m&oacute;dulo<sub>i</sub></i>) e indagando si est&aacute;n presentes en    la arquitectura. Para los m&oacute;dulos presentes, se obtienen las coordenadas    que los delimitan as&iacute; como su orientaci&oacute;n, almacenando esta informaci&oacute;n    en variables del espacio de trabajo. Una vez terminado de procesar todos los    m&oacute;dulos, esta informaci&oacute;n es exportada a un archivo de variables    de MATLAB&reg; (<i>.mat</i>) para ser empleada en la modificaci&oacute;n de    la arquitectura.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0303316.jpg"><a name="fig3"/>     
<p align="justify"><font face="verdana" size="2">El proceso de reconfiguraci&oacute;n    autom&aacute;tica de la estructura interna de un bloque (<a href="#fig4">Figura    4</a>) necesita de un c&oacute;digo en MATLAB&reg; (<i>Script de configuraci&oacute;n.m</i>)    que simplifique el trabajo del usuario de la biblioteca a la hora de adaptar    la arquitectura a las necesidades de la aplicaci&oacute;n. Como parte de las    funcionalidades de las bibliotecas de procesado se desarrollan varios segmentos    de c&oacute;digo en MATLAB&reg; que permiten realizar el cambio de la arquitectura    de algunos de los bloques disponibles. Al cambiar las opciones de la m&aacute;scara    el script de configuraci&oacute;n, en conjunto con los par&aacute;metros de    la arquitectura gen&eacute;rica almacenados previamente (<i>Bloque.mat</i>),    modifica autom&aacute;ticamente el archivo del modelo original creando un nuevo    archivo modificado (<i>Archivo MOD.mdl/slx</i>), cambiando as&iacute; la arquitectura    interna del bloque desarrollado &#91;29&#150;33&#93;.</font></p>        <p align="center"><img src="/img/revistas/eac/v37n3/f0403316.jpg"><a name="fig4"/>      
<p align="justify"><font face="verdana" size="2">La <a href="#fig1">Figura 1</a>    muestra la arquitectura interna gen&eacute;rica de un bloque configurable que    realiza una operaci&oacute;n con cuatro valores a la entrada mediante tres m&oacute;dulos    de dos entradas cada uno. Al seleccionar una configuraci&oacute;n de dos entradas    desde la m&aacute;scara de configuraci&oacute;n, se ejecuta autom&aacute;ticamente    el script de configuraci&oacute;n para realizar el ajuste de la arquitectura    interna del bloque de procesado (<a href="#fig5">Figura 5a</a>). Primeramente    se detectan los m&oacute;dulos que ya no son necesarios en el dise&ntilde;o    (las entradas <i>C</i> y <i>D</i>; y los m&oacute;dulos <i>2</i> y <i>3</i>)    y se ejecutan las subrutinas para eliminar los mismos.</font></p>        <p align="center"><img src="/img/revistas/eac/v37n3/f0503316.jpg"><a name="fig5"/>      
<p align="justify"><font face="verdana" size="2">Para eliminar un m&oacute;dulo    del dise&ntilde;o (<i>M&oacute;dulo<sub>3</sub></i>), como se describe en el    diagrama de flujo de la <a href="/img/revistas/eac/v37n3/f0603316.jpg">Figura 6a</a>, primeramente    se comprueba si el m&oacute;dulo est&aacute; presente y, en caso afirmativo,    se desconectan las entradas y salidas del m&oacute;dulo en an&aacute;lisis (las    interconexiones con la salida <i>O</i> y los m&oacute;dulos <i>1</i> y <i>2</i>)    para luego eliminarlo. Por &uacute;ltimo, se interconectan las entradas y salidas    de los m&oacute;dulos que han quedado desconectados en el dise&ntilde;o (el    <i>M&oacute;dulo<sub>1</sub></i> y la salida <i>O</i>), y se ejecuta el mismo    algoritmo para eliminar los restantes m&oacute;dulos en la arquitectura (el    <i>M&oacute;dulo<sub>2</sub></i> y las entradas <i>C</i> y <i>D</i>).</font></p>     
<p align="justify"><font face="verdana" size="2">En caso de pasar de la arquitectura    de dos entradas a una de tres entradas (<a href="#fig5">Figura 5b</a>) el bloque    debe ser configurado para esta nueva estructura. Primeramente se analizan los    m&oacute;dulos que son necesarios en la nueva arquitectura y cu&aacute;les de    ellos no se encuentran en la arquitectura actual (la entrada <i>C</i> y el <i>M&oacute;dulo<sub>3</sub></i>).    Para a&ntilde;adir un m&oacute;dulo se ejecuta un c&oacute;digo en MATLAB&reg;,    el cual se representa en el diagrama de flujo de la <a href="/img/revistas/eac/v37n3/f0603316.jpg">Figura    6b</a>, donde, si el m&oacute;dulo no est&aacute; presente en la arquitectura    (<i>M&oacute;dulo<sub>3</sub></i>), se desconectan los m&oacute;dulos intermedios    (el <i>M&oacute;dulo<sub>1</sub></i> y la salida <i>O</i>), se a&ntilde;ade    el m&oacute;dulo correspondiente y se interconecta con los restantes. Por &uacute;ltimo,    se realiza la configuraci&oacute;n del m&oacute;dulo a&ntilde;adido, paso tambi&eacute;n    llevado a cabo cuando el m&oacute;dulo existe en el dise&ntilde;o, y se ejecuta    la subrutina para el pr&oacute;ximo m&oacute;dulo necesario en la arquitectura    (la entrada <i>C</i>). En la etapa de agregar un m&oacute;dulo al dise&ntilde;o    se deben conocer el nombre y su ubicaci&oacute;n en las paletas de las bibliotecas    incluidas en Simulink&reg;, adem&aacute;s de los valores de la posici&oacute;n    y la orientaci&oacute;n del m&oacute;dulo, adquiridos en el proceso de an&aacute;lisis    de la arquitectura gen&eacute;rica.</font></p>     
]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">Otra operaci&oacute;n a realizar    en la arquitectura de un bloque es la sustituci&oacute;n de un m&oacute;dulo    por otro diferente empleando el diagrama de flujo de la <a href="/img/revistas/eac/v37n3/f0603316.jpg">Figura    6c</a>. Para esto se ejecutan las subrutinas ya descritas para eliminar y a&ntilde;adir    bloques.</font></p>     
<p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><strong>3.&#45; Reconfiguraci&oacute;n    autom&aacute;tica de bloques de convoluci&oacute;n</strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2">Con el objetivo de ilustrar el    procedimiento de reconfiguraci&oacute;n autom&aacute;tica implementado en la    biblioteca <i>XIL XSGImgLib</i> a continuaci&oacute;n se exponen las caracter&iacute;sticas    del bloque gen&eacute;rico de convoluci&oacute;n que permiten la modificaci&oacute;n    autom&aacute;tica de su arquitectura.</font></p>     <p align="justify"><font face="verdana" size="2">El filtrado espacial es la operaci&oacute;n    caracter&iacute;stica del procesado de im&aacute;genes, realizando una transformaci&oacute;n,    lineal o no lineal, sobre los <i>p</i>&times;<i>q</i> p&iacute;xeles de la imagen    contenidos en una ventana de <i>p</i> filas y <i>q</i> columnas. Muchas de las    etapas de un sistema de procesado de im&aacute;genes y v&iacute;deos se basan    en el filtrado espacial de la imagen <i>f(x,y)</i> con una matriz de vecindad    <i>w(i,j)</i>, mostrada en la <a href="#ec1">ecuaci&oacute;n (1)</a>, con centro    en la coordenada <i>(0,0)</i> que define las modificaciones a realizar en la    imagen (34). De acuerdo a la forma en que viajan los p&iacute;xeles por el sistema    de procesado estos algoritmos necesitan de bloques de conversi&oacute;n del    flujo serie de p&iacute;xeles a paralelo para lograr obtener todos los p&iacute;xeles    en la ventana al mismo tiempo y realizar las operaciones en paralelo.</font></p>     <p><img src="/img/revistas/eac/v37n3/e0103316.gif"><a name="ec1"/>      
<p align="justify"><font face="verdana" size="2">La operaci&oacute;n de convoluci&oacute;n    (*) es el exponente principal del procesado espacial lineal de im&aacute;genes,    donde se desplaza la vecindad de p&iacute;xeles o n&uacute;cleo de convoluci&oacute;n    (<i>w</i>) sobre la imagen (<i>f</i>) evaluando la <a href="#ec2">expresi&oacute;n    (2)</a> &#91;34&#93;.</font></p>     <p><img src="/img/revistas/eac/v37n3/e0203316.gif"><a name="ec2"/>      
<p align="justify"><font face="verdana" size="2">La t&eacute;cnica de convoluci&oacute;n    permite diversos resultados en las im&aacute;genes procesadas de acuerdo con    la estructura del n&uacute;cleo de convoluci&oacute;n. Dicha estructura puede    ser aprovechada para ajustar la arquitectura interna del bloque de procesado,    ajustando el consumo de recursos en dependencia de las necesidades de la aplicaci&oacute;n.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">Para ilustrar las operaciones    a realizar en la convoluci&oacute;n de una imagen, si se tiene un n&uacute;cleo    de convoluci&oacute;n de <i>2&times;2</i> con valores mostrados en <a href="#ec3">(3)</a>,    el valor de un p&iacute;xel resultante de la operaci&oacute;n de convoluci&oacute;n    <a href="#ec2">(2)</a> se obtiene mediante la expresi&oacute;n <a href="#ec4">(4)</a>.</font></p>        <p><img src="/img/revistas/eac/v37n3/e0303316.gif"><a name="ec3"/>      
<p><img src="/img/revistas/eac/v37n3/e0403316.gif"><a name="ec4"/>       
<p align="justify"><font face="verdana" size="2">La implementaci&oacute;n b&aacute;sica    de esta operaci&oacute;n de convoluci&oacute;n (<a href="#fig7">Figura 7a</a>)    precisa de m&oacute;dulos de multiplicaci&oacute;n (<i>Mult<sub>x</sub></i>),    adem&aacute;s de sumas en cascadas (<i>AddSub<sub>x</sub></i>) para obtener    el resultado de un nuevo p&iacute;xel. En esta figura se muestra la etapa de    multiplicaci&oacute;n de la operaci&oacute;n y la primera etapa de las sumas    en cascadas.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0703316.jpg"><a name="fig7"/>     
<p align="justify"><font face="verdana" size="2">Si se analiza el n&uacute;cleo    de convoluci&oacute;n es posible encontrar caracter&iacute;sticas que permiten    el cambio de la arquitectura del bloque y conducen a la simplificaci&oacute;n    de la implementaci&oacute;n de la versi&oacute;n gen&eacute;rica y con ello    la reducci&oacute;n del consumo de recursos. Una de estas caracter&iacute;sticas    es la simetr&iacute;a. Si se tiene un n&uacute;cleo de convoluci&oacute;n sim&eacute;trico    de <i>2</i>&times;<i>2</i> p&iacute;xeles, como el mostrado en <a href="#ec5">(5)</a>,    entonces es posible reducir el n&uacute;mero de operaciones de multiplicaci&oacute;n    realizando la suma de los valores de los p&iacute;xeles correspondientes a los    valores sim&eacute;tricos antes de multiplicarlos por el valor del n&uacute;cleo,    como muestra la <a href="#ec6">expresi&oacute;n (6)</a>.</font></p>     <p><img src="/img/revistas/eac/v37n3/e0503316.gif"><a name="ec5"/>      
<p><img src="/img/revistas/eac/v37n3/e0603316.gif"><a name="ec6"/>      
<p align="justify"><font face="verdana" size="2">La implementaci&oacute;n del    operador de convoluci&oacute;n con un n&uacute;cleo sim&eacute;trico (<a href="#fig7">Figura    7b</a>) reduce el n&uacute;mero de multiplicadores en <i>p(q&#45;1)/2</i> necesarios    para el desarrollo de la operaci&oacute;n definida en la ecuaci&oacute;n &#91;35&#93;.</font></p>     <p align="justify"><font face="verdana" size="2">Muchos de los n&uacute;cleos    de convoluci&oacute;n definidos para las operaciones de modificaci&oacute;n    de las im&aacute;genes presentan valores reducibles en su contenido. Un valor    reducible es un n&uacute;mero (&#45;1, 0, y 1) que no precisa del uso de un    multiplicador el cual puede ser omitido o sustituido por un m&oacute;dulo que    emplee menor cantidad de recursos l&oacute;gicos. Si se tiene un n&uacute;cleo    de convoluci&oacute;n de <i>2</i>&times;<i>2</i> p&iacute;xeles con valores    reducibles como el mostrado en <a href="#ec7">(7)</a> entonces es posible simplificar    el n&uacute;mero de operaciones de multiplicaci&oacute;n cuyos valores en el    n&uacute;cleo sean cero, uno y menos uno, como muestra la <a href="#ec8">ecuaci&oacute;n    (8)</a>.</font></p>     ]]></body>
<body><![CDATA[<p><img src="/img/revistas/eac/v37n3/e0703316.gif"><a name="ec7"/>      
<p><img src="/img/revistas/eac/v37n3/e0803316.gif"><a name="ec8"/>      
<p align="justify"><font face="verdana" size="2">La implementaci&oacute;n de la    operaci&oacute;n de convoluci&oacute;n con t&eacute;rminos reducibles (<a href="#fig7">Figura    7c</a>) permite eliminar las entradas cuyo valor en el n&uacute;cleo sea cero,    eliminar el bloque de multiplicaci&oacute;n en las entradas con valor unitario    y sustituir el multiplicador por el bloque de negado a los p&iacute;xeles con    modificador menos uno.</font></p>     <p align="justify"><font face="verdana" size="2">Otro aspecto importante en el    procesado de im&aacute;genes y v&iacute;deos es la normalizaci&oacute;n de las    operaciones matem&aacute;ticas. Al trabajar con im&aacute;genes en modelos de    representaci&oacute;n definidos, como RGB o escala de grises, se espera que    las im&aacute;genes resultantes mantengan la escala original, operaci&oacute;n    conocida como normalizaci&oacute;n. Si la salida no presenta la misma escala    que la entrada ocurre un desbordamiento en los p&iacute;xeles de la imagen resultante,    aplic&aacute;ndose, seg&uacute;n la parametrizaci&oacute;n del bloque de procesado,    el control del desbordamiento de los p&iacute;xeles. La forma de realizar la    normalizaci&oacute;n del n&uacute;cleo de convoluci&oacute;n depende de la estructura    del mismo, dividiendo cada uno de los p&iacute;xeles por la suma total de sus    valores, excepto cuando la misma es cero, donde se normalizan los valores positivos    y negativos del n&uacute;cleo por separado. Para el caso de la operaci&oacute;n    promedio, el n&uacute;cleo no normalizado presenta todos los valores en uno    (<a href="#fig8">Figura 8a</a>) siendo estos valores enteros, mientras que el    n&uacute;cleo normalizado presenta valores en el dominio de los n&uacute;meros    reales (<a href="#fig8">Figura 8b</a>).</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0803316.jpg"><a name="fig8"/>     
<p align="justify"><font face="verdana" size="2">La implementaci&oacute;n del    algoritmo de convoluci&oacute;n para hardware reconfigurable ha encontrado aplicaci&oacute;n    pr&aacute;ctica en diferentes &aacute;reas, siendo una necesidad com&uacute;n    la rapidez en la ejecuci&oacute;n de los mismos. La arquitectura del bloque    gen&eacute;rico de convoluci&oacute;n <i>XIL Convolution</i>, incluido en la    biblioteca <i>XIL XSGImgLib</i> y mostrado en la <a href="#fig9">Figura 9</a>,    explota las caracter&iacute;sticas de simetr&iacute;a, valores reducibles y    normalizaci&oacute;n del n&uacute;cleo, permitiendo modificar autom&aacute;ticamente    su arquitectura en funci&oacute;n de la m&aacute;scara de configuraci&oacute;n    del bloque. En l&iacute;neas discontinuas se muestran los bloques y conexiones    que pueden ser modificados en la arquitectura dependiendo de las opciones de    configuraci&oacute;n.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/f0903316.jpg"><a name="fig9"/>     
<p align="justify"><font face="verdana" size="2">La primera etapa del filtrado    es la conversi&oacute;n del flujo serie de p&iacute;xeles a paralelo mediante    los bloques de registros. Los p&iacute;xeles que llegan desde el almacenador    de l&iacute;nea (line<sub>x</sub>) son paralelizados obteniendo <i>pxq</i> p&iacute;xeles    (pxl<sub>x</sub>) a la entrada de la etapa de multiplicaci&oacute;n. La segunda    etapa de procesado se encarga de la multiplicaci&oacute;n de los p&iacute;xeles    por el n&uacute;cleo rotado 180<sup>o</sup>. Los valores del n&uacute;cleo de    convoluci&oacute;n son enviados a los bloques de multiplicaci&oacute;n (<i>Mult<sub>x</sub></i>)    en conjunto con los p&iacute;xeles en la ventana a los que modifican. A su vez,    los valores del n&uacute;cleo son analizados para detectar la simetr&iacute;a    del mismo y la presencia de valores reducibles para ejecutar el procedimiento    de modificaci&oacute;n autom&aacute;tica de la arquitectura del bloque. Para    el caso de la simetr&iacute;a, la etapa de multiplicaci&oacute;n en conjunto    con la primera etapa de suma son reconfiguradas para reducir la cantidad de    bloques de multiplicaci&oacute;n, mientras que para los valores reducibles los    multiplicadores son eliminados o substituidos seg&uacute;n se precise.</font></p>     <p align="justify"><font face="verdana" size="2">La tercera etapa del bloque de    convoluci&oacute;n gen&eacute;rico es la suma en cascada del resultado de los    bloques de multiplicaci&oacute;n, para la cual se utilizan m&oacute;dulos de    suma (<i>AddSub</i>) de dos entradas. Por &uacute;ltimo el bloque de c&aacute;lculo    de valor absoluto (<i>ABS</i>), efect&uacute;a esta operaci&oacute;n para el    resultado de la suma en cascada. Este bloque se implementa si el n&uacute;cleo    de convoluci&oacute;n presenta valores negativos, colocando el bloque de <i>ABS</i>    entre la salida de la etapa de suma (<i>pxl<sub>sum</sub></i>) y la salida del    bloque de procesado (<i>pxl<sub>out</sub></i>); en caso contrario el bloque    de <i>ABS</i> es eliminado, interconectando la etapa de suma con la salida.</font></p>     <p align="justify"><font face="verdana" size="2">La <a href="#fig10">Figura 10</a>    muestra un segmento de la ventana de configuraci&oacute;n del bloque de procesado.    La parametrizaci&oacute;n del n&uacute;cleo de convoluci&oacute;n (<i>Convolution    Kernel</i>) permite la selecci&oacute;n de la operaci&oacute;n (<i>Operation</i>)    entre varias ya predefinidas o la introducci&oacute;n de un n&uacute;cleo manualmente    (<i>Manual entry</i>). Adem&aacute;s, es posible habilitar la detecci&oacute;n    de simetr&iacute;a en el n&uacute;cleo seleccionado (<i>Automatic detect symmetric    kernel</i>), la normalizaci&oacute;n del n&uacute;cleo de convoluci&oacute;n    (<i>Use normalized kernel</i>) y el uso de valor absoluto a la salida (<i>Absolute    value output</i>). Todas estas opciones realizan el an&aacute;lisis del n&uacute;cleo    de convoluci&oacute;n y provocan la modificaci&oacute;n de la arquitectura empleando    el procedimiento descrito en el apartado anterior.</font></p>     ]]></body>
<body><![CDATA[<p align="center"><img src="/img/revistas/eac/v37n3/f1003316.jpg"><a name="fig10"/>     
<p align="justify"><font face="verdana" size="2">El consumo de recursos del bloque    de convoluci&oacute;n gen&eacute;rico <i>XIL Convolution</i> depende del tama&ntilde;o    de la ventana de procesado, la composici&oacute;n del n&uacute;cleo de convoluci&oacute;n    y de las opciones de configuraci&oacute;n empleadas. El peor caso se obtiene    para la operaci&oacute;n de promedio de los p&iacute;xeles en la ventana (<i>Average</i>)    con total precisi&oacute;n y valores del n&uacute;cleo normalizados, ya que    la composici&oacute;n del n&uacute;cleo no reduce ning&uacute;n elemento, utilizando    todos los bloques de multiplicaci&oacute;n y los sumadores en cascada. Los detalles    de implementaci&oacute;n para una ventana de 3&times;3 y 5&times;5 con configuraci&oacute;n    sim&eacute;trica y no sim&eacute;trica sobre un FPGA <i>Spartan&#45;6 LX45</i>    se muestran en la <a href="#tab1">Tabla 1</a>, mientras, que los resultados    de la normalizaci&oacute;n de las operaciones matem&aacute;ticas se muestran    en la <a href="#tab2">Tabla 2</a>.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/T0103316.gif"><a name="tab1"/>      
<p align="justify"><font face="verdana" size="2">La configuraci&oacute;n sim&eacute;trica,    en comparaci&oacute;n con la no sim&eacute;trica, reduce en <i>p(q&#45;1)/2</i>    los bloques de multiplicaci&oacute;n mientras que el consumo de recursos l&oacute;gicos    muestra una reducci&oacute;n de un 6,25% de los slices para la configuraci&oacute;n    sim&eacute;trica de 3&times;3 y un incremento de un 18,28% para la configuraci&oacute;n    sim&eacute;trica de 5&times;5. Este incremento se debe a la sustituci&oacute;n    de los operadores de multiplicaci&oacute;n por sumas en la configuraci&oacute;n    sim&eacute;trica. En cuanto a la frecuencia de trabajo se logra alcanzar el    procesado de un p&iacute;xel cada 3,57 &#951;s para el peor caso.</font></p>     <p align="justify"><font face="verdana" size="2">El an&aacute;lisis de la opci&oacute;n    de normalizaci&oacute;n de las operaciones depende del n&uacute;cleo de convoluci&oacute;n    empleado. Para el caso de la operaci&oacute;n promedio, el n&uacute;cleo no    normalizado, mostrado en la <a href="#fig8">Figura 8a</a>, presenta todos los    valores en uno por lo que se aplican las opciones para reducir los multiplicadores,    operaci&oacute;n imposible cuando se normaliza el n&uacute;cleo (<a href="#fig8">Figura    8b</a>). La normalizaci&oacute;n de las operaciones del bloque de convoluci&oacute;n    gen&eacute;rica presenta un consumo de recursos superior en 18 y 43 slices para    ventanas de 3&times;3 y 5&times;5 respectivamente en comparaci&oacute;n con    la versi&oacute;n no normalizada. Adem&aacute;s se emplean nueve y 25 bloques    de multiplicaci&oacute;n en la configuraci&oacute;n no sim&eacute;trica normalizada    mientras que los mismos son eliminados en la configuraci&oacute;n no normalizada,    incrementando, esta &uacute;ltima, la frecuencia de procesado en 42 MHz.</font></p>     <p align="center"><img src="/img/revistas/eac/v37n3/t0203316.gif"><a name="tab2"/>      
<p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><strong>4.&#45; CONCLUSIONES</strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2">Se ha descrito un procedimiento    que permite la modificaci&oacute;n autom&aacute;tica de la arquitectura hardware    de un bloque de procesado desarrollado para el flujo de dise&ntilde;o de MATLAB&reg;/Simulink&reg;/Xilinx    System Generator. Este proceso se realiza mediante un c&oacute;digo en MATLAB&reg;    para la instanciaci&oacute;n, eliminaci&oacute;n, interconexi&oacute;n y configuraci&oacute;n    de los m&oacute;dulos internos que componen un bloque de procesado, modificando    as&iacute; su estructura hardware y el funcionamiento de bloque. La inclusi&oacute;n    de estos segmentos de c&oacute;digo como parte de la biblioteca <i>XIL XSGImgLib</i>    simplifica el uso de los bloques de procesado y libera al dise&ntilde;ador de    conocer los detalles espec&iacute;ficos de sus arquitecturas. Las opciones de    implementaci&oacute;n hardware disponibles para el bloque de convoluci&oacute;n    gen&eacute;rico de la biblioteca <i>XIL XSGImgLib</i> hacen posible la reconfiguraci&oacute;n    autom&aacute;tica de su arquitectura mediante la ejecuci&oacute;n del procedimiento    descrito y el an&aacute;lisis de la estructura del n&uacute;cleo de convoluci&oacute;n,    permitiendo ajustar el consumo de recursos de la implementaci&oacute;n. El empleo    de un n&uacute;cleo sim&eacute;trico reduce <i>p(q&#45;1)/2</i> bloques de multiplicaci&oacute;n    en comparaci&oacute;n con la versi&oacute;n no sim&eacute;trica, mientras que    la presencia de valores reducibles en el n&uacute;cleo conlleva a la sustituci&oacute;n    o eliminaci&oacute;n de bloques de multiplicaci&oacute;n que, adicionalmente    permiten incrementar la frecuencia de procesado del bloque.</font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">El procedimiento de reconfiguraci&oacute;n    autom&aacute;tica de la arquitectura se aplica a muchos otros bloques de la    biblioteca <i>XIL XSGImgLib,</i> pudiendo ser extendido a otras bibliotecas    de procesado.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><strong>AGRADECIMIENTOS</strong></font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="2">Esta investigaci&oacute;n ha    sido financiada parcialmente por la Agencia Espa&ntilde;ola de Cooperaci&oacute;n    Internacional para el Desarrollo (AECID) mediante los proyectos PCI D/024124/09,PCI    D/030769/10 y PCI A1/039607/11 (<a href="http://www2.imse&#45;cnm.csic.es/fortin/" target="_blank">http://www.imse&#45;cnm.csic.es/fortin</a>),    as&iacute; como por el programa CAPES/MES mediante el proyecto 219/2013.</font></p>     <p align="justify">&nbsp;</p>     <p align="justify"><font face="verdana" size="3"><strong>REFERENCIAS</strong></font></p>     <p align="justify">&nbsp;</p>     <!-- ref --><p align="justify"><font face="verdana" size="2">1. &nbsp;&nbsp;&nbsp;&nbsp; Bradski    G, Kaehler A. Loukides M, Monaghan R, editors. Learning OpenCV. 1st ed. Gravenstein    Highway North, Sebastopol, CA: O'Reilly Media, Inc.; 2008. 571 p.    </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2">2. &nbsp;&nbsp;&nbsp;&nbsp; Gonz&aacute;lez    RC, Woods RE, Eddins SL. Digital Image Processing using MATLAB. 2nd ed. USA:    Gatesmark Publishing; 2009. 827 p.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">3. &nbsp;&nbsp;&nbsp;&nbsp; Grimm    F, Bunke H, H&auml;hlen J. An approach to expert systems for image processing    software libraries. Mathematics and Computers in Simulation. 1994;36:303&#150;13.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">4. &nbsp;&nbsp;&nbsp;&nbsp; Pulli    K, Baksheev A, Kornyakov K, Eruhimov V. Real&#45;time computer vision with OpenCV.    Communications of the ACM. 2012;55(6):61&#150;9.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">5. &nbsp;&nbsp;&nbsp;&nbsp; Toledo    Moreo A, Navarro Lorente P, Soto Valles F, Suard&iacute;az Muro J, Fern&aacute;ndez    Andr&eacute;s C. Experiences on developing computer vision hardware algorithms    using Xilinx System Generator. Microprocessors and Microsystems. 2005;29:411&#150;9.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">6. &nbsp;&nbsp;&nbsp;&nbsp; Bailey    DG. Design for Embedded Image Processing on FPGAs. 1st ed. Singapore: John Wiley    &amp; Sons (Asia) Pte Ltd; 2011. 496 p.    </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2">7. &nbsp;&nbsp;&nbsp;&nbsp; Hiraiwa    J, Amano H. An FPGA Implementation of Reconfigurable Real&#45;Time Vision Architecture.    27th International Conference on Advanced Information Networking and Applications    Workshops. Barcelona, Spain: IEEE; 2013. p. 150&#150;5.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">8. &nbsp;&nbsp;&nbsp;&nbsp; Gorgon    M, Tadeusiewicz R. Hardware&#45;based image processing library for Virtex FPGA.    Reconfigurable Technology: FPGAs for Computing and Applications II. 2000;4212:1&#150;10.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">9. &nbsp;&nbsp;&nbsp;&nbsp; Genovese    M, Napoli E. An FPGA&#45;based Real&#45;time Background Identification Circuit    for 1080p Video. Eighth International Conference on Signal Image Technology    and Internet Based Systems. Naples: IEEE; 2012. p. 330&#150;5.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">10. &nbsp;&nbsp; Wiatr K, Jamro    E. Implementation image data convolutions operations in FPGA reconfigurable    structures for real&#45;time vision systems. International Conference on Information    Technology: Coding and Computing. Las Vegas, NV, USA: IEEE Comput. Soc; 2000.    p. 152&#150;7.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">11. &nbsp;&nbsp; Toledo Moreo    A, Cuenca&#45;Asensi S, Suard&iacute;az Muro J. Codesign Environment for Computer    Vision Hw/Sw Systems. In: Crist&oacute;bal G, Javidi B, Vallmitjana S, editors.    5th International Workshop on Informational Optics. Toledo, Spain: AIP; 2006.    p. 527&#150;36.    </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2">12. &nbsp;&nbsp; Toledo Moreo    A, Suard&iacute;az Muro J, Cuenca&#45;Asensi S. Entorno de codise&ntilde;o para    sistemas heterog&eacute;neos de procesamiento de imagen. XXVI Jornadas de Autom&aacute;tica.    Alicante &#45; Elche, Espa&ntilde;a: Comit&eacute; Espa&ntilde;ol de Autom&aacute;tica    CEA&#45;IFAC; 2005. p. 1113&#150;20.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">13. &nbsp;&nbsp; Vicente&#45;Chicote    C, Toledo Moreo A, S&aacute;nchez&#45;Palma P. Image Processing Application    Development: From Rapid Prototyping to SW/HW Co&#45;simulation and Automated    Code Generation. In: Marques JS, P&eacute;rez de la Blanca N, Pina P, editors.    Second Iberian Conference, Pattern Recognition and Image Analysis Lecture Notes    in Computer Science. Estoril, Portugal: Springer Berlin Heidelberg; 2005. p.    659&#150;66.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">14. &nbsp;&nbsp; Garc&eacute;s&#45;Socarr&aacute;s    LM, S&aacute;nchez&#45;Solano S, Brox Jim&eacute;nez P, Cabrera Sarmiento AJ.    Library for model&#45;based design of image processing algorithms on FPGAs.    Revista de la Facultad de Ingenier&iacute;a Universidad Antioquia. 2013;1(68):36&#150;47.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">15. &nbsp;&nbsp; Toledo Moreo    A, Vicente&#45;Chicote C, Suard&iacute;az Muro J, Cuenca&#45;Asensi S. Xilinx    System Generator Based HW Components for Rapid Prototyping of Computer Vision    SW/HW Systems. In: Marques JS, P&eacute;rez de la Blanca N, Pina P, editors.    Second Iberian Conference, Pattern Recognition and Image Analysis Lecture Notes    in Computer Scienceond Iberian Conference. Estoril, Portugal: Springer Berlin    Heidelberg; 2005. p. 667&#150;74.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">16. &nbsp;&nbsp; Toledo Moreo    A, Suard&iacute;az Muro J, Cuenca&#45;Asensi S, Grediaga A. Novel Simulink Blockset    for Image Processing Codesign. IEEE Mediterranean Electrotechnical Conference.    M&aacute;laga, Spain: IEEE; 2006. p. 117&#150;20.    </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2">17. &nbsp;&nbsp; Couprie M. PINK    image processing library. Meeting on Image Processing Libraries. Paris, France;    2012. p. 1&#150;4.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">18. &nbsp;&nbsp; Tschumperl&eacute;    D. The CImg Library. Meeting on Image Processing Libraries. Paris, France; 2012.    p. 1&#150;4.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">19. &nbsp;&nbsp; Maddocks J,    Williams R. VHDL Image Processing Source Modules &#91;Internet&#93;. Hunt Engineering.    Brent Knoll, Somerset, UK: Hunt Engineering; 2006. Available from: <a href="http://www.hunteng.co.uk/pdfs/tutor/FPGAImagingReference.pdf" target="_blank">http://www.hunteng.co.uk/pdfs/tutor/FPGAImagingReference.pdf</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">20. &nbsp;&nbsp; Xilinx. Xilinx    CORE Generator System. www.xilinx.com. 2014 &#91;cited 2015 Jan 21&#93;. p.    1. Available from: <a href="http://www.xilinx.com/tools/coregen.htm" target="_blank">http://www.xilinx.com/tools/coregen.htm</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">21. &nbsp;&nbsp; Altera. Video    and Image Processing Suite. San Jos&eacute;, CA, USA: Altera Corporation; 2014.    239 p.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">22. &nbsp;&nbsp; Eyetronic N.    PIXTERA Hardware&#45;Accelerated Image Co&#45;Processor Reference Design. Marseille,    France; 2011.    </font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2">23. &nbsp;&nbsp; Xilinx. System    Generator for DSP Referece Guide. San Jos&eacute;, CA, USA: Xilinx Inc.; 2013.    606 p.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">24. &nbsp;&nbsp; Xilinx. Vivado    Design Suite User Guide. San Jos&eacute;, CA, USA: Xilinx Inc.; 2014. 660 p.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">25. &nbsp;&nbsp; Garc&eacute;s&#45;Socarr&aacute;s    LM, Brox Jim&eacute;nez P, S&aacute;nchez&#45;Solano S, Cabrera Sarmiento AJ.    Librer&iacute;a de m&oacute;dulos IP para la implementaci&oacute;n sobre FPGA    de algoritmos de procesado de im&aacute;genes. XI Jornadas de Computaci&oacute;n    Reconfigurable y Aplicaciones. Universidad de La Laguna, Tenerife, Espa&ntilde;a;    2011. p. 227&#150;34.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">26. &nbsp;&nbsp; MathWorks. Create    Dynamic Mask Dialog Boxes &#91;Internet&#93;. MATLAB&reg; &amp; Simulink&reg;    &#45; Documentation. 2014 &#91;cited 2014 Nov 18&#93;. p. 1. Available from:    <a href="http://www.mathworks.com/help/simulink/ug/create&#45;dynamic&#45;mask&#45;dialog&#45;boxes.html" target="_blank">http://www.mathworks.com/help/simulink/ug/create&#45;dynamic&#45;mask&#45;dialog&#45;boxes.html</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">27. &nbsp;&nbsp; MathWorks. Control    Masks Programmatically &#91;Internet&#93;. MATLAB&reg; &amp; Simulink&reg; &#45;    Documentation. 2014 &#91;cited 2014 Nov 18&#93;. p. 1. Available from: <a href="http://www.mathworks.com/help/simulink/ug/control&#45;masks&#45;programmatically.html" target="_blank">http://www.mathworks.com/help/simulink/ug/control&#45;masks&#45;programmatically.html</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">28. &nbsp;&nbsp; MathWorks. Create    Dynamic Masked Subsystems &#91;Internet&#93;. MATLAB&reg; &amp; Simulink&reg;    &#45; Documentation. 2014 &#91;cited 2014 Nov 18&#93;. p. 1. Available from:    <a href="http://www.mathworks.com/help/simulink/ug/create&#45;dynamic&#45;masked&#45;subsystems.html" target="_blank">http://www.mathworks.com/help/simulink/ug/create&#45;dynamic&#45;masked&#45;subsystems.html</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">29. &nbsp;&nbsp; Popinchalk S.    Advanced Masking Concepts &#91;Internet&#93;. MATLAB&reg; Central &#45; Guy    and Seth on Simulink&reg;. 2008 &#91;cited 2014 Nov 18&#93;. p. 1. Available    from: <a href="http://blogs.mathworks.com/seth/2008/08/05/advanced&#45;masking&#45;concepts/" target="_blank">http://blogs.mathworks.com/seth/2008/08/05/advanced&#45;masking&#45;concepts/</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">30. &nbsp;&nbsp; Popinchalk S.    How To Make Your Own Simulink Block &#91;Internet&#93;. MATLAB&reg; Central    &#45; Guy and Seth on Simulink&reg;. 2008 &#91;cited 2014 Nov 18&#93;. p. 1.    Available from: <a href="http://blogs.mathworks.com/seth/2008/07/27/how&#45;to&#45;make&#45;your&#45;own&#45;simulink&#45;block/" target="_blank">http://blogs.mathworks.com/seth/2008/07/27/how&#45;to&#45;make&#45;your&#45;own&#45;simulink&#45;block/</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">31. &nbsp;&nbsp; Popinchalk S.    Dynamic Mask Dialogs &#91;Internet&#93;. MATLAB&reg; Central &#45; Guy and Seth    on Simulink&reg;. 2008 &#91;cited 2014 Nov 18&#93;. p. 1. Available from: <a href="http://blogs.mathworks.com/seth/2008/08/13/dynamic&#45;mask&#45;dialogs/" target="_blank">http://blogs.mathworks.com/seth/2008/08/13/dynamic&#45;mask&#45;dialogs/</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">32. &nbsp;&nbsp; Popinchalk S.    Mask Initialization and Self&#45;Modifying Blocks &#91;Internet&#93;. MATLAB&reg;    Central &#45; Guy and Seth on Simulink&reg;. 2008 &#91;cited 2014 Nov 18&#93;.    p. 1. Available from: <a href="http://blogs.mathworks.com/seth/2008/08/21/mask&#45;initialization&#45;and&#45;self&#45;modifying&#45;blocks/" target="_blank">http://blogs.mathworks.com/seth/2008/08/21/mask&#45;initialization&#45;and&#45;self&#45;modifying&#45;blocks/</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">33. &nbsp;&nbsp; Popinchalk S.    Libraries in Simulink &#91;Internet&#93;. MATLAB&reg; Central &#45; Guy and    Seth on Simulink&reg;. 2008 &#91;cited 2014 Nov 18&#93;. p. 1. Available from:    <a href="http://blogs.mathworks.com/seth" target="_blank">http://blogs.mathworks.com/seth</a></font><!-- ref --><p align="justify"><font face="verdana" size="2">34. &nbsp;&nbsp; Gonz&aacute;lez    RC, Woods RE. Digital Image Processing. 3rd ed. Horton MJ, McDonald M, Dworkin    A, Opaluch W, Disanno S, Kernan R, editors. Upper Saddle River, New Jersey,    USA: Prentice Hall; 2007. 976 p.    </font></p>     <!-- ref --><p align="justify"><font face="verdana" size="2">35. &nbsp;&nbsp; Turney R. Two&#45;Dimensional    Linear Filtering. Xilinx Application Notes. 2007;933(1.1):1&#150;8.    </font></p>     <P align="justify">&nbsp;      <P align="justify">&nbsp;      ]]></body>
<body><![CDATA[<P align="justify"><font size="2" face="Verdana">Recibido: 12 de junio de 2016    <br>   Aprobado: 23 de octubre de 2016</font>      <P align="justify">&nbsp;      <P align="justify">&nbsp;      <p align="justify"><font face="verdana" size="2"><i>Luis Manuel Garc&eacute;s    Socarr&aacute;s</i>. Departamento de Autom&aacute;tica y Computaci&oacute;n    de la Universidad Tecnol&oacute;gica de La Habana "Jos&eacute; Antonio Echeverr&iacute;a"    (CUJAE), La Habana, Cuba. Correo eloctr&oacute;nico: <a href="mailto:lmgarcess@electrica.cujae.edu.cu">lmgarcess@electrica.cujae.edu.cu</a></font></p>  	     ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bradski]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Kaehler]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Loukides]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Monaghan]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[Learning OpenCV]]></source>
<year>2008</year>
<edition>1</edition>
<page-range>571</page-range><publisher-loc><![CDATA[Sebastopol^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[O'Reilly Media, Inc]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[González]]></surname>
<given-names><![CDATA[RC]]></given-names>
</name>
<name>
<surname><![CDATA[Woods]]></surname>
<given-names><![CDATA[RE]]></given-names>
</name>
<name>
<surname><![CDATA[Eddins]]></surname>
<given-names><![CDATA[SL]]></given-names>
</name>
</person-group>
<source><![CDATA[Digital Image Processing using MATLAB]]></source>
<year>2009</year>
<edition>2</edition>
<page-range>827</page-range><publisher-name><![CDATA[Gatesmark Publishing]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Grimm]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
<name>
<surname><![CDATA[Bunke]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
<name>
<surname><![CDATA[Hählen]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An approach to expert systems for image processing software libraries]]></article-title>
<source><![CDATA[Mathematics and Computers in Simulation]]></source>
<year>1994</year>
<volume>36</volume>
<page-range>303-13</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pulli]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Baksheev]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Kornyakov]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Eruhimov]]></surname>
<given-names><![CDATA[V]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Real-time computer vision with OpenCV]]></article-title>
<source><![CDATA[Communications of the ACM]]></source>
<year>2012</year>
<volume>55</volume>
<numero>6</numero>
<issue>6</issue>
<page-range>61-9</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Navarro Lorente]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Soto Valles]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
<name>
<surname><![CDATA[Suardíaz Muro]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Fernández Andrés]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Experiences on developing computer vision hardware algorithms using Xilinx System Generator]]></article-title>
<source><![CDATA[Microprocessors and Microsystems]]></source>
<year>2005</year>
<volume>29</volume>
<page-range>411-9</page-range></nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Bailey]]></surname>
<given-names><![CDATA[DG]]></given-names>
</name>
</person-group>
<source><![CDATA[Design for Embedded Image Processing on FPGAs]]></source>
<year>2011</year>
<edition>1</edition>
<page-range>496</page-range><publisher-loc><![CDATA[Singapore ]]></publisher-loc>
<publisher-name><![CDATA[John Wiley & Sons (Asia) Pte Ltd]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hiraiwa]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Amano]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
</person-group>
<source><![CDATA[An FPGA Implementation of Reconfigurable Real-Time Vision Architecture]]></source>
<year></year>
<conf-name><![CDATA[27 International Conference on Advanced Information Networking and Applications Workshops]]></conf-name>
<conf-date>2013</conf-date>
<conf-loc>Barcelona </conf-loc>
<page-range>150-5</page-range></nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gorgon]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Tadeusiewicz]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Hardware-based image processing library for Virtex FPGA]]></article-title>
<source><![CDATA[Reconfigurable Technology: FPGAs for Computing and Applications II]]></source>
<year>2000</year>
<volume>4212</volume>
<page-range>1-10</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Genovese]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Napoli]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
</person-group>
<source><![CDATA[An FPGA-based Real-time Background Identification Circuit for 1080p Video]]></source>
<year></year>
<conf-name><![CDATA[Eighth International Conference on Signal Image Technology and Internet Based Systems]]></conf-name>
<conf-date>2012</conf-date>
<conf-loc>Naples </conf-loc>
<page-range>330-5</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Wiatr]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Jamro]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
</person-group>
<source><![CDATA[Implementation image data convolutions operations in FPGA reconfigurable structures for real-time vision systems]]></source>
<year></year>
<conf-name><![CDATA[ International Conference on Information Technology: Coding and Computing]]></conf-name>
<conf-date>2000</conf-date>
<conf-loc>Las Vegas NV</conf-loc>
<page-range>152-7</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Cuenca-Asensi]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Suardíaz Muro]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Codesign Environment for Computer Vision Hw/Sw Systems]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Cristóbal]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Javidi]]></surname>
<given-names><![CDATA[B]]></given-names>
</name>
<name>
<surname><![CDATA[Vallmitjana]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[5th International Workshop on Informational Optics.]]></source>
<year>2006</year>
<page-range>527-36</page-range><publisher-loc><![CDATA[Toledo ]]></publisher-loc>
<publisher-name><![CDATA[AIP]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Suardíaz Muro]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Cuenca-Asensi]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Entorno de codiseño para sistemas heterogéneos de procesamiento de imagen]]></source>
<year></year>
<conf-name><![CDATA[XXVI Jornadas de Automática]]></conf-name>
<conf-date>2005</conf-date>
<conf-loc>Alicante - Elche </conf-loc>
<page-range>1113-20</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Vicente-Chicote]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Sánchez-Palma]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Image Processing Application Development: From Rapid Prototyping to SW/HW Co-simulation and Automated Code Generation]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Marques]]></surname>
<given-names><![CDATA[JS]]></given-names>
</name>
<name>
<surname><![CDATA[Pérez-de-la-Blanca]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Pina]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<source><![CDATA[Second Iberian Conference, Pattern Recognition and Image Analysis Lecture Notes in Computer Science.]]></source>
<year>2005</year>
<page-range>659-66</page-range><publisher-loc><![CDATA[Estoril ]]></publisher-loc>
<publisher-name><![CDATA[Springer Berlin Heidelberg]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Garcés-Socarrás]]></surname>
<given-names><![CDATA[LM]]></given-names>
</name>
<name>
<surname><![CDATA[Sánchez-Solano]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Brox Jiménez]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[AJ]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Library for model-based design of image processing algorithms on FPGAs]]></article-title>
<source><![CDATA[Revista de la Facultad de Ingeniería Universidad Antioquia]]></source>
<year>2013</year>
<volume>1</volume>
<numero>68</numero>
<issue>68</issue>
<page-range>36-47</page-range></nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Vicente-Chicote]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Suardíaz Muro]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Cuenca-Asensi]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Xilinx System Generator Based HW Components for Rapid Prototyping of Computer Vision SW/HW Systems]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Marques]]></surname>
<given-names><![CDATA[JS]]></given-names>
</name>
<name>
<surname><![CDATA[Pérez de la Blanca]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
<name>
<surname><![CDATA[Pina]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<source><![CDATA[Second Iberian Conference, Pattern Recognition and Image Analysis Lecture Notes in Computer Scienceond Iberian Conference]]></source>
<year>2005</year>
<page-range>667-74</page-range><publisher-loc><![CDATA[Estoril ]]></publisher-loc>
<publisher-name><![CDATA[Springer Berlin Heidelberg]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Toledo Moreo]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Suardíaz Muro]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Cuenca-Asensi]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Grediaga]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
</person-group>
<source><![CDATA[Novel Simulink Blockset for Image Processing Codesign.]]></source>
<year></year>
<conf-name><![CDATA[ IEEE Mediterranean Electrotechnical Conference]]></conf-name>
<conf-date>2006</conf-date>
<conf-loc>Málaga </conf-loc>
<page-range>117-20</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Couprie]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[PINK image processing library]]></source>
<year></year>
<conf-name><![CDATA[ Meeting on Image Processing Libraries]]></conf-name>
<conf-date>2012</conf-date>
<conf-loc>Paris </conf-loc>
<page-range>1-4</page-range></nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Tschumperlé]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
</person-group>
<source><![CDATA[The CImg Library]]></source>
<year></year>
<conf-name><![CDATA[ Meeting on Image Processing Libraries]]></conf-name>
<conf-date>2012</conf-date>
<conf-loc>Paris </conf-loc>
<page-range>1-4</page-range></nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Maddocks]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Williams]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<source><![CDATA[VHDL Image Processing Source Modules]]></source>
<year>2006</year>
<publisher-loc><![CDATA[UK ]]></publisher-loc>
<publisher-name><![CDATA[Hunt Engineering]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="book">
<collab>Xilinx</collab>
<source><![CDATA[Xilinx CORE Generator System]]></source>
<year>2014</year>
<page-range>1</page-range><publisher-name><![CDATA[www.xilinx.com]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="book">
<collab>Altera</collab>
<source><![CDATA[Video and Image Processing Suite]]></source>
<year>2014</year>
<publisher-loc><![CDATA[San José^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[Altera Corporation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Eyetronic]]></surname>
<given-names><![CDATA[N]]></given-names>
</name>
</person-group>
<source><![CDATA[PIXTERA Hardware-Accelerated Image Co-Processor Reference Design]]></source>
<year>2011</year>
<publisher-loc><![CDATA[Marseille ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="book">
<collab>Xilinx</collab>
<source><![CDATA[System Generator for DSP Referece Guide]]></source>
<year>2013</year>
<page-range>606</page-range><publisher-loc><![CDATA[San José^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[Xilinx Inc]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="book">
<collab>Xilinx</collab>
<source><![CDATA[Vivado Design Suite User Guide]]></source>
<year>2014</year>
<page-range>660</page-range><publisher-loc><![CDATA[San José^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[Xilinx Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Garcés-Socarrás]]></surname>
<given-names><![CDATA[LM]]></given-names>
</name>
<name>
<surname><![CDATA[Brox Jiménez]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Sánchez-Solano]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[AJ]]></given-names>
</name>
</person-group>
<source><![CDATA[Librería de módulos IP para la implementación sobre FPGA de algoritmos de procesado de imágenes]]></source>
<year></year>
<conf-name><![CDATA[XI Jornadas de Computación Reconfigurable y Aplicaciones]]></conf-name>
<conf-date>2011</conf-date>
<conf-loc>Tenerife </conf-loc>
<page-range>227-34</page-range></nlm-citation>
</ref>
<ref id="B26">
<label>26</label><nlm-citation citation-type="book">
<collab>MathWorks</collab>
<source><![CDATA[Create Dynamic Mask Dialog Boxes]]></source>
<year>2014</year>
<publisher-name><![CDATA[MATLAB® & Simulink® - Documentation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B27">
<label>27</label><nlm-citation citation-type="book">
<collab>MathWorks</collab>
<source><![CDATA[Control Masks Programmatically]]></source>
<year>2014</year>
<publisher-name><![CDATA[MATLAB® & Simulink® - Documentation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B28">
<label>28</label><nlm-citation citation-type="book">
<collab>MathWorks</collab>
<source><![CDATA[Create Dynamic Masked Subsystems]]></source>
<year>2014</year>
<publisher-name><![CDATA[MATLAB® & Simulink® - Documentation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B29">
<label>29</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Popinchalk]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Advanced Masking Concepts]]></source>
<year>2008</year>
<publisher-name><![CDATA[MATLAB® Central - Guy and Seth on Simulink®]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B30">
<label>30</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Popinchalk]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[How To Make Your Own Simulink Block]]></source>
<year>2008</year>
<publisher-name><![CDATA[MATLAB® Central - Guy and Seth on Simulink®]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B31">
<label>31</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Popinchalk]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Dynamic Mask Dialogs]]></source>
<year>2008</year>
<publisher-name><![CDATA[MATLAB® Central - Guy and Seth on Simulink®]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B32">
<label>32</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Popinchalk]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Mask Initialization and Self-Modifying Blocks]]></source>
<year>2008</year>
<publisher-name><![CDATA[MATLAB® Central - Guy and Seth on Simulink®]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B33">
<label>33</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Popinchalk]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<source><![CDATA[Libraries in Simulink]]></source>
<year>2008</year>
<publisher-name><![CDATA[MATLAB® Central - Guy and Seth on Simulink®]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B34">
<label>34</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Horton]]></surname>
<given-names><![CDATA[MJ]]></given-names>
</name>
<name>
<surname><![CDATA[McDonald]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Dworkin]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Opaluch]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Disanno]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Kernan]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
<name>
<surname><![CDATA[González]]></surname>
<given-names><![CDATA[RC]]></given-names>
</name>
<name>
<surname><![CDATA[Woods]]></surname>
<given-names><![CDATA[RE]]></given-names>
</name>
</person-group>
<source><![CDATA[Digital Image Processing]]></source>
<year>2007</year>
<edition>3</edition>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B35">
<label>35</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Turney]]></surname>
<given-names><![CDATA[R]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Two-Dimensional Linear Filtering]]></article-title>
<source><![CDATA[Xilinx Application Notes]]></source>
<year>2007</year>
<volume>933</volume>
<numero>11</numero>
<issue>11</issue>
<page-range>1-8</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
