Tenemos una amplia experiencia en el desarrollo firmware para FPGA’s sobre lenguaje VHDL. Los desarrollos habituales se centran en cuatro tipos, o combinaciones de estos.

- Periféricos Genéricos: Consiste en la ampliación de la periferia de uC y uP, mediante periféricos de uso general, como UART’s, I2C, MAC’s Ethernet, USB’s… etc. Estos elementos son conectados al bus de memoria de la CPU, o mediante buses PCIe en procesadores más potentes.
Un ejemplo es la ampliación de la periferia de arquitecturas PC, en diseños basados en tarjetas COM-Express. De forma que se añaden los elementos necesarios usando una sola pieza, y con la posibilidad de ampliarlos y/o modificarlos en un futuro, de forma rápida y sencilla.

- Periféricos Dedicados: De forma similar a los periféricos genéricos, dotamos a uC y uP de periféricos que manejar, pero diseñados específicamente para aplicaciones concretas. Un ejemplo es dotar a una CPU de un controlador para un ADC de alta velocidad, que realice operaciones de filtrado digital, cambios de frecuencia de muestreo, FFT’s…etc. Pudiendo la CPU configurar estos bloques y recoger los datos procesados, liberándola de dicha carga computacional.

- Controladores Stand-Alone: La FPGA se convierte en el corazón del sistema, y no depende de una CPU. Esto permite realizar controles en tiempo real muy estrictos y paralelizables.
Un ejemplo es un decodificador de radio, que combina filtrado, correlación, detectores de preámbulo con diferentes aproximaciones, decodificadores estadísticos y correctores de errores. Que en combinación son un receptor de radio altamente inmune a las interferencias.

- System On Chip: Se trata de crear sistemas con una CPU y la periferia necesaria para una aplicación concreta, pero contenida en un solo CI. En estos casos realizamos diseños basados en arquitecturas Microblaze o NiosII, y les dotamos de los periféricos necesarios, ya sean comerciales y/o dedicados. Una de las ventajas es la alta reconfigurabilidad, ya que permite añadir o quitar elementos e incluso la posibilidad de multicores.

VHDL