¿Qué hace la FPGA con los pines de E/S sin referencia?

Aquí hay uno que me ha estado desconcertando por un tiempo.

Tengo un diseño de FPGA en Altera, manejando un chip de audio y programado a través de su interfaz serial. Superviso y depuro esto con un osciloscopio/SignalTAP. El chip está configurado en una configuración de bucle invertido para que todo lo que se reproduzca en LineIn salga en LineOut.

El esquema del chip de audio se muestra a continuación y muestra los pines de interfaz I2C_SDAT e I2C_SCL. De las entradas, AUD_XCK es proporcionado por un generador de reloj IP (audio estándar ~44 kHz) y AUD_DACDAT está vinculado a AUD_ADCDAT para crear el loopback conectando el ADC directamente al DAC.

Mirando algunos de los relojes, AUD_BCLK (reloj de velocidad de bits), AUD_DACLRCK y AUD_ADCLRCK (relojes de frecuencia de muestreo ADC y DAC) se generan todos internamente (en lo que la hoja de datos llama modo "maestro"). No son necesarios ya que los datos digitales del ADC se retroalimentan directamente a la salida del DAC para ir a LineOut.

ingrese la descripción de la imagen aquí

¡Sin embargo! Al programar el bus serial I2C tuve un comportamiento anómalo. El bus programaría el chip correctamente (todos los ACK presentes). Sin embargo, el loopback ADC-DAC no funcionó en absoluto. Lo primero que pensé fue que estaba fallando en programar la interfaz correctamente.

Después de mucho rechinar de dientes, dejé de examinar mi I2C (que, después de todo, estaba siendo ACK por el chip). Para ver si AUD_BCLK y otros relojes estaban funcionando en el analizador lógico, tuve que agregarlos al diseño, y el mero hecho de hacerlo hizo que todo comenzara a funcionar, aunque se quedaron desconectados, como se muestra a continuación:

ingrese la descripción de la imagen aquí

Descubrí que el simple hecho de incluir estos relojes desconectados marcaba la diferencia entre que el chip funcionara o no. Estoy buscando ideas sobre lo que hace la herramienta Altera con los pines no referenciados en el diseño para que no incluir los relojes BCLK, DACLRCK/ADCLRCK en el diseño lógico detenga el funcionamiento del chip, ¡aunque lógicamente no estén conectados! ¿Altera ata todos los pines no utilizados a tierra cuando los abstrae o algo similar?

Perdón por la publicación más larga. Espero haber logrado explicar el escenario, ¡todas las ideas / recomendaciones son bienvenidas!

David

Creo que hay una configuración en Configuración en algún lugar para configurar la función de pin no utilizada predeterminada.
Generalmente, los pines no utilizados permanecen como entradas de alta z. No tengo idea de por qué haría una diferencia si están definidos o no.

Respuestas (2)

De forma predeterminada, Quartus II solía configurar los pines no utilizados como salidas que conducen bajo. Esto no fue bueno como puede imaginar: una restricción de pin incorrecta y un pin de entrada usado podrían considerarse erróneamente no utilizados y provocar un cortocircuito bajo en la señal de entrada.

En versiones más recientes, se cambió a sensato 'como entrada triestable con pull-up débil', lo que me ahorró tener que ir y cambiarlo cada vez que creaba un nuevo proyecto.

Puede cambiarlo en Asignaciones/Dispositivo/DeviceAndPinOptions/UnusedPins, que abre el siguiente cuadro de diálogo:

ingrese la descripción de la imagen aquí

Tuve que cambiar algunas de las condiciones de carrera accidentales mal pensadas en mi diseño que este cambio sacó a la luz, ¡pero sin embargo fue la solución!
¿Recuerdas cuándo ocurrió este cambio? He estado usando altera FPGA durante más de una década y no recuerdo un tiempo antes de este cambio, pero es posible que no haya estado prestando atención en los primeros años.
@PeterGreen, lo más reciente que puedo recordar fue 2007 cuando encontré ese problema una vez más, para un cliente en el diseño de otra persona. El cliente probablemente estaba usando un Quartus anterior a esa fecha, pero podría haber sido el más reciente. Utilicé Quartus por primera vez en 1999, cuando acababa de salir y era un dolor de cabeza plagado de errores, y me tomó 5 horas sintetizarlo para un 20KE. Quartus II apareció menos de un año después, creo, y era estable, más rápido y utilizable. Después de eso fueron versiones de Quartus II.

En las versiones modernas de Quartus, el valor predeterminado para los pines no utilizados es "entrada con pull-up débil"*, este es también el estado en el que estarán los pines antes de que se programe el FPGA. Supongo que se eligió este valor predeterminado porque es seguro y es poco probable que cause altas corrientes en los búferes de entrada debido a que los pines están en un estado indeterminado.

A pesar de la descripción de "dominadas débiles", las dominadas no son tan débiles. 25K según la ficha técnica del ciclón V. Entonces, si necesita dominarlos, necesita un pull down bastante fuerte (aprendí esto de la manera más difícil cuando usaba un chip IDT versaclock que tenía una salida de reloj combinada y un pin de entrada de configuración para alimentar un FGPA alterado).

* Aparentemente, en versiones anteriores era "como terreno de conducción de salida", no sé cuándo cambió esto, pero IIRC fue hace bastante tiempo.