126.96.36.199.2. Automatic Register Duplication: Estimated Physical Proximity
set_instance_assignment -name DUPLICATE_REGISTER -to <register_name> <num_duplicates>
- register_name is the register to duplicate. To create a register tree from a chain, create a unique assignment for each register in the chain. DUPLICATE_REGISTER assignments are processed in the appropriate order if they apply to registers that drive each other in a chain.
- num_duplicates is the number of duplicates of the register to create (including the original). If the original signal has M fan-out, the average fan-outs of the duplicates are M/N but any individual duplicate may have more or fewer, at the discretion of the algorithm.
The DUPLICATE_REGISTER assignment is processed during the Fitter stage. It is necessary to create the duplicates and assign fan-outs between the duplicates based on early estimates of physical proximity to maximize the amount of time spent optimizing the design post-duplication. However, this renders fine-grained assignment decisions imprecise. The DUPLICATE_REGISTER assignment is best used when the number of duplicates is small (under 100) and the groups created are coarse-grained enough to allow for flexibility during optimization after the duplicates are created.
The Fitter Duplication Summary panel of the Fit report details the DUPLICATE_REGISTER assignments picked up by Intel® Quartus® Prime Pro Edition. It also summarizes any registered signal with greater than 1000 fan-outs, as they could be reasonable candidates for DUPLICATE_REGISTER assignments in future.
- Setting PHYSICAL_SYNTHESIS to OFF disables DUPLICATE_REGISTER.
- Unlike other physical synthesis optimizations, the DUPLICATE_REGISTER assignment does allow duplication of registers that feed asynchronous clears and registers having location assignments.
- The DUPLICATE_REGISTER assignment does not process registers that have any of the following conditions:
- Registers drive global signals or clock signals.
- Registers have timing assignments or exceptions applied to them.
- Registers have a preserve attribute or a PRESERVE_REGISTER assignment.
- Registers are marked as don't touch.
- Registers drive or are driven by other partitions.