Intel® Hyperflex™ Architecture High-Performance Design Handbook

ID 683353
Date 12/08/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

2.2.3. Preserving Registers During Synthesis

You can specify entity-level assignments and synthesis attributes to preserve specific registers during synthesis processing.

For example, the Preserve Registers in Synthesis assignment preserves the register that you assign during synthesis, without restricting Hyper-Retiming optimization. Similarly, you can specify the dont_merge or preserve_syn_only synthesis attributes to preserve registers without restricting retiming optimization, as the following example shows.

logic  hip_data; /* synthesis preserve_syn_only */
(*preserve_syn_only*) logic hip_data;

The Preserve Registers assignment also preserves registers, but does not allow Hyper-Retimer optimization of the registers that you assign. This assignment can be useful when you want to preserve a register for debugging observability.

Specify any of the following synthesis preservation assignments by clicking Assignments > Assignment Editor, by modifying the .qsf file, or by specifying synthesis attributes in your RTL.

Table 5.  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)