¿Por qué mis programas FPGA no funcionan?

Soy muy nuevo en FPGA y lo siento por esta pregunta elemental. Acabo de hacer un código XOR muy simple como este con Webpack ISE para descargar a XC2S100 (¡solo para probar!) pero no funciona.

EDICIÓN 1: Según los comentarios, verifiqué la situación DONE después de la programación y está en estado Alto. También se agregaron resistencias desplegables a ay b. También se agregó una resistencia desplegable de 1KΩ a TMS. Ahora funciona bien, pero después de reiniciar el dispositivo, ya no funciona. Parece que la memoria de configuración se borra después de apagarlo.

ingrese la descripción de la imagen aquí

1- Obviamente, este código sintetiza bien y la simulación está bien. Luego implementado -> Pines asignados -> reimplementado -> y finalmente Generado archivo .bit (esta secuencia:)

ingrese la descripción de la imagen aquí

2- También usé los pines que no requieren Vref. (a:P3, b:P4, salida:P7). Aquí hay una captura de pantalla de la asignación de pines. Al final, haga clic en Guardar:

ingrese la descripción de la imagen aquí

3- Luego volví a implementar y revisé los pines en el resumen de diseño. Todo bien:ingrese la descripción de la imagen aquí

4- Tengo uno de estos cables de descarga Alkamar. Conecté los pines como se recomienda y ejecuté iMPACT. Encuentra bien el dispositivo y lee bien su configuración . ¡Me alegré cuando vi el mensaje " Programa exitoso "! pero cuando conecto el voltaje VCCO (3.3v) a P3 (a) o P4 (b), no sucede nada en P7 (fuera). ¡Revisé todo dos veces pero fue en vano!

¿Qué anda mal ahí?

ingrese la descripción de la imagen aquí

Aquí está el esquema que uso:

1- Tablero de prueba:

ingrese la descripción de la imagen aquí

2- Fuente de alimentación:

ingrese la descripción de la imagen aquí

3- Parte del oscilador de cristal (no utilizada en esta prueba):

ingrese la descripción de la imagen aquí

Este es el cable de programación:

ingrese la descripción de la imagen aquí

¿Hay algo para bajar los pines en tu tablero? (resistencias pull down, pull down manual con cables, etc.)
@alex.forencich No. ¿Debería tenerlos para la puerta XOR?
¿Es correcto, no conectó Vcco hasta después de programar la pieza? Ese no es un buen procedimiento. Debe aplicar todos los Vcc. Luego programe la pieza.
@ThePhoton. No, conecté todos los VCCO y VCCINT ANTES de programar. sin eso iMPACT muestra un error: "Cable no encontrado"
Cuando conectó Vcc a P3, ¿qué conectó a P4?
¡@ThePhoton no está conectado a nada! ¿Debo conectarlo a tierra o conectarlo a VCCO?
Prueba ambos. Debería ver señales opuestas en la salida. Otra pregunta: ¿comprobó que el pin DONE estuviera alto (IIRC) después de la programación? No estoy 100% seguro de si Impact verifica esto antes de declarar el éxito.
@ThePhoton Agregué una foto del programador. Uso JTAG y no está conectado a DONE. ¿Puede ser fuente de error?
Puede usar un DMM para verificar el pin DONE. Si no llega alto (nuevamente, IIRC), significa que el dispositivo está atascado por algún motivo entre la carga del programa y el inicio de la ejecución.
Probablemente debería tener pull-ups/downs en M0, M1, M2, PROGRAM, INIT, CCLK, TMS y TCK (y tal vez algunos que olvidé) para asegurarse de que el dispositivo no vuelva a ingresar al modo de programación cuando debería ser funcionando normalmente.
@ThePhoton otra pregunta: como se trata de un XOR simple, no he creado una restricción de tiempo. ¿Lo necesito para tal diseño estático?
HECHO en sí mismo podría necesitar un pull-up. Mira todo esto en la Guía de configuración --- Te lo doy de memoria y no he hecho un diseño de FPGA en más de un año.
@Aug, las restricciones de tiempo no tendrán ningún efecto en este diseño.
Intente agregar una resistencia pull-up al pin DONE y tire de las resistencias a ambas entradas de la puerta XOR e intente nuevamente.
@alex.forencich ¿Puedo usar pullups/downs internos? Soy novato y no pude encontrar dónde establecer pullups/downs internos.
Pruébelo primero con resistencias físicas.
Ver XAPP176 y XAPP188.
@ThePhoton Creo que tu guía va a la respuesta. en la página 17 de la guía de configuración (enlace a continuación). Dice en Exploración de límites (¿JTAG?) Usarlo apaga otros modos, pero en la tabla 9 requiere una lógica alta en M0 y baja para M1, M2 O M0 = 1, M1 = 0, M2=1. ¡Estoy confundido! ¿Qué configuración es la correcta (como dice iMPACT, "la programación ha sido exitosa?") xilinx.com/support/documentation/data_sheets/ds001.pdf
No sé si alguna vez usé S2 específicamente, pero por lo general la interfaz JTAG anulará los pines M[2:0]. Esto hace que sea fundamental subir (¿bajar?) TMS en otros modos (y también en el modo JTAG, si quitará el cable de programación durante la operación).
@ThePhoton Consulte la EDICIÓN-1 en mi pregunta. Funciona bien ahora, pero la memoria de configuración se borra cada vez que desconecto la fuente de alimentación. Gracias a toda la ayuda.
Así es como funcionan los FPGA. La configuración siempre se borra cuando desconecta la alimentación. Tienes que reconfigurar cada vez que enciendes.

Respuestas (2)

Este es un FPGA basado en SRAM. ¡Después de apagar y encender, su configuración se pierde!

Normalmente, una placa que usa estos FPGA tendrá algo de memoria no volátil, y usted carga la configuración en eso. El FPGA tiene alguna lógica (configurada por M0, M1, M2, los pines del modo de configuración) para iniciarse desde varios tipos comunes de memoria Flash o EEPROM. Algunos de ellos encajan en la cadena JTAG para que puedas programarlos con Impact y el Cable de Plataforma que tengas.

No puedo ayudar con los detalles precisos, el XC2S100 es un dispositivo bastante antiguo, pero Xilinx tiene mucha documentación sobre la memoria de configuración.

Mientras tanto, puede continuar con sus experimentos configurando la FPGA directamente, sabiendo que este es el comportamiento normal de esta FPGA.

Esto puede parecer extraño y, de hecho, existen algunos FPGA no volátiles; ACTEL (Microsemi) hacer algunos. Pero la tecnología SRAM combina tan bien con la lógica FPGA que tiene sentido a pesar de los inconvenientes obvios.

Los FPGA no volátiles son un compromiso: relativamente pequeños y relativamente lentos, tanto que para la mayoría de las aplicaciones, el inconveniente de una ROM externa es un pequeño precio a pagar por las ventajas de los FPGA basados ​​en SRAM.

¡Gracias! ¿Qué pasa con XC3S400 (tengo uno de eso también)?
AFAIK cualquier cosa que Xilinx (o Altera o Lattice) venda como FPGA tendrá una memoria de configuración volátil. Sus CPLD tienen una configuración no volátil.
XC3S400 también. Hay una serie (serie XC3S...AN, no XC3S...A) con memoria no volátil en el mismo paquete (o en el mismo troquel, no estoy seguro de cuál). El FPGA en sí todavía está basado en SRAM; se carga desde la ROM interna al encenderse.
Utilice la serie Spartan3AN si desea una memoria no volátil en la FPGA en el mismo paquete. Ofrece una SPI PROM con un controlador incorporado que puede usar para el almacenamiento de archivos de bits. Al encenderse, la FPGA se inicia sola desde SPI PROM. Para este código, puede usar un pequeño dispositivo XC3S200AN. Tenga en cuenta que Xilinx ha eliminado la compatibilidad con otros dispositivos de la serie Spartan3 en sus últimas versiones de herramientas.

Parece que no está proporcionando sus entradas correctamente. Usted dice que aplica VCCO a sus dos pines de entrada para proporcionar la lógica '1'. Sin embargo, no puede simplemente dejarlos desconectados por un '0' lógico. Debe conducirlos a nivel alto (VCCO) o bajo (GND).