Transfiriendo un flujo de bits de 1MB a un FPGA y leyéndolo

1

Estoy usando Spartan 3E Starter Kit y necesito almacenar una secuencia de bits de alrededor de 1MB de largo. Es un flujo de bits constante y lo conoceré en el momento de programar la placa. Necesito poder leer un bit a la vez de este flujo. Creo que necesito poner esta secuencia de bits en la memoria flash de la placa, ya que necesito que sea persistente incluso cuando no se le da poder a la placa. ¿Alguna pista de cómo se debe hacer?

¿Puede alguien indicarme un tutorial sobre cómo poner estos datos en la memoria flash y cómo leerlos en algún otro módulo que los procese?

Dispositivos Xilinx:

  • FPGA espartano-3E (XC3S500E-4FG320C)
  • CoolRunner ™ -II CPLD (XC2C64A-5VQ44C)
  • Platform Flash (XCF04S-VO20C)
  • Relojes: oscilador de reloj de cristal de 50 MHz

Memoria:

  • Flash Paralelo de 128 Mbit (28F256)
  • SPI Flash de 16 Mbit (M25P16)
  • 64 MByte DDR SDRAM (MT46V16M16)
pregunta Neel Mehta

2 respuestas

1

Método 1: crea ROM en tu diseño FPGA

Debido a que tiene los mismos datos en cada placa, una opción es usar RAM de bloque en el FPGA, configurado como ROM. Para hacer esto, crea una instancia de una RAM de bloque, pero no se conecta a los pines de escritura. Use una directiva de síntesis en su código HDL o archivo UCF para especificar el contenido inicial de la RAM. Lea la Guía del usuario de Spartan-3 Generation (Capítulo 4) para ver cómo crear una instancia de la RAM y Cómo acceder a los datos desde la memoria RAM. Si usa Xilinx ISE, probablemente también haya un "asistente" para generar el bloque de RAM y configurar los contenidos iniciales para usted.

Desafortunadamente, el Spartan-3E que está utilizando tiene solo 350 kbits de RAM de bloque, no 8 Mbits como usted necesita. Para que esto funcione, tendrá que elaborar un esquema para comprimir sus datos para que quepan en 350 kbits. Los detalles de cómo hacer esto dependen de qué tipo de datos tenga. Si sus datos son especialmente aleatorios, puede que no sea razonable obtener tanta compresión.

Método 2: almacene datos en una memoria externa

Usted dice que tiene un flash paralelo de 128 Mbit y un flash SPI de 16 Mbit. Deberá leer las hojas de datos de estas partes y comprender cómo funcionan. Luego, escriba una máquina de estado en su FPGA que pueda acceder a estos dispositivos. Pero este es tu trabajo como diseñador de FPGA. Algunos extraños al azar en Internet no diseñarán su FPGA para usted.

Para almacenar los datos en la memoria flash inicialmente tiene dos opciones. Primero sería, si está construyendo estos tableros en volumen, puede hacer que su taller de ensamblaje de tableros preprograme los dispositivos flash antes de ensamblarlos en los tableros. Por lo general, les da un archivo de datos en el formato que solicitan y le cobran una pequeña tarifa adicional para que los datos se transfieran antes del ensamblaje.

Segunda opción: lea la hoja de datos del dispositivo flash. Escriba un diseño de FPGA que le permita enviar datos desde alguna otra interfaz disponible en su placa (Ethernet, USB, SPI, I2C, lo que sea) y cargarlo en la memoria flash. En el momento de la fabricación, carga este diseño temporalmente en su FPGA y programa su flash; luego almacena un diseño FPGA de "tiempo de ejecución" diferente en la PROM de configuración de a bordo, que no tiene la capacidad de modificar el FLASH y sus usuarios no podrán desordenar los datos.

    
respondido por el The Photon
1

¿Tienes un procesador suave como Microblaze? Puede escribir en el DDR especificando la dirección base y luego escribiendo desde esa dirección en adelante. Creo que podrías hacer lo mismo con el flash, aunque necesitarás verificar la documentación de la sintaxis exacta.

    
respondido por el Shungun

Lea otras preguntas en las etiquetas