Entendiendo cómo cumplir el tiempo en el reinicio de un FIFO

0

Introducción

Tengo un diseño en un Virtex-7 -3 que utiliza un pequeño número de BRAMs. Los datos de entrada y salida eventual operan a 240MHz. El algoritmo de clasificación central se ejecuta a 480MHz. Tengo una línea de reinicio que está muy canalizada y, como puede ver, no pasa por ningún nivel lógico antes de que se reinicie este FWFT FIFO.

El problema

El problema que tengo con el diseño es el restablecimiento de los buffers FIFO de entrada y salida. Los FIFO centrales que se ejecutan en un solo reloj cumplen con la sincronización muy bien.

La línea de reinicio en este momento se registra en el reloj más lento. Registrarse en el reloj más rápido no parece hacer mucha diferencia.

¿Alguien puede ayudarnos a explicar por qué esto no está cumpliendo con el calendario? ¿Se debe a que el restablecimiento está restableciendo un FIFO que se ejecuta en dos relojes diferentes (tienen la misma fuente de reloj)? ¿Hay algún truco que pueda sacar aquí?

    rst_fifo_d <= rst_fifo when rising_edge(slow_clock);

    bram_fifo : FIFO36E1
    GENERIC MAP(
      DATA_WIDTH => 72, 
      FIFO_MODE => "FIFO36_72",
      FIRST_WORD_FALL_THROUGH => true
    )
    PORT MAP(
        di => data_i, 
        dip => data_i_p, 
        do => data_o, 
        dop => data_o_p,
        empty => empty, 
        full => full, 
        injectdbiterr => '0', 
        injectsbiterr => '0', 
        rdclk => slow_clk, 
        rden => ren, 
        regce => '1', 
        rst => rst_fifo_d, 
        rstreg => '0', 
        wrclk => fast_clk, 
        wren => wren_d
    );

    
pregunta fiz

0 respuestas

Lea otras preguntas en las etiquetas