¿Cómo resolver problemas de enrutamiento en Artix7?

3

Estoy trabajando con Artix 7 (xc7a15tftg256). Cuando el tiempo de ejecución de ejecución, muestra el siguiente mensaje de error:

  

[Place 30-574] Mala ubicación para enrutar entre un pin IO y BUFG. Si esta condición subóptima es aceptable para este diseño, puede usar la restricción CLOCK_DEDICATED_ROUTE en el archivo .xdc para degradar este mensaje a una ADVERTENCIA. Sin embargo, el uso de esta anulación es altamente desaconsejable. Estos ejemplos se pueden usar directamente en el archivo .xdc para anular esta regla de reloj.           < set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets input_IBUF] >

  • input_IBUF_inst (IBUF.O) está bloqueado en IOB_X0Y83
  • input_IBUF_BUFG_inst (BUFG.I) es colocado provisionalmente por clockplacer en BUFGCTRL_X0Y30

Para mi aplicación, compruebo rising_edge(input) . Por favor proporcione la solución en este problema.

    
pregunta kathir

1 respuesta

4

Se recomienda utilizar pines con capacidad de reloj (pines CC) para las entradas de reloj. Estos pueden ser enviados a BUFGs.

Pero el error está en otra parte de tu código. Como escribiste estás usando

if rising_edge(input) then

No puedes usar rising_edge en ninguna red de reloj, esto los promueve a una red de reloj, cuya entrada no lo es.

La forma correcta es sincronizar la entrada con 2 D-FF y agregar una detección de bordes después de eso (3rd D-FF, no-gate, y-gate). Todos los FF están controlados por el reloj de tu sistema.

input_meta <= input      when rising_edge(Clock);  -- 1st synchronizer D-FF
input_sync <= input_meta when rising_edge(Clock);  -- 2nd synchronizer D-FF
input_d    <= input_sync when rising_edge(Clock);  -- edge detection D-FF (d = delayed)
input_re   <= not input_d and input_sync;          -- edge detection equation (re = rising edge)

process(Clock)
begin
  if rising_edge(Clock) then
    if (input_re = '1') then
      -- do something
    end if;
  end if;
end process;
    
respondido por el Paebbels

Lea otras preguntas en las etiquetas