¿Cómo elegir una FPGA?

Necesito hacer procesamiento de señal digital en 8 líneas analógicas a 10 kHz. Esta es una tarea bastante exigente, y estaba pensando que un FPGA podría ser el enfoque correcto. Actualmente estoy buscando kits de desarrollo de Xilinx, y dado que no tengo experiencia con FPGA, me resulta muy difícil saber cómo elegir el chip adecuado. Me imaginé usando un kit de desarrollo y expandiéndolo usando los pines de E/S para conectarlo a un chip A/D de 8 canales y un chip D/A de 8 canales.

¿Cuáles son las diferencias entre usar Spartan, Virtex, Altera, etc.? Ni siquiera sé cómo estimar cuántas puertas necesitaré. ¿Hay alguna regla general para eso? ¿Cómo me aseguro de que la velocidad del reloj sea suficiente (en función del número de sumas y multiplicaciones)? ¿Es difícil hacer un procesamiento de punto flotante en un FPGA? ¿Debería ceñirme a las matemáticas de punto fijo? ¿Cuál es la mejor manera de empezar?

Necesito una solución que sea programable usando Linux. Xilinx proporciona esto, pero no estoy seguro de cuáles son las limitaciones.

Sería de gran ayuda saber qué tipo de algoritmos necesita implementar. Lo más probable es que no necesite un FPGA en absoluto, lo que le ahorrará mucho tiempo de desarrollo ;-)
Estoy de acuerdo con geschema; es posible que no necesite un FPGA. Tal vez un DSP sea una mejor solución. En cualquier caso, es más fácil empezar con ellos si solo tienes experiencia en uCs. ¡Los FPGA son muy diferentes!

Respuestas (8)

Yo no usaría un FPGA.

Menciona que no tiene experiencia con FPGA y, sin embargo, está interesado en realizar el procesamiento de señales digitales en un FPGA ... la manipulación numérica + el procesamiento de señales son bastante difíciles de lograr en una computadora / DSP / microprocesador, donde las herramientas de programación son convencionales programación. Me parece que usar un proyecto de procesamiento de señales digitales para un primer proyecto de FPGA es probablemente una receta para la frustración.

Si desea aprender sobre FPGA, intente hacer algo más adecuado para las herramientas de desarrollo, como máquinas de estado o procesamiento de paquetes de comunicaciones.

Para un proyecto DSP como el que ha descrito, recomendaría un DSP o un Cypress PSOC o un microconvertidor de dispositivos analógicos (= microcontrolador con ADC + DAC incorporado) en su lugar.

(Divulgación completa, que proporciona algo de contexto para mi consejo: yo mismo no uso FPGA. He usado lógica programable = PLD en raras ocasiones. Mi compañero de oficina usa FPGA con frecuencia, y he visto suficiente código VHDL/Verilog revisando su hombro para saber que es muy adecuado para la manipulación de bits. Es un ingeniero experimentado con mucha experiencia con FPGA; en una conversación reciente con él, en la que estaba haciendo algunas operaciones matemáticas bastante simples con números enteros con diferentes anchos de bits, le dije que necesitaba hacer la extensión de signos en el número de ancho de bit más corto para restarlo correctamente, y él puso esta expresión en su rostro, como "oh hombre, no quiero tener que hacer la extensión de signos ..." Sumar y restar No es muy difícil en un FPGA, más allá de sumar y restar, realmente necesitas conocer las herramientas y bibliotecas.Y procesamiento de coma flotante??!?!!??!?!!?)

MyHDL intenta solucionar algunos de esos problemas.
No creo que los FPGA sean más difíciles de usar que los micros, simplemente tienen un conjunto diferente de advertencias.

Todos son bastante buenos. No necesitará mucho de la FPGA para hacer algo tan simple como eso, por lo que cualquier FPGA para principiantes (como la línea Spartan-3) debería ser suficiente.

Sin embargo, solo una advertencia, programar un FPGA es MUY diferente a algo como C ++, C, Perl ... Sugiero comenzar con verilog porque probablemente sea más fácil hacer la transición a ... VHDL es muy parecido a COBOL pero verilog es más similar a los lenguajes de programación modernos.

Sobre la velocidad del reloj: no te preocupes por eso. La ventaja de usar FPGA es que son masivamente paralelos, por lo que si bien un reloj de 50 MHz puede parecer ridículamente lento según los estándares actuales, tenga en cuenta que pueden hacer cientos de cosas a la vez, mientras que una CPU "normal" a 3 GHz tiene que poner cosas en cola. subir uno a la vez. Esta es la ventaja de usar FPGA: paralelismo. Entonces, para algo especializado, no necesita preocuparse tanto por la velocidad.

Pero como el otro comentario, es un paradigma completamente diferente. La curva de aprendizaje es empinada, pero una vez que dominas el idioma, todo tiene sentido (solo asegúrate de entender los componentes básicos).

Feliz FPGA :)

¡VHDL en realidad está basado en Ada! León
Además, al elegir Verilog o VHDL, considere el idioma a la luz de que es una inversión en su comercialización futura. En EE. UU., Verilog es más popular en el desarrollo de circuitos integrados/chips que VHDL, por lo que conocer Verilog (y su versión mejorada, System Verilog) probablemente sea una mejor inversión a largo plazo. También parece que todas las grandes empresas de EDA están invirtiendo en verilog y system verilog, mientras que VHDL no está recibiendo mucha atención. (Sea testigo de la simulación mixta de VCS con las diferencias de rendimiento del simulador vhdl vs VCS verilog). (que el flaming) Sí, puedes aprender ambos, pero ¿por qué no priorizar?
Puedes escribirlo en cualquiera de los dos idiomas. Creo que las herramientas de Xilinx pueden tomar Verilog y VHDL, incluso en el mismo proyecto. FWIW, estoy en los EE. UU. y nunca he usado Verilog.
"VHDL es muy parecido a COBOL". ¡Ni por un millón de millas!

Hace un tiempo preparé un cuadro comparativo de placas FPGA de nivel de entrada , de los dos proveedores de FPGA Xilinx y Altera. Son los dos jugadores principales en FPGA, algo así como PIC vs AVR o Sony vs Nintendo. Proporcionan la mejor relación calidad-precio. Hay otros proveedores que brindan funciones específicas, pero generalmente termina pagando más o perdiendo funciones/potencia de procesamiento.

Sé que esto no responde directamente a su pregunta específica, pero debería ser útil para cualquiera que esté buscando comenzar con una placa FPGA.

Muchas preguntas; intentemos responderlas en orden:

  1. Requisito de recursos para el procesamiento de señales: para determinar qué hardware necesita usar/construir, necesita una idea de la cantidad de procesamiento que desea realizar en las señales en cuestión. 8 canales a 10 kHz no es una velocidad de datos muy alta, por lo que, a menos que sus requisitos sean muy especiales, la mayoría de los FPGA y DSP deberían poder procesar los datos.
  2. ¿Cómo elijo el dispositivo adecuado? Según los requisitos de su procesamiento de señales, debería poder determinar qué dispositivo se requiere para su aplicación. Los puntos clave son los requisitos de memoria, se requieren multiplicadores duros, consideraciones especiales de IO, etc. La mayoría de los proveedores de FPGA tienen herramientas (basadas en la web) que le permiten buscar en su cartera en función de dichos factores.
  3. ¿Cómo empiezo con DSP? Los DSP son simplemente computadoras ordinarias que generalmente tienen instrucciones SIMD [Instrucción única, datos múltiples] relevantes para el procesamiento de señales. Para comenzar, solo necesita comprender las limitaciones del hardware "incrustado" y un compilador C para que pueda probar su código en una PC normal.
  4. ¿Cómo empiezo con los FPGA? Los FPGA están programados en un lenguaje de descripción de hardware. Estos son significativamente diferentes de los lenguajes secuenciales como C o Java. Para desarrollar para FPGA, debe comprender la naturaleza concurrente del hardware real. Las herramientas que necesita para comenzar es un simulador HDL como Simili (gratis para diseños pequeños) o Modelsim. Esto le permite simular su código en la PC. Después de eso, necesita una herramienta de síntesis específica del proveedor que compile su código HDL en un archivo de bits que se usa para configurar el FPGA. Si obtiene un kit de inicio de Altera, Actel o Xilinx, todas las herramientas que necesita son parte del kit.
  5. Compatibilidad con Linux: las herramientas FPGA de la mayoría de los proveedores se ejecutan en Linux, pero en el campo de DSP generalmente se ve obligado a usar compilaciones solo de Windows a menos que su DSP sea compatible con GCC (Blackfin de Analog y varios modelos de Texas Instruments lo son).
+1 para "8 canales a 10 kHz no es una velocidad de datos muy alta". No puedo creer que nadie haya dicho eso todavía.
No si está haciendo FFT de 8 canales...
Los DSP suelen ser unidades de procesamiento paralelo de un solo subproceso, cada una capaz de ejecutar una instrucción diferente (a diferencia de SIMD, donde todas las unidades comparten la misma instrucción).

Un compañero llamado Anthony Burch ha creado una serie de videos sobre FPGA . Uno de los gratuitos incluye información sobre cómo elegir un FPGA.

Casi cualquier proveedor de FPGA lo hará. Es como Intel vs AMD... hay diferencias entre Xilinx y Altera, pero son notablemente similares en términos de funcionalidad. Compre cualquier kit de desarrollo que se encuentre dentro de su rango de precios (personalmente me gustó el Spartan 3 de Xilinx) y utilícelo.

En cuanto al número de puertas, el kit de desarrollo suele ser muy grande, con suerte mucho más grande de lo que necesita. Cuando esté listo para pasar a su propia PCB, las herramientas de síntesis estimarán cuántas puertas requiere su diseño. Puede usar esto para seleccionar un FPGA más pequeño, aunque puede descubrir que las restricciones del paquete (QFP vs BGA) también juegan un papel importante.

Con las técnicas de diseño adecuadas, la velocidad del reloj no será un problema. De hecho, normalmente puede usar un cristal de velocidad relativamente baja, como 12 MHz, y la FPGA puede sintetizar un reloj mucho más rápido (¡o muchos relojes más rápidos!). Si realmente le preocupan las adiciones múltiples, sé que la serie Virtex4 tiene segmentos DSP dedicados que pueden acelerar esos cálculos. Pero los FPGA son masivamente paralelos, por lo que no necesita demasiados MHz para hacer mucho trabajo.

Definitivamente me quedaría con el punto fijo si puedes. Es posible hacer punto flotante, y Xilinx incluso tiene un generador central que le proporcionará un núcleo de punto flotante, pero el punto fijo será mucho más rápido y requerirá muchas menos puertas. Otra ventaja es que puedes hacer algún que otro punto fijo; puede usar tantos bits como desee, no tiene que ser un conteo de potencia de 2 bits y/o puede usar puntos fijos más grandes para etapas intermedias.

¿La mejor manera de comenzar con los FPGA? Encuentra una clase o un seminario o algo así. Si no está familiarizado con la tecnología, las herramientas de desarrollo serán muy confusas, porque hay muchas cosas que pueden salir mal. Las herramientas para MCU son mucho más indulgentes y requieren menos intimidad con la arquitectura subyacente.

Ah, y deberías leer la hoja de datos del FPGA, de adelante hacia atrás.

Echa un vistazo a XMOS

Se pueden usar para reemplazar los FPGA en muchas aplicaciones.

Si desea estimar el conteo de puertas, no necesita comprar hardware todavía: los principales fabricantes de FPGA tienen software gratuito y muchos tendrán notas sobre cómo hacer dsp. Puede diseñar y simular cosas sin hardware, y el software le dirá qué recursos se utilizan. Sin embargo, para el procesamiento de señales, un dsp normalmente sería el primer paso, y FPGA solo si se queda sin potencia de procesamiento.