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 and what the parameters stand for are described 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. Using instance names gives the Vivado synthesis tool more flexibility when modules or
entities are instantiated multiple times. In the provided example, you set the fftEngine instance, so the synthesis produces 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 can also not have any LUT5s or LUT6s
primitives.BLOCK_SYNTH property also causes the hierarchy of this instance to
be hardened. Be careful 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 gets that value for that specific option; all other options
use the default values.
You can set multiple BLOCK_SYNTH
properties on an instance to test 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. You can set this on one particular 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.