PCB FPGA personalizado con circuito de programación externo

Mi equipo ha verificado nuestro diseño lógico en una placa de desarrollo y estamos listos para pasar a un prototipo final. Debido a la naturaleza del dispositivo, la placa FPGA debe contener componentes mínimos y configurarse a través de un circuito de programación externo. La tecnología específica a la que nos hemos dirigido es el Altera Cyclone V, pero imagino que los mismos principios podrían aplicarse también a otras tecnologías. Estoy buscando consejos sobre la mejor manera de lograr esto en términos de tiempo, costo y complejidad.

Me centraré en el método de programación más simple, que es la configuración en serie activa. Después de explorar el sitio web de Altera durante unos días, esto es lo que se me ocurrió como requisitos de diseño:

-La FPGA no puede mantener una configuración de diseño (flujo de bits) durante el apagado y, por lo tanto, requiere algún tipo de memoria no volátil programable, como la memoria flash.

-Hay una secuencia de encendido simple donde el FPGA proporciona un par de señales externas para indicar que está listo para recibir un flujo de bits y también proporciona un reloj a través de un oscilador interno para sincronizarse con la fuente del flujo de bits.

-La placa que contiene la FPGA debe programarse mientras está conectada a un circuito externo, retirarse del circuito y colocarse en una pila de PCB que contenga varios otros dispositivos que funcionen independientemente de la FPGA. El FPGA no controla ninguno de estos otros dispositivos, aunque recibe señales de control para sincronizar su actividad con el sistema general.

Algunas preguntas con las que tengo dificultades:

  • ¿Existen soluciones OTS para la configuración de FPGA (almacenamiento y flujo de bits) o es algo que requiere absolutamente una solución de microcontrolador diseñada a medida, como MSP430/PIC?

  • He buscado en el chip USB Blaster una solución de circuito de programación, pero usa JTAG e interactúa directamente con el FPGA. No estoy seguro de si es capaz de interactuar con un dispositivo de almacenamiento. Proporciona mucha más funcionalidad de la que se necesita para este sistema y es bastante costoso (~$300 solo por el chip). No necesitamos poder acceder a las señales internas usando Signal Tap, porque nuestra configuración de prueba puede verificar la operación usando co-simulación. ¿Existen dispositivos que pueda usar, posiblemente como un sistema emparejado (chip integrado más chip de programador externo)? O, ¿alguien puede recomendar un enfoque alternativo?

Envié una solicitud de soporte a Altera, pero dudo que estén interesados ​​en ayudar a una startup como la nuestra. Además, estoy seguro de que hay más experiencia disponible aquí. Gracias de antemano por cualquier consejo útil. ¡Ustedes son geniales!

Bueno, puede obtener una copia USB Blaster de muchas fuentes por tan solo $ 10. La mayoría de ellos son bastante rápidos y funcionan muy bien.
¿Qué tan rápido (ms?) necesita que el dispositivo funcione después del reinicio de encendido? Hay que hacer concesiones: las piezas son más baratas para la configuración SPI, pero tardan un par de segundos en aparecer. La programación paralela basada en CPLD de Altera es más rápida al estado HECHO fuera del reinicio.

Respuestas (4)

Creo que por su pregunta ya entiende esto, pero para aclarar, esta es mi terminología habitual:

  • La programación implica alterar algún dispositivo no volátil
  • La configuración es lo que hace el FPGA cuando se inicia: carga su memoria interna volátil desde la memoria externa no volátil.

Entonces, como supone, el sistema necesita algún tipo de dispositivo no volátil que programe en la línea de producción. Para aclarar tu comentario sobre el USB blaster, no es un chip... es un "pod", entonces tendrías uno para tu estación de programación, no uno por placa:

USB blaster

De todos modos, volvamos a las opciones de almacenamiento no volátil:

  • El enfoque de "Casi cero ingeniería requerida" utiliza los dispositivos flash de configuración de Altera, que son programables JTAG usando algo así como un blaster USB. Simplemente conéctelos como dice la hoja de datos, y listo. Sin embargo, cuestan más por MBit que otras opciones, por lo que no se usan a menudo en la producción en volumen.

  • Otro enfoque habitual es un chip flash SPI "normal". La sección de configuración de la guía del usuario de Cyclone enumerará algunos que son compatibles con él, y creo que también puede usar el software Quartus para programarlos a través del JTAG del FPGA al que están conectados. Más ingeniería involucrada, verificar que tenga el dispositivo correcto, etc. Además, si está en producción en volumen, es posible que no desee utilizar Quartus en la línea de producción, en cuyo caso es posible que deba proporcionar un encabezado de programación separado para el chip flash. , y algo de hardware y software para impulsar eso.

  • Si tiene un microcontrolador en su sistema (incluso en otra placa...) puede conectarlo al JTAG de la FPGA o a los pines de configuración y almacenar el flujo de bits de la FPGA en la memoria flash del micro. Más ingeniería involucrada ya que debe tener algún software para "arrancar" el FPGA. sin embargo, puede facilitar las actualizaciones en el campo, ya que a menudo el micro ya está configurado para recibir actualizaciones de software, mientras que actualizar el flash cuando cuelga directamente del FPGA es a menudo una experiencia de "abrir la caja".

Normalmente, simplemente incluiría un dispositivo de memoria flash SPI normal de 8 pines en la misma placa que el FPGA. ¿Está diciendo que no puede hacer esto por alguna razón?

Cuando el FPGA se enciende, simplemente comenzará a leer datos de la primera dirección en el flash SPI y utilizará estos datos como su flujo de bits de configuración.

Para poner el flujo de bits en el dispositivo flash, normalmente solo mantendría el FPGA en reinicio y accedería a la interfaz SPI en el dispositivo flash directamente desde algún tipo de encabezado de programación (conector).

Si se trata de un solo dispositivo flash SPI, entonces esa sería la forma preferida. Mi preocupación es si dicho dispositivo puede interactuar directamente con el FPGA. ¿Está diciendo que las señales de inicio del Cyclone son esencialmente una interfaz SPI?
Depende de la FPGA. He usado Xilinx, no Altera, así que solo puedo comentar desde esa perspectiva. Los dispositivos Xilinx se pueden configurar (a través de pullup/down en los pines de configuración) para que se carguen desde una variedad de dispositivos de memoria NV, incluido el flash SPI básico, o para esperar a que los cargue una MCU o JTAG. Me parece probable que los dispositivos Altera sean similares. Espero que haya doco en el sitio web de Altera que explique las opciones de configuración y los procesos con bastante detalle.
Revisé la documentación de configuración de Altera en el Cyclone V y sus señales de configuración no parecen compatibles con SPI. Parece que venden un dispositivo de configuración patentado para admitir sus FPGA.

Existen "Dispositivos de Configuración" de Altera para tal fin.

http://www.altera.com/devices/common/serialcfg/scg-index.html

Eche un vistazo al Manual del ciclón V, Capítulo 7 , Fig. 7-8. En esa configuración, FPGA cargará la configuración desde el dispositivo EPCS al inicio. Y para guardar el flujo de bits en el dispositivo EPCS, puede usar el propio FPGA. Cargas un diseño especial (Serial Flash Loader, creo) a FPGA sobre JTAG. Esto forma un puente entre el dispositivo JTAG y EPCS. Luego puede cargar el flujo de bits de configuración al dispositivo EPCS a través de JTAG. Te sugiero que leas ese capítulo.

¡Eso parece exactamente lo que estoy buscando! Volveré a leer el capítulo 7 del manual con este dispositivo EPCS en mente. ¡Gracias!

Consulte la sección de configuración en serie activa que comienza en la página 214 del manual del dispositivo Cyclone 5. Esta sección detalla cómo utilizar el modo de configuración en serie activo. El almacenamiento de configuración en este caso es una especie de SPI Flash ROM. Altera también produce los dispositivos EPCS y EPCQ para el almacenamiento de flujo de bits, y el manual también detalla cómo usar estos dispositivos correctamente con la FPGA. El flujo de bits se programa en la memoria flash a través de JTAG a través de la FPGA; se carga una pequeña configuración de "puente" en la FPGA y, luego, la secuencia de bits de configuración se programa en la memoria flash a través del puente. Luego, la FPGA cargará la configuración desde el flash en los encendidos posteriores. El software de programación predeterminado de Altera hará esto automáticamente, solo necesita decirle qué chip flash está usando.