1 votos

Transfiriendo un bitstream de 1MB a un FPGA y leyéndolo.

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

¿Alguien puede indicarme un tutorial sobre cómo colocar estos datos en la flash y cómo leerlos en algún otro módulo que los procese?

Dispositivos Xilinx:

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

Memoria:

  • Flash paralela de 128 Mbit (28F256)
  • Flash SPI de 16 Mbit (M25P16)
  • SDRAM DDR de 64 MByte (MT46V16M16)

1voto

talonx Puntos 262

¿Tienes un procesador suave como microblaze? Puedes escribir en el DDR especificando la dirección base y luego escribiendo a partir de esa dirección. Creo que podrías hacer lo mismo con la flash, aunque deberás consultar la documentación para obtener la sintaxis exacta.

1voto

RWH Puntos 21

Método 1: Crear ROMs en el diseño de tu FPGA

Dado que tienes los mismos datos en cada placa, una opción es utilizar RAMs en bloque en la FPGA, configuradas como ROM. Para hacer esto, instancias una RAM en bloque, pero no la conectas a los pines de escritura. Utiliza una directiva de síntesis en tu código HDL o archivo UCF para especificar el contenido inicial de la RAM. Lee el Guía del Usuario de la Generación Spartan-3 (Capítulo 4) para ver cómo instanciar la RAM y cómo acceder a los datos desde la RAM. Si utilizas Xilinx ISE, probablemente también haya un "asistente" para generar el bloque de RAM y configurar el contenido inicial por ti.

Desafortunadamente, el Spartan-3E que estás utilizando solo tiene 350 kbits de RAM en bloque, no 8 Mbits como requieres. Para que esto funcione, tendrás que idear un esquema para comprimir tus datos para que encajen en 350 kbits. Los detalles de cómo hacer esto dependen del tipo de datos que tengas. Si tus datos son especialmente aleatorios, puede que no sea razonable lograr tanta compresión.

Método 2: Almacenar datos en memoria externa

Dices que tienes un flash paralelo de 128 Mbits y un flash SPI de 16 Mbits. Necesitarás leer las hojas de datos de estas partes y entender cómo funcionan. Luego escribe una máquina de estados en tu FPGA que pueda acceder a estos dispositivos. Pero esta es tu tarea como diseñador de FPGA. Algunos extraños al azar en internet no van a diseñar tu FPGA por ti.

Para almacenar los datos en el flash inicialmente, tienes dos opciones. La primera sería, si estás fabricando estas placas en volumen, puedes hacer que tu taller de ensamblaje de placas pre-programen los dispositivos flash antes de ensamblarlos en las placas. Normalmente les proporcionas un archivo de datos en algún formato que soliciten, y te cobran una pequeña tarifa adicional por programar los datos antes del ensamblaje.

Segunda opción: Lee la hoja de datos del dispositivo flash. Escribe un diseño de FPGA que te permita enviar datos desde alguna otra interfaz disponible en tu placa (Ethernet, USB, SPI, I2C, lo que sea) y cargarlos en el flash. En el momento de la fabricación, cargas este diseño temporalmente en tu FPGA y programas tu flash; luego almacenas un diseño de FPGA "de tiempo de ejecución" diferente en la PROM de configuración a bordo, que no tiene la capacidad de modificar el FLASH, y tus usuarios no tendrán la capacidad de estropear los datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X