El objetivo general del proyecto es contar con una plataforma propia y fácil de usar para desarrollar aplicaciones sobre bus PCI.
Dentro de dicho contexto, podemos encontrar tres grandes objetivos:
Este proyecto plantea el diseño de un core PCI que se sintetizará en un FPGA.
Un core es un diseño especificado utilizando un lenguaje de descripción de hardware (AHDL, VHDL, Verilog), la especificación implica definir la interfaz que tendrá dicho diseño y cual será su comportamiento. Como decíamos, se está creando su especificación funcional en un lenguaje de descripción de hardware dado, no se está implementando físicamente el circuito. Posteriormente esta descripción puede ser sintetizada (llevada a un circuito eléctrico) en la tecnología deseada.
En nuestro caso al sintetizar el core PCI se crea un archivo para configurar el FPGA y hacer que éste se comporte como un dispositivo PCI.
Se plantea el diseño y fabricación de una placa PCI de propósito general, teniendo como objetivo principal su bajo costo.
Esta placa debe caracterizarse por ser muy flexible, permitir incorporar circuitos adicionales, proveer varios voltajes de alimentación, contar con memoria on-board y leds y llaves de propósito general.
Estas características la harán muy versátil y útil en etapas de prototipado de diseños o investigación académica. El instituto cuenta con varias placas de propósito general, pero para desarrollos basados en el bus PCI cuenta solo con 2 placas (modelo ARC-PCI de ALTERA).
En esta misma placa se probará el core PCI diseñado como parte del proyecto.
Un software controlador de dispositivos (driver) esconde la complejidad y los detalles de cómo funciona su correspondiente dispositivo. Permite acceder a los recursos brindados por el dispositivo utilizando interfaces bien definidas por el sistema operativo. De esta forma una diversidad de dispositivos pueden ser accedidos por el usuario utilizando los mismos mecanismos.
Se plantea como objetivo diseñar un driver genérico para dispositivos PCI. Estará desarrollado con la misma filosofía que la placa de propósito general, es decir, su forma de uso debe ser clara y debe poder ser fácilmente adaptable a varios tipos de dispositivos PCI.
El bus PCI se basa en transacciones punto a punto entre dispositivos. El dispositivo que comienza la transacción se llama Master y el que acepta la transacción se llama Target.
Se propone diseñar un core PCI únicamente con la funcionalidad de Target, ya que desarrollar ambos modos de funcionamiento sería demasiado ambicioso. La única funcionalidad que se pierde es la de poder empezar transacciones desde la placa, ya sea hacia otro dispositivo PCI o hacia la memoria del PC (similar a DMA).
El core PCI debe comunicarse utilizando el bus PCI y proveer al resto de las aplicaciones sintetizadas en el FPGA una interfaz de comunicación sencilla. Para esto se utilizará la especificación Wishbone, que define un bus pensado para comunicar cores IP que se encuentran en un mismo integrado. Debido a esto, el core PCI se comportará entonces, como un puente entre el bus PCI externo y el bus Wishbone interno. Detalles de la especificación pueden encontrarse en los apéndices y en www.opencores.org
El bus PCI más difundido es de ancho de palabra de 32 bits, por lo que se dotará a la placa de un conector compatible con dicho bus. El diseñarla para que sea compatible con buses de 64 bits encarecería mucho el diseño (FPGA con más patas, más superficie de impreso y layout más complicado).
Para superar la performance de la placa ARC-PCI se utilizarán FPGAs más rápidos y de mayor capacidad.
Para que la placa sea lo suficientemente versátil deberá contar con memoria on-board y conectores de expansión que le permitan conectarle placas desarrolladas con algún fin específico.
Se busca también adquirir experiencia en el diseño y fabricación de placas para diseños digitales que utilizan frecuencias de reloj mayores o iguales a 33MHz.
Dado que algunos de los componentes están disponibles sólo en encapsulados para montaje superficial, se determinarán cuales son las mayores dificultades que surgen de usar dichos encapsulados.
Dado que se está planteando diseñar una plataforma de desarrollo de bajo costo con un core PCI de libre distribución y uso, se opta por desarrollar el driver para un sistema operativo de libre distribución y sin costos de licencias. Se selecciona entonces Linux (distribución Red Hat Linux) debido a su gran disponibilidad y a la experiencia por parte de los integrantes del grupo en su utilización.
Ya que la placa fue concebida como hardware de propósito general, el driver también debe ser desarrollado con los mismos principios. El código debe ser sencillo, comprensible y fácilmente modificable por los eventuales usuarios con poco conocimiento del funcionamiento interno de las funcionalidades provistas por la placa.