Shift Register Remap - 2023.1 English

Vivado Design Suite User Guide: Implementation (UG904)

Document ID
UG904
Release Date
2023-05-16
Version
2023.1 English

This is a set of optimizations that convert shift registers between discrete register chains and SRLs which are the LUTRAM-based shift register primitives. These optimizations specify global thresholds to convert from one form to another. The optimizations are used to balance utilization of registers and LUTRAM-based SRLs. High SRL utilization can lead to congestion and converting small SRLs to registers can help ease congestion and simultaneously improve performance by providing discrete registers to cover more distance for critical paths. However congestion can emerge again when register utilization becomes too high. Converting very long register chains to SRLs can absorb register stages and their routing which helps reduce congestion.

The optimizations are accessed using the -srl_remap_mode option which takes a Tcl list of lists as an argument to define the mode. Following are the different types of optimizations.

  • Converting small SRLs to registers: For this optimization use the max_depth_srl_to_ffs mode:
    • opt_design -srl_remap_modes {{max_depth_srl_to_ffs <depth>}}
    • Here all SRLs of depth <depth> and smaller are remapped to register chains.
  • Converting large shift register chains to SRLs: For this optimization use the min_depth_ffs_to_srl mode:
    • opt_design -srl_remap_modes {{min_depth_ffs_to_srl <depth>}}
    • Here all register chains greater than depth <depth> are remapped to SRL primitives.
  • Automatic target utilization optimizations: This mode uses the following syntax:
    • -srl_remap_modes {{target_ff_util <ff_util> target_lutram_util <lutram_util>}}

Here you specify percent utilization targets (0 to 100) for both registers and LUTRAMs. If the current utilization exceeds a target, Vivado will convert from the overutilized resource type to the other until the utilization target is met. When converting from SRLs to registers, Vivado begins with the smallest SRLs. When converting from registers to SRLs, Vivado begins with the largest register chains.

Note: The max_depth_srl_to_ffs and min_depth_ffs_to_srl can be used simultaneously but cannot be used with the target utilization settings.