AN 917: Reset Design Techniques for Intel® Hyperflex™ Architecture FPGAs

ID 683539
Date 1/05/2021
Public
Document Table of Contents

1.4.3.2. Adding Pipeline Registers and Automatic Register Duplication

The DUPLICATE_HIERARCHY_DEPTH assignment uses design hierarchy information to guide the creation of duplicates and their fan-out assignments during synthesis.

set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to <register_name> <num_levels>

Where register_name is the last register in a chain that fans out to multiple hierarchies. To create a register tree, ensure that there are sufficient simple registers behind the node, and those simple registers are automatically pulled into the tree.

num_levels corresponds to the upper bound of the number of registers that exist in the chain, to use for duplicating down the hierarchies.

The registers in the chain must satisfy all the following conditions to be included in duplication:

  • Registers must be fed only by another register and cannot be fed by combinational logic.
  • Registers cannot be part of a synchronizer chain.
  • Registers cannot have any secondary signals.
  • Registers cannot have a preserve attribute or a PRESERVE_REGISTER assignment.
  • All registers in the chain except the last one must have only one fan-out.

Consider the following design with pipeline registers regA, regX, regY, and regZ added after the reset synchronizer block:

Figure 26. Pipeline Registers Added to Reset Synchronizer Block
set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 1

When num_levels is set to 1, only regZ is pulled out of the chain and pushed down by one hierarchy level into its fan-out tree.

Figure 27. num_levels set to 1
set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 2

When num_levels is set to 2, both regY and regZ are pulled out of the chain. regZ stops at the maximum hierarchy depth 2 and regY stops at hierarchy depth 1.

Figure 28. num_levels is set to 2
set_instance_assignment -name DUPLICATE_HIERARCHY_DEPTH -to regZ 3

When num_levels is set to 3, regX, regY, and regZ are pulled out of the chain and pushed to a maximum depth of 1, 2, and 3 levels respectively.

Figure 29. num_levels is set to 3

The Synthesis report includes the Hierarchical Tree Duplication Summary report that provides information on the registers impacted by the DUPLICATE_HIERARCHY_DEPTH assignment. You can refer to the report to set or modify the assignments and further improve the results.