The opt_design -carry_remap option lets you remap single CARRY* cells into LUTs to improve the routing results of the design. When using the -carry_remap option, only single-stage carry chains are converted to LUTs. The CARRY_REMAP property lets you specify carry chains of greater length to be converted during optimization.
You can control the conversion of individual carry chains of any length by using the CARRY_REMAP cell property. The CARRY_REMAP property value is an integer that specifies the maximum carry chain length to be mapped to LUTs. The CARRY_REMAP property is applied to CARRY* primitives within a chain, and each cell must have the same value to be converted to LUTs during optimization.
IMPORTANT: Each CARRY cell in a carry chain must have the same CARRY_REMAP value. If at least one of the cascaded cells cannot be remapped due to presence of the DONT_TOUCH property, then the entire chain cannot be remapped. A warning will be issued when this occurs.
Refer to the Vivado Design Suite User Guide: Implementation (UG904) [Ref 20] for more information on optimization.
Architecture Support
•All architectures.
Applicable Objects
•CARRY Cells (get_cells)
Value
•<VALUE>: Specify an integer value that indicates the length of the carry chain that can be converted to LUTs during opt_design.
°CARRY_REMAP=0: Do not remap.
°CARRY_REMAP=1: Remap single CARRY cells that are not part of a carry chain.
°CARRY_REMAP=2: Remap carry chain with length of 2 or less.
Syntax
Verilog and VHDL Syntax
Not applicable
XDC Syntax
set_property CARRY_REMAP <value> <objects>
XDC Syntax Example
The following assigns a CARRY_REMAP property to all CARRY8 primitives:
set_property CARRY_REMAP 2 [get_cells -hier -filter {ref_name == CARRY8}]
Affected Steps
•Logic Optimization (Opt Design)
See Also