Create Clocks with Different Periods

This script shows how to create clocks that have different clock periods.

# Procedure to create a clock with different clock periods
proc define_clock_data {clk_id} {
    set period 10
    set waveform {0 5}
    if {$clk_id >= 0 && $clk_id < 10} {
        set period 20
        set waveform {5 10}
    } elseif {$clk_id >=10 && $clk_id < 20} {
        set period 30
        set waveform {10 15}
    }
    return [ list $period $waveform ]
}

# create the clocks
for {set i 0} {$i < 32} {incr i} {
    set clock_data [ define_clock_data $i ]
    
    create_clock -period [ lindex $clock_data 0 ] \
        -waveform [ lindex $clock_data 1 ] \
        -name clk_in[$i] [ get_ports clk_in[$i] ]
}
   
# Set clock groups after all clocks are defined
for {set i 0} {$i < 32} {incr i} {
    set_clock_groups -exclusive -group clk_in[$i]
}