Lectura de imagen, sonido, archivo binario de memoria no volátil para FPGA

1

Para las aplicaciones que requieren un diseño en FPGA que hará uso de varios archivos de imagen, archivos de sonido u otras formas de archivos, ¿pueden incluirse simplemente en el archivo de configuración de diseño de FPGA? En cualquier caso, si estas cosas se almacenan en una memoria flash externa o EEPROM, ¿hay un diseño de referencia que:

  1. Muestra cómo colocarlos en esta memoria externa
  2. Cree un diseño que sepa dónde leer en la memoria externa
  3. ¿Lo lee y luego envía estos datos al dispositivo de salida?
pregunta quantum231

2 respuestas

2

Bueno, realmente depende de qué tan grandes sean sus datos, con qué frecuencia necesita acceso a ellos y qué tipo de ancho de banda necesita. No hay una buena solución de "talla única" para esto.

Para datos pequeños, la RAM en bloque FPGA es una buena opción. La memoria RAM del bloque en chip se puede inicializar a partir de los datos del flujo de bits, por lo que se puede utilizar como una ROM. La ubicación en el chip de la RAM del bloque también proporciona el mayor ancho de banda posible. No se requieren pines externos. Sin embargo, la RAM del bloque es muy limitada en tamaño, así que no desperdicie este recurso a menos que sea absolutamente necesario. Tampoco es realmente posible que el FPGA edite las entradas de la ROM, ya que tendría que editar los datos de inicialización de la RAM del bloque en el flujo de bits (una operación que dista mucho de ser trivial), por lo que realmente solo son útiles para el almacenamiento constante o el almacenamiento volátil. .

Ahora, en cuanto a la memoria no volátil externa, esto es un poco más difícil. Hay muchos tipos diferentes de memoria que podrían usarse, con muchos protocolos diferentes. Esto podría abarcar desde un simple chip flash I2C o SPI o tarjeta SD, hasta un flash NOR paralelo o flash NAND, o un SSD o HDD conectado a través de SATA o PATA, hasta acceder a un servidor de archivos o SAN a través de Ethernet. Lo que tiene sentido depende de qué tan grandes sean sus datos, la latencia de acceso requerida y el ancho de banda de acceso requerido. Las conexiones a través de I2C o SPI serán muy lentas, quizás hasta un par de MB por segundo. Sin embargo, los protocolos son muy simples. Entonces, si solo necesita transmitir datos de audio de 48 ksps, esta podría ser una buena opción. Sin embargo, esto no funcionará para algo que requiere una gran cantidad de ancho de banda como el video de alta definición completa. Para algo así, necesitarías una interfaz con mucho más ancho de banda. Aquí es donde la ingeniería puede ser un poco desafiante: no es fácil interactuar con el almacenamiento grande y rápido. Una opción podría ser abrir una interfaz SATA y conectar un SSD grande. Habrá un poco de latencia solicitando los datos, pero podrá transmitir muchos gigabytes de datos desde el dispositivo a varios cientos de Mbps.

Además, no olvide que probablemente también necesitará alguna forma de escribir en el almacenamiento no volátil. Si esto debe hacerse con un gran ancho de banda, entonces eso significa que necesitará alguna otra interfaz para el mundo exterior. Ethernet y USB 3 son opciones razonables.

    
respondido por el alex.forencich
1

Creo que no hay una solución general porque:

  • Las EEPROM utilizan al menos 4 protocolos de interfaz
    • paralelo
    • OneWire
    • I2C
    • SPI
    • JTAG
    • ...
  • La memoria flash tiene tantas interfaces más algunas propietarias.

Además de un controlador de interfaz de bus para los protocolos nombrados, se necesita un controlador de lectura / escritura / borrado, que aborde cada tipo posible de memoria, tamaño, ... y proveedor.

Además de eso, necesitará una CPU de softcore o un FSM grande para leer las secuencias de configuración de:

  • UART
  • Ethernet
  • PCIe
  • JTAG
  • ...

y escríbelo en la memoria externa. Después de la configuración, este circuito debe ser anulado, intercambiado, ...

Por lo tanto, se necesita otro controlador de bus y varias capas de protocolo para leer el flujo de entrada: por ejemplo. MAC, IPv4, UDPv4

Para omitir el configurador de memoria, puede utilizar:

  • doble programación:
    1. sube el programador de Flash
    2. enviar el contenido de Flash
    3. subir el diseño de trabajo
  • programador anulable con reutilización del controlador de bus:
    1. cargar el diseño que comienza en el modo de configuración
    2. redirigir los contenidos recibidos a la memoria Flash
    3. cambie al modo de trabajo / habilite el diseño principal para usar el controlador de bus
  • reconfiguración dinámica para intercambiar el FSM de programación / softcore con el diseño real.

¿Puede precisar su pregunta?

    
respondido por el Paebbels

Lea otras preguntas en las etiquetas