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.