Habiendo encontrado información múltiple, a veces contradictoria o incompleta en Internet y en algunas clases de capacitación sobre cómo crear restricciones de tiempo en formato SDC correctamente, me gustaría pedir ayuda a la comunidad de EE con algunas estructuras generales de generación de relojes que he encontrado.
Sé que hay diferencias sobre cómo se implementaría una determinada funcionalidad en un ASIC o FPGA (he trabajado con ambos), pero creo que debería haber una forma general y correcta de restringir el tiempo de una estructura determinada , independientemente de la tecnología subyacente; avíseme si me equivoco.
También hay algunas diferencias entre las diferentes herramientas para la implementación y el análisis de tiempo de diferentes proveedores (a pesar de que Synopsys ofrece un código fuente del analizador SDC), pero espero que sean principalmente un problema de sintaxis que se puede consultar en la documentación.
Se trata de la siguiente estructura de multiplexor de reloj, que es parte del módulo clkgen , que nuevamente es parte de un diseño más grande:
Si bien ext_clk
se supone que la entrada se genera externamente al diseño (ingresando a través de un pin de entrada), las señales clk0
y también son generadas y utilizadas por el módulo clkgen (consulte mi pregunta de reloj de ondulación relacionada para obtener más detalles) y tienen restricciones de reloj asociadas denominadas y , respectivamente.clk4
baseclk
div4clk
La pregunta es cómo especificar las restricciones de modo que el analizador de tiempo
cpu_clk
como un reloj multiplexado que puede ser uno de los relojes de origen ( fast_clk
o slow_clk
o ext_clk
), teniendo en cuenta los retrasos a través de las diferentes puertas AND y ORMientras que el caso más simple de un multiplexor de reloj en chip parece requerir solo la set_clock_groups
declaración SDC :
set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}
...en la estructura dada, esto se complica por el hecho de que clk0
(a través de la fast_clk
salida) y clk4
(a través de slow_clk
) todavía se usan en el diseño, incluso si cpu_clk
está configurado para que ext_clk
solo use_ext
se afirme.
Como se describe aquí , el set_clock_groups
comando anterior causaría lo siguiente:
Este comando es equivalente a llamar a set_false_path desde cada reloj en cada grupo a cada reloj en cualquier otro grupo y viceversa
...lo cual sería incorrecto, ya que los otros relojes todavía se usan en otros lugares.
Las entradas use_clk0
, use_clk4
y use_ext
se generan de tal manera que solo una de ellas es alta en un momento dado. Si bien esto podría usarse para detener todos los relojes si todas las use_*
entradas son bajas, el enfoque de esta pregunta está en la propiedad de multiplexación del reloj de esta estructura.
La instancia X2 (un búfer simple) en el esquema es solo un marcador de posición para resaltar el problema de que las herramientas automáticas de ubicación y ruta suelen ser libres para colocar búferes en cualquier lugar (como entre los pines and_cpu_1/z
y ). or_cpu1/in2
Idealmente, las restricciones de tiempo no deberían verse afectadas por eso.
Defina dividir por 1 los relojes en las redes and_* y declarar que son físicamente exclusivos. El compilador Cadence RTL maneja la situación correctamente al generar 3 rutas de temporización para registros cronometrados por cpu_clk (una ruta cada una para un reloj). Los registros controlados directamente por clk0, clk4 y clk_ext tienen sus propios arcos de tiempo.
create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0 [get_pins and_cpu_1/Y]
create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4 [get_pins and_cpu_2/Y]
create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]
set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]
cast_clk
todavía están verificadas (es decir, no es una excepción debido a los grupos de relojes exclusivos), mientras que al mismo tiempo están restringidas por sus respectivos relojes de entrada? En última instancia, estoy buscando una respuesta autorizada a esta pregunta.
cpu_clk
slow_clk
travisbartley
AmigoFX