5. Antecedentes y estado del arte

5.1. Antecedentes

En el IIE, en más de una ocasión, se han utilizado PCs con placas adicionales para implementar un diseño hardware.
Uno de los primeros proyectos con estas características fue un prototipo de un registrador de perturbaciones de la red de transmisión eléctrica. El mismo constaba de una placa que adquiría muestras de la red eléctrica y eran procesadas en un PC para detectar varios tipos de posibles desviaciones respecto del comportamiento nominal. En caso de detección positiva de desviaciones, las señales se almacenaban en medio magnético para su posterior procesamiento.[10.1.K ]

El bus ISA fue utilizado en proyectos realizados en el IIE, por ejemplo para diseñar una tarjeta adquisidora de Video [10.1.F ] o implementar una red neuronal en una placa con FPGAs para utilizarla como co-procesador [10.1.H ].
Para desarrollos con bus ISA, el instituto cuenta con una placa ISA con lógica reconfigurable (RIPP10 de Altera) [10.1.J ] que ha sido utilizado en proyectos de aceleración de algoritmos por Hardware.
El último proyecto que utilizó el bus ISA, como interfaz de comunicación con el PC, fue el de "Implementación de algoritmos de tratamiento de imágenes en lógica reconfigurable" [10.1.C ]. Consistió en implementar en la placa RIPP10 algoritmos de procesamiento de imágenes y se compararon los tiempos de procesamiento con los de funciones implementadas en software. Los resultados fueron muy satisfactorios, pero se detectó que una de las limitantes para lograr mayor performance era la transferencia de datos a través del bus ISA, ya que las tasas de transferencia que se logran son muy bajas para la cantidad de datos que requiere el procesamiento de imágenes.

Posteriormente el IIE recibió la donación de dos placas PCI con lógica reconfigurable (ARC-PCI de Altera). Con estas placas se realizó el proyecto de fin de carrera "Neuro FPGA" [10.1.G ] en el cual se implementaban redes Neuronales en Hardware y esta siendo utilizada en un proyecto de maestría sobre aceleración de algoritmos por hardware.

5.2. Estado del arte al comenzar el proyecto

5.2.1. Plataformas de desarrollo para bus PCI

Es posible comprar plataformas completas de desarrollo para bus PCI, es decir paquetes que incluyan una placa con lógica reconfigurables, un core PCI y un driver de ejemplo. Al momento de comenzar el proyecto, los altos costos de estos paquetes los tornan una alternativa inviable para nuestro medio y el de muchas universidades o empresas de la región.
El alto costo de estas plataformas se debe a que utilizan FPGAs topes de línea, cores PCI comerciales y software de desarrollo de drivers comerciales.
No se encontraron plataformas de desarrollo con prestaciones intermedias a un costo accesible.

A continuación se listan las características y precios de algunas plataformas disponibles en el mercado (Diciembre 2003):

Una lista más extensa de placas PCI que utilizan FPGAs puede encontrase en http://www.fpga-faq.com/FPGA_Boards.shtml

Al momento de escribir esta documentación han aparecido plataformas que intentan llenar el vacío existente.

5.2.2. Placas PCI

Una alternativa a la compra de una plataforma de desarrollo completa es la compra de una placa PCI con lógica reconfigurable y desarrollar los drivers y el core PCI.

El IIE cuenta con 2 placas PCI con lógica reconfigurable, permiten agregarle DIMMs de memoria SRAM y cuenta con 3 FPGAs, lo que la hace una plataforma sumamente flexible y potente. El problema es que está fuera de producción, y si bien los FPGAs tiene una capacidad adecuada para muchas aplicaciones, la performance que se logra no es la adecuada para diseños que utilizan el bus PCI.

Al comenzar el proyecto no existían placas de pequeño o mediano porte, ya que todas estaban equipadas con FPGAs de gran tamaño y electrónica adicional que permiten desarrollar una muy variada gama de aplicaciones.

Luego de haber terminado la placa del proyecto, salió al mercado una placa de desarrollo fabricada por Insight Electronics a U$S250. Esta misma placa es la utilizada en la plataforma de desarrollo DS-KIT-PCI32S-200 anteriormente mencionada.
Las características de la placa (DS-KIT-2S200) son las siguientes:

5.2.3. Cores PCI

5.2.3.1. Cores PCI comerciales

Existen varios cores comerciales para bus PCI de 32 bits, todos con distintos niveles de complejidad. Algunos sólo se comportan como Target PCI y otros implementan las funcionalidades de Target y Master.
ALTERA y XILINX, los mayores fabricantes de FPGAs, ofrecen cores diseñados y probados por sus grupos de desarrollo y también ofrecen cores diseñados por terceros, aprobados por ellos.

Algunos cores disponibles en el mercado:

Un listado más extenso puede encontrarse en el sitio web de Design and Ruse (http://www.us.design-reuse.com/sip?id=68 )

5.2.3.2. Cores PCI gratuitos

Al comenzar el proyecto, se conocía la existencia de un diseño VHDL de un interfaz esclavo PCI para una aplicación de Wavelet [10.1.A ]. Se realizaron contactos con el diseñador y nos envió la documentación y el código VHDL de su diseño. Luego de estudiar la interfaz concluimos que no se adecuaba a nuestros objetivos ya que el diseño era muy dependiente de la aplicación e implementaba un conjunto de funcionalidades muy reducido.

Otra fuente de cores IP es el sitio www.opencore.org, en el se publican cores terminados o diseños que están siendo implementados. Durante el transcurso del proyecto, en opencores.org se publicó la necesidad de reunir diseñadores para llevar acabo un core PCI Master/Target de libre distribución.
Actualmente hay un core PCI de libre distribución en opencores.org. La aplicación de prueba esta implementada en una placa con un FPGA de XILINX. Se están implementando diseños (Testbench) que testen exhaustivamente el core PCI.

5.2.4. Drivers PCI

La forma correcta de utilizar las funciones provistas por una placa conectada al bus PCI dependen totalmente de la aplicación. Es decir, desde el punto de vista del software de aplicación, la forma en que generalmente se accede a una tarjeta de sonido no es útil para acceder a una tarjeta de red.
Entonces, el driver debe ser desarrollado a medida, tomando en cuenta la aplicación final.
Debido a esto, solamente tiene sentido hablar de los drivers existentes como ejemplos o ayudas para el desarrollo de uno a medida.

Las plataformas de desarrollo generalmente proveen un driver de ejemplo o un kit de desarrollo de drivers, que facilitan la tarea.

En el momento de iniciar el proyecto se encontraba disponible un driver para la placa ARC-PCI desarrollado por William Bishop [ 10.1.N ] de la Universidad de Waterloo en Canadá. Este driver funciona bajo el sistema operativo Windows NT.

La versión 2.4 del sistema operativo Linux se encontraba en desarrollo al momento de iniciar el proyecto, y simplifica sensiblemente el desarrollo de drivers frente a versiones previas. La documentación existente, sobre el bus PCI y sobre el desarrollo de módulos de kernel, es muy completa y detallada, y se complementa con la disponibilidad del código fuente de cientos de drivers que han sido desarrollados bajo la licencia de libre distribución GPL utilizada por Linux.