El analizador de sincronización considera los divisores de reloj, los relojes de ondas o los circuitos que modifican o cambian las características del reloj entrante o del host como temporizadores generados. Usted debe definir la salida de estos circuitos como relojes generados. Esta definición permite que el analizador de sincronización analice estos relojes y que a su vez represente cualquier latencia de red asociada con ellos.
Puede utilizar el comando create_generated_clock para crear relojes generados. La siguiente lista muestra el comando create_generated_clock y las opciones disponibles:
create_generated_clock [-name <clock name>] -source <host pin> [-edges <edge list>] [-edge_shift <shift list>] [-divide_by <factor>] [-multiply_by <factor>] [-multiply_by <factor> [->] [-duty_cycle <percent>] [-add] [-invert] [-host_clock <clock>] [-phase <phase>] [-offset <offset>] <source objetos>
La Tabla 1 describe las opciones para el comando create_generated_clock.
Tabla 1. Descripción de opciones para el comando create_generated_clock
Descripción de la | opción |
---|---|
-name <clock name> | Nombre del reloj generado, por ejemplo, clk_x2. Si no especifica el nombre de reloj, el nombre del reloj es el mismo que el primer nodo al que se le asigna. |
-source <host pin> | El pin <host> especifica el nodo en el diseño del cual derivan la configuración del reloj. |
-bordes < lista> |-edge_shift <shift list> | La opción -edges especifica los nuevos bordes de ascenso y descenso con respecto a los bordes de ascenso y descenso del reloj de host. Los bordes de ascenso y descenso del reloj de host tienen un número de 1.<n> comenzando con la primera ventaja de ascenso, por ejemplo, el borde 1. La primera ventaja que cae después de eso es el borde número 2, el siguiente borde creciente número 3, y así sucesivamente. La lista <edge> debe estar en orden creciente. Se puede utilizar el mismo borde en dos entradas para indicar un impulso de reloj independiente del ciclo de servicio de la forma de onda original. edge_shift especifica la cantidad de desplazamiento de cada borde en la lista de bordes <>. La opción -invert se puede utilizar para invertir el reloj después de que se apliquen los bordes y -edge_shifts. |
-divide_by <factor>| -multiply_by<factor> | Los factores divide_by y multiply_by se basan en el primer borde ascendente del reloj y extienden o contraen la forma de onda por los factores especificados. Por ejemplo, un -divide_by 2 es equivalente a -bordes {1 3 5}. En el caso de relojes multiplicados, también se puede especificar el ciclo de servicio. El analizador de tiempo es compatible con la especificación de factores de multiplicación y división al mismo tiempo. |
-duty_cycle<percent> | Especifica el ciclo de servicio del reloj generado. El ciclo de servicio se aplica en último lugar. |
-add | Permite especificar más de un reloj en el mismo pin. |
-invertir | La inversión se aplica al resultado del reloj después de aplicar todas las demás modificaciones, excepto el ciclo de servicio. |
-host_clock<clock> | host_clock se utiliza para especificar el reloj si existen varios relojes en el pin del host. |
-phase<phase> | Especifica la fase del reloj generado. |
-offset<offset> | Especifica la compensación del reloj generado. |
<contrae objetos> | Especifica los puertos o pines a los que se aplica la asignación. |
Las latencias de la fuente se basan en demoras de red de reloj del reloj del host (no necesariamente el pin del host). Puede utilizar el comando set_clock_latency -source para sobrescribir la latencia de origen.
La Figura 1 muestra las formas de onda de los siguientes comandos SDC que crean un reloj generado invertido basado en un reloj de 10 ns.
create_clock -period 10 [get_ports clk] create_generated_clock -divide_by 1 -invert -source [get_registers clk] \ [get_registers gen|clkreg]
La Figura 2 muestra las formas de onda de los siguientes comandos de SDC que modifican el reloj generado mediante las opciones -edges y -edge_shift.
create_clock -period 10 -waveform { 0 5 } [get_ports clk] # Crea un reloj de división a 2 create_generated_clock -source [get_ports clk] -edges { 1 3 5 } \ \[get_registers clkdivA|clkreg] # Crea un reloj dividido por 2 independientemente del ciclo de servicio del reloj del host ahora un 50 %) create_generated_clock -source [get_ports clk] -edges { 1 1 5 } -edge_shift 0 5 0 } \ [get_registers clkdivB|clkreg]
En la Figura 3 se muestran las wafeforms para los siguientes comandos de SDC que demuestran el efecto de la opción -multiply en el reloj generado.
create_clock -period 10 -waveform { 0 5 } [get_ports clk] # Crea un reloj multiplicado por 2 create_generated_clock fuente [get_ports clk] -multiply_by 2 \ [get_registers clkmult|clkreg]