Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
12 years ago

Proper way to set_multicycle_path register enable fanout in TimeQuest

I've been trying to use set_multicycle_path from a register enable, but I can't seem to get it to catch all of my paths:

This fails:


set mc_dec_re_group ]
set_multicycle_path -setup 2 -from $mc_dec_re_group -to $mc_dec_re_group -end
set_multicycle_path -hold 1 -from $mc_dec_re_group -to $mc_dec_re_group -end

For some reason, this doesn't seem to catch all of the multicycle paths. The name exists since I pulled it using the Name Finder. I *think* it has something to do with Quartus inserting buffers in the enable tree, but I can't prove that yet. If I set the timing directly on the registers everything is fine.

This works:


set_multicycle_path -from {inst8|dem_0|qq
} -to {inst8|dem_1|qq
} -setup -end 2
set_multicycle_path -from {inst8|dem_0|qq
} -to {inst8|dem_1|qq
} -hold -end 1

However, that's going to be a nightmare to do by hand (there are a *LOT* of registers). I really need the fanout from an enable to get 99% of the paths and I can clean up the rest.

Suggestions? What is the proper method for setting the timing from where the enable fans out to the registers it actually affects?

I'm on Windows 7 using Quartus 13.0sp1

Thanks.

1 Reply

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Interesting. There are some options on get_fanouts like -no_logic that limit what it grabs, but the base command like you have should grab everything. I'd first check what's missing, i.e. run:

    query_collection -report [get_fanouts [get_pins ....]]

    Then search that for your source and destination registers and see who's missing. Then go to the Technology Map Viewer and examine the connection from the enable register to these registers and see if anything fishy is going on. There must be something different about it and the ones it is capturing. (One thing I think I've seen is where the enable register gets duplicated. get_pins only grabs the original one it matches, and so anything fed by the duplicate won't be caught. You could either try to prevent duplication or use get_keepers, which I believe grabs the original and its duplicates. But see if this is the problem before worrying about it...)