Entendiendo las restricciones de tiempo

5

No quiero un texto introductorio sobre restricciones de tiempo, ni una nota de aplicación, un manual del usuario, un seminario web. Los leí todos, ya, muchas veces. El concepto detrás de las restricciones de tiempo es muy fácil. Aún así, cuando tengo que codificarlos en un archivo sdc no puedo hacerlo. Tengo que pasar varios días intentando que el software Quartus acepte mi diseño. Y estoy seguro de que muchos otros diseñadores de FPGA están sufriendo como yo.

¡Alguien, por favor, detén esta agonía!

Probemos con un ejemplo. Considere la siguiente entidad superior:

entity top is
    generic (
        W : positive := 8
    ) port (
        ser_data_in  : in  std_logic;                      -- Serial data in   
        ser_bclk_in  : in  std_logic;                      -- Bit clock in     
        ser_fclk_in  : in  std_logic;                      -- Frame clock in   
        par_data_in  : in  std_logic_vector(W-1 downto 0); -- Parallel data in 
        par_wclk_in  : in  std_logic;                      -- Word clock in    
        ser_data_out : out std_logic;                      -- Serial data out  
        ser_bclk_out : out std_logic;                      -- Bit clock out    
        ser_fclk_out : out std_logic;                      -- Frame clock out  
        par_data_out : out std_logic_vector(W-1 downto 0); -- Parallel data out
        par_wclk_out : out std_logic                       -- Word clock out   
    );
end entity;

Los datos en serie se transmiten en DDR, sincronizados por el reloj de bits (frecuencia = F), que está alineado en el centro. Los datos en serie también vienen con un reloj de cuadro, que está alineado por el borde con el primer bit en serie (frecuencia = F / W). Los datos paralelos son SDR, sincronizados por el reloj de palabra (frecuencia = F / W), que está alineado por el borde.

No entraré en los detalles de SERDES. Imaginemos que tengo un registro de desplazamiento simple que cambia con ser_bclk_in y transfiere sus datos a otro registro en cada flanco ascendente de ser_fclk_in. Los datos deserializados operan de alguna manera con datos de entrada paralelos y el resultado se envía a ser_data_out y par_data_out. Naturalmente, los SERDES en la salida son especulares a la entrada.

Mi pregunta es: para un sesgo máximo dado entre datos y relojes, ¿cómo puedo restringir un diseño de este tipo? Como ya tengo todos los relojes que necesito, ¿puedo restringir con éxito este diseño sin usar los PLL? ¿Es necesario declarar las rutas multiciclo? Si es así, ¿por qué?

P.S. Todavía estoy dispuesto a leer más sobre el tema, por lo tanto, si conoces algún texto inusualmente claro acerca de las restricciones de tiempo, por favor compártelo también :)

    

1 respuesta

1
  1. Abra TimeQuest Timing Analyzer seleccionando Herramientas > TimeQuest Timing Analyzer.

  2. Elegir archivo > Nuevo archivo SDC. Se abre el editor SDC.

  3. Escriba el siguiente código en el editor:

    create_clock -period 20.000 -name osc_clk osc_clk
    derive_pll_clocks
    derive_clock_uncertainty
    
  4. Guarde este archivo como my_first_fpga_top.sdc (consulte la Figura 1–38).

respondido por el Cristian Mardones

Lea otras preguntas en las etiquetas