<?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-59282015000100008</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Implementación mediante hardware de una Red Neuronal Artificial para Reconocimiento de Caracteres]]></article-title>
<article-title xml:lang="en"><![CDATA[A hardware implementation using Artificial Neural Network for Character Recognition]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Polanco Carrillo]]></surname>
<given-names><![CDATA[Franky]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Álvarez Gerónimo]]></surname>
<given-names><![CDATA[Daniel]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Moreno Vega]]></surname>
<given-names><![CDATA[Valery]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Cujae Facultad de Ingeniería Eléctrica Departamento de Automática]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>04</month>
<year>2015</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>04</month>
<year>2015</year>
</pub-date>
<volume>36</volume>
<numero>1</numero>
<fpage>95</fpage>
<lpage>106</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282015000100008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282015000100008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282015000100008&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En el presente trabajo se abordan temas de interés relacionados con la implementación de Redes Neuronales Artificiales (RNAs) en hardware reconfigurable. Para alcanzar dicho fin, se desarrolló una aplicación para el Reconocimiento de Caracteres, utilizando en el proceso de clasificación una red de tipo Perceptrón Multicapa (Feed-Forward Backpropagation). Los primeros pasos realizados consistieron en la creación, entrenamiento y simulación de dicha red. Para esto, se empleó la Interfaz Gráfica de Usuario (IGU) que ofrece el toolbox de Redes Neuronales de Matlab. La implementación hardware de la RNA , se realizó mediante la traducción del modelo computacional a un modelo sintetizable en hardware, el cual es descrito empleando un flujo de diseño basado en modelos, que se apoya en el entorno Matlab/Simulink y la herramienta System Generator de Xilinx. La implementación física se llevó a cabo empleando la tarjeta de desarrollo Atlys de la compañía Digilent. El trabajo está dirigido al análisis de los principales aspectos a tener en cuenta a la hora de llevar a cabo la implementación hardware de una RNA en FPGA y la metodología a seguir para alcanzar dicho fin, y que constituyen las principales novedades de este trabajo.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[This paper deals with the implementation of an Artificial Neural Network on reconfigurable hardware. The authors developed an application for character recognition using a feedforward backpropagation neural network, developed on an FPGA. In order to carry out such implementation the computational model of the neural network is translated into a FPGA synthesizable model using the Matlab/Simulink environment as well as the System Generator Xilinx tool. The results are illustrated in a prototype developed on an Atlys board. The authors focus the analysis and discussion on the main aspects considered to synthetize an ANN on an FPGA as well as the methodology to follow during such implementation, which are the main contributions of this paper.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[red neuronal artificial]]></kwd>
<kwd lng="es"><![CDATA[reconocimiento de caracteres]]></kwd>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="es"><![CDATA[Xilinx system generator]]></kwd>
<kwd lng="en"><![CDATA[artificial neural network]]></kwd>
<kwd lng="en"><![CDATA[characters recognition]]></kwd>
<kwd lng="en"><![CDATA[FPGA]]></kwd>
<kwd lng="en"><![CDATA[Xilinx system generator]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[   <font size="2" face="verdana">  </font>     <P align="right"><font size="2" face="verdana"><strong>ARTICULO ORIGINAL</strong></font></p>     <P>&nbsp;</p>     <P><font size="4" face="verdana"><B>Implementaci&oacute;n mediante hardware de una Red Neuronal Artificial para    Reconocimiento de Caracteres </B></font></p>     <P>&nbsp;</p>     <P><font size="3"><strong><font face="verdana">A hardware implementation using Artificial Neural Network for Character Recognition</font></strong></font></p>     <P>&nbsp;</p>     <P>&nbsp;</p>     <P><font size="2"><b><font face="verdana">Ing. Franky Polanco Carrillo, Ing. Daniel &Aacute;lvarez Ger&oacute;nimo, Dr. Valery Moreno Vega</font></b></font></p>     <P><font size="2" face="verdana">Departamento de Autom&aacute;tica y Computaci&oacute;n, Cujae, La Habana, Cuba, E-mail:  <U><FONT COLOR="#0000ff"><a href="mailto:frankyp@electrica.cujae.edu.cu">frankyp@electrica.cujae.edu.cu</a></FONT></U> </font>, <font size="2" face="verdana"><U><FONT COLOR="#0000ff"><a href="mailto:geronimo@electrica.cujae.edu.cu">geronimo@electrica.cujae.edu.cu</a></FONT></U></font> , <font size="2" face="verdana"><U><FONT  COLOR="#0000ff"><a href="mailto:valery@electrica.cujae.edu.cu">valery@electrica.cujae.edu.cu</a></FONT></U></font></p>     ]]></body>
<body><![CDATA[<P>&nbsp;</p>     <P>&nbsp;</p> <hr>     <P><font size="2"><b><font face="verdana">RESUMEN </font></b></font></p>     <P><font size="2" face="verdana">En el presente trabajo se abordan temas de inter&eacute;s relacionados con la implementaci&oacute;n de Redes Neuronales   Artificiales (RNAs) en hardware reconfigurable. Para alcanzar dicho fin, se desarroll&oacute; una aplicaci&oacute;n para el Reconocimiento  de Caracteres, utilizando en el proceso de clasificaci&oacute;n una red de tipo Perceptr&oacute;n Multicapa (Feed-Forward   Backpropagation). Los primeros pasos realizados consistieron en la creaci&oacute;n, entrenamiento y simulaci&oacute;n de dicha  red. Para esto, se emple&oacute; la Interfaz Gr&aacute;fica de Usuario (IGU) que ofrece el toolbox de Redes Neuronales de Matlab.  La implementaci&oacute;n hardware de la RNA, se realiz&oacute; mediante la traducci&oacute;n del modelo computacional a un modelo  sintetizable en hardware, el cual es descrito empleando un flujo de dise&ntilde;o basado en  modelos, que  se  apoya en el entorno  Matlab/Simulink y la herramienta System Generator de Xilinx. La implementaci&oacute;n f&iacute;sica se llev&oacute; a cabo empleando la tarjeta  de desarrollo Atlys de la compa&ntilde;&iacute;a Digilent. El trabajo est&aacute; dirigido al an&aacute;lisis de los principales aspectos a tener en  cuenta a la hora de llevar a cabo la implementaci&oacute;n hardware de una RNA en FPGA  y la metodolog&iacute;a a seguir para  alcanzar dicho fin, y que constituyen las principales novedades de este trabajo. </font></p>     <P><font size="2" face="verdana"><B>Palabras claves:</B> red neuronal artificial, reconocimiento de caracteres, FPGA, xilinx system generator.    </font>    <br> </p> <hr>     <p><font size="2" face="verdana"><B>ABSTRACT</B></font></p>     <p>    <font size="2" face="verdana">This paper deals with the implementation of an Artificial Neural Network on reconfigurable hardware. The    authors developed an application for character recognition using a feedforward backpropagation neural network,    developed on an FPGA. In order to carry out such implementation the computational model of the neural network is    translated into a FPGA synthesizable model using the Matlab/Simulink environment as well as the System Generator    Xilinx tool. The results are illustrated in a prototype developed on an Atlys board. The authors focus the analysis    and discussion on the main aspects considered to synthetize an ANN on an FPGA as well as the methodology to    follow during such implementation, which are the main contributions of this paper.   </font></p>     <P><font size="2" face="verdana"><B>Key words: </B>artificial neural network, characters recognition, FPGA, xilinx system generator</font>.    <br> </p> <hr>     ]]></body>
<body><![CDATA[<p>&nbsp;</p>     <p>&nbsp;</p>     <p><font size="3" face="verdana"><B>INTRODUCCION      </B>   </font></p>     <P>&nbsp;</p>     <P><font size="2" face="verdana">El desarrollo de las RNA desde los a&ntilde;os 80 del siglo pasado y su utilizaci&oacute;n en la soluci&oacute;n de muchos    problemas pr&aacute;cticos ha sido, al menos hasta hace pocos a&ntilde;os, mediante implementaciones software de los modelos de RNA.    Este hecho se debe a dos razones fundamentales: la dificultad de dise&ntilde;ar y sintetizar en hardware modelos de    neuronas interconectados (que pueden ser cientos o miles) debido a que involucra aritm&eacute;tica de punto fijo y/o flotante y a    los tiempos de procesamiento y paralelismo inherente a las RNA, sobre todo cuando el procesamiento debe ser en    tiempo real. Por su parte, la implementaci&oacute;n software, sacrifica el paralelismo pero permite una buena representaci&oacute;n    num&eacute;rica de los par&aacute;metros de la red y un tiempo de procesamiento aceptable en las PC actuales. </font></p>     <P><font size="2" face="verdana">En los &uacute;ltimos a&ntilde;os sin embargo, los avances alcanzados en la implementaci&oacute;n de RNAs mediante hardware  est&aacute;n ligados al desarrollo de la tecnolog&iacute;a microelectr&oacute;nica  de alta escala de integraci&oacute;n (VLSI) y al caso particular de  los FPGAs [1,2]. Estos avances facilitaron la s&iacute;ntesis hardware de algunos modelos de RNAs de alto nivel de  complejidad, permitiendo su aplicaci&oacute;n en problemas pr&aacute;cticos en los que alcanzaron desempe&ntilde;os comparables con la  implementaci&oacute;n software del mismo modelo de RNA.  Con los nuevos desarrollos se incorpora un alto grado de paralelismo en  el procesamiento de la RNA y una reducci&oacute;n considerable del costo de la aplicaci&oacute;n al no requerir de una PC [3].  Se destaca sin embargo, que a&uacute;n cuando se implementen mediante hardware, la simulaci&oacute;n software  siempre ser&aacute; el  primer paso en la implementaci&oacute;n y es de gran ayuda para la prueba de dise&ntilde;os. </font></p>     <P><font size="2" face="verdana">En este trabajo se aborda la implementaci&oacute;n de una RNA para reconocimiento de caracteres en hardware  reconfigurable. El problema de reconocimiento de caracteres, mediante software, es conocido y abordado con cierto &eacute;xito (el error  de reconocimiento es bajo pero no es cero) [4], pero no se ha abordado de la misma manera a nivel de  implementaciones hardware [5,6]. La raz&oacute;n fundamental sigue siendo que muchos modelos de RNA trabajan con par&aacute;metros que son  de &#171;naturaleza anal&oacute;gica&#187;, en el sentido de que las se&ntilde;ales que procesan no son binarias o bipolares si no que  se codifican como n&uacute;meros reales, o valores anal&oacute;gicos [2],[6], lo que ha contribuido a que al evaluar su  implementaci&oacute;n hardware en las &uacute;ltimas d&eacute;cadas se valora el uso de circuitos anal&oacute;gicos por encima de los digitales. No obstante,  se pueden encontrar trabajos ([1], [3], [5], [6], [11]) donde se utilizan dispositivos FPGA para implementar  mediante hardware algunos modelos y aplicaciones de RNA. Al implementar estos modelos con este tipo de dispositivos  se debe considerar la representaci&oacute;n del n&uacute;mero real con formato de punto fijo (y no aritm&eacute;tica flotante) por lo  que aspectos tales como la precisi&oacute;n y representaci&oacute;n de los datos con este formato cobran mayor importancia.  Tambi&eacute;n importante es el consumo de recursos del dispositivo que conlleva tanto la RNA como este tipo de formato, ya que  por lo general una RNA est&aacute; constituida por decenas de neuronas densamente conectadas, y la descripci&oacute;n de  esa arquitectura mediante hardware se expresa en una gran cantidad de recursos del FPGA. A pesar de que estos  aspectos constituyen elementos importantes a considerar, y que pueden incluso hacer inviable la implementaci&oacute;n de  algunas arquitecturas de RNA, la velocidad de procesamiento, inherentemente paralela de una RNA, justifica su estudio. </font></p>     <P><font size="2" face="verdana">El objetivo fundamental es entonces demostrar la probabilidad de llevar a cabo  la implementaci&oacute;n hardware de  una RNA para reconocimiento de caracteres en hardware reconfigurable haciendo uso de la tecnolog&iacute;a actual,  evaluando para ello aspectos tales como precisi&oacute;n, velocidad del procesamiento paralelo que se realiza y la reducci&oacute;n de  costo que presenta si se compara con su implementaci&oacute;n software. Se utiliza un modelo de red conocido como  Perceptr&oacute;n Multicapa (PM) que se sintetiza en un FPGA de Xilinx. Como objetivo secundario se documenta la metodolog&iacute;a  de dise&ntilde;o empleada, as&iacute; como detalles de manejo de las herramientas utilizadas, para que sirva de referencia a  aquellos investigadores que aborden otros tipos de aplicaciones de RNA sintetizadas mediante hardware. </font></p>     <P><font size="2" face="verdana"><B>Breve descripci&oacute;n de la RNA utilizada en el reconocimiento de caracteres.</B> </font></p>     <P><font size="2" face="verdana">La red utilizada para el reconocimiento de caracteres es una de las configuraciones t&iacute;picas aplicadas a problemas  de clasificaci&oacute;n de patrones, puesto que el reconocimiento de caracteres, es un caso particular de clasificaci&oacute;n. En  este tipo de aplicaciones cada car&aacute;cter se asocia a una clase (la cantidad de clases depende del alfabeto que se utilice).  La tarea de la RNA es clasificar correctamente cada entrada (car&aacute;cter) que se le presente en la correspondiente  clase codificada a la salida de la red. La red Perceptr&oacute;n Multicapa es la arquitectura por excelencia empleada en este tipo  de problemas, utiliz&aacute;ndose en m&aacute;s del 70% de las aplicaciones [7,8]. La <a href="/img/revistas/eac/v36n1/f0108115.jpg">Figura 1</a> muestra el esquema de la RNA  seleccionada (ver [3] para detalles de c&oacute;mo se llega a esta arquitectura). La capa de entrada cuenta con 35 neuronas (la matriz  del car&aacute;cter es de 7x5), la capa oculta contiene 16 neuronas y la capa de salida 7 (la clase la codifica de acuerdo al ASCII  de la letra).  </font></p>     
]]></body>
<body><![CDATA[<P><font size="2" face="verdana">Los patrones de entrada empleados en el entrenamiento est&aacute;n formados por vectores columna. La dimensi&oacute;n de  estos es de 35x1, donde la posici&oacute;n (1,1) est&aacute; ocupada por el bit m&aacute;s significativo (MSB) del car&aacute;cter y la posici&oacute;n (35,1)  por el menos significativo (LSB). La asociaci&oacute;n de los bits que forman el car&aacute;cter y el vector, se realiza llevando las filas  a columnas de manera que los cinco bits de la primera fila del car&aacute;cter ocupan las cinco primeras posiciones del  vector columna, los cinco bits de la segunda fila se ubican a continuaci&oacute;n y as&iacute; sucesivamente. Los patrones de  salida empleados en el entrenamiento poseen una dimensi&oacute;n de 7x1, buscando tener a la salida de la red el c&oacute;digo ASCII  del car&aacute;cter a reconocer. Se emplean 7 bits en los patrones de salida, ya que el MSB del c&oacute;digo de los caracteres ASCII  a representar (todos letras y n&uacute;meros) es cero para todos los patrones, o sea, siempre menor que 128  (2<SUP>7</SUP>). En la implementaci&oacute;n hardware se agrega el MSB siempre en cero para conformar el byte completo del c&oacute;digo ASCII.  El entrenamiento utilizado es el usual en este tipo de aplicaciones [3]. La red debe entrenarse para cada car&aacute;cter  a reconocer. En este trabajo se utilizaron 36 patrones para cada uno de los caracteres que forman el alfabeto de  la aplicaci&oacute;n. En la <a href="#f2">Figura 2</a> se muestra un ejemplo de los utilizados para la letra E. </font></p>     <P align="center"><img src="/img/revistas/eac/v36n1/f0208115.jpg" width="504" height="311"><a name="f2"></a></p>     
<P></p>     <P><font size="2"><b><font face="verdana">Metodolog&iacute;a para la implementaci&oacute;n de la RNA</font></b></font></p>     <P><font size="2" face="verdana">La metodolog&iacute;a a seguir en la implementaci&oacute;n de la red Perceptr&oacute;n Multicapa para el Reconocimiento de Caracteres  se observa en la <a href="/img/revistas/eac/v36n1/f0308115.jpg">Figura 3</a>. Los tres primeros pasos consisten en crear, entrenar y simular la red. Para alcanzar este fin  se emple&oacute; la Interfaz Gr&aacute;fica de Usuario (IGU) que ofrece la biblioteca de funciones (nnet) de Redes Neuronales  de Matlab, realizando la  parte  netamente  software  del proceso, en la cual se debe seleccionar el tipo de red neuronal  y su configuraci&oacute;n de capas y neuronas. Posteriormente la red es entrenada y  simulada  de  forma  iterativa  hasta  que   se consiga  la  caracterizaci&oacute;n  deseada  de  los patrones  de  simulaci&oacute;n. Estos tres pasos de la metodolog&iacute;a de  dise&ntilde;o son los cl&aacute;sicos utilizados  para implementaciones software de RNA (ver [1],[3],[7],[10],[12],[13] y las  referencias contenidas en dichas fuentes), y tienen como finalidad ajustar los par&aacute;metros internos de la RNA para su  posterior utilizaci&oacute;n. </font></p>     
<P><font size="2" face="verdana">Una  vez  cumplidos los 3 primeros pasos, se pasa a la etapa de modelaci&oacute;n en hardware. Para esto se emplea  la herramienta Xilinx System Generator (XSG), que utiliza Simulink como entorno de desarrollo. La modelaci&oacute;n en  hardware consiste en crear el dise&ntilde;o de la red empleando para esto los bloques proporcionados por XSG. Por &uacute;ltimo se pasa a  la etapa de implementaci&oacute;n y verificaci&oacute;n de hardware. Para alcanzar este fin, XSG permite realizar una  Co-Simulaci&oacute;n, que consiste en simular el dise&ntilde;o desde el FPGA e integrarlo directamente en el espacio de trabajo de Simulink.  Las siguientes secciones desarrollan cada uno de los pasos de la metodolog&iacute;a relacionados con la s&iacute;ntesis por hardware  de la RNA en el FPGA. </font></p>     <P><font size="2" face="verdana"><B>Modelaci&oacute;n en Hardware de la RNA.</B> </font></p>     <P><font size="2" face="verdana">La herramienta XSG es una de las utilizadas en la actualidad en aplicaciones relacionadas con la implementaci&oacute;n  de funciones en dispositivos l&oacute;gicos programables, debido al alto grado de abstracci&oacute;n que presentan los  dise&ntilde;os basados en bloques, que permiten una mejor comprensi&oacute;n de los mismos y una considerable reducci&oacute;n de los  tiempos de implementaci&oacute;n y puesta a punto de una determinada aplicaci&oacute;n. En este trabajo  adem&aacute;s se seleccion&oacute;  dicha herramienta para realizar la s&iacute;ntesis de la RNA en hardware, pues permite el desarrollo e implementaci&oacute;n del  sistema empotrado sin necesidad de conocer a fondo la programaci&oacute;n en HDL, realizando los procesos de  s&iacute;ntesis, implementaci&oacute;n y descarga en la placa autom&aacute;ticamente desde un modelo en Simulink [9]. Tambi&eacute;n se destaca  la posibilidad de simulaci&oacute;n del dise&ntilde;o desarrollado en software, con MATLAB/Simulink, y su verificaci&oacute;n en  hardware utilizando Co-Simulaci&oacute;n [9]. Debe, sin embargo, garantizarse la adecuada parametrizaci&oacute;n de los modelos para  brindar una soluci&oacute;n viable a las necesidades planteadas y a la utilizaci&oacute;n de los recursos del dispositivo l&oacute;gico programable. </font></p>     <P><font size="2" face="verdana">La unidad b&aacute;sica de procesamiento de informaci&oacute;n en la RNA es la neurona artificial. El modelo matem&aacute;tico ([10])  que la representa es: </font></p>     <P><font size="2" face="verdana"><B><I>salida=&#187;(w<SUB>i</SUB>*x<SUB>i</SUB>)+b</I></B>   </font></p>     ]]></body>
<body><![CDATA[<P><font size="2" face="verdana">donde: </font></p>     <P> <font size="2" face="verdana"><B>w<SUB>i</SUB></B> representan los pesos de las conexiones </font></p>     <P><font size="2" face="verdana"> <B>x<SUB>i</SUB></B> representa la entrada i  (<B><I>i=1..n</I></B>)  </font></p>     <P><font size="2" face="verdana"><B><I>b</I></B> el bias o neurona  independiente.  </font></p>     <P><font size="2" face="verdana">Para realizar el dise&ntilde;o y posterior implementaci&oacute;n de una neurona, se emplearon los bloques mostrados en la <a href="/img/revistas/eac/v36n1/t0108115.jpg">Tabla  1</a>. Estos bloques implementar&aacute;n el modelo matem&aacute;tico de la neurona artificial. </font></p>     
<P><font size="2" face="verdana">De la <a href="/img/revistas/eac/v36n1/f0108115.jpg">Figura 1</a> se aprecia que cada neurona de la capa de salida recibe la salida de 16 neuronas de la capa intermedia.  Esta arquitectura, utilizando XSG y los bloques de la <a href="/img/revistas/eac/v36n1/t0108115.jpg">Tabla 1</a> se pueden sintetizar como se muestra en la figura 4. En  dicha figura se observan 16 multiplicadores (CMult) en paralelo, que representan los enlaces sin&aacute;pticos o pesos. La salida  de los multiplicadores se conecta a una red de 16 sumadores (AddSub) en cascada que suman el aporte de cada  enlace proveniente de los multiplicadores m&aacute;s el Bias. Por &uacute;ltimo, el resultado de la sumatoria  es pasado al subsistema  que implementa la funci&oacute;n de activaci&oacute;n, <I>FA_TANSIG</I>, y su salida constituye la salida de la neurona. Este dise&ntilde;o se  repite para cada neurona de la capa de salida.  El dise&ntilde;o realizado para las neuronas de la capa de salida cuenta con 33  bloques en total, que deben ser configurados previamente (<a href="/img/revistas/eac/v36n1/f0408115.jpg">Figura 4</a>), lo que significa parametrizar de 2 a 6 variables en el  XSG por cada bloque utilizado. Este proceso de configuraci&oacute;n podr&iacute;a resultar demasiado lento y retrasar la puesta a  punto del dise&ntilde;o. Para facilitar esta tarea, se puede definir un subsistema que represente al conjunto de dise&ntilde;o de la  neurona de salida (o sea, a sus 33 bloques) de manera que parametrizando el subsistema y replic&aacute;ndolo se pueda crear la  capa de salida en menor tiempo y con menos probabilidad de error de configuraci&oacute;n. La parametrizaci&oacute;n se puede  realizar definiendo una m&aacute;scara, que utilizando XSG significa que se le asigna al subsistema un cuadro de di&aacute;logo  personalizado que permite configurar los bloques contenidos dentro del subsistema. La <a href="/img/revistas/eac/v36n1/f0508115.jpg">Figura 5</a> muestra la m&aacute;scara asociada a  la Neurona de la Capa de Salida. La m&aacute;scara posee en la parte superior una breve descripci&oacute;n del subsistema. En el  centro se observan 3 secciones (tabs) que permiten configurar los boques del dise&ntilde;o: multiplicadores, sumadores y  la neurona independiente (Bias). Adem&aacute;s cuenta con una breve ayuda sobre la representaci&oacute;n num&eacute;rica empleada. </font></p>     
<P><font size="2" face="verdana">El mismo principio se puede seguir desarrollando para crear entonces un subsistema que represente la Capa de  Salida (<a href="/img/revistas/eac/v36n1/f0608115.jpg">Figura 6</a>) y que est&eacute; formado internamente por 7 subsistemas del tipo &#171;neurona de la capa de salida&#187;. Esta  metodolog&iacute;a de dise&ntilde;o facilita la comprensi&oacute;n del mismo por terceros, ya que parte del componente de menor complejidad  (neurona) hasta el de mayor complejidad (capa de neuronas). Tambi&eacute;n se utiliza el mismo principio para construir la neurona de  la capa oculta, y el subsistema capa oculta (formado por los subsistemas &#171;neurona de capa oculta&#187;).  La diferencia  que presenta esta capa con la anterior, es que posee 35 entradas (caracter) y 16 salidas. Finalmente, conectando  los subsistemas Capa Oculta y Capa de Salida se obtiene el dise&ntilde;o de la RNA completa (<a href="/img/revistas/eac/v36n1/f0708115.jpg">Figura 7</a>). </font></p>     
<P><font size="2" face="verdana">En una RNA implementada mediante software, los par&aacute;metros de la red se representan por n&uacute;meros reales de simple  o doble precisi&oacute;n (representaci&oacute;n decimal conocida por &#171;coma flotante&#187;). Este tipo de datos es complejo de  implementar en un FPGA, por lo que se prefiere siempre la representaci&oacute;n decimal de punto fijo. El problema de la representaci&oacute;n  de punto fijo es determinar la cantidad de bits que garantizan la precisi&oacute;n requerida por dise&ntilde;o y no m&aacute;s de los  necesarios, pues se estar&iacute;an consumiendo recursos adicionales del FPGA ( [14], [16]). La forma tradicional de realizar este  balance entre precisi&oacute;n y consumo de recursos es mediante la realizaci&oacute;n de sucesivas simulaciones de la red, variando  el n&uacute;mero de bits empleado en cada uno de los bloques.  </font></p>     <P><font size="2" face="verdana">Las m&aacute;scaras creadas (ver <a href="/img/revistas/eac/v36n1/f0708115.jpg">Figura 7</a>), ayudan a que los cambios de configuraci&oacute;n de la red neuronal se realicen de  forma sencilla y r&aacute;pida. </font></p>     
<P><font size="2" face="verdana">Otro aspecto de inter&eacute;s es la implementaci&oacute;n de la funci&oacute;n de activaci&oacute;n asociada a cada una de las neuronas de  la RNA. Esta funci&oacute;n es la tansig [11] que tiene secciones lineales y no lineales. En el presente trabajo, se emplean  para el dise&ntilde;o de la funci&oacute;n de transferencia de cada neurona la combinaci&oacute;n de los dos principales m&eacute;todos  de implementaci&oacute;n de funciones mediante hardware: Aproximaciones Lineales y Tablas de B&uacute;squeda [3,12], raz&oacute;n por  la cual se le denomina m&eacute;todo h&iacute;brido, y es uno de los aportes realizados. Las tablas de b&uacute;squeda necesitan, para  su implementaci&oacute;n,  de bloques de RAM en el FPGA lo que aumenta el consumo de recursos. Por otra parte,  las aproximaciones lineales consumen pocos recursos (a lo sumo se necesitar&iacute;an un sumador y un multiplicador por  una constante) pero no son exactas si la funci&oacute;n no es lineal. El m&eacute;todo propuesto emplea la Tabla de B&uacute;squeda en  los tramos donde el comportamiento de la funci&oacute;n es no lineal y el de aproximaciones lineales en los </font><font size="2" face="verdana">tramos donde la funci&oacute;n tiene un comportamiento lineal. Esta combinaci&oacute;n garantiza un equilibrio entre precisi&oacute;n  y consumo de recursos. En la pr&oacute;xima secci&oacute;n, al abordar aspectos relativos a la s&iacute;ntesis del dise&ntilde;o, se analiza el  error para la implementaci&oacute;n seleccionada. </font></p>     ]]></body>
<body><![CDATA[<P><font size="2" face="verdana">En la <a href="/img/revistas/eac/v36n1/f0808115.jpg">Figura 8</a> se observa el dise&ntilde;o de la funci&oacute;n de transferencia tangente sigmoidal empleando los bloques de XSG.  El bloque selector (MCode) analiza el valor de entrada &#171;X&#187; y genera una salida de selecci&oacute;n asociada a este valor.  Por ejemplo, para valores de &#171;X&#187; comprendidos entre [-0,5 0,5], el comportamiento de la funci&oacute;n &#171;tansig&#187; responde a  la recta y = x, por lo que la salida de selecci&oacute;n ser&aacute; &#171;000&#187;. Para el rango de valores entre (0.5 3], el comportamiento de  la funci&oacute;n es no lineal, en este caso se emplea una tabla de b&uacute;squeda, la salida de selecci&oacute;n ser&aacute; &#171;001&#187;. Para los  valores comprendidos de [3, +&#187;), la funci&oacute;n &#171;tansig&#187; se satura en uno, en este caso la salida de selecci&oacute;n ser&aacute; &#171;010&#187;. Para  el rango de valores negativos se procede de la misma manera, teniendo en cuenta que la funci&oacute;n tangente sigmoidal  es impar. La demora introducida entre el bloque selector y el multiplexor se emplea por cuestiones de sincronizaci&oacute;n,  por la latencia asociada al bloque ROM de la tabla de b&uacute;squeda. </font></p>     
<P><font size="2" face="verdana">Otro aspecto muy importante a tener en cuenta cuando se trabaja con RNA es el pre y pos procesamiento de  los patrones de entrenamiento, que son normalizados antes de ser aplicados a la red [3]. La normalizaci&oacute;n es  importante porque las funciones de activaci&oacute;n de las RNA est&aacute;n acotadas, y trabajar en la zona de saturaci&oacute;n de estas  funciones trae consigo un pobre aprendizaje de la red. Por defecto el rango de valores aceptado es de [-1 1]. Si los datos  de entrada no se encuentran en este intervalo se normaliza la entrada mediante una funci&oacute;n de pre procesamiento,  y posteriormente se pos procesa la salida de la red para volver a expresar la salida en el rango de valores  originales empleados en el entrenamiento. </font></p>     <P><font size="2" face="verdana">En la s&iacute;ntesis hardware de la RNA que se aborda en el trabajo tambi&eacute;n se hace necesario el pre y pos procesamiento.  En este caso, se implementa la   funci&oacute;n  &#171;<I>mapminmax</I>&#187;, cuya expresi&oacute;n es: </font><img src="/img/revistas/eac/v36n1/v0108115.jpg" width="340" height="47"></p>     
<P><font size="2" face="verdana">Para la aplicaci&oacute;n el rango a normalizar es, para la entrada, de [-1,1] y para la salida de [0,1] debido a que la salida  codifica el ASCII del car&aacute;cter reconocido. En el caso del Posprocesamiento se llevar&aacute; la salida de la red, del rango de valores  de [-1 1] a rango de [0 1]. Despu&eacute;s de sustituir los valores extremos en la ecuaci&oacute;n que represente el algoritmo  &#171;<I>mapminmax</I>&#187;, se obtiene la ecuaci&oacute;n <B><I>y = 0.5x +0.5</I></B>.  </font></p>     <P><font size="2" face="verdana">Para el dise&ntilde;o del bloque de pre procesamiento se opera de la misma manera. En este caso los valores de las  variables se invierten, ya que se pretende llevar del rango de [0 1] al rango de valores de  [-1 1], por lo que bastar&iacute;a con  despejar la ecuaci&oacute;n obtenida en el caso anterior e invertir las variables. </font></p>     <P><font size="2" face="verdana">La <a href="#f9">Figura 9</a> muestra el bloque de pos procesamiento dise&ntilde;ado. Con este bloque se garantiza una salida en el  rango deseado de 0 a 1, pero no los valores 0 o 1. Es por ello que se debe adem&aacute;s agregar un bloque Limitador Binario  que reciba la salida del bloque de pos procesamiento en el rango de [0 1] con formato punto fijo, y limite la salida de la  red neuronal a solo dos valores &#171;0&#187; o &#171;1&#187;. Este bloque adem&aacute;s convierte los valores de entrada de la representaci&oacute;n  en punto fijo (16 bits)  a la representaci&oacute;n booleana (1 bit). En la <a href="#f10">Figura 10</a> se muestra el subsistema el dise&ntilde;o del bloque.  </font></p>     <P align="center"><img src="/img/revistas/eac/v36n1/f0908115.jpg" width="519" height="353"><a name="f9"></a></p>     
<P align="center"></p>     <P align="center"><img src="/img/revistas/eac/v36n1/f1008115.jpg" width="563" height="329"><a name="f10"></a></p>     
<P></p>     ]]></body>
<body><![CDATA[<P><font size="2"><b><font face="verdana">Implementaci&oacute;n y verificaci&oacute;n en Hardware </font></b></font></p>      <P><font size="2" face="verdana">Una vez dise&ntilde;ado el hardware donde se implementa la RNA se procede a la simulaci&oacute;n de este dise&ntilde;o antes de  su implementaci&oacute;n y verificaci&oacute;n final en el dispositivo. Como patr&oacute;n de comparaci&oacute;n se utiliz&oacute; una RNA implementada  en Matlab (software). En esta etapa se puede verificar la precisi&oacute;n de los resultados que reporta el dise&ntilde;o en hardware  y determinar la precisi&oacute;n adecuada para los bloques que trabajan con el formato de punto fijo. Tambi&eacute;n en esta etapa  se verifica el dise&ntilde;o del bloque <I>funci&oacute;n de  transferencia</I> (FA_TANSIG) por el m&eacute;todo h&iacute;brido y se eval&uacute;a su  precisi&oacute;n con relaci&oacute;n a la implementaci&oacute;n software. En la <a href="/img/revistas/eac/v36n1/t0208115.jpg">Tabla 2</a> se muestran los resultados alcanzados al presentar el patr&oacute;n  29 del car&aacute;cter B a la entrada de la RNA y la salida que se obtiene para la implementaci&oacute;n software (izquierda de la  tabla) y la implementaci&oacute;n hardware utilizando el XSG (derecha). Los campos de la tabla muestran los valores obtenidos a  la salida de la capa oculta (Sal_CO), a la salida de la capa de salida (Sal_CS), a la salida de los bloques de  posprocesamiento (Sal_PP) y por &uacute;ltimo el c&oacute;digo ASCII del car&aacute;cter clasificado (Sal_ASCII). Se puede comprobar  la precisi&oacute;n de  los resultados obtenidos (tres lugares decimales). Esta precisi&oacute;n tambi&eacute;n se mantiene a la salida de la  Funci&oacute;n  de Transferencia dise&ntilde;ada por el m&eacute;todo h&iacute;brido. A modo de ejemplo se resaltan algunos valores en la tabla.  </font></p>      
<P><font size="2" face="verdana">La realizaci&oacute;n de la simulaci&oacute;n  tambi&eacute;n permiti&oacute; analizar aspectos temporales asociados al dise&ntilde;o y la relaci&oacute;n  precisi&oacute;n-n&uacute;mero de bits. La &uacute;nica demora asociada al dise&ntilde;o la introduce el bloque de la Funci&oacute;n de Transferencia, producto  de la latencia inherente a los bloques ROM de XSG, el resto de los bloques se ejecutar&aacute;n en paralelo y de acuerdo al   reloj seleccionado para el FPGA, por lo que la ejecuci&oacute;n de la RNA implementada mediante hardware tendr&aacute; una  latencia reducida. En cuanto a la precisi&oacute;n, se utiliz&oacute; el criterio de prueba y error para determinar el n&uacute;mero &oacute;ptimo de bits  a emplear en el dise&ntilde;o. Como punto de partida se comenz&oacute; con un total de 8 bits, de los cuales 6 representan los  d&iacute;gitos decimales (Q8.6), incrementando este n&uacute;mero de dos en dos. Los mejores resultados se alcanzaron empleando 16 bits  en la representaci&oacute;n de los datos (Q16.14). Utilizar una representaci&oacute;n mayor a 16 bits mantiene la precisi&oacute;n en tres  lugares decimales pero incrementa el consumo de recursos por lo que no se recomienda. Los resultados de la tabla 2  utilizan datos (Q16.14), mientras que en la tabla 3 se observan los resultados empleando 10 bits en la representaci&oacute;n de los  datos. Si se comparan estos resultados con los obtenidos en la tabla 2, se puede llegar a la conclusi&oacute;n que la  representaci&oacute;n num&eacute;rica, como se espera, es importante, pero debe estudiarse para cada problema la relaci&oacute;n de compromiso  entre n&uacute;mero de bits y precisi&oacute;n deseada (2, 3, o m&aacute;s lugares decimales) para evitar un consumo excesivo e innecesario  de recursos hardware en el FPGA. En la <a href="#t3">Tabla 3</a>, a modo de ejemplo, se se&ntilde;ala una salida de capa oculta afectada por  el n&uacute;mero de bits seleccionado utilizando la representaci&oacute;n de los datos  (Q<SUB>10.8</SUB>).  </font></p>     <P align="center"><img src="/img/revistas/eac/v36n1/t0308115.jpg" width="513" height="332">   <a name="t3"></a>     
<P><font size="2" face="verdana">En cuanto al error de aproximaci&oacute;n m&aacute;ximo de la funci&oacute;n de activaci&oacute;n utilizando el m&eacute;todo h&iacute;brido, se puede  estimar como muy bajo. Para el caso de la representaci&oacute;n  Q16.14 ser&aacute; menor al 0.24%. Note que en la Tabla 2 se aprecia que  el error m&aacute;ximo alcanzado en la capa oculta es de este orden (diferencia entre 0.9976 y 1), pero considerando dos  fuentes: la aproximaci&oacute;n por el m&eacute;todo h&iacute;brido y el error de aproximaci&oacute;n debido a la multiplicaci&oacute;n del valor a la entrada de  la red y el peso asociado a esta conexi&oacute;n. Si se toma como referencia [16], donde se implementa una funci&oacute;n  sigmoidal logar&iacute;tmica utilizando diferentes m&eacute;todos y representaciones de datos, se aprecia que 0.24% es muy bueno,   siendo incluso menor que los errores m&aacute;ximos reportados en dicha referencia para los m&eacute;todos probados en ese trabajo. </font>     <P><font size="2" face="verdana">Despu&eacute;s de comprobado el dise&ntilde;o realizado se pasa a su implementaci&oacute;n y verificaci&oacute;n hardware.  En estas  &uacute;ltimas etapas se utiliza una tarjeta de desarrollo Atlys de la compa&ntilde;&iacute;a Digilent, basada en el Spartan-6 LX45 de Xilinx [15].  La s&iacute;ntesis en una placa de desarrollo permite contar, adem&aacute;s de con un FPGA, con una serie de perif&eacute;ricos y  dispositivos externos al FPGA pero ya conectados a este (por ejemplo, visualizadores LCD o 7 segmentos, interruptores,  leds, puertos serie/USB/Ethernet, etc.) que normalmente se utilizan como soporte para suministrar la informaci&oacute;n de  entrada al FPGA y visualizar o representar la salida que produce el dise&ntilde;o sintetizado en el dispositivo programable.  Tambi&eacute;n permite realizar mediciones de tiempo de demora del circuito dise&ntilde;ado de acuerdo a diferentes configuraciones del  reloj a la entrada del FPGA, y evaluar la capacidad que se necesita en el FPGA para acoger el dise&ntilde;o realizado. N&oacute;tese  que la forma en que se ha realizado el dise&ntilde;o no exige el uso de un &uacute;nico FPGA, lo que facilita la s&iacute;ntesis. Pudiera  pensarse, en dependencia de la capacidad del FPGA con que se cuente, en la posibilidad de implementar algunos subsistemas  en un FPGA y el resto en otro, que interconectados convenientemente (por ejemplo, las salidas del primer FPGA son  la entrada del segundo) conforman la s&iacute;ntesis total de la RNA. Esta variante, en la que se necesitar&iacute;a m&aacute;s de un  FPGA, seguir&iacute;a siendo  m&aacute;s fiable y  menos costosa que una implementaci&oacute;n software, donde se requiere de una PC y no  se garantiza paralelismo ni tiempos del orden de nanosegundos de ejecuci&oacute;n de la RNA.  </font></p>      <P><font size="2" face="verdana">En este &uacute;ltimo aspecto, o sea, el temporal, se verific&oacute; que con la tarjeta de desarrollo utilizada, y para un reloj de  de 50MHz el tiempo que transcurre desde que a la RNA se le presenta un car&aacute;cter en la entrada hasta que lo clasifica es  de 40ns (se consumen 2 ciclos de reloj). La misma aplicaci&oacute;n, pero implementada por software con Matlab se ejecut&oacute; en  el orden de los milisegundos, por lo que la variante hardware implementada se ejecut&oacute; en el orden  10<SUP>5</SUP> veces m&aacute;s  r&aacute;pida. Se hace notar que la frecuencia utilizada no es la m&aacute;xima admitida; de acuerdo al dise&ntilde;o realizado la frecuencia  m&aacute;xima reportada en la s&iacute;ntesis es de 280.11MHz (T=3.57 ns) lo cual pudiera reducir a&uacute;n m&aacute;s el tiempo de respuesta de  la implementaci&oacute;n hardware con relaci&oacute;n a la implementaci&oacute;n software. </font></p>     <P><font size="2" face="verdana">En la <a href="/img/revistas/eac/v36n1/t0408115.jpg">Tabla 4</a> se muestra el consumo de recursos de una neurona artificial implementada por hardware. Teniendo  en cuenta que la cantidad total de neuronas para la arquitectura implementada fue de 23, se requerir&aacute;n 804 IOBs en un  solo FPGA (algunos n&uacute;cleos de la  familia Virtex 5 de Xilinx tienen hasta 1200 IOBs) o en varios conectados en paralelo.  Por ejemplo, si se emplea un XC3S2000-5FGG676C (489 Bonded IOBs), cuyo precio aproximado es de 30 USD, y  teniendo en cuenta que se necesitar&iacute;an 2 dispositivos para la implementaci&oacute;n completa de la red,  el costo ser&iacute;a, en t&eacute;rminos  del FPGA, de 60 USD. En este tipo de aplicaciones, el resto del hardware accesorio al FPGA no excede los 40 USD por  lo que el costo total es mucho menor que el de una computadora, necesaria para la implementaci&oacute;n software. </font></p>     
<P>&nbsp;</p>     <P><font size="3" face="verdana"><B>CONCLUSIONES</B> </font></p>     ]]></body>
<body><![CDATA[<P>&nbsp;</p>     <P><font size="2" face="verdana">En el trabajo se demuestra la viabilidad de la implementaci&oacute;n hardware de RNA para reconocimiento de caracteres.    La implementaci&oacute;n hardware de la red, adem&aacute;s de ser factible desde el punto de vista de la</font><font size="2" face="verdana">descripci&oacute;n hardware de      las funciones asociadas con el modelo de la neurona, y el almacenamiento de los par&aacute;metros de la RNA utilizando      un formato de punto fijo que garantiza la precisi&oacute;n fijada en el dise&ntilde;o, permite realizar el reconocimiento del car&aacute;cter en      un tiempo muy bajo (que puede ser del orden de decenas de nanosegundos). Este rendimiento se debe a la poca      latencia y al alto grado de paralelismo que se logra en el dise&ntilde;o y la s&iacute;ntesis hardware. El trabajo tambi&eacute;n demostr&oacute; la validez      de la implementaci&oacute;n de la funci&oacute;n de transferencia de cada neurona utilizando un esquema h&iacute;brido. Es adem&aacute;s      importante se&ntilde;alar que la utilizaci&oacute;n de la herramienta Simulink y en especial XSG ofrece un entorno de  dise&ntilde;o  sencillo  y      adecuado,  para el dise&ntilde;o y s&iacute;ntesis de RNA en FPGA. La conformaci&oacute;n de subsistemas, y su parametrizaci&oacute;n      haciendo uso de estas herramientas permite el desarrollo efectivo del dise&ntilde;o, y facilita la simulaci&oacute;n y posterior      implementaci&oacute;n de los dise&ntilde;os creados sobre hardware reconfigurable, pudi&eacute;ndose incluso desplegar el dise&ntilde;o en varios      dispositivos interconectados. Finalmente, el costo de la implementaci&oacute;n hardware es  reducido si se compara con la ejecuci&oacute;n de      la RNA en una computadora. </font></p>     <P>&nbsp;</p>     <P><font size="3" face="verdana"><strong>REFERENCIAS</strong></font></p>     <P>&nbsp;</p>     <!-- ref --><P><font size="2" face="verdana">1.     Castro Gracias, Francisco,   &#171;Fundamentos para la implementaci&oacute;n de la red neuronal perceptr&oacute;n  multicapa mediante software&#187;, Tesis de grado, Universidad de San Carlos de Guatemala, 2006.     </font></p>     <!-- ref --><P><font size="2" face="verdana">2.     A. Muthuramalingam, S. Himavathi, and E.  Srinivasan, &#171;Neural Network Implementation Using FPGA/  : Issues and Application&#187;, International Journal of Information Technology, 2007. Vol. 4 (2): p. 8692.     </font></p>     <!-- ref --><P><font size="2" face="verdana">3.     Polanco Carrillo, Franky, &Aacute;lvarez Ger&oacute;nimo, Daniel y Moreno Vega,  Valery, &#171;Desarrollo de Aplicaciones basadas en Redes Neuronales Artificiales sintetizadas en hardware  Reconfigurable&#187;, tesis de grado, CUJAE, Cuba, pp. 109, 2014.     </font></p>     <!-- ref --><P><font size="2" face="verdana">4.     Haykin Simon (Edt), &#171;Kalman Filtering and Neural  Networks&#187;, McMaster University, Hamilton,  Ontario, Canada, 2001.     </font></p>     <!-- ref --><P><font size="2" face="verdana">5.     &#171;Design and Implementation of Neural Network in  FPGA&#187;, Journal of Engineering and Development,  2012. Vol. 16 (3): p. 73-90.     </font></p>     <!-- ref --><P><font size="2" face="verdana">6.     Zhu Jihan, Sutt Peter, &#171;FPGA Implementations of Neural Networks a Survey of a Decade of  Progress&#187;, Proceedings 13th International Conference, FPL 2003, Lisbon, Portugal, September 1-3, 2003.     </font></p>     <!-- ref --><P><font size="2" face="verdana">7.      Mart&iacute;n del Br&iacute;o, Bonifacio y Sanz Molina,  Alfredo, &#171;Redes Neuronales y Sistemas  Difusos&#187;, Editorial Alfaomega RA-MA, 2a Edici&oacute;n, Espa&ntilde;a , 2001.     </font></p>     <!-- ref --><P><font size="2" face="verdana">8.     Hu Hen Yu, Neng Hwang Jenq,  &#171;Handbook of Neural Network Signal  Processing&#187;, CRC Press Electrical Engineering &amp; Applied Signal Processing Series, 2001.     </font></p>     <!-- ref --><P><font size="2" face="verdana">9.     G. S. Luis Manuel, &#171;Aceleraci&oacute;n de Algoritmos Mediante Hardware Reconfigurable Biblioteca  de Procesamiento de Im&aacute;genes para System  Generator&#187; tesis de maestr&iacute;a, CUJAE, 2011.     </font></p>     <!-- ref --><P><font size="2" face="verdana">10.     Galushkin Alexander, &#171;Neural Networks  Theory&#187;, Springer, 2010.     </font></p>     <!-- ref --><P><font size="2" face="verdana">11.     Amos R. Omondi y Rajapakse C. Jagath  (Edt), &#171;FPGA Implementations of Neural  Networks&#187;, Springer, 2006.     </font></p>     <!-- ref --><P><font size="2" face="verdana">12.     Rivera Ordo&ntilde;ez Cesar, &#171;Reconocimiento de caracteres por medio de una red neuronal  artificial&#187;, Colombia, Respuestas Vol.  14  p. 30-39, 2009.     </font>v     <P><font size="2" face="verdana">13.     J. Serrano, Antonio, Soria, Emilio y  D. Mart&iacute;n,  Jos&eacute;, &#171;Redes Neuronales  Artificiales&#187;, material descargado de www.uv.es/ocw, 2010. </font></p>     ]]></body>
<body><![CDATA[<P><font size="2" face="verdana">14.     L. Oberstar, Erick &#171;Fixed-Point Representation &amp; Fractional  Math&#187;, http://www.superkits.net/whitepapers.htm. </font></p>     <!-- ref --><P><font size="2" face="verdana">15.     &#171;Atlys TM Board Reference  Manual.&#187;, Digilent Inc., 2011.     </font></p>     <!-- ref --><P><font size="2" face="verdana">16.     J.A. Caballero Hern&aacute;ndez, M. D&iacute;az Salazar, M. Moradillos Paz-Lago, S. Pavoni  Oliver, &#171;Implementaci&oacute;n de la Funci&oacute;n Sigmoidal Logar&iacute;tmica en un  FPGA&#187;,  RIELAC, Vol.XXXV 2/2014  p.35-44.     </font></p>     <P>&nbsp;</p>     <P>&nbsp;</p>     <P><font size="2" face="Verdana">Recibido: Diciembre 2014     <br> Aprobado: Febrero 2015</font></p>     <P></p>     ]]></body>
<body><![CDATA[<P>&nbsp;</p>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Castro Gracias]]></surname>
<given-names><![CDATA[Francisco]]></given-names>
</name>
</person-group>
<source><![CDATA[Fundamentos para la implementación de la red neuronal perceptrón multicapa mediante software]]></source>
<year>2006</year>
<publisher-name><![CDATA[Universidad de San Carlos de Guatemala]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[A.]]></surname>
<given-names><![CDATA[Muthuramalingam]]></given-names>
</name>
<name>
<surname><![CDATA[S.]]></surname>
<given-names><![CDATA[Himavathi]]></given-names>
</name>
<name>
<surname><![CDATA[E.]]></surname>
<given-names><![CDATA[Srinivasan]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Neural Network Implementation Using FPGA: Issues and Application]]></article-title>
<source><![CDATA[International Journal of Information Technology]]></source>
<year>2007</year>
<volume>4</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>86-92</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Polanco Carrillo]]></surname>
<given-names><![CDATA[Franky]]></given-names>
</name>
<name>
<surname><![CDATA[Álvarez Gerónimo]]></surname>
<given-names><![CDATA[Daniel]]></given-names>
</name>
<name>
<surname><![CDATA[Moreno Vega]]></surname>
<given-names><![CDATA[Valery]]></given-names>
</name>
</person-group>
<source><![CDATA[Desarrollo de Aplicaciones basadas en Redes Neuronales Artificiales sintetizadas en hardware Reconfigurable]]></source>
<year>2014</year>
<page-range>109</page-range><publisher-name><![CDATA[CUJAE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Haykin]]></surname>
<given-names><![CDATA[Simon]]></given-names>
</name>
</person-group>
<source><![CDATA[Kalman Filtering and Neural Networks]]></source>
<year>2001</year>
<publisher-loc><![CDATA[Ontario ]]></publisher-loc>
<publisher-name><![CDATA[McMaster University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Haykin]]></surname>
<given-names><![CDATA[Simon]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Design and Implementation of Neural Network in FPGA]]></article-title>
<source><![CDATA[Journal of Engineering and Development]]></source>
<year>2012</year>
<volume>16</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>73-90</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[Zhu]]></surname>
<given-names><![CDATA[Jihan]]></given-names>
</name>
<name>
<surname><![CDATA[Sutt]]></surname>
<given-names><![CDATA[Peter]]></given-names>
</name>
</person-group>
<source><![CDATA[FPGA Implementations of Neural Networks a Survey of a Decade of Progress]]></source>
<year>Sept</year>
<month>em</month>
<day>be</day>
<publisher-loc><![CDATA[Lisbon ]]></publisher-loc>
<publisher-name><![CDATA[Proceedings 13th International Conference]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Martín del Brío]]></surname>
<given-names><![CDATA[Bonifacio]]></given-names>
</name>
<name>
<surname><![CDATA[Sanz Molina]]></surname>
<given-names><![CDATA[Alfredo]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Redes Neuronales y Sistemas Difusos]]></article-title>
<source><![CDATA[]]></source>
<year>2001</year>
<publisher-name><![CDATA[Editorial Alfaomega RA-MA]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hu Hen]]></surname>
<given-names><![CDATA[Yu]]></given-names>
</name>
<name>
<surname><![CDATA[Neng Hwang]]></surname>
<given-names><![CDATA[Jenq]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Handbook of Neural Network Signal Processing]]></article-title>
<source><![CDATA[CRC Press Electrical Engineering & Applied Signal Processing Series]]></source>
<year>2001</year>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[G. S.]]></surname>
<given-names><![CDATA[Luis Manuel]]></given-names>
</name>
</person-group>
<source><![CDATA[Aceleración de Algoritmos Mediante Hardware Reconfigurable Biblioteca de Procesamiento de Imágenes para System Generator]]></source>
<year>2011</year>
<publisher-name><![CDATA[CUJAE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Galushkin]]></surname>
<given-names><![CDATA[Alexander]]></given-names>
</name>
</person-group>
<source><![CDATA[Neural Networks Theory]]></source>
<year>2010</year>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Amos R.]]></surname>
<given-names><![CDATA[Omondi]]></given-names>
</name>
<name>
<surname><![CDATA[Rajapakse C.]]></surname>
<given-names><![CDATA[Jagath]]></given-names>
</name>
</person-group>
<source><![CDATA[FPGA Implementations of Neural Networks]]></source>
<year>2006</year>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rivera Ordoñez]]></surname>
<given-names><![CDATA[Cesar]]></given-names>
</name>
</person-group>
<source><![CDATA[Reconocimiento de caracteres por medio de una red neuronal artificial]]></source>
<year>2009</year>
<volume>14</volume>
<page-range>30-39</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[J. Serrano]]></surname>
<given-names><![CDATA[Antonio]]></given-names>
</name>
<name>
<surname><![CDATA[Soria]]></surname>
<given-names><![CDATA[Emilio]]></given-names>
</name>
<name>
<surname><![CDATA[D. Martín]]></surname>
<given-names><![CDATA[José]]></given-names>
</name>
</person-group>
<source><![CDATA[Redes Neuronales Artificiales]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[L. Oberstar]]></surname>
<given-names><![CDATA[Erick]]></given-names>
</name>
</person-group>
<source><![CDATA[Fixed-Point Representation & Fractional Math]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[L. Oberstar]]></surname>
<given-names><![CDATA[Erick]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[Atlys TM Board Reference Manual]]></source>
<year>2011</year>
<publisher-name><![CDATA[Digilent Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Caballero Hernández]]></surname>
<given-names><![CDATA[J.A.]]></given-names>
</name>
<name>
<surname><![CDATA[Díaz Salazar]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Moradillos Paz-Lago]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Pavoni Oliver]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Implementación de la Función Sigmoidal Logarítmica en un FPGA]]></article-title>
<source><![CDATA[RIELAC]]></source>
<year>2014</year>
<volume>XXXV</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>35-44</page-range></nlm-citation>
</ref>
</ref-list>
</back>
</article>
