Timing Analyzer Create Generated Clock Command

author-image

By

The Timing Analyzer considers clock dividers, ripple clocks, or circuits that modify or change the characteristics of the incoming or host clock as generated clocks. You should define the output of these circuits as generated clocks. This definition allows the Timing Analyzer to analyze these clocks and account for any network latency associated with them.

You can use the create_generated_clock command to create generated clocks. The following list shows the create_generated_clock command and the available options:

create_generated_clock
   [-name <clock name>]
   -source <host pin>
   [-edges <edge list>]
   [-edge_shift <shift list>]
   [-divide_by <factor>]
   [-multiply_by <factor>]
   [-duty_cycle <percent>]
   [-add]
   [-invert]
   [-host_clock <clock>]
   [-phase <phase>]
   [-offset <offset>]
   <source objects>

Table 1 describes the options for the create_generated_clock command.

Source latencies are based on clock network delays from the host clock (not necessarily the host pin). You can use the set_clock_latency -source command to override the source latency.

Figure 1 shows waveforms for the following SDC commands that create an inverted generated clock based on a 10 ns clock.

create_clock -period 10 [get_ports clk]
create_generated_clock -divide_by 1 -invert -source [get_registers clk] \
    [get_registers gen|clkreg]

Figure 1. Generating an inverted clock.

Figure 2 shows waveforms for the following SDC commands that modify the generated clock using the -edges and  -edge_shift options.

create_clock -period 10 -waveform { 0 5 } [get_ports clk]
# Creates a divide-by-2 clock
create_generated_clock -source [get_ports clk] -edges { 1 3 5 } \
    [get_registers clkdivA|clkreg]
# Creates a divide-by-2 clock independent of the host clock's duty cycle now 50%)
create_generated_clock -source [get_ports clk] -edges { 1 1 5 } -edge_shift  0 5 0 } \
    [get_registers clkdivB|clkreg]

Figure 2. Edges & edge shifting a generated clock.

Figure 3 shows wafeforms for the following SDC commands that demonstrate the effect of the -multiply option on the generated clock.

create_clock -period 10 -waveform { 0 5 } [get_ports clk]
# Creates a multiply-by-2 clock
create_generated_clock -source [get_ports clk] -multiply_by 2 \
    [get_registers clkmult|clkreg]

Figure 3. Multiplying a generated clock.