¿Qué diseño FPGA más desafiante ha hecho en los últimos 5 años?

A2A.

Descargo de responsabilidad: mi trabajo e investigación NO están relacionados con FPGA y / o sistemas digitales. ¡Por lo tanto, mi respuesta puede no ser exactamente ‘útil’ o ‘contemporánea’!

Dos de los diseños más desafiantes que he hecho fueron (i) una calculadora FFT serie a paralelo de 64 puntos, para datos de 16 bits y (ii) un procesador de instrucciones (subbloque) de un microprocesador similar al 8085.

El primero (FFT de 64 puntos) roba el programa en términos de complejidad y jerarquía del código, debido a que el código tenía que hacer lo siguiente:
1. Conversión de serie a paralelo por lotes, y luego calcule los resultados.
2. Implementación de aritmética de enteros y complejos (suma, resta, multiplicación, conjugados, etc.) en VHDL
3. Sincronización entre etapas sucesivas: FFT de 2 puntos, combinadores complejos de 4 puntos, 8 puntos, 16 puntos, 32 puntos y 64 puntos, mediante el uso de buffers de ping pong
4. Implementación de factores twiddle usando una declaración similar a la memoria en VHDL. Los diseños contemporáneos suelen utilizar algoritmos CORDIC.

Comparado con esto, el procesador de instrucciones era pan comido, que solo tenía que aceptar y decodificar instrucciones de uno / dos / tres bytes que implicaban instrucciones de llamada, salto, RST, PCHL.

Ambos sistemas fueron diseñados para los FPGA Xilinx Virtex 5.

El requisito del producto era realizar una búsqueda rápida de datos dentro de los 16 GB de memoria en una placa personalizada. Para llegar a la latencia de búsqueda de unos pocos milisegundos, ejecuté 32 procesadores de núcleo blando (Xilinx Microblaze) para acelerar la búsqueda. Cada núcleo ejecutaba un software personalizado que colabora con otros núcleos.

Otro proyecto desafiante que hice fue implementar una pila de red completa: TFTP / UDP / IP / ARP / DHCP / ICMP en Verilog. Eso permitió lograr un rendimiento de velocidad de cable en una conexión Ethernet de 1 Gbs.

Los diseños grandes de FPGA de hoy tienen un problema significativo con el tiempo de compilación. Un diseño grande puede tardar muchas horas en compilarse, incluso en una estación de trabajo de muy alta gama. Un ingeniero puede llegar por la mañana, probar la carga de FPGA que se compiló durante la noche, pasar algún tiempo analizando y reparando cualquier problema encontrado, enviar el código al compilador, y eso es todo por el día.

Hice un diseño de FPGA que implementa un coprocesador para acelerar la compilación de FPGA. Es un motor de computación paralela altamente canalizado que reside en un FPGA en una placa conectada al bus PCI Express en una estación de trabajo. Descarga las partes repetitivas que requieren más tiempo del algoritmo de cálculo y realiza una mejora significativa en el tiempo necesario para compilar un diseño grande; cuanto más grande es el diseño, más mejoras hace.

Este fue un diseño desafiante porque, de hecho, el proceso de compilación es extremadamente intensivo en cómputo y una estación de trabajo multiprocesador tiene mucha potencia de cómputo; son simplemente muchos ciclos para llegar al resultado final. Se requirió un análisis de la implementación de la estación de trabajo para determinar las partes que podrían mejorarse, el diseño de la implementación de FPGA, la modificación del software para la interfaz con el coprocesador y muchas pruebas para medir el rendimiento. El diseño FPGA en sí mismo necesitaba una estructura altamente canalizada con múltiples etapas de cómputo (hasta 17 en una cadena si no recuerdo mal), cruce de dominio de reloj, paso de token, uso extenso de memoria interna y externa de alta velocidad, interfaz PCI Express, etc. ¡Fue mucho trabajo, e incluyó mucho tiempo esperando que se compilara lo sangriento!

Si el rendimiento del compilador se puede mejorar lo suficiente como para obtener dos compilaciones en un día, ¡se puede duplicar la productividad de un ingeniero!

[NOTA: Tenemos una solicitud de patente para este trámite a través de la oficina de patentes de los EE. UU., Con suerte se emitirá pronto.]

EDITAR: Solo una nota de que nuestra patente sobre esto se emitió hace un tiempo.
http://www.uspto.gov/web/patents

En Stellamar, incorporamos ADC digitales en varios FPGA. El ADC digital típico utiliza una celda de entrada LVDS, una salida digital, un núcleo lógico y un puñado de componentes pasivos externos. Aunque el ADC digital usa solo células digitales, se comporta como un ADC tradicional que requiere bloques analógicos. Obviamente, los ADC tradicionales no se pueden implementar en FPGA regulares.

El diseño de FPGA más complejo para mí fue un diseño de decodificador de conteo de más de 2700 K con h265 hace un año. Era demasiado grande para manejar un FPGA, por lo que estamos usando 2 placas con tecnología multipexing XILLINX IO en primer lugar.

Más tarde descubrí que tendría problemas al dividir el diseño en dos partes con tanta señal de bus que utiliza la multiplexación io durante la prueba de esfuerzo donde el objetivo del reloj es mucho más alto para el h265 específico.

Luego empiezo a editar el diseño para deshacerme de otras funciones heredadas con tie off. Afortunadamente sobrevivo haciendo que la característica clave funcione en una placa.