Optimización de Altera: "Atascado en GND debido a puerto atascado data_in"

Estoy compilando código Verilog con el compilador Quartus II y parece que casi todo mi código está siendo optimizado. El "informe de compilación" dice que muchos de mis registros se eliminan durante la síntesis porque

Atascado en GND debido a un puerto atascado data_in

o

Atascado en GND debido a un puerto bloqueado clock_enable

¿Qué significan esos oscuros mensajes? ¿Qué es data_iny clock_enable? (Ciertamente no son algunas de mis señales).

Respuestas (3)

Recibe mensajes de "Atascado en GND" cuando la herramienta de síntesis determina que una señal en particular es constante y nunca cambia. Las señales pueden atascarse en GND (tierra), lo que significa que siempre son bajas (tiene un valor de 1'b0) o pueden atascarse en VCC (voltaje de suministro positivo) cuando una señal se afirma constantemente alta (tiene un valor de 1'b1).

Debido a que la señal es constante, las herramientas de síntesis pueden realizar ciertas optimizaciones que podrían resultar en una lógica reducida hasta el punto en que todo el diseño se optimiza. Por ejemplo, supongamos que su módulo recibe una señal del pin A, la invierte y sale al pin B. Si la herramienta de síntesis determina que una señal del pin A siempre es 1'b1, entonces puede optimizar su módulo y simplemente conducir 1'b0al pin B.

Según su descripción, parece que data_ines una entrada a FPGA y clock_enablees una señal que activa el reloj (es decir, habilita o deshabilita el reloj). Si tiene eso clock_enableatascado, todo lo que es impulsado por el reloj que la señal está activando puede optimizarse bastante.

Lo más probable es que tenga este problema porque le falta una conexión para una señal o no especificó las asignaciones de pines. Consulte el manual de PinPlanner para obtener más información sobre cómo realizar asignaciones de pines. Puede iniciarlo directamente desde Quartus y su GUI es bastante sencillo, lo que le brinda agradables menús desplegables para señales y pines, etc. Si eso no ayuda, tendrá que buscar en el registro de síntesis para obtener más detalles sobre pines atascados y rastree sus orígenes hasta el punto en que encuentre cables desconectados y/o lógica con errores que genera esas señales atascadas.

Creo que esta respuesta deja fuera una de las causas más comunes de esta advertencia. Si ha definido un registro de un ancho de, por ejemplo, [9:0], pero en su bloque siempre tiene una declaración if que evita que el registro use el noveno bit (como una declaración if que dice si X> 240, establezca el registro en 0), luego el motor de síntesis optimizará los bits 9 y 8 y dará esta advertencia.

Estas señales son señales posteriores a la síntesis de nivel inferior. Podría leer el primero como "la entrada de datos a un flip-flop siempre es cero. No necesita este flip-flop; solo conectaré 0 a lo que maneja el flip-flop".

Si "casi todo" el diseño se está optimizando, probablemente tenga modelos de caja negra (_bb) para la IP del proveedor (por ejemplo, Ethernet, PCIe) especificados para síntesis, en lugar de núcleos cifrados generados. En el caso de PCIe, esto dejará toda la lógica del usuario desconectada y preparada para su eliminación.

En Quartus, asegúrese de haber agregado archivos .qip a su proyecto en lugar de archivos _bb.v. Esto puede variar según el núcleo exacto que esté utilizando.