Manual Cell Placement - 2023.2 English

Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906)

Document ID
UG906
Release Date
2023-10-19
Version
2023.2 English

Manual cell placement obtains the best performance from a device. When using this technique, designers generally use it only on a small block of the design. They might hand place a small amount of logic around a high speed I/O interface, or hand place block RAMs and DSPs. Manual placement can be slow.

All floorplanning techniques can require significant engineering time. They might require floorplan iterations. If any of the cell names change, the floorplan constraints must be updated.

When floorplanning, you should have an idea of final pinout. It is useful to have the I/Os fixed. The I/Os can provide anchor points for starting the floorplan. Logic that communicates to I/Os migrates towards the fixed pins.

Tip: Place blocks that communicate with I/Os near their I/Os. If the pinout is pulling a block apart, consider pinout or RTL modification.
Figure 1. I/O Components Pulling Design Apart

The floorplan shown in the previous figure might not help timing. Consider splitting the block apart, changing the source code, or constraining only the block RAMs and DSPs. Also consider unplacing I/O registers if external timing requirements allow.

The Pblock mentioned in this section is represented by the XDC constraints:

create_pblock Pblock_usbEngine
add_cells_to_pblock [get_pblocks Pblock_usbEngine] [get_cells -quiet [list 
usbEngine1]] 
resize_pblock [get_pblocks Pblock_usbEngine] -add {SLICE_X8Y105:SLICE_X23Y149} 
resize_pblock [get_pblocks Pblock_usbEngine] -add {DSP48_X0Y42:DSP48_X1Y59} 
resize_pblock [get_pblocks Pblock_usbEngine] -add {RAMB18_X0Y42:RAMB18_X1Y59} 
resize_pblock [get_pblocks Pblock_usbEngine] -add {RAMB36_X0Y21:RAMB36_X1Y29}
Note: By default, the Pblocks are treated as soft throughout the implementation flow after the floorplanning stage. To force a hard Pblock, the Pblock property IS_SOFT should be set to 0:
set_property IS_SOFT 0 [get_pblocks Pblock_usbEngine]

The first line creates the Pblock. The second line (add_cells_to_pblock) assigns the level of hierarchy to the Pblock. There are four resource types (SLICE, DSP48, RAMB18, RAMB36) each with its own grid. Logic that is not constrained by a grid can go anywhere in the device. To constrain only the block RAMs in the level of hierarchy, disable the other Pblock grids.

Figure 2. Pblock Grids

The resulting XDC commands define the simplified Pblock:

create_pblock Pblock_usbEngine
add_cells_to_pblock [get_pblocks Pblock_usbEngine] [get_cells -quiet [list 
usbEngine1]] 
resize_pblock [get_pblocks Pblock_usbEngine] -add {RAMB18_X0Y42:RAMB18_X1Y59} 
resize_pblock [get_pblocks Pblock_usbEngine] -add {RAMB36_X0Y21:RAMB36_X1Y29}

The block RAMs are constrained in the device, but the slice logic is free to be placed anywhere on the device.

Tip: When placing Pblocks, be careful not to floorplan hierarchy in such a manner that it crosses the central config block.
Figure 3. Avoiding the Config Block