Quartus® Prime Pro Edition User Guide: Design Compilation

ID 683236
Date 4/01/2024
Public
Document Table of Contents

1.7.2.1. Preserving Registers During Synthesis

Quartus® Prime synthesis minimizes gate count, merges redundant logic, and ensures efficient use of device resources. If you need to preserve specific registers through synthesis processing, you can specify any of the following entity-level assignments.

Assign the Preserve Registers in Synthesis or Preserve Fan-Out Free Register Node options to allow Fitter optimization of the preserved registers. Preserve Registers restricts Fitter optimization of the preserved registers. Specify synthesis preservation assignments by clicking Assignments > Assignment Editor, by modifying the .qsf file, or by specifying synthesis attributes in your RTL.

Table 11.  Synthesis Preserve Options
Assignment Description Allows Fitter Optimization? Assignment Syntax
Preserve Registers in Synthesis Prevents removal of registers during synthesis without restricting any optimization after synthesis, such as Hyper-Retiming or physical synthesis optimizations. Yes
  • set_global_assignment -name PRESERVE_REGISTER_SYN_ONLY ON|OFF -entity <entity name>

    set_instance_assignment -name PRESERVE_REGISTER_SYN_ONLY ON|OFF -to <to> -entity <entity name>

  • preserve_syn_only or syn_preservesyn_only (synthesis attributes)
Preserve Fan-Out Free Register Node Prevents removal of assigned registers without fan-out during synthesis.

The PRESERVE_FANOUT_FREE_NODE assignment cannot preserve a fanout-free register that has no fanout inside the Verilog HDL or VHDL module in which you define it. To preserve these fanout-free registers, implement the noprune pragma in the source file:

(*noprune*)reg r;

If there are multiple instances of this module, with only some instances requiring preservation of the fanout-free register, set a dummy pragma on the register in the HDL and also set the PRESERVE_FANOUT_FREE_NODE assignment. This dummy pragma allows the register synthesis to implement the assignment. For example, set the following dummy pragma for a register r in Verilog HDL:

(*dummy*)reg r;
Yes
  • set_instance_assignment -name PRESERVE_FANOUT_FREE_NODE ON|OFF -to <to> -entity <entity name>
  • noprune on (see Verilog or VHDL synthesis attribute for syntax)
Preserve Registers Prevents removal and sequential optimization of assigned registers during synthesis. Sequential netlist optimizations can eliminate redundant registers and registers with constant drivers. No
  • set_global_assignment -name PRESERVE_REGISTER ON|OFF -entity <entity name>

    set_instance_assignment -name PRESERVE_REGISTER ON|OFF -to <to> -entity <entity name>

  • preserve, syn_preserve, or keep on (synthesis attributes)