Hyperflex® Architecture High-Performance Design Handbook

ID 683353
Date 12/06/2024
Public
Document Table of Contents

2.2.7.3.2. Quartus® Prime Settings for Initial Conditions

To optimize the retiming potential of registers in Agilex™ 7 and Stratix® 10 devices, it is beneficial to enable the Power-Up Don't Care logic option. This option, when turned on, preserves the initial conditions that you define, and allows the Quartus® Prime software to manage initial conditions of registers that lack explicit initial conditions. Enabling this logic option can thereby improve the Compiler's ability to retime registers into Hyper-Registers. This technique can be particularly beneficial for Agilex™ 7 device Hyper-Registers that can only be initialized to '1' during configuration.

Additionally, enabling the Ignoring Initial Conditions option allows the Quartus® Prime software to ignore unexpected initial conditions that may appear on certain logic of your design, thereby promoting retiming by the use of Hyper-Registers. However, you must verify functionality after eliminating these conditions to avoid unexpected behavior.

The Power-Up Don't Care and Ignoring Initial Conditions options allow the Compiler greater flexibility to optimize specific registers, particularly the use of Hyper-Registers for retiming purposes.

Power-Up Don't Care Logic Option

You can enable the retiming of more registers by making sure that the Power-Up Don't Care Logic option (ALLOW_POWER_UP_DONT_CARE) is On. This option specifies that registers without explicit initial conditions in the RTL power-up to don't care. This option is set to On by default.

set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON

Any initial conditions that you specify in the RTL, or any initial conditions that are implied (because of language specifications or FSM initial states) still apply when using ALLOW_POWER_UP_DONT_CARE.

The following figure shows a chain of registers with the following characteristics:

  • RegA0 and RegA2 lack explicit initial conditions.
  • RegA4 has an initial condition defined by the RTL code.
Figure 20. Example Chain of Registers - Power-Up Don't Care Logic Option On


By default, when the Power-Up Don't Care Logic option is on, registers without initial conditions, such as RegA0 and RegA2, are handled by retiming and converted into Hyper-Registers. In this scenario, RegA4 remains unchanged. RegA4 remains unchanged due to a previously defined initial condition.

When the Power-Up Don't Care Logic option is off, registers without initial conditions, such as RegA0 and RegA2, do not convert into Hyper-Registers. In this case, RegA4 still preserves its initial condition.

Figure 21. Power-Up Don't Care Logic Option Off


In both examples, the Compiler cannot convert registers that use reset signals into Hyper-Registers.

Ignoring Initial Conditions

Because of factors such as language specifications and conservative synthesis on structures such as state machines, it is possible for initial conditions to appear on certain registers, even though you expect no initial conditions to appear. Such initial conditions can potentially cause performance limitations. If you verify that removing such initial conditions is functionally correct, you can specify the following .qsf assignment to remove those initial conditions:

set_instance_assignment -name IGNORE_REGISTER_POWER_UP_INITIALIZATION ON \
     -to <instance name>

In the following example, RegA4 has an initial condition that the RTL code defines. When the Ignore Register Power-Up Initialization option is enabled for registers RegA*, the initial conditions are ignored, allowing retiming to convert RegA4 into a Hyper-Register.

Figure 22. RegA4 with Initial Condition


The Synthesis report identifies registers affected by IGNORE_REGISTER_POWER_UP_INITIALIZATION in the Registers with Power-Up Settings Ignored report.

Figure 23. Registers with Power-Up Settings Ignored