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>]
Where:
- <option_name> is the option that you want to set.
- <value> is the value 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 there are no LUT5 or LUT6 primitives.
BLOCK_SYNTH
on an instance, you affect that instance and everything below
that instance. For example, if fftEngine
had other
modules instantiated within it, those modules would also not have any LUT5s or LUT6s
primitives.When you put a BLOCK_SYNTH
property
on an instance, the instance gets 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 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 the new level is the only hierarchy under fftEngine
, this command ensures 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.
BLOCK_LEVEL
properties. Only set them on
instances you know need them.