Setting a Block-Level Flow - 2022.1 English

Vivado Design Suite User Guide: Synthesis (UG901)

Document ID
Release Date
2022.1 English

To set a Block-Level Synthesis flow (using the BLOCK_SYNTH property), you enter a Tcl property in the XDC file only. The command syntax is, as follows:

set_property BLOCK_SYNTH.<option name> <value> [get_cells <instance_name>]


°<option_name> is the option that you want to set.

°<value> is the value that you assign to that option.

°<instance_name> is the hierarchical instance on which to set the option.

For example:

set_property BLOCK_SYNTH.MAX_LUT_INPUT 4 [get_cells fftEngine]

Set the property to an instance name, and not on an entity or module name. By using instance names, the Vivado synthesis tool is able to have more flexibility when there are modules/entities that are instantiated multiple times. In the provided example, the fftEngine instance is being set so that there are no LUT5 or LUT6 primitives.

Note:   By setting a BLOCK_SYNTH on an instance, you will be affecting that instance and everything below that instance. For example, if fftEngine had has other modules instantiated within it, those modules would also not have any LUT5s or LUT6s primitives.   


CAUTION!   In addition to affecting this instance, the BLOCK_SYNTH property also causes the hierarchy of this instance to be hardened. Care should be taken with this, especially if this hierarchy contains I/O buffers or is inferring input/output buffers.

When you put a BLOCK_SYNTH property on an instance, the instance will get that value for that specific option; all other options use the default values.

Multiple BLOCK_SYNTH properties can be set on the same instance to try out different combinations. For example, the following keeps equivalent registers, disables the FSM inference and uses the AlternateRoutability strategy:

set_property BLOCK_SYNTH.STRATEGY {ALTERNATE_ROUTABILITY} [get_cells mod_inst]

set_property BLOCK_SYNTH.KEEP_EQUIVALENT_REGISTER 1 [get_cells mod_inst]

set_property BLOCK_SYNTH.FSM_EXTRACTION {OFF} [get_cells mod_inst]

To prevent impacting instances under the instance that require a different property setting, you can nest BLOCK_SYNTH properties on multiple levels. If you only want this on one particular level, you can set it on that level, and then on the subsequent levels, you can set the default values back, using the command as follows:

set_property BLOCK_SYNTH.MAX_LUT_INPUT 6 [get_cells fftEngine/newlevel]

If newlevel is the only hierarchy under fftEngine, this command will ensure that only fftEngine gets the MAX_LUT_INPUT = 4 property. You can also put an entirely different set of options on this level as well; and not go back to the default.

Note:   When performing the block level flow, the tool keeps this design in a top-down mode meaning that the full design goes though synthesis. For the instance in question, Vivado synthesis will preserve the hierarchy to ensure that the logic of that level does not blur and will stay within that level. This could have a potential effect on QoR. For this reason, be careful when setting BLOCK_LEVEL properties. Only set them on instances you know need them.