The highlighted block in the previous figure is a Pblock. Pblocks constrain cells to a specific area of a device. The Pblock in the previous figure constrains some fabric logic, DSPs, and RAMs to the highlighted area. The Pblock was created with the following commands:
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}
The first line creates the Pblock. The second line (add_cells_to_pblock) assigns a hierarchical cell to the
Pblock. Four resource types are assigned to the Pblock: SLICE, DSP48, RAMB18, and
RAMB36. The resources assigned to a Pblock are called the Pblock's range.
IS_SOFT property to
0:set_property IS_SOFT 0 [get_pblocks Pblock_usbEngine]
Logic assigned to a Pblock that has no corresponding site types in the Pblock range is not constrained by the Pblock and can be placed anywhere on the device. This means you can assign an entire hierarchy to a Pblock while only constraining specific cell types by including only those resource types in the Pblock range. For example, to update the previous Pblock example to only constrain the RAMs in the assigned hierarchy, assign only the RAM sites to the Pblock range.
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 to the Pblock boundaries, but the slice logic is free to be placed anywhere on the device.