Espero que alguien pueda explicar en términos simples por qué podría estar recibiendo este error de la herramienta de mapas Xilinx:
ERROR:Place:1136 - This design contains a global buffer instance,
<reset_IBUF_BUFG>, driving the net, <reset_IBUF_BUFG>, that is driving the
following (first 30) non-clock load pins.
< PIN: clock_core1/pll_base_inst/PLL_ADV.RST; >
This is not a recommended design practice in Spartan-6 due to limitations in
the global routing that may cause excessive delay, skew or unroutable
situations. It is recommended to only use a BUFG resource to drive clock
loads. If you wish to override this recommendation, you may use the
CLOCK_DEDICATED_ROUTE constraint (given below) in the .ucf file to demote
this message to a WARNING and allow your design to continue.
< PIN "reset_IBUF_BUFG.O" CLOCK_DEDICATED_ROUTE = FALSE; >
Primero un poco de fondo ...
- El diseño estaba construyendo y funcionando bien.
- Estaba en el proceso de actualizar el controlador de la tarjeta SD del proyecto para admitir las tarjetas SDHC.
- Este error apareció repentinamente aunque no estaba haciendo ningún cambio relacionado con la señal de reinicio.
- Retrocediendo lentamente a mis cambios, lo reduje al fragmento de código que se muestra a continuación.
- Pensando que esto podría estar relacionado con el proyecto más grande en el que estaba trabajando, extraí la entidad del Controlador de tarjeta SD a un proyecto de prueba separado. Me sale el mismo error allí.
- No sé de dónde viene IBUF_BUFG en la línea de reinicio, ciertamente no es algo que esté creando explícitamente. Sin embargo, sí tengo la señal de reinicio conduciendo un núcleo de reloj corregido.
Aquí está el fragmento de código que parece desencadenar el error:
when RX_BITS_FINISHED =>
if do_deselect='1' then
bit_counter := 2;
state <= DESELECT;
else
state <= return_state;
end if;
Si comento lo anterior, el error desaparece. Todo lo que se hace referencia aquí son variables o señales privadas al módulo. El bloque when
está dentro de un proceso controlado por las señales de reloj y reinicio. No hay nada especial aquí, pero la fuente completa del componente puede ser visto aquí con el fragmento de código anterior en la parte inferior.
De todos modos ... Busqué el error y encontré esta respuesta de Xilinx:
lo que podría explicar las cosas para algunos, pero no para mí. He leído la solución sugerida y la he trabajado, pero me preocupa que solo estoy ocultando un problema más fundamental con mi diseño.
No entiendo lo que sucede aquí y necesito que alguien me lo explique para que un aficionado / aprendiz pueda entenderlo.