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

3.1. Compiling Submodules Independently

You can independently compile submodules of a larger design. Compiling a larger submodule independently allows you to obtain submodule performance information, and to optimize the submodule for better performance. Depending on your goals in compiling the submodule, you may choose to handle the I/Os differently, as the following techniques describe:

  • If you require additional Hyper-Optimization for the submodule during compilation, instantiate the submodule within a wrapper, adding two or more register stages at each input and output. This technique allows retiming of those additional registers into the circuit. If the Compiler retimes the additional registers into the submodule, then you can modify the full design to provide extra registers to the submodule. This method is useful when testing Hyper-Optimization on your submodule to determine the impact of retiming when the submodule is part of the larger design.
  • If you do not require further submodule Hyper-Optimization, but want to isolate a module to save compile time and mimic the module timing budget in the full design, define virtual pin constraints to enable retiming of the registers connecting directly to the submodule. Specify appropriate set_input_delay or set_ouput_delay SDC constraints to account for the clock skew of the internal clock tree. Account for the clock skew of the internal clock tree by specifying either a reference_pin or a static maximum constraint, according to the following guidelines and examples:
Table 8.  Submodule Compilation Constraint Guidelines
SDC Argument Guideline Example
clock Specify the internal clock domain name (no virtual clock). This argument causes the Compiler to treat external and internal clocks the same, allowing retiming of I/O registers no longer on the boundary. reference_pin argument:
set_input_delay -clock [get_clocks <name>] \
     0 [get_ports <name>] \ 
     -reference_pin [get_pins [<names>]
static maximum constraint:
set insert_delay <value>
set_input_delay -clock [get_clocks <name>] \
     $insert_delay [get_ports <name>]
delay Specify one of the following to account for the clock skew of the internal clock tree:
  • Set max (setup) argument to 0 and set the reference_pin argument to the clock pin of an I/O register. The Compiler automatically subtracts the clock tree insertion delay to the I/O register.
  • Set the max argument ≥ the clock tree insertion delay.
Figure 83. Submodule Compilation Input Constraint Example
set_input_delay -clock [get_clocks clk_in] \
     0 [get_ports data] \ 
     -reference_pin [get_pins [int_reg|clk]

Or:

set insert_delay 1.3
set_input_delay -clock [get_clocks clk_in] \
     $insert_delay [get_ports data]