Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
16612 Discussions

Any examples for set_instance_assignment -name DUPLICATE_ATOM

Altera_Forum
Honored Contributor II
1,465 Views

I am trying to speed up my design. I have a large fan out clock enable signal that goes through a combinatorial logic. I do not want to pipeline the signal. I see that it is possible to duplicate combinatorial logic. It seems simple enough but I do not get why I need to specify entity name. I am bit sure what the entity name refers to.  

 

So any examples or alternative ways to accomplish the same thing. Besides duplicating hdl code.  

 

 

--- Quote Start ---  

December 2012 Altera Corporation Quartus Settings File 

Reference Manual 

DUPLICATE_ATOM 

Directs the Compiler to duplicate the source node, and uses the new duplicate node to 

fan out to the destination node; the original source node no longer fans out to the 

destination node. Use the Value field to specify the name of the duplicate node. 

Syntax 

set_instance_assignment -name DUPLICATE_ATOM -from <from> -to <to> -entity <entity name> <value> 

 

--- Quote End ---  

 

 

Also can I specify wildcard characters like is done is the SDC files like this: 

set_instance_assignment -name DUPLICATE_ATOM -from "*lpm_counter_component|cntr_lok:auto_generated|counter_reg_bit[1]"  

-to "*dcfifo_lql1:auto_generated|rdemp_eq_comp_msb_aeb" -entity <entity name>"dupname*"
0 Kudos
2 Replies
Altera_Forum
Honored Contributor II
677 Views

Look 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.
0 Kudos
Altera_Forum
Honored Contributor II
677 Views

Thanks for your link and feedback. In my testing I also feel that DUPLICATE_ATOM does not duplicate a combinatorial node. I will try dont merge & Remove Duplicate Registers assignments in your doc.

0 Kudos
Reply