Timing Constraint Example: Clock Mux and Clock Divider

Make it to the Right and Larger Audience

Blog

Timing Constraint Example: Clock Mux and Clock Divider

Above we have a clock mux. First we need to define clk1 and clk2. Assuming they are root/source clocks we can use create_clock:

create_clock -name clk1 -period $40Mhz_period -waveform [list 0.0 [expr $40Mhz_period /2]] [get_ports clk1_in]
create_clock -name clk2 -period $66Mhz_period -waveform [list 0.0 [expr $66Mhz_period /2]] [get_ports clk2_in]

Next we can define their relationship to be asynchronous:

set_clock_groups -asynchronous -group [get_clocks clk1] -group [get_clocks clk2]

Another way is to use the old-school set_false_path to specify paths from clk1 to clk2 and vice versa are asynchronous. But if you have many clocks set_clock_groups are much more efficient.

If clk1 and clk2 only goes to this clock mux and do not drive other logics, we can also specify clk1 and clk2 to be exclusive to allow tool to take advantage of this information in timing closure.

 

No need to define clk3.

The following is site premium content.
Use points to gain access. You can either purchase points or contribute content and use contribution points to gain access.
Highlights: 971 words, 3 images
 
Senior Engineer
Author brief is empty
Groups:

Tags:

0 Comments

Contact Us

Thanks for helping us better serve the community. You can make a suggestion, report a bug, a misconduct, or any other issue. We'll get back to you using your private message ASAP.

Sending

©2020  ValPont.com

Forgot your details?