Forum Discussion
Altera_Forum
Honored Contributor
13 years agoLook at the following, which has examples of that assignment:
http://www.alterawiki.com/wiki/register_duplication_for_timing_closure Now, when the combinatorial node has a large fanout, I don't believe assignments work. First, I just don't think it works when applied to a combinatorial node. Second, to get better performance just duplicating the comb node won't help. As an example, pretend a register feeds a combinatorial node right next to it, which then fans out to a bunch of nodes above it and a bunch below it. If we duplicate the combinatorial node, the original could be placed near the nodes above and the duplicate could be placed by the ones below. That would make the hop from combinatorial node to fanouts much shorter and faster. But the source register is still in the same place since it wasn't duplicated, and it now has a longer route to these two comb nodes. Net result is your paths have the same timing. (Remember, as the document states, duplicating nodes helps timing by being able to decrease distance traveled. Unlike ASICs, reducing the load doesn't make much of a difference). What I've done for these is duplicate the source registers in the source code, but a dont_merge attribute on the duplicates, and then duplicate the comb node. By duplicating the source registers and high-fanout comb, one duplicate can be placed above and one below. Admittedly, this is much more painful to do.