Automatically place ports and leaf-level instances
place_design [‑directive <arg>] [‑no_timing_driven] [‑timing_summary]
[‑unplace] [‑post_place_opt] [‑no_psip] [‑no_bufg_opt] [‑ultrathreads]
|Mode of behavior (directive) for this command. Please refer to Arguments section of this help for values for this option. Default: Default
|Do not run in timing driven mode
|Enable accurate post-placement timing summary.
|Unplace all the instances which are not locked by Constraints.
|Run only the post commit optimizer
|Disable PSIP (Physical Synthesis In Placer) optimization during placement.
|Disable global buffer insertion during placement
|Enable ultra-threads mode to speed up place_design
|Ignore command errors
|Suspend message limits during command execution
Place the specified ports and logic cells in the current design, or all ports and logic cells, onto device resources on the target part. The tool optimizes placement to minimize negative timing slack and reduce overall wire length, while also attempting to spread out placement to reduce routing congestion.
Placement is one step of the complete design implementation process, which can be run automatically through the use of the
launch_runs command when running the Vivado® tools in Project Mode.
In Non-Project Mode, the implementation process must be run manually with the individual commands:
route_design. Refer to the Vivado Design Suite User Guide: Design Flows Overview (UG892) for a complete description of Project Mode and Non-Project Mode.
Both placement and routing can be completed incrementally, based on prior results stored in a Design Checkpoint file (DCP), using the incremental implementation flow. Refer to the
read_checkpoint command, or to Vivado Design Suite User Guide: Implementation (UG904) for more information on incremental place and route.
place_design can be multi-threaded to speed the process. Refer to the
set_param command for more information on setting the general.maxThreads parameter.
You can also manually place some elements of the design using
place_ports, or by setting LOC properties on the cell, and then automatically place the remainder of the design using
This command requires an open synthesized design, and it is recommended that you run the
opt_design command prior to running
place_design to avoid placing a suboptimal netlist.
-directive <arg> - (Optional) Direct placement to achieve specific design objectives. Only one directive can be specified for a single
place_design command, and values are case-sensitive. Supported values include:
Explore- Increased placer effort in detail placement and post-placement optimization .
EarlyBlockPlacement- Timing-driven placement of RAM and DSP blocks. The RAM and DSP block locations are finalized early in the placement process and are used as anchors to place the remaining logic.
WLDrivenBlockPlacement- Wire length-driven placement of RAM and DSP blocks. Override timing-driven placement by directing the Vivado® placer to minimize the distance of connections to and from blocks.
ExtraNetDelay_high- Increases estimated delay of high fanout and long-distance nets. Three levels of pessimism are supported: high, medium, and low.
ExtraNetDelay_highapplies the highest level of pessimism.
ExtraNetDelay_low- Increases estimated delay of high fanout and long-distance nets. Three levels of pessimism are supported: high, medium, and low.
ExtraNetDelay_lowapplies the lowest level of pessimism.
AltSpreadLogic_high- Spreads logic throughout the device to avoid creating congested regions. Three levels are supported: high, medium, and low. AltSpreadLogic_high achieves the highest level of spreading.
AltSpreadLogic_medium- Spreads logic throughout the device to avoid creating congested regions. Three levels are supported: high, medium, and low. AltSpreadLogic_medium achieves a medium level of spreading compared to low and high.
AltSpreadLogic_low- Spreads logic throughout the device to avoid creating congested regions. Three levels are supported: high, medium, and low. AltSpreadLogic_low achieves the lowest level of spreading.
ExtraPostPlacementOpt- Increased placer effort in post-placement optimization.
ExtraTimingOpt- Use an alternate algorithm for timing-driven placement with greater effort for timing.
SSI_SpreadLogic_high- Distribute logic across SLRs.
SSI_SpreadLogic_highachieves the highest level of distribution.
SSI_SpreadLogic_low- Distribute logic across SLRs.
SSI_SpreadLogic_lowachieves a minimum level of logic distribution, while reducing placement runtime.
SSI_SpreadSLLs- Partition across SLRs and allocate extra area for regions of higher connectivity.
SSI_BalanceSLLs- Partition across SLRs while attempting to balance SLLs between SLRs.
SSI_BalanceSLRs- Partition across SLRs to balance number of cells between SLRs.
SSI_HighUtilSLRs- Direct the placer to attempt to place logic closer together in each SLR.
RuntimeOptimized- Run fewest iterations, trade higher design performance for faster runtime.
Quick- Absolute, fastest runtime, non-timing-driven, performs the minimum required placement for a legal design.
place_designto select the
place_designdirective specified by the
report_qor_suggestionstrategy suggestion. Requires an RQS file with a strategy suggestion to be read in prior to calling this directive. See
report_qor_suggestions -helpfor more details.
place_designto use machine learning to select the best predicted directive.
place_designto use machine learning to select the second best predicted directive.
place_designto use machine learning to select the third best predicted directive.
place_designwith default settings.
-directive option controls the overall placement strategy, and is not compatible with some
place_design options. It can be used with
-verbose. Only the
Default directives are compatible with high reuse designs and the incremental implementation flow as defined by
read_checkpoint -incremental. Refer to the Vivado Design Suite User Guide: Implementation (UG904) for more information on placement strategies and the use of the
-no_timing_driven - (Optional) Disables the default timing driven placement algorithm. This results in a faster placement based on wire lengths, but ignores any timing constraints during the placement process.
-timing_summary - (Optional) Report the post-placement worst negative slack (WNS) using results from static timing analysis. The WNS value is identical to that of
report_timing_summary when run on the post-placement design. By default the placer reports an estimated WNS based on incremental placement updates during the design implementation. The
-timing_summary option incurs additional runtime to run a full timing analysis.
-unplace - (Optional) Unplace all the instances which are not locked by constraints. Cells with fixed placement (IS_LOC_FIXED set to TRUE), are not affected.
set_property to change IS_LOC_FIXED to FALSE prior to unplacing fixed cells.
-post_place_opt - (Optional) Run optimization after placement to improve critical path timing at the expense of additional placement and routing runtime. This optimization can be run at any stage after placement. The optimization examines the worst case timing paths and tries to improve placement to reduce delay.
route_design will need to be run after
-no_psip - (Optional) Disable PSIP (Physical Synthesis In Placer) optimization during placement. By default, to improve delay the Vivado placer performs optimizations such as replicating drivers of high-fanout nets and drivers of loads that are far-apart. This option disables those optimizations.
-no_bufg_opt - (Optional) By default, global buffers are inserted during placement to drive high-fanout nets. This option disables global buffer insertion to reduce the number of routing resources consumed by high fanout nets that are not timing-critical.
-quiet - (Optional) Execute the command quietly, returning no messages from the command. The command also returns TCL_OK regardless of any errors encountered during execution.
-verbose - (Optional) Temporarily override any message limits and return all messages from this command.
place_design -directive Explore
The following example directs the Vivado placer to use the Machine Learning based predictor to select the top directive:
place_design -directive Auto_1