No quiero un texto introductorio sobre las limitaciones de tiempo, ni una nota de aplicación, un manual de usuario, un seminario web. Los leí todos, ya, muchas veces. El concepto detrás de las restricciones de tiempo es muy sencillo. Aún así, cuando tengo que codificarlos en un archivo sdc, no puedo pasarlo. Tengo que pasar varios días intentando y fallando para 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 detenga esta agonía!
Intentemos 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 se alinea en los bordes con el primer bit en serie (frecuencia = F/W). Los datos paralelos son SDR, sincronizados por el reloj de palabras (frecuencia = F/W), que está alineado en los bordes.
No entraré en detalles de SERDES, imaginemos que tengo un registro de desplazamiento simple que se desplaza con ser_bclk_in y transfiere sus datos a otro registro cada flanco ascendente de ser_fclk_in. Los datos deserializados funcionan de alguna manera con datos de entrada paralelos y el resultado se envía a ser_data_out y par_data_out. Naturalmente, el SERDES en la salida es especular a la entrada.
Mi pregunta es: para un sesgo máximo dado entre datos y relojes, ¿cómo limito dicho diseño? Dado que ya tengo todos los relojes que necesito, ¿puedo restringir con éxito este diseño sin usar PLL? ¿Es necesario declarar los caminos multiciclo? Si es así, ¿por qué?
PD: todavía estoy dispuesto a leer más sobre el tema, por lo tanto, si conoce algún texto inusualmente claro sobre las limitaciones de tiempo, compártalo también :)
Abra TimeQuest Timing Analyzer eligiendo Herramientas > TimeQuest Timing Analyzer.
Elija Archivo > Nuevo archivo SDC. Se abre el editor SDC.
Escribe el siguiente código en el editor:
create_clock -period 20.000 -name osc_clk osc_clk
derive_pll_clocks
derive_clock_uncertainty
Guarde este archivo como my_first_fpga_top.sdc (vea la Figura 1–38).
MarkU
Giancarlo Sportelli
FarhadA