cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Observer
Observer
256 Views
Registered: ‎05-21-2018

all_fanout is not working to apply max_delay for CDC paths

I've made false paths on all the below paths (around 9000):

set_false_path -from [get_clocks clk_fmc] -to [get_clocks -of_objects [get_pins clk_pll_i/inst/mmcm_adv_inst/CLKOUT*]]

But around 6000 paths are end points of one synchrnonizer 'stm32_fmc_sif_i/strobe_cdc'.
I want to constraint them with max_delay.
I used the below constraint, but this constraint is not over-riding above constraint, and all the paths are still false-paths. IT IS NOT WORKING.

set_max_delay -datapath_only -reset_path -from [get_clocks {clk_fmc}] -to [list [all_fanout -flat -endpoints_only [get_pins stm32_fmc_sif_i/strobe_cdc]]] 21.999

I've tried the below constraint and it is overriding the false paths. IT IS WORKING.

set_max_delay -datapath_only -reset_path -from [get_clocks {clk_fmc}] -to [get_pins clk_pll_i/inst/mmcm_adv_inst/CLKOUT*] 21.999

Any idea on why the constraint with all_fanout is not working?
Any other workaround to apply constraint on that paths?

fyi - I'm not able to get the below report with all_fanout:

report_timing -delay_type min_max -name t -max_paths 99 -from [get_clocks {clk_fmc}] -to [list [all_fanout -flat -endpoints_only [get_pins stm32_fmc_sif_i/strobe_cdc]]]

 

Thanks in Advance!

0 Kudos
3 Replies
Highlighted
Observer
Observer
228 Views
Registered: ‎05-21-2018

With a few experiments I observed all_fanout actually returns port name of a cell.
So by modiying the constraint as below, the issues is partially resolved.

set_max_delay 21.999 -datapath_only -reset_path -from [get_clocks {clk_fmc}] \
-to [list [get_cells -of_objects [get_pins [all_fanout -flat -endpoints_only [get_pins stm32_fmc_sif_i/strobe_cdc]]]]]


But another issues is it cannot override:

set_false_path -from [get_clocks clk_fmc*] \
-to [get_clocks -of_objects [get_pins clk_pll_i/inst/mmcm_adv_inst/CLKOUT*]]

But it can override: (large delay is used as a work around for false path)

set_max_delay 999.999 -datapath_only -reset_path \
-from [get_clocks {clk_fmc*}] -to [get_clocks -of_objects [get_pins clk_pll_i/inst/*/CLKOUT*]]


Another observation/consusion is:
3rd constraint can override 2nd; but 1st can't override 2nd !!
Why ??

0 Kudos
Highlighted
Moderator
Moderator
191 Views
Registered: ‎11-04-2010

If constraints overlap (for example, if several timing exceptions are applied to the same path), the priority from highest to lowest is:
1. Clock Groups (set_clock_groups)
2. False Path (set_false_path)
3. Maximum Delay Path (set_max_delay) and Minimum Delay Path (set_min_delay)
4. Multicycle Paths (set_multicycle_path)

1st can't override 2nd, it's expected.

3rd constraint can override 2nd: I think it's something wrong.

You can remove the set_false_path directly in your design  (Tools -> Timing -> Edit Timing Constraints...  / Select the constraint / delete it.)

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 Kudos
Highlighted
Observer
Observer
145 Views
Registered: ‎05-21-2018

I don't want to remove false paths as it is still targeting a few paths that is not hit by all_fanout.
(still I've a work around; use 3rd constraint instead of 2nd constraint as result would be same as delay used is too high)

Another point is
- 3rd constraint can override 2nd only if -reset_path is used
- So my expectation was 1st can also override 2nd with -reset_path

Is it a tool bug?
0 Kudos