Ug912 Vivado Properties
Ug912 Vivado Properties
of this document
Chapter 1
• Hardware, IP, and Platform Development: Creating the PL IP blocks for the hardware
platform, creating PL kernels, functional simulation, and evaluating the AMD Vivado™ timing,
resource use, and power closure. Also involves developing the hardware platform for system
integration.
Introduction
This reference manual discusses the first class objects, and the properties available for those
objects, in the Vivado Design Suite. It consists of the following:
• Vivado Design Suite First Class Objects: Describes the various design and device objects used
by the Vivado Design Suite to model the FPGA design database. Presents the objects sorted
according to specific categories, with links to detailed object descriptions in the next chapter.
• Chapter 2: Alphabetical List of First Class Objects: List the Vivado Design Suite first class
objects in alphabetical order. A definition of the object, a list of related objects, and a list of
properties attached to each object are provided.
• Chapter 3: Key Property Descriptions: For many Vivado Design Suite properties, a
description, supported architectures, applicable elements, values, syntax examples (Verilog,
VHDL, and Xilinx Design Constraints (XDC)), and affected steps in the design flow are
provided.
• Appendix A: Additional Resources and Legal Notices: Resources and documents available on
the AMD support website at www.xilinx.com/support are provided.
This guide gives numerous syntax and coding examples to assist you in inserting properties into
your code. Problems can arise if you copy those examples directly from this PDF document into
your code.
• The dash character, ‘-’, might be replaced with an en-dash or em-dash character when copying
and pasting from the PDF into the Vivado tools Tcl Console, or into a Tcl script or XDC file.
• PDF documents insert end of line markers into examples that wrap from line to line. These
markers will cause errors in your Tcl scripts or XDC files.
• Copying examples that span more than one page in the PDF captures extraneous header and
footer information along with the example. This extraneous information causes errors in your
Tcl scripts or XDC files.
To avoid these problems, edit the example in an ASCII text editor to remove any unnecessary
markers or information, then paste it into your code, or the Vivado Design Suite Tcl shell or Tcl
Console.
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14826-081315
The netlist objects, displayed at the top of the figure above, are part of the logical design for
programming into the FPGA. Device objects, shown in the lower half of the figure, are part of the
actual physical device, and include area resources such as clock regions, tiles, sites or CLBs.
Device objects also include package pins and I/O banks, shown on the left side of the figure, and
routing resources such as nodes, wires, and pips, shown on the right in the figure.
Additional categories of first class objects exist in the Vivado Design Suite, such as timing
objects, which combine with the netlist design to create timing reports and constrain placement
and routing results. Timing objects associated with the netlist and device objects, provide a
complete timing analysis of the implemented design. Timing objects include clocks, timing paths,
and delay objects.
The relationship between objects is shown by the arrows connecting two objects:
• A double headed arrow indicates that the relationship can be queried from either direction.
For instance, you can query the cells attached to specific nets (get_cells -of_objects
[get_nets]), or query the nets connected to specific cells (get_nets -of_objects
[get_cells]).
• A single-ended arrow reflects a relationship that can only be queried in the direction of the
arrow. For instance, in Figure 1: Netlist and Device Objects, you can see that you can query
the bels located in specific clock regions (get_bels -of_objects
[get_clock_regions]), but you cannot get clock regions associated with specific bels.
A description of first class objects, their relationships to other objects, and the properties defined
on those objects follows.
Netlist Objects
• CELL
• CLOCK
• NET
• PIN
• PORT
• TIMING_PATH
• BEL
• BEL_PIN
• CLOCK_REGION
• IO_BANK
• IO_STANDARD
• NODE
• PACKAGE_PIN
• PIP or SITE_PIP
• PKGPIN_BYTEGROUP
• PKGPIN_NIBBLE
• SITE
• SLR
• TILE
• WIRE
The Block Design diagram objects are structurally very similar to the netlist objects previously
described. The relationships between the different design objects that make up Block Designs, or
diagrams, are illustrated in the following figure.
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14843-081315
• DIAGRAM
• BD_ADDR_SPACE
• BD_ADDR_SEG
• BD_CELL
• BD_INTF_NET
• BD_INTF_PIN
• BD_INTF_PORT
• BD_NET
• BD_PIN
• BD_PORT
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_sysmon_reg
hw_probe hw_sio_gt hw_sio_linkgroup
hw_sio_pll
hw_axi_txn
hw_ila_data
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14844-081315
Debug cores can be instantiated into an RTL design from the AMD IP catalog, or in the case of
the ILA or VIO debug cores, can be inserted into the synthesized netlist using the netlist-based
debug flow. Refer to Vivado Design Suite User Guide: Programming and Debugging (UG908) for
more information.
As seen in the figure above, the Vivado hardware manager objects include:
• HW_AXI
• HW_BITSTREAM
• HW_CFGMEM
• HW_DEVICE
• HW_ILA
• HW_ILA_DATA
• HW_PROBE
• HW_SERVER
• HW_SIO_GT
• HW_SIO_GTGROUP
• HW_SIO_IBERT
• HW_SIO_PLL
• HW_SIO_RX
• HW_SIO_TX
• HW_SYSMON
• HW_TARGET
• HW_VIO
Chapter 2
BD_ADDR_SEG
Description
Address segments, or bd_addr_seg objects, describe the location and size of a range of memory.
They have a range (size) and an optional starting offset.
For various memory mapped master and slave interfaces, IP integrator follows the industry
standard IP-XACT data format for capturing memory requirements and capabilities of endpoint
masters and slaves.
Addressable slave interfaces reference an address segment container, called a memory map.
These memory maps are usually named after the slave interface pins, for example, S_AXI,
though that is not required.
The memory map contains slave address segments. These address segments correspond to the
address decode window for the slave interface referencing the memory map. When specified in
the memory map, slave segments must have a range and can optionally have a hard offset,
(indicating that the slave can only be mapped into master address spaces at that offset or
apertures of it).
A typical AXI4-Lite slave interface for instance references a memory map with only one address
segment, representing a range of memory. However, some slaves, like a bridge, will have multiple
address segments; or a range of addresses for each address decode window.
Slave address segments are assigned into master address spaces using the
assign_bd_address or create_bd_addr_seg command.
Addressing master interfaces reference an address segment container called an Address Space, or
bd_addr_space. The address space is referenced by interface pins, bd_intf_pin, on the cell.
In the case of external AXI masters, the address space is referenced by the external interface
port, bd_intf_port. Several interfaces of varying protocols can reference the same master
address space. The MicroBlaze™ processor Data address space, for instance, is referenced by its
DLMB, M_AXI_DP and M_AXI_DC interfaces.
The Address space contains master address segments. These master address segments reference
slave address segments that have been assigned into the master address space, and the offset
and range at which the master accesses it.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14845-081315
The bd_addr_seg object refers to both master and slave address segments. The bd_addr_space
object refers to both memory maps and master address spaces.
You can query the relationship between all related address spaces and address segments. For
example:
# Get the slave adress segment from its referenced master address segment,
or the
# master address segment from its referencing slave address segment.
get_bd_addr_segs -of_objects [get_bd_addr_segs <slave or master>_segment]
Properties
The properties on a block design address segment object, bd_addr_seg, include the following,
with example values:
To report the properties for a bd_addr_seg object, you can copy and paste the following
command into the AMD Vivado™ Design Suite Tcl shell or Tcl Console:
BD_ADDR_SPACE
Description
The IP integrator of the Vivado Design Suite follows the industry standard IP-XACT data format
for capturing memory requirements and capabilities. Some blocks can have one address space
associated with multiple master interfaces, for example a processor with a system bus and fast
memory bus. Other components can have multiple address spaces associated with multiple
master interfaces, one for instruction and the other for data.
Master interfaces reference address spaces, or bd_addr_space objects. When an AXI slave is
mapped to a master address space, a master address segment (bd_addr_seg) object is created,
mapping the address segments of the slave to the master.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14845-081315
The master address segment, bd_addr_seg, is associated with the address spaces in AXI master
interfaces, found on a block design. The address space is referenced by the interface pins,
bd_intf_pin, on the cell, bd_cell. External AXI masters are associated with interface ports,
bd_intf_port.
You can also query the objects associated with the block design address spaces:
Properties
The properties on a block design address space object, bd_addr_space, include the following,
with example values:
To report the properties for a bd_addr_space object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
BD_CELL
Description
The TYPE property of the bd_cell object identifies the block design cell as either a lead-cell
coming from the IP catalog (TYPE == IP), or as a hierarchical module containing additional logic
(TYPE == HIER).
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14846-081315
As seen in figure above, Block design cells (bd_cell) are found in a block design, or diagram object.
The cells include block design pins (bd_pin) and interface pins (bd_intf_pin), and can
hierarchically contain block design ports (bd_port) and interface ports (bd_intf_port). They
are connected by nets (bd_net) and interface nets (bd_intf_net). Memory related block design
cells can also contain address spaces (bd_addr_space), and address segments (bd_addr_seg). You
can query the block design cells that are associated with any of these objects, for example:
You can query the objects associated with block design cells:
You can also query the block design cells that are hierarchically objects of another block design
cell:
Properties
The specific properties on a block design cell object can be numerous and varied, depending on
the type of IP core the object represents. The following table lists some of the properties
assigned to a bd_cell object in the Vivado Design Suite, with example values:
To report the properties for a bd_cell object, you can copy and paste the following command into
the Vivado Design Suite Tcl shell or Tcl Console:
BD_INTF_NET
Description
An interface is a grouping of signals that share a common function, containing both individual
signals and multiple buses. An AXI4-Lite master, for example, contains a large number of
individual signals plus multiple buses, which are all required to make a connection. By grouping
these signals and buses into an interface, the Vivado IP integrator can identify common
interfaces and automatically make multiple connections in a single step.
An interface is defined using the IP-XACT standard. Standard interfaces provided by AMD can be
found in the Vivado tools installation directory at data/ip/interfaces. See the Vivado Design Suite
User Guide: Designing IP Subsystems using IP Integrator (UG994) for more information on interface
nets, pins, and ports.
A block design interface net, or a bd_intf_net object, connects the interface pins on a block
design cell to other interface pins, or to external interface ports. The bd_intf_net object connects
through multiple levels of the design hierarchy, connecting block design cells. Every interface net
has a name which identifies it in the design. All block design cells, interface pins, and interface
ports connected to these nets are electrically connected.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14847-081315
As seen in figure above, the block design interface net, bd_intf_net object, occurs in a block
design, or diagram. It is connected to interface ports (bd_intf_port), and through interface
pins (bd_intf_pin) to block design cells (bd_cell) in the diagram. You can query the
bd_intf_nets of the diagram, bd_cell, bd_intf_pin, and bd_intf_port objects.
In addition, you can query the block design cells (bd_cell) or the bd_intf_pins or bd_intf_port
objects that are connected to a specific bd_intf_net:
Properties
To report the properties for the bd_intf_net object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
BD_INTF_PIN
Description
An interface is a grouping of signals that share a common function, containing both individual
signals and multiple buses. An AXI4-Lite master, for example, contains a large number of
individual signals plus multiple buses, which are all required to make a connection. By grouping
these signals and buses into an interface, the Vivado IP integrator can identify common
interfaces and automatically make multiple connections in a single step.
An interface is defined using the IP-XACT standard. Standard interfaces provided by AMD can be
found in the Vivado tools installation directory at data/ip/interfaces. See the Vivado Design Suite
User Guide: Designing IP Subsystems using IP Integrator (UG994) for more information on interface
nets, pins, and ports.
A block design interface pin, or a bd_intf_pin object, is a point of logical connectivity on a block
design cell. An interface pin allows the internals of a cell to be abstracted away and simplified for
ease-of-use. Interface pins can appear on hierarchical block design cells, or leaf-level cells.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14848-081315
A block design interface pin is attached to a block design cell (bd_cell), and can be connected to
other interface pins (bd_intf_pin) or interface ports (bd_intf_port) by an interface net (bd_intf_net)
in the block design, or diagram.
You can query the bd_intf_pins of bd_addr_space, bd_addr_seg, bd_cell, and bd_intf_net objects:
You can also query the bd_addr_spaces, bd_addr_segs, bd_cells, and bd_intf_nets, of a specific
bd_intf_pin:
Properties
The specific properties on a block design interface pin object can vary depending on the type of
the pin. The following table lists some of the properties assigned to a master AXI interface pin
object, with example values:
To report the properties for the bd_intf_pin object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
Or use the following Tcl script to report the properties of each bd_intf_pin object on each block
design cell:
BD_INTF_PORT
Description
An interface is a grouping of signals that share a common function, containing both individual
signals and multiple buses. An AXI4-Lite master, for example, contains a large number of
individual signals plus multiple buses, which are all required to make a connection. By grouping
these signals and buses into an interface, the Vivado IP integrator can identify common
interfaces and automatically make multiple connections in a single step.
An interface is defined using the IP-XACT standard. Standard interfaces provided by AMD can be
found in the Vivado tools installation directory at data/ip/interfaces. See the Vivado Design Suite
User Guide: Designing IP Subsystems using IP Integrator (UG994) for more information on interface
nets, pins, and ports.
A block design interface port is a special type of hierarchical pin, a pin on the top-level of the
block diagram. In block designs, ports and interface are primary ports communicating the
external connection of the block design or diagram from or to the overall FPGA design, or system
level design.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14849-081315
The block design interface port, bd_intf_port object, occurs in a block design, or diagram. It is
connected by block design interface nets (bd_intf_net) to the pins of block design cells (bd_cell).
You can query the bd_intf_ports of the diagram, or those connected to block design interface
nets.
You can also query the interface nets connected to bd_intf_port objects:
Properties
The specific properties on a block design interface port object can vary depending on the type of
the port. The following table lists some of the properties assigned to a clock bd_intf_port object,
with example values:
To report the properties for a bd_intf_port object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
BD_NET
Description
A block design net, or a bd_net object, connects the pins on an IP integrator block design cell to
other pins, or to external ports. The bd_net object connects through multiple levels of the design
hierarchy, connecting block design cells. Every net has a name which identifies it in the design. All
block design cells, pins, and ports connected to these nets are electrically connected.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14850-081315
The block design net, bd_net object, occurs in a block design, or diagram. It is connected to ports
(bd_port), and through pins (bd_pin) to block design cells (bd_cell) in the diagram. You can query
the bd_nets of the diagram, bd_cell, bd_pin, and bd_port objects.
In addition, you can query the bd_cells, or the bd_pins, or bd_port objects that are connected to a
specific bd_net:
Properties
To report the properties for the bd_net object, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
BD_PIN
Description
A block design pin, or a bd_pin object, is a point of logical connectivity on a block design cell. A
block design pin allows the internal logic of a cell to be abstracted away and simplified for ease-
of-use. Pins can be scalar or bus pins, and can appear on hierarchical block design cells, or leaf-
level cells.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14851-081315
As seen in figure above, a block design pin is attached to a block design cell (bd_cell), and can be
connected to other pins or ports by a net (bd_net) in the block design, or diagram.
In addition, you can query the bd_cell, or the bd_net, of a specific bd_pin:
Properties
The specific properties on a block design pin object can vary depending on the type of the pin.
The following table lists some of the properties assigned to a CLK type bd_pin object in the
Vivado Design Suite, with example values:
To report the properties for the bd_net object, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
BD_PORT
Description
A block design port is a special type of hierarchical pin, a pin on the top-level diagram. In block
designs, the ports are primary ports communicating the external connection of the block design
or diagram to the overall FPGA design, or system-level design.
Related Objects
bd_port bd_intf_port
diagram bd_cell
bd_addr_space
bd_addr_seg
X14852-081315
The block design port, bd_port object, occurs in a block design, or diagram. It is connected by
block design nets (bd_net) to the pins (bd_pin) of block design cells (bd_cell) in the diagram. You
can query the bd_ports of the diagram, or those connected to block design nets.
You can also query the block design nets connected to bd_port objects:
Properties
The specific properties on a block design port object can vary depending on the type of the port.
The following table lists some of the properties assigned to a RESET type bd_port object in the
Vivado Design Suite, with example values:
To report the properties for a bd_port object, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
BEL
Description
Typically a BEL, or Basic Element, corresponds to leaf-cell in the netlist view of the design. BELs
are device objects on the target AMD FPGA on which to place, or map, basic netlist objects like
flip-flops, LUTs, and carry logic.
BELs are grouped together on the device in SITE objects, such as SLICEs and IO Blocks (IOBs).
One or more BELs can be located in a single SITE, and you can use the BEL to assign logic from
the design netlist into specific locations or device resources on the target device.
There are a number of different bel types available on the different AMD FPGAs. The following
are the types of bels found on the AMD Kintex™ 7 part, xc7k70tfbg676. The different TYPEs of
BELs are enumerated below:
AFF AFF2
BFF BFF2
BITSLICE_CONTROL_BEL
BSCAN1 BSCAN2 BSCAN3 BSCAN4 BSCAN_BSCAN
BUFCE_BUFCE BUFCE_BUFCE_LEAF BUFCE_BUFCE_ROW
BUFFER
BUFGCE_DIV_BUFGCE_DIV BUFGCTRL_BUFGCTRL BUFG_GT_BUFG_GT
BUFG_GT_BUFG_GT_SYNC
BUFHCE_BUFHCE BUFIO_BUFIO BUFMRCE_BUFMRCE BUFR_BUFR
CAPTURE_CAPTURE
CARRY4 CARRY8
CFF CFF2
CFG_IO_ACCESS
DCIRESET DCIRESET_DCIRESET
DFF DFF2
DNA_PORT DNA_PORT_DNA_PORT
DSP48E1_DSP48E1 DSP_ALU DSP_A_B_DATA DSP_C_DATA DSP_MULTIPLIER DSP_M_DATA
DSP_OUTPUT DSP_PREADD DSP_PREADD_DATA
EFF EFF2
EFUSE_USR EFUSE_USR_EFUSE_USR
F7MUX F8MUX F9MUX
FFF FFF2 FF_INIT
FIFO18E1_FIFO18E1
FRAME_ECC FRAME_ECC_FRAME_ECC GCLK_DELAY
GFF GFF2 GTHE3_CHANNEL_GTHE3_CHANNEL
GTHE3_CHANNEL_IPAD1 GTHE3_CHANNEL_IPAD2 GTHE3_CHANNEL_OPAD1
GTHE3_CHANNEL_OPAD2 GTHE3_COMMON_GTHE3_COMMON GTHE3_COMMON_PADN
GTHE3_COMMON_PADP
GTXE2_CHANNEL_GTXE2_CHANNEL GTXE2_COMMON_GTXE2_COMMON HARD0 HARD1
HARD_SYNC_SYNC_UNIT HFF HFF2
HPIOBDIFFINBUF_DIFFINBUF HPIOBDIFFOUTBUF_DIFFOUTBUF HPIOB_IBUFCTRL
HPIOB_INBUF HPIOB_OUTBUF HPIOB_PAD HPIOB_PULL HPIO_OUTINV HPIO_VREF
HRIODIFFINBUF_DIFFINBUF HRIODIFFOUTBUF_DIFFOUTBUF HRIO_IBUFCTRL
HRIO_INBUF HRIO_OUTBUF HRIO_OUTINV HRIO_PAD HRIO_PULL
IBUFDS0_GTE3 IBUFDS1_GTE3 IBUFDS_GTE2_IBUFDS_GTE2 ICAP_BOT ICAP_ICAP
ICAP_TOP IDELAYCTRL_IDELAYCTRL IDELAYE2_FINEDELAY_IDELAYE2_FINEDELAY
IDELAYE2_IDELAYE2
ILOGICE2_IFF
ILOGICE3_IFF ILOGICE3_ZHOLD_DELAY INVERTER
IN_FIFO_IN_FIFO
IOB18M_INBUF_DCIEN IOB18M_OUTBUF_DCIEN IOB18M_TERM_OVERRIDE
IOB18S_INBUF_DCIEN IOB18S_OUTBUF_DCIEN IOB18S_TERM_OVERRIDE
IOB18_INBUF_DCIEN IOB18_OUTBUF_DCIEN IOB18_TERM_OVERRIDE IOB33M_INBUF_EN
IOB33M_OUTBUF IOB33M_TERM_OVERRIDE IOB33S_INBUF_EN IOB33S_OUTBUF
IOB33S_TERM_OVERRIDE IOB33_INBUF_EN IOB33_OUTBUF IOB33_TERM_OVERRIDE
LUT5 LUT6
LUT_OR_MEM5 LUT_OR_MEM6 MASTER_JTAG
MMCME2_ADV_MMCME2_ADV MMCME3_ADV_MMCM_TOP OBUFDS0_GTE3 OBUFDS1_GTE3
ODELAYE2_ODELAYE2
OLOGICE2_MISR OLOGICE2_OUTFF OLOGICE2_TFF OLOGICE3_MISR OLOGICE3_OUTFF
OLOGICE3_TFF OUT_FIFO_OUT_FIFO
PAD
PCIE_2_1_PCIE_2_1 PCIE_3_1_PCIE_3_1 PHASER_IN_PHY_PHASER_IN_PHY
PHASER_OUT_PHY_PHASER_OUT_PHY PHASER_REF_PHASER_REF
PHY_CONTROL_PHY_CONTROL
PLLE2_ADV_PLLE2_ADV PLLE3_ADV_PLL_TOP PLL_SELECT_BEL PMV2_PMV2
PULL_OR_KEEP1
RAMB18E1_RAMB18E1 RAMB18E2_U_RAMB18E2 RAMBFIFO18E2_RAMBFIFO18E2
RAMBFIFO36E1_RAMBFIFO36E1 RAMBFIFO36E2_RAMBFIFO36E2
REG_INIT RIU_OR_BEL RXTX_BITSLICE SELMUX2_1
SLICEL_A5LUT SLICEL_A6LUT SLICEL_B5LUT SLICEL_B6LUT SLICEL_C5LUT
SLICEL_C6LUT SLICEL_CARRY4_AMUX SLICEL_CARRY4_AXOR SLICEL_CARRY4_BMUX
SLICEL_CARRY4_BXOR SLICEL_CARRY4_CMUX SLICEL_CARRY4_CXOR SLICEL_CARRY4_DMUX
SLICEL_CARRY4_DXOR
SLICEL_D5LUT SLICEL_D6LUT SLICEL_E5LUT SLICEL_E6LUT SLICEL_F5LUT
SLICEL_F6LUT SLICEL_G5LUT SLICEL_G6LUT SLICEL_H5LUT SLICEL_H6LUT
SLICEM_A5LUT SLICEM_A6LUT SLICEM_B5LUT SLICEM_B6LUT SLICEM_C5LUT
SLICEM_C6LUT SLICEM_CARRY4_AMUX SLICEM_CARRY4_AXOR SLICEM_CARRY4_BMUX
SLICEM_CARRY4_BXOR
SLICEM_CARRY4_CMUX SLICEM_CARRY4_CXOR SLICEM_CARRY4_DMUX SLICEM_CARRY4_DXOR
SLICEM_D5LUT SLICEM_D6LUT SLICEM_E5LUT SLICEM_E6LUT SLICEM_F5LUT
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
SLR
Standard
X14853-081315
As seen in the figure above, leaf-level cells from the netlist design can be mapped onto bels on
the target part. Bels are grouped in sites on the target AMD device, and both bels and sites are
grouped into tiles and clock_regions. Each bel also has bel_pins that map to pins on the cells, and
are connection points to the net netlist object.
You can query the bels of slr, tiles, sites, cells, clock_regions or nets. For example:
You can also query the cells, sites, tiles, and bel_pins of bel objects:
Properties
The properties assigned to bel objects vary by TYPE. The properties assigned to a BUFIO type of
bel are as follows, with example values:
The properties assigned to BEL objects vary by TYPE. To report the properties for any of the
TYPEs of BEL listed above, you can use the report_property command:
Where <BEL_TYPE> should be replaced by one of the listed BEL types. For example:
TIP: The report_property command returns a warning that no objects were found if there are no
related objects in the current design. Refer to the Vivado Design Suite Tcl Command Reference Guide
(UG835) for more information on this command.
BEL_PIN
Description
The BEL_PIN is a device object, associated with netlist objects such as the PIN on a logic CELL,
which is the connection point for the NET.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
SLR
Standard
X14854-081315
As seen in the figure above, BEL_PIN objects are related to BEL and SITE device resources, and
PIN and NET netlist objects. You can query the BEL_PINs of BELs, SITEs, PINs, or NETs by using
a form of the following Tcl command:
You can also query the SLRs, and TILEs that BEL_PINs are located in, or NODEs associated with
the BEL_PIN:
Properties
The properties on a BEL_PIN object include the following, with example values:
To report the properties for all the BEL_PINs on a specific BEL object, you can use the following
FOREACH loop in the Vivado Design Suite Tcl shell or Tcl Console:
CELL
Description
A cell is an instance of a netlist logic object, which can either be a leaf-cell or a hierarchical cell. A
leaf-cell is a primitive, or a primitive macro, with no further logic detail in the netlist. A
hierarchical cell is a module or block that contains one or more additional levels of logic, and
eventually concludes at leaf-cells.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
Standard
X14855-081315
As seen in the figure above, cells have PINs which are connected to NETs to define the external
netlist. Hierarchical cells also contain PORTs that are associated with PINs, and which connect
internally to NETs to define the internal netlist of the hierarchy.
Leaf CELLs are placed, or mapped, onto device resources on the target AMD FPGA. The CELL
can be placed onto a BEL object in the case of basic logic such as flops, LUTs, and MUXes; or can
be placed onto a SITE object in the case of larger logic cells such as BRAMs and DSPs. BELs are
also collected into larger SITEs, called SLICEs, so a cell can be associated with a BEL and a SITE
object. SITEs are grouped into CLOCK_REGIONs and TILEs.
CELLs are also associated with TIMING_PATHs in the design, and can be associated with
DRC_VIOLATIONs to help you quickly locate and resolve design issues.
You can query the CELLs associated with pins, timing paths, nets, bels, clock regions, sites, or
DRC violations:
Properties
All cells have a common set of properties; but each cell GROUP, SUBGROUP, and TYPE can also
have unique properties. You can report the properties for specific types of CELL objects by
filtering on the PRIMITIVE_GROUP, PRIMITIVE_SUBGROUP or PRIMITIVE_TYPE property
value.
PRIMITIVE_TYPE is an enumerated property, the defined values of which can be returned with
the list_property_value command:
However, a design will probably not contain cells for each defined PRIMITIVE_TYPE. The
following Tcl code searches hierarchically through a design and returns unique occurrences of the
PRIMITIVE_TYPE property for all the cells in the design.
From the returned list, $primTypes, you can report the properties for a specific PRIMITIVE_TYPE
using the following command:
Where <val> represents the PRIMITIVE_TYPE of interest. For example, to return the properties
of the BLOCKRAM.BRAM.RAM18E2 type cell:
TIP: The report_property command returns a warning that no objects were found if there are no
related objects in the current design. Refer to the Vivado Design Suite Tcl Command Reference Guide
(UG835) for more information on this command.
You can also return the properties from a hierarchical cell using the following Tcl command:
Of course, you can also simply return the properties for the specific cell of interest:
CLOCK
Description
CLOCK objects provide the Vivado Design Suite a time reference for reliably transferring data
from register to register. The Vivado timing engine uses the properties of the CLOCK objects to
compute the setup and hold requirements of the design and report the design timing margin by
means of the slack computation. You must properly define the CLOCK objects to get the
maximum timing path coverage with the best accuracy.
A clock is defined with PERIOD and WAVEFORM properties. The period is specified in
nanoseconds and defines the length of the clock cycle. It corresponds to the time over which the
waveform repeats. The waveform is the list of rising edge and falling edge absolute times, in
nanoseconds, within the clock period. Refer to Vivado Design Suite User Guide: Using Constraints
(UG903) for more information on defining clocks.
The period and waveform properties represent the ideal characteristics of a clock. When entering
the FPGA and propagating through the clock tree, the clock edges are delayed and become
subject to variations induced by noise and hardware behavior. These characteristics are called
clock network latency and clock uncertainty. By default, the Vivado Design Suite treats all clocks
as propagated clocks, or non-ideal, to provide an accurate slack value which includes clock tree
insertion delay and uncertainty.
• Primary clocks: A primary clock is a system-level clock that enters the Vivado design through
a primary input port or a gigabit transceiver pin. A primary clock is defined by the
create_clock command. The design source of a primary clock defines the time zero and
point of propagation used by the Vivado timing engine when computing delay values.
• Virtual clocks: A virtual clock is a CLOCK object that is not physically attached to any netlist
elements in the design. A virtual clock is defined by the create_clock command, without
specifying a source object to assign the clock to.
• Generated clocks: Generated clocks are driven inside the design by special cells called Clock
Modifying Blocks (for example, an MMCM), or by some user logic. Generated clocks are
derived from a master clock by the create_generated_clock command, and include the
IS_GENERATED property. Instead of specifying the period and waveform of generated clocks,
you must describe how the modifying circuitry transforms the master clock.
Clocks use dedicated device resources to propagate through the design. Refer to 7 Series FPGAs
Clocking Resources User Guide (UG472) or UltraScale Architecture Clocking Resources User Guide
(UG572) for more information on clock resources.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
Standard
X14856-081315
CLOCK objects are related to the PORTs, NETs, CELLs, or PINs that are their source, as defined
by the create_clock command. You can query the clocks associated with a netlist object using
the get_clock or get_generated_clocks commands:
You can also query the netlist objects (NETs, PINs, PORTs) associated with clocks:
Properties
The properties on the clock object include the following, with example values:
You can use the report_property command to report the properties of a CLOCK object.
Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more information. To
report the properties for a specific clock in the design, you can use the following command in the
Vivado Design Suite Tcl shell or Tcl Console:
CLOCK_REGION
Description
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
SLR
Standard
X14857-081315
For clocking purposes, each device is divided into clock regions. A CLOCK_REGION is a device
object identifying an area of the AMD FPGA or device that is served by a set of clocking
resources. A clock region contains configurable logic blocks (CLBs), DSP slices, block RAMs,
interconnect, and associated clocking.
The number of clock regions varies with the size of the device. UltraScale devices are divided into
columns and rows of segmented clock regions. These clock regions differ from previous families
because they are arranged in tiles and do not span half the width of a device.
For UltraScale devices the height of a clock region is 60 CLBs, 24 DSP slices, and 12 block RAMs,
with a horizontal clock spine (HCS) at its center. There are 52 I/Os per bank and four Gigabit
transceivers (GTs) that are pitch matched to the clock regions.
For 7 series devices, the clock region contains 50 CLBs and one I/O bank with 50 I/Os, and a
horizontal clock row (HROW) at its center.
The I/O banks in clock regions have clock capable pins that bring user clocks onto the clock
routing resources within the clock region.
Refer to 7 Series FPGAs Clocking Resources User Guide (UG472) or UltraScale Architecture Clocking
Resources User Guide (UG572) for more information on clock regions and the resources they
contain.
Related Objects
CLOCK_REGION objects are associated with super-logic regions (SLR) on the device that the
region is found in, or the TILE, SITE, or PACKAGE_BANK device objects found in the clock
region. Additionally you can get the CLOCK_REGION that CELL netlist objects have been placed
into.
You can query the CLOCK_REGION of an associated object with a Tcl command similar to the
following, which returns the clock region that the specified cell is placed into:
In addition, you can query the SLR, TILE, SITE, BEL, and IO_BANK device objects associated
with, or found in, the CLOCK_REGION. For example, the following Tcl command returns the I/O
Banks in the same clock region that the specified cell is placed into:
Properties
You can use the report_property command to report the properties of a CLOCK_REGION.
Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more information.
The properties on the clock_region object include the following, with example values:
To report the properties for a specific CLOCK_REGION, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
DIAGRAM
Description
A block design (.bd), is a complex system of interconnected IP cores created in the IP integrator
of the Vivado Design Suite. The Vivado IP integrator lets you create complex system designs by
instantiating and interconnecting IP from the Vivado IP catalog. A block design is a hierarchical
design which can be written to a file (.bd) on disk, but is stored as a diagram object within the
Vivado tool memory.
Block designs are typically constructed at the interface level for increased productivity, but can
also be edited at the port or pin level, to provide greater control. A Vivado Design Suite project
can incorporate multiple diagrams, at different levels of the design hierarchy, or can consist of a
single diagram as the top-level design.
Related Objects
As seen in Figure 2: Block Design Objects, the diagram object contains other IP integrator block
design (bd) objects such as bd_cells, bd_nets, and bd_ports. The relationship between these
objects is similar to the relationship between the standard netlist objects of cells, pins, and nets.
You can get each object of the Block Design: cell, address space, address segment, net, pin, port,
interface net, interface pin, and interface port from a specified diagram object.
For instance, get the nets of the Block Design with the following Tcl command:
Properties
The following table lists the properties assigned to a diagram object in the Vivado Design Suite,
with example values:
The properties of the diagram object can be reported using the following command:
HW_AXI
Description
The JTAG to AXI Master core, or hw_axi object, is a customizable IP core that works as an AXI
Master to drive AXI transactions and drive AXI signals on the AMD FPGA, hw_device object. The
AXI Master core supports AXI4 interfaces and AXI4-Lite protocol. The width of AXI data bus is
configurable. The AXI core can drive AXI4-Lite or AXI4 Slave through an AXI4 interconnect. The
core can also be connected to interconnect as the master.
The JTAG to AXI Master core must be instantiated in the RTL code, from the AMD IP catalog.
Detailed documentation on the VIO core can be found in the JTAG to AXI Master LogiCORE IP
Product Guide (PG174).
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14858-081315
The AXI Master cores can be added to a design in the RTL source files from the AMD IP catalog.
AXI cores can be found in the synthesized netlist design using the get_debug_cores
command. These are not the hardware AXI Master core objects, hw_axi, found in the Hardware
Manager feature of the Vivado Design Suite, though they are related.
The HW_AXI core can be found in the Hardware Manager on the programmed hardware device
object, hw_device. You can query the hw_axi of the hw_device as follows:
In addition, the HW_AXI core has AXI transactions associated with the core that can be queried
as follows:
Properties
You can use the report_property command to report the properties assigned to a HW_AXI
core. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information. The properties assigned to HW_AXI objects include the following, with examples:
To report the properties for a specific HW_AXI, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
HW_BITSTREAM
Description
A hardware bitstream object hw_bitstream, that is created from a bitstream file, to associate with
a hardware device object, hw_device, in the Hardware Manager feature of the Vivado Design
Suite.
The bitstream file is created from a placed and routed design with the write_bitstream
command. The hardware bitstream object is created manually from a bitstream file with the
create_hw_bitstream command, or automatically created when the hardware device is
programmed with the program_hw_device command.
The hw_bitstream object is associated with the specified hw_device through the
PROGRAM.HW_BITSTREAM property on the device. This property is automatically set by the
create_hw_bitstream command. The PROGRAM.FILE property includes the file path of the
specified bitstream file.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14859-081315
Properties
You can use the report_property command to report the properties assigned to a hardware
bitstream object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information. The specific properties of the hw_bitsream object include the following, with
example values:
To report the properties for a hw_bitstream object, you can use the get_property command
to return the object defined in the PROGRAM.HW_BITSTREAM property on a hw_device in the
Vivado logic analyzer. You can copy and paste the following command into the Vivado Design
Suite Tcl shell or Tcl Console:
HW_CFGMEM
Description
AMD FPGAs are configured by loading design-specific configuration data, in the form of a
bitstream file, into the internal memory of the hw_device. The hw_cfgmem defines a flash
memory device used for configuring and booting the AMD FPGA in the Hardware Manager
feature of the Vivado Design Suite.
The hw_cfgmem object is created using the create_hw_cfgmem command. Once the
hw_cfgmem object is created, and associated with the hw_device, the configuration memory can
be programmed with the bitstream and other data using the program_hw_cfgmem command.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14860-081315
The hw_cfgmem object is associated with the specified hw_device object through the
PROGRAM.HW_CFGMEM property on the device object. To work with the hw_cfgmem object,
use the get_property command to obtain the object from a hw_device:
Properties
You can use the report_property command to report the properties assigned to a
hw_cfgmem object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information. The properties on the hw_cfgmem object include the following, with example
values:
To report the properties for a hw_cfgmem object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console when the Hardware Manager
feature is open:
HW_DEVICE
Description
Within the Hardware Manager feature of the Vivado Design Suite, each hardware target can
have one or more AMD FPGA devices to program, or to use for debugging purposes. The
hw_device object is the physical part on the hw_target opened through the hw_server. The
current device is specified or returned by the current_hw_device command.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14862-081315
Hardware devices are associated with hardware targets, and can be queried as objects of the
hw_target object:
You can also query the debug cores programmed onto a hardware device object:
Properties
The properties on the hw_device object might vary depending on the target part you have
selected. You can use the report_property command to report the properties assigned to a
hw_device object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information.
The properties assigned to the hw_device object include the following, with property type:
Property Type
CLASS string
DID string
IDCODE string
INDEX int
IR_LENGTH int
IS_SYSMON_SUPPORTED bool
MASK int
NAME string
PART string
PROBES.FILE string
PROGRAM.FILE string
PROGRAM.HW_BITSTREAM hw_bitstream
PROGRAM.HW_CFGMEM hw_cfgmem
PROGRAM.HW_CFGMEM_BITFILE string
PROGRAM.HW_CFGMEM_TYPE string
PROGRAM.IS_SUPPORTED bool
PROGRAM.OPTIONS string
REGISTER.BOOT_STATUS string
REGISTER.BOOT_STATUS.BIT00_0_STATUS_VALID string
REGISTER.BOOT_STATUS.BIT01_0_FALLBACK string
REGISTER.BOOT_STATUS.BIT02_0_INTERNAL_PROG string
REGISTER.BOOT_STATUS.BIT03_0_WATCHDOG_TIMEOUT_ERROR string
REGISTER.BOOT_STATUS.BIT04_0_ID_ERROR string
REGISTER.BOOT_STATUS.BIT05_0_CRC_ERROR string
REGISTER.BOOT_STATUS.BIT06_0_WRAP_ERROR string
REGISTER.BOOT_STATUS.BIT07_RESERVED string
REGISTER.BOOT_STATUS.BIT08_1_STATUS_VALID string
REGISTER.BOOT_STATUS.BIT09_1_FALLBACK string
REGISTER.BOOT_STATUS.BIT10_1_INTERNAL_PROG string
REGISTER.BOOT_STATUS.BIT11_1_WATCHDOG_TIMEOUT_ERROR string
REGISTER.BOOT_STATUS.BIT12_1_ID_ERROR string
REGISTER.BOOT_STATUS.BIT13_1_CRC_ERROR string
REGISTER.BOOT_STATUS.BIT14_1_WRAP_ERROR string
REGISTER.BOOT_STATUS.BIT15_RESERVED string
REGISTER.CONFIG_STATUS string
REGISTER.CONFIG_STATUS.BIT00_CRC_ERROR string
REGISTER.CONFIG_STATUS.BIT01_DECRYPTOR_ENABLE string
REGISTER.CONFIG_STATUS.BIT02_PLL_LOCK_STATUS string
REGISTER.CONFIG_STATUS.BIT03_DCI_MATCH_STATUS string
REGISTER.CONFIG_STATUS.BIT04_END_OF_STARTUP_(EOS)_STATUS string
REGISTER.CONFIG_STATUS.BIT05_GTS_CFG_B_STATUS string
REGISTER.CONFIG_STATUS.BIT06_GWE_STATUS string
REGISTER.CONFIG_STATUS.BIT07_GHIGH_STATUS string
REGISTER.CONFIG_STATUS.BIT08_MODE_PIN_M[0] string
REGISTER.CONFIG_STATUS.BIT09_MODE_PIN_M[1] string
REGISTER.CONFIG_STATUS.BIT10_MODE_PIN_M[2] string
REGISTER.CONFIG_STATUS.BIT11_INIT_B_INTERNAL_SIGNAL_STATUS string
REGISTER.CONFIG_STATUS.BIT12_INIT_B_PIN string
REGISTER.CONFIG_STATUS.BIT13_DONE_INTERNAL_SIGNAL_STATUS string
REGISTER.CONFIG_STATUS.BIT14_DONE_PIN string
REGISTER.CONFIG_STATUS.BIT15_IDCODE_ERROR string
REGISTER.CONFIG_STATUS.BIT16_SECURITY_ERROR string
REGISTER.CONFIG_STATUS.BIT17_SYSTEM_MONITOR_OVER-TEMP_ALARM_STATUS string
REGISTER.CONFIG_STATUS.BIT18_CFG_STARTUP_STATE_MACHINE_PHASE string
REGISTER.CONFIG_STATUS.BIT21_RESERVED string
REGISTER.CONFIG_STATUS.BIT25_CFG_BUS_WIDTH_DETECTION string
REGISTER.CONFIG_STATUS.BIT27_HMAC_ERROR string
REGISTER.CONFIG_STATUS.BIT28_PUDC_B_PIN string
REGISTER.CONFIG_STATUS.BIT29_BAD_PACKET_ERROR string
REGISTER.CONFIG_STATUS.BIT30_CFGBVS_PIN string
REGISTER.CONFIG_STATUS.BIT31_RESERVED string
REGISTER.IR string
REGISTER.IR.BIT0_ALWAYS_ONE string
REGISTER.IR.BIT1_ALWAYS_ZERO string
REGISTER.IR.BIT2_ISC_DONE string
REGISTER.IR.BIT3_ISC_ENABLED string
REGISTER.IR.BIT4_INIT_COMPLETE string
REGISTER.IR.BIT5_DONE string
REGISTER.USERCODE string
SET_UNKNOWN_DEVICE bool
USER_CHAIN_COUNT string
To report the properties for a hw_device, you can copy and paste the following command into
the Vivado Design Suite Tcl shell or Tcl Console:
HW_ILA
Description
The Integrated Logic Analyzer (ILA) debug core allows you to perform in-system monitoring of
signals in the implemented design through debug probes on the core. You can configure the ILA
core to trigger in real-time on specific hardware events, and capture data on the probes at system
speeds.
ILA debug cores can be added to a design by instantiating an ILA core from the IP catalog into
the RTL design, or using the create_debug_core Tcl command to add the ILA core to the
synthesized netlist. Refer to Vivado Design Suite User Guide: Programming and Debugging (UG908)
for more information on adding ILA debug cores to the design.
After generating a bitstream from the design, and programming the device with the
program_hw_devices command, the ILA debug cores in the design are accessible from the
Hardware Manager using the get_hw_ilas command. The debug probes assigned to the ILA
debug cores in the design can be returned with the get_hw_probes command.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14863-081315
ILA debug cores can be added to a design in the RTL source files, or using the
create_debug_core Tcl command. Debug cores can be found in the synthesized netlist design
using the get_debug_cores command. These are not the hardware ILA debug core objects,
hw_ila, found in the Hardware Manager feature of the Vivado Design Suite, though they are
related.
The hardware ILA debug core can be found in the Hardware Manager on the programmed
hardware device object, hw_device. You can query the hw_ila of the hw_device as follows:
There are also objects associated with the hardware ILA debug core, such as hardware probes,
and the captured data samples from the hw_ila core. You can query the objects associated with
the ILA debug cores as follows:
Properties
You can use the report_property command to report the actual properties assigned to a
specific HW_ILA. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information.
To report the properties for a specific HW_ILA, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
HW_ILA_DATA
Description
The hardware ILA data object is a repository for data captured on the ILA debug core
programmed onto the current hardware device. The upload_hw_ila_data command creates a
hw_ila_data object in the process of moving the captured data from the ILA debug core, hw_ila,
on the physical FPGA, hw_device.
The read_hw_ila_data command can also create a hw_ila_data object when reading an ILA
data file from disk.
The hw_ila_data object can be viewed in the waveform viewer of the Vivado logic analyzer by
using the display_hw_ila_data command, and can be written to disk using the
write_hw_ila_data command.
Related Objects
As seen in Figure 22: Hardware ILA Objects, the hardware ILA data objects are associated with
the ILA debug cores programmed on the hardware device. You can query the data objects as
follows:
Properties
You can use the report_property command to report the properties assigned to a
hw_ila_data object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information. The properties are as follows:
To report the properties for the hw_ila_data object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_PROBE
Description
A hardware probe object, hw_probe, provides access to signals in the design to monitor and drive
signal values, and track hardware events on the FPGA. Hardware probes can be added to both
ILA and VIO debug cores.
Debug probes can be added to ILA debug cores in the RTL design source, along with the core, or
in the synthesized netlist design using the create_debug_probe command, and connected to
signals in the design using connect_debug_probe.
Probes can only be added to VIO debug cores in the RTL design when the IP core is customized,
or re-customized, from the IP catalog, and signals connected to it. Refer to the Vivado Design
Suite User Guide: Programming and Debugging (UG908) for more information on adding ILA and
VIO debug cores and signal probes to the design.
Debug cores and probes are written to a probes file (.ltx) with write_debug_probes, and
associated with the hardware device, along with the bitstream file (.bit), using the PROBES.FILE
and PROGRAM.FILE properties of the hw_device object. The hardware device is programmed
with this information using the program_hw_device command.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14864-081315
The hardware probe objects are associated with the ILA and VIO debug cores programmed onto
the hardware devices on the hw_target opened through the hw_server. You can query the
hw_probe objects associated with these debug core objects:
Properties
There are three types of debug probes: ILA, VIO_INPUT, and VIO_OUTPUT. The properties
assigned to a hw_probe object depend on the type of probe. You can use the
report_property command to report the properties assigned to a hw_probe object.
Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more information. The
properties assigned to an ILA type hw_probe object includes the following, with example values:
To report the properties for a specific type of hw_probe object, you can copy and paste one of
the following commands into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SERVER
Description
The hardware server manages connections to a hardware target, for instance a hardware board
containing a JTAG chain of one or more AMD FPGA devices to be used for programming and
debugging your FPGA design.
When you open the Hardware Manager with the open_hw command, you can connect to a
hardware server, either locally or remotely, using the connect_hw_server command. This
launches the hw_server application, and creates a hw_server object.
Related Objects
As seen in Figure 3: Hardware Manager Objects, hardware servers are apex objects in the
Hardware Manager, managing connections to hardware targets. You can query the objects
related to the hw_server:
Properties
You can use the report_property command to report the properties assigned to a hw_server
object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information. The properties assigned to the hw_target object include the following, with example
values:
To report the properties for a hw_target, you can copy and paste the following command into the
Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_GT
Description
The customizable AMD LogiCORE™ IP Integrated Bit Error Ratio Tester (IBERT) core for AMD
FPGAs is designed for evaluating and monitoring the Gigabit Transceivers (GTs). The IBERT core
enables in-system serial I/O validation and debug, letting you measure and optimize the high-
speed serial I/O links in your design. Refer to the Integrated Bit Error Ratio Tester 7 Series GTX
Transceivers LogiCORE IP Product Guide (PG132) for more information.
Using the IBERT debug core you can configure and tune the GT transmitters and receivers
through the Dynamic Reconfiguration Port (DRP) port of the GTX transceiver. This lets you
change property settings on the GTs, as well as registers that control the values on the ports.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14865-081315
You can also query the objects associated with hw_sio_gt objects:
Properties
You can use the report_property command to report the actual properties assigned to a
specific HW_SIO_GT. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information.
To report the properties for the HW_SIO_GT object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_GTGROUP
Description
GT groups relate to the GT IO Banks on the hardware device, with the number of available GT
pins and banks determined by the target AMD FPGA. On the Kintex 7 xc7k325 part, for example,
there are four GT groups, each containing four differential GT pin pairs. Each GT pin has its own
receiver, hw_sio_rx, and transmitter, hw_sio_tx. GT groups can also include one shared PLL per
quad, or Quad PLL. The GT groups are defined on the IBERT debug core, and can be customized
with a number of user settings when the IBERT is added into the RTL design. Refer to the
Integrated Bit Error Ratio Tester 7 Series GTX Transceivers LogiCORE IP Product Guide (PG132) for
more information.
Related Objects
Properties
To report the properties for a specific HW_SIO_GTGROUP, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_IBERT
Description
The customizable LogiCORE IP Integrated Bit Error Ratio Tester (IBERT) core for AMD FPGAs is
designed for evaluating and monitoring the Gigabit Transceivers (GTs). The IBERT core enables
in-system serial I/O validation and debug, letting you measure and optimize your high-speed
serial I/O links in your FPGA-based system. Refer to the Integrated Bit Error Ratio Tester 7 Series
GTX Transceivers LogiCORE IP Product Guide (PG132) for more information.
The IBERT debug core lets you configure and control the major features of GTs on the device,
including:
You can use the IBERT core when you are interested in addressing a range of in-system debug
and validation problems; from simple clocking and connectivity issues to complex margin analysis
and channel optimization issues.
Related Objects
As seen in the following figure, the SIO IBERT debug cores are associated with hw_server,
hw_target, hw_device, hw_sio_gt, hw_sio_common, hw_sio_pll, hw_sio_tx, hw_sio_rx, or
hw_sio_link objects.
You can also query the associated objects of specific IBERT cores:
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14866-081315
Properties
You can use the report_property command to report the actual properties assigned to a specific
hw_sio_ibert. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information.
To report the properties for a specific hw_sio_ibert, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_PLL
Description
For AMD FPGA devices having GigaBit Transceivers (GTs), each serial transceiver channel has a
ring phase-locked loop (PLL) called Channel PLL (CPLL). For AMD UltraScale and 7 series FPGAs,
the GTX has an additional shared PLL per quad, or Quad PLL (QPLL). This QPLL is a shared LC
PLL to support high speed, high performance, and low power multi-lane applications.
Related Objects
Properties
You can use the report_property command to report the properties assigned to a specific
HW_SIO_PLL. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information. The properties assigned to a shared QPLL type of HW_SIO_PLL object includes the
following, with example values:
localhost/xilinx_tcf/Digilent/210203327463A/0_1/IBERT/Quad_117/COMMON_X0Y2/
QPLL_0 PARENT string true true localhost/xilinx_tcf/Digilent/
210203327463A/0_1/IBERT/Quad_117/COMMON_X0Y2
PORT.QPLLDMONITOR string false true EC
PORT.QPLLFBCLKLOST string false true 0
PORT.QPLLLOCK string false true 1
PORT.QPLLLOCKEN string false true 1
PORT.QPLLOUTRESET string false true 0
PORT.QPLLPD string false true 0
PORT.QPLLREFCLKLOST string false true 0
PORT.QPLLREFCLKSEL string false true 1
PORT.QPLLRESET string false true 0
PORT.QPLLRSVD1 string false true 0000
PORT.QPLLRSVD2 string false true 1F
QPLLREFCLKSEL enum false true GTREFCLK0
QPLL_N_DIVIDER enum false true 64
QPLL_REFCLK_DIV enum false true 1
STATUS string false true LOCKED
To report the properties of the HW_SIO_PLL object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_RX
Description
On the hardware device, each GT includes an independent receiver, hw_sio_rx, which consists of
a PCS and a PMA. High-speed serial data flows from traces on the board into the PMA of the
GTX/GTH transceiver RX, into the PCS, and finally into the FPGA logic.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14867-081315
And you can query the objects associated with a specific HW_SIO_RX:
Properties
You can use the report_property command to report the properties assigned to a specific
HW_SIO_RX object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information. The properties assigned to hw_sio_rx objects include the following, with
example values:
To report the properties for a HW_SIO_RX object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SIO_TX
Description
On the hardware device, each GT includes an independent transmitter, hw_sio_tx, which consists
of a PCS and a PMA. Parallel data flows from the device logic into the FPGA TX interface,
through the PCS and PMA, and then out the TX driver as high-speed serial data.
Related Objects
See Figure 26: Hardware SIO RX and TX Objects for an illustration of the relationship that the
HW_SIO_TX object has with other hardware objects. HW_SIO_TX objects are associated with
hw_server, hw_target, hw_device, hw_sio_ibert, hw_sio_gt, or hw_sio_link objects. You can query
the HW_SIO_TX objects of associated objects:
And you can query the objects associated with a specific HW_SIO_TX:
Properties
You can use the report_property command to report the properties assigned to a specific
HW_SIO_TX object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information. The properties assigned to HW_ILA objects include the following, with
example values:
localhost/xilinx_tcf/Digilent/210203327463A/0_1/IBERT/Quad_117/MGT_X0Y8/TX
PARENT string true true localhost/xilinx_tcf/Digilent/
210203327463A/0_1/IBERT/Quad_117/MGT_X0Y8
PORT.GTTXRESET string false true 0
PORT.TX8B10BBYPASS string false true FF
PORT.TX8B10BEN string false true 0
PORT.TXBUFDIFFCTRL string false true 4
PORT.TXBUFSTATUS string false true 0
PORT.TXCHARDISPMODE string false true 00
PORT.TXCHARDISPVAL string false true 00
PORT.TXCHARISK string false true 00
PORT.TXCOMFINISH string false true 0
PORT.TXCOMINIT string false true 0
PORT.TXCOMSAS string false true 0
PORT.TXCOMWAKE string false true 0
PORT.TXDEEMPH string false true 0
PORT.TXDETECTRX string false true 0
PORT.TXDIFFCTRL string false true C
PORT.TXDIFFPD string false true 0
PORT.TXDLYBYPASS string false true 1
PORT.TXDLYEN string false true 0
PORT.TXDLYHOLD string false true 0
PORT.TXDLYOVRDEN string false true 0
PORT.TXDLYSRESET string false true 0
PORT.TXDLYSRESETDONE string false true 0
PORT.TXDLYUPDOWN string false true 0
PORT.TXELECIDLE string false true 0
PORT.TXGEARBOXREADY string false true 0
PORT.TXHEADER string false true 0
PORT.TXINHIBIT string false true 0
PORT.TXMAINCURSOR string false true 00
PORT.TXMARGIN string false true 0
PORT.TXOUTCLKFABRIC string false true 1
PORT.TXOUTCLKPCS string false true 0
PORT.TXOUTCLKSEL string false true 2
PORT.TXPCSRESET string false true 0
PORT.TXPD string false true 0
PORT.TXPDELECIDLEMODE string false true 0
PORT.TXPHALIGN string false true 0
PORT.TXPHALIGNDONE string false true 0
PORT.TXPHALIGNEN string false true 0
PORT.TXPHDLYPD string false true 0
PORT.TXPHDLYRESET string false true 0
PORT.TXPHDLYTSTCLK string false true 0
PORT.TXPHINIT string false true 0
PORT.TXPHINITDONE string false true 0
PORT.TXPHOVRDEN string false true 0
PORT.TXPISOPD string false true 0
PORT.TXPMARESET string false true 0
PORT.TXPOLARITY string false true 0
PORT.TXPOSTCURSOR string false true 03
PORT.TXPOSTCURSORINV string false true 0
PORT.TXPRBSFORCEERR string false true 0
PORT.TXPRBSSEL string false true 0
PORT.TXPRECURSOR string false true 07
PORT.TXPRECURSORINV string false true 0
PORT.TXQPIBIASEN string false true 0
PORT.TXQPISENN string false true 0
PORT.TXQPISENP string false true 0
PORT.TXQPISTRONGPDOWN string false true 0
PORT.TXQPIWEAKPUP string false true 0
PORT.TXRATE string false true 0
PORT.TXRATEDONE string false true 0
To report the properties for a HW_SIO_TX object, you can copy and paste the following
command into the Vivado Design Suite Tcl shell or Tcl Console:
HW_SYSMON
Description
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_sysmon_reg
hw_probe hw_sio_gt hw_sio_linkgroup
hw_sio_pll
hw_axi_txn
hw_ila_data
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14868-081315
The HW_SYSMON has data registers, or HW_SYSMON_REG objects, that store the current
values of temperatures and voltages. The values in these registers on the current hw_device can
be accessed through the Hardware Manager feature of the Vivado Design Suite, when connected
to a hardware server and target. The HW_SYSMON varies between AMD Virtex™ 7 devices and
AMD UltraScale™ devices. Refer to the UltraScale Architecture System Monitor User Guide (UG580)
or the 7 Series FPGAs and Zynq 7000 SoC XADC Dual 12-Bit 1 MSPS Analog-to-Digital Converter
User Guide (UG480) or for more information on the specific registers of the XADC and how to
address them.
Although you can use the get_hw_sysmon_reg command to access the hex values stored in
registers of a system monitor, you can also retrieve values of certain registers as formatted
properties of the hw_sysmon object. For example, the following code retrieves the
TEMPERATURE property of the specified hw_sysmon object rather than directly accessing the
hex value of the register:
Related Objects
The HW_SYSMON object can be found in the Hardware Manager on the programmed
hw_device, on the current hw_target and hw_server. You can query the hw_sysmon of the
hw_device as follows:
Properties
You can use the report_property command to report the actual properties assigned to
HW_SYSMON objects. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for
more information.
To report the properties for the HW_SYSMON you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
HW_TARGET
Description
The hardware target, hw_target, is a system board containing a JTAG chain of one or more AMD
FPGA devices that you can program with a bitstream file, or use to debug your design.
Connections between hardware targets on the system board and the Vivado Design Suite are
managed by a hardware server object, hw_server.
Use the open_hw_target command to open a connection to one of the available hardware
targets. The open target is automatically defined as the current hardware target. The Vivado logic
analyzer directs programming and debug commands to FPGA objects, hw_device, on the open
target through the hw_server connection.
You can also open the hw_target using the -jtag_mode option of the open_hw_target
command, to put the target into JTAG test mode to access the Instruction Register (IR) and Data
Registers (DR) of the device or devices on the target. When the target is opened in JTAG mode, a
hw_jtag object is created in the Hardware Manager feature of the Vivado Design Suite, providing
access to the JTAG TAP controller.
Refer to Vivado Design Suite User Guide: Programming and Debugging (UG908) for a list of
supported JTAG download cables and devices.
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14869-081315
Hardware targets are associated with hardware servers, and can be queried as objects of the
hw_server object:
In addition, you can query the hardware devices associated with a hardware target:
When the target is opened in JTAG mode you can access the hw_jtag object created through the
HW_JTAG property on the target:
Properties
You can use the report_property command to report the properties assigned to a hw_target
object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information. The properties assigned to the hw_target object include the following, with example
values:
To report the properties for a hw_target, you can copy and paste the following command into the
Vivado Design Suite Tcl shell or Tcl Console:
HW_VIO
Description
The Virtual Input/Output (VIO) debug core, hw_vio, can both monitor and drive internal signals
on a programmed AMD FPGA in real time. In the absence of physical access to the target
hardware, you can use this debug feature to drive and monitor signals that are present on the
physical device.
The VIO core has hardware probes, hw_probe objects, to monitor and drive specific signals on
the design. Input probes monitor signals as inputs to the VIO core. Output probes drive signals to
specified values from the VIO core. Values on the probe are defined using the set_property
command, and are driven onto the signals at the probe using the commit_hw_vio command.
The VIO debug core must be instantiated in the RTL code, from the AMD IP catalog. Therefore
you need to know what nets you want monitor and drive prior to debugging the design. The IP
catalog provides the VIO core under the Debug category. Detailed documentation on the VIO
core can be found in the Virtual Input/Output LogiCORE IP Product Guide (PG159).
Related Objects
hw_cfgmem
hw_server hw_target hw_device
hw_bitstream
hw_sio_sweep
hw_sio_scan
hw_sio_link
hw_ila_data hw_axi_txn
hw_sio_tx hw_sio_rx
hw_sio_gtgroup
X14870-081315
VIO debug cores can be added to a design in the RTL source files from the AMD IP catalog.
Debug cores can be found in the synthesized netlist design using the get_debug_cores
command. These are not the hardware VIO debug core objects, hw_vio, found in the Hardware
Manager feature of the Vivado Design Suite, though they are related.
The hardware VIO debug core can be found in the Hardware Manager on the programmed
hardware device object, hw_device. You can query the hw_vio of the hw_device as follows:
In addition, the hw_vio debug core has probes associated with it, that can also be queried:
Properties
You can use the report_property command to report the properties assigned to a HW_VIO
object. Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for more
information.
To report the properties for a HW_VIO object, you can copy and paste the following command
into the Vivado Design Suite Tcl shell or Tcl Console:
IO_BANK
Description
The AMD 7 series FPGAs, and UltraScale architecture offer both high-performance (HP) and
high-range (HR) I/O banks. I/O banks are collections of I/O blocks (IOBs), with configurable
SelectIO™ drivers and receivers, supporting a wide variety of standard interfaces, both single-
ended and differential. The HP I/O banks are designed to meet the performance requirements of
high-speed memory and other chip-to-chip interfaces with voltages up to 1.8V. The HR I/O
banks are designed to support a wider range of I/O standards with voltages up to 3.3V.
Each I/O bank includes programmable control of output strength and slew rate, on-chip
termination using digitally-controlled impedance (DCI), and the ability to internally generate a
reference voltage (INTERNAL_VREF).
In UltraScale devices, most I/O banks consist of 52 IOBs, although HR I/O mini-banks consist of
26 IOBs. While in 7 series devices, most I/O banks include 50 IOBs, which matches the height of
a clock region. The number of I/O banks on the device depends upon the size and the package
pinout.
For more information on I/O banks, and the rules related to I/O assignments, refer to 7 Series
FPGAs SelectIO Resources User Guide (UG471) and UltraScale Architecture SelectIO Resources User
Guide (UG571).
Related Objects
Port
Pin
Clock
Bel Pin
PkgPin
_ByteGroup
Site Pip
I/O Bank
Tile
X14871-081315
From the figure above, you can see that I/O banks are related to the port netlist object, the
package_pin for the device, and the I/O standard being implemented by the I/O block. You can
get the io_banks of associated package_pins, ports, clock regions or sites:
You can also query the port, clock_region, site, SLR, I/O standard, package_pin,
pkgpin_bytegroup, and pkgpin_nibble objects associated with an I/O bank:
Properties
The properties found on I/O Bank objects are as follows, with example values:
IO_STANDARD
Description
IO_STANDARD objects define the available IOSTANDARDs supported by the target AMD
device. The IO_STANDARD object can be assigned to PORT objects through the IOSTANDARD
property to configure input, output, or bidirectional ports in the current design. For more
information on supported standards, refer to 7 Series FPGAs SelectIO Resources User Guide
(UG471) and UltraScale Architecture SelectIO Resources User Guide (UG571).
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14872-081315
You can query the IO_STANDARD associated with specific BELs, SITEs, PACKAGE_PINs,
IO_BANKs, or PORTs of interest:
You can also query the PORT objects that implement a specific IO_STANDARD:
TIP: In this case, the ports can also be found by looking at the IOSTANDARD property: get_ports -
filter {IOSTANDARD==POD12_DCI}.
Properties
The properties found on package_pin objects are as follows, with example values:
The properties of package_pin objects can be listed with the following command:
NET
Description
A net is a set of interconnected pins, ports, and wires. Every wire has a net name, which identifies
it. Two or more wires can have the same net name. All wires sharing a common net name are part
of a single NET, and all pins or ports connected to these wires are electrically connected.
A default net name is assigned to the NET object as it is added to the netlist design during
elaboration or compilation of the RTL source files into a netlist design. You can also manually
assign names to nets.
Nets can either be scalar nets, with a single signal, or can be bus nets, which are groups of scalar
nets with multiple signals. Buses are a convenient way to group related signals, allowing a less
cluttered, more understandable schematics. It also clarifies the connection between the main
circuit and a block symbol. Buses are especially useful for the following:
• Routing a number of signals from one side of the schematic to the other
• Connecting more than one signal to a block symbol
• Connecting more than one signal to pass between hierarchical levels by connecting to a single
I/O marker
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
Standard
X14873-081315
In the design netlist, a NET can be connected to the PIN of a CELL, or to a PORT. Net objects are
also associated with CLOCKs brought onto the design through PORTs, and to TIMING_PATHs in
the design. NETs can also be associated with DRC_VIOLATIONs to allow you to more quickly
locate and resolve design issues. You can query the nets associated with these different design
objects:
As the design is mapped onto the target AMD FPGA, the NET is mapped to routing resources
such as WIREs, NODEs, and PIPs on the device, and is connected to BELs through BEL_PINs, and
to SITEs through SITE_PINs. You can query the clock, pin, port, bel, bel_pin, site, site_pin, tile,
node, pip, wire associated with a specific net or nets in the design:
Properties
The specific properties on a net object can vary depending on the type of net the object
represents. The following table lists some of the properties assigned to a net object in the Vivado
Design Suite, with example values:
To report the properties for a net object, you can copy and paste the following command into the
Vivado Design Suite Tcl shell or Tcl Console:
NODE
Description
A NODE is a device object used for routing connections, or NETs, on the AMD part. It is a
collection of WIREs, spanning across multiple tiles, that are physically and electrically connected
together. A NODE can connect to a single SITE_PIN, or connect to no pins, serving instead to
simply carry NETs into, out of, or across the SITE. A NODE can connect to any number of PIPs,
and can also be driven by a tie-off.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14874-081315
As seen in the figure above, NODE objects are related to SLRs, TILEs, NETs, SITE_PINs, WIREs,
PIPs, and other NODEs. You can query the NODEs by using a form of the following Tcl
command:
You can also query the SLRs, and TILEs that NODEs are located in, or PIPs, SITE_PINS,
SPEED_MODELs, WIREs associated with specific NODEs:
Properties
The properties on a NODE object can be reported with a command such as the following:
TIP: Due to the number of NODEs on a device, using the get_nodes Tcl command without -
of_objects or a name delimiter to narrow the results is not recommended.
PACKAGE_PIN
Description
The PACKAGE_PIN object represents the physical pin on the AMD device package that is
associate with a specific input or output of the design. The assignment of I/O ports to a
package_pin is the subject of the Vivado Design Suite User Guide: I/O and Clock Planning (UG899).
The PACKAGE_PIN object can be assigned to PORT objects through the PACKAGE_PIN
property.
Related Objects
Port
Pin
Clock
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Site Pip
I/O Bank
Tile
I/O
SLR
Standard
X14875-081315
PACKAGE_PIN objects are associated with PORT objects in the design netlist, and with SITE,
BEL or IO_BANK objects on the target device. In addition, PACKAGE_PIN objects are associated
with PKGPIN_BYTEGROUP and PKGPIN_NIBBLE objects. The PACKAGE_PINs can be queried
through the use of the following Tcl command:
get_package_pins
You can also get the port, site, slr, io_bank, io_standard, pkgpin_bytegroup, phkgpin_nibble
associated with a specified package_pin:
TIP: In this case, the ports can also be found by looking at the PACKAGE_PIN property: get_ports -
filter {PACKAGE_PIN==AG17}.
Properties
The properties found on package_pin objects are as follows, with example values:
The properties of package_pin objects can be listed with the following command:
PIN
Description
A pin is a point of logical connectivity on a primitive or hierarchical cell. A pin allows the contents
of a cell to be abstracted away, and the logic simplified for ease-of-use. Pins can be scalar,
containing a single connection, or can be defined as bus pins to group multiple signals together.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
Standard
X14876-081315
A pin is attached to a cell and can be connected to pins on other cells by a net. The pins of cells
are also related to the bel_pins of the bel object, or site_pins of a SITE that the cell is mapped to.
Pins are associated with clocks as part of the clock domain, and are part of timing_paths when
defined as the start point, end point, or through point of the path.
Pins can also be associated with drc_violations to allow you to more quickly locate and resolve
design issues.
Properties
The PIN object includes a collection of properties that define the type of pin for clock and
control pins. You can use these attributes to filter the list of pins by type when writing Tcl scripts,
or working with PIN objects. The properties are listed in the following table.
Clock
Property Name Description Example
Relationship
IS_CLEAR Asynchronous Forces block output(s) to a 0 state. CLR pin in the FDCE
IS_CLOCK Reference The pin has a setup/hold or recovery/ The C pin on an
removal relationship with another pin, and FDRE
acts as the reference pin in that relationship.
IS_ENABLE Synchronous Control that allows or inhibits the data The CE pin on an
capture of a block. FDRE
IS_PRESET Asynchronous Forces block output(s) to a 1 state. The PRE pin on an
FDPE
IS_RESET Synchronous Changes block output(s) to a 0 state at next The R pin on an
clock. FDRE
IS_SET Synchronous Changes block output(s) to a 1 state at next The S pin on an FDSE
clock.
IS_SETRESET Programmable Programmable synchronous or The RSTRAMB pin on
asynchronous set/reset. The pin's behavior a RAMB36E2
is controlled by an attribute on the block.
IS_WRITE_ENABLE Synchronous Enable pin that allows or inhibits the write The WES pin on a
operation on a memory block. RAMB36E2
Beyond these properties that define the pin type, the various properties found on PIN objects
include the following:
PIP or SITE_PIP
Description
A PIP is a device object used for routing connections, or NETs, on the AMD part. A PIP, also
called an ARC, is a connection multiplexer that can be programmed to connect one WIRE to
another, thus connecting NODEs together to form the routing required for a specific NET in the
design.
A SITE_PIP, also known as a routing BEL, is a connection multiplexer inside a SITE that can
connect BEL_PINs to other BEL_PINs, or to SITE_PINs within the SITE.
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14877-081315
As seen in the figure above, PIP objects are related to SLRs, TILEs, NODEs, NETs, and WIREs. You
can query the PIPs using a form of the following Tcl command:
You can also query the SLRs, and TILEs that PIPs are located in; or the NODEs, SPEED_MODELs,
or WIREs associated with specific PIPs:
PIP Properties
The properties on a PIP object can be reported with a command such as the following:
TIP: Due to the number of PIPs on a device, using the get_pips Tcl command without -of_objects
or -filters to narrow the results is not recommended.
SITE_PIP Properties
The properties of the SITE_PIP can be reported with the following command:
The properties on the SITE_PIP include the following, with example values:
PKGPIN_BYTEGROUP
Description
For 7 series devices, the hierarchy of I/O banks is divided into two object types: I/O Banks and
Package Pins. For AMD UltraScale architecture, the I/O bank hierarchy includes two additional
divisions: bytegroups and nibbles. The relationships of these objects on an UltraScale device are
defined as follows:
• An IO_BANK of 52 pins has four pkgpin_bytegroups, while a mini IO_BANK of 26 pins has
two bytegroups.
• Each pkgpin_bytegroup has 13 package pins, and has two pkgpin_nibbles, an upper and lower.
• Each pkgpin_nibble has six or seven pins, and is the upper or lower nibble of the
pkgpin_bytegroup.
• A package_pin is one pin of an iobank, a pkgpin_bytegroup, or a pkgpin_nibble.
In UltraScale, the bitslice logic connected to I/O banks is grouped into pkgpin_bytegroups and
pkgpin_nibbles. These objects aid in the placement of related I/O pins, such as groups of
bitslices. For instance, you can use bytegroups and nibbles for I/O pin assignment of memory
controllers on UltraScale devices. You can perform interactive I/O planning by opening either the
elaborated RTL design or the synthesized design in the Vivado IDE, using the Memory Bank/Byte
Planner, which enables automatic or manual assignment of memory I/O pin groups to I/O banks
and byte lanes. This process is discussed in detail at this Vivado Design Suite User Guide: I/O and
Clock Planning (UG899).
Port
Pin
Clock
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Site Pip
I/O Bank
Tile
I/O
SLR
Standard
X14878-081315
Related Objects
You can also get the list of package_pin objects assigned to specific pkgpin_bytegroups:
Properties
The properties found on PKGPIN_BYTEGROUP objects are as follows, with example values:
The properties of the bytegroup objects can be listed with the following command:
PKGPIN_NIBBLE
Description
Related Objects
Port
Pin
Clock
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Site Pip
I/O Bank
Tile
I/O
SLR
Standard
X14880-081315
You can also get the list of package_pin objects assigned to specific pkgpin_nibbles:
Properties
The properties found on pkgpin_nibble objects are as follows, with example values:
The properties of pkgpin_nibble objects can be listed with the following command:
PORT
Description
A port is a special type of hierarchical pin, providing an external connection point at the top-level
of a hierarchical design, or an internal connection point in a hierarchical cell or block module to
connect the internal logic to the pins on the hierarchical cell. Ports can be scalar, containing a
single connection, or can be bus ports to group multiple signals together.
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14881-081315
Related Objects
Ports at the top level of the design make connection outside the FPGA through the
PACKAGE_PINs of the device package, to IO_BANKs on the die, with assigned IOSTANDARDs.
Ports can also carry clock definitions onto the design from the system or board, and should be
assigned external system-level path delay using the set_input_delay or
set_output_delay constraints. Refer to the Vivado Design Suite User Guide: Using Constraints
(UG903) for more information on these constraints.
You can query the ports assigned to specific package_pins, IO_banks, IO_Standards, sites, cells,
nets, clocks, timing_paths, or drc_violations using a Tcl command like the following:
Inside the design, ports are connected to cells, through nets, to build the hierarchical netlist. You
can query the objects associated with a port, such as net, timing_path, site, io_bank, io_standard,
package_pin, pkgpin_bytegroup, pkgpin_nibble, using the following form of command:
Properties
The properties found on ports objects are as follows, with example values:
SITE
Description
A SITE is a device object representing one of many different types of logic resources available on
the target AMD FPGA. SITEs include SLICE/CLBs which are collections of basic logic elements
(BELs) like look-up-tables (LUTs), flip-flops, muxes, carry logic resources to implement fast
addition, subtraction, or comparison operations. SLICE/CLBs have wide multiplexers, and
dedicated carry chains running vertically from SLICE to SLICE.
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14882-081315
Two SLICEs are grouped together into a configurable logic block (CLB) in 7 series FPGAs.
Two CLBs are grouped together into one TILE object on the device. Each UltraScale architecture
CLB contains one SLICE. See the 7 Series FPGAs Configurable Logic Block User Guide (UG474) or
UltraScale Architecture Configurable Logic Block User Guide (UG574) for more information.
SITEs also contain varied device resources such as block RAM, DSPs, I/O blocks, Clock resources,
and GT blocks.
You utilize device resources by inference from the HDL source by Vivado synthesis, or by
instantiating a primitive or macro from the FPGA library, or an IP core from the Vivado IP catalog.
The Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide (UG953) and UltraScale
Architecture Libraries Guide (UG974) describe the list of primitives that can be instantiated.
The available SITE types vary depending on the AMD device in use. Some of the SITE types
include:
AMS_ADC AMS_DAC
BSCAN BSCAN_JTAG_MONE2
BUFG BUFGCTRL BUFG_LB BUFHCE
BUFIO BUFMRCE BUFR
CAPTURE
DCIRESET DNA_PORT
DRP_AMS_ADC DRP_AMS_DAC
DSP48E1
EFUSE_USR
FIFO18E1 FIFO36E1
FRAME_ECC
GLOBALSIG
GTHE2_CHANNEL GTHE2_COMMON
GTPE2_CHANNEL GTPE2_COMMON
GTXE2_CHANNEL GTXE2_COMMON
GTZE2_OCTAL
IBUFDS_GTE2 ICAP
IDELAYCTRL IDELAYE2 IDELAYE2_FINEDELAY
ILOGICE2 ILOGICE3
IN_FIFO
IOB IOB18 IOB18M IOB18S
IOB33 IOB33M IOB33S
IOBM IOBS
IPAD ISERDESE2
KEY_CLEAR
MMCME2_ADV
ODELAYE2 ODELAYE2_FINEDELAY
OLOGICE2 OLOGICE3
OPAD
OSERDESE2
OUT_FIFO
PCIE_2_1 PCIE_3_0
PHASER_IN PHASER_IN_ADV PHASER_IN_PHY
PHASER_OUT PHASER_OUT_ADV PHASER_OUT_PHY
PHASER_REF
PHY_CONTROL
PLLE2_ADV
PMV2
RAMB18E1 RAMB36E1 RAMBFIFO36E1
SLICEL SLICEM
STARTUP TIEOFF
USR_ACCESS
XADC
Related Objects
As seen in the figure above, SITEs are related to many different netlist and device objects. Leaf-
CELLs like flops and latches are mapped to BELs which are in turn mapped to SITEs like SLICEL
and SLICEM, or are mapped directly to SITEs such as BRAMs and DSPs. BELs and SITEs are
grouped into TILEs, and are assigned to CLOCK_REGIONs and SLRs on the device. PORTs, PINs,
IO_BANKs, and PACKAGE_PINs relate to IO blocks (IOBs) which are also SITEs. SITEs also have
pins, or SITE_PINs, that map to NODEs, PIPs, PINs, and NETs. You can query the sites associated
with any of these objects as follows:
You can also use the SITE to query associated objects such as CELL, PORT, BEL, BEL_PIN,
CLOCK_REGION, SITE_PIN, SLR, TILE, IO_BANK, IO_STANDARD, PACKAGE_PIN,
PKGPIN_BYTEGROUP, PKGPIN_NIBBLE, PIP, and SITE_PIP. For example:
Properties
There are over 80 different SITE types on AMD FPGA devices, but they all share the following
properties, with example values provided:
The properties assigned to SITE objects are the same for all SITE_TYPEs. To report the properties
for any of the SITE_TYPEs listed above, you can use the report_property command:
Where <SITE_TYPE> should be replaced by one of the listed SITE types. For example:
SLR
Description
A Super Logic Region (SLR) is a single FPGA die slice contained in an stacked silicon interconnect
(SSI) device. Stacked silicon interconnect (SSI) technology uses passive silicon interposers with
microbumps and through-silicon vias (TSVs) to combine multiple FPGA die slices, referred to as
super logic regions (SLRs), into a single package.
Each SLR contains the active circuitry common to most AMD FPGA devices, and are connected
through super long lines (SLLs) found on the silicon interposers. Refer to this UltraFast Design
Methodology Guide for FPGAs and SoCs (UG949) for more information on working with SSI
components.
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site/CLB Site Pin
Pin
Tile
I/O
SLR
Standard
X14884-081315
Related Objects
Super logic regions (SLRs) are die slices of AMD FPGA architecture or devices. As shown in the
following figure, each SLR contains clock regions, tiles, sites, site pins, bels, bel pins, nodes, pips,
cells, pins, I/O banks, and package pins. You can find the SLRs associated with each of these
different types of objects, with a Tcl command such as the following, that returns the SLR that
the specified cell is assigned to:
You can also query the clock regions, tiles, sites, or bels associated with an SLR. The following Tcl
command gets I/O banks of the clock regions associated with a specific SLR:
Properties
You can use the report_property command to report the properties of an SLR. Refer to the
Vivado Design Suite Tcl Command Reference Guide (UG835) for more information. The properties
on the SLR object include the following, with example values:
To report the properties for a specific SLR, you can copy and paste the following command into
the Vivado Design Suite Tcl shell or Tcl Console:
TILE
Description
A TILE is a device object containing one or more SITE objects. Programmable logic TILEs include
diverse objects such as SLICE/CLBs, BRAM, DSPs, I/O Blocks, Clock resources, and GT blocks.
Structurally, each tile has a number of inputs and outputs and the programmable interconnect to
connect the inputs and outputs of a tile to any other tile.
There are many different types of TILEs, depending on the AMD device in use. Available
TILE_TYPEs include the following:
AMS_ADC_TOP AMS_BRAM
AMS_CLB_INTF_IOB AMS_CLK AMS_CMT
AMS_DAC_TOP AMS_DRP_ADC_TOP AMS_DRP_DAC_TOP
AMS_DSP AMS_INT AMS_INT_L AMS_INT_R
AMS_IOI AMS_VBRK_INTF
BRAM_INT_INTERFACE_L BRAM_INT_INTERFACE_R
BRAM_L BRAM_R
BRKH_BRAM BRKH_B_TERM_INT
BRKH_CLB BRKH_CLK BRKH_CMT
BRKH_DSP_L BRKH_DSP_R BRKH_GTX
BRKH_INT BRKH_TERM_INT B_TERM_INT B_TERM_INT_SLV
CFG_CENTER_BOT CFG_CENTER_MID
CFG_CENTER_MID_SLAVE CFG_CENTER_TOP CFG_CENTER_TOP_SLAVE
CLBLL_L CLBLL_R CLBLM_L CLBLM_R
CLK_BALI_REBUF CLK_BALI_REBUF_GTZ_BOT CLK_BALI_REBUF_GTZ_TOP
CLK_BUFG_BOT_R CLK_BUFG_REBUF CLK_BUFG_TOP_R
CLK_FEED
CLK_HROW_BOT_R CLK_HROW_TOP_R
CLK_MTBF2
CLK_PMV CLK_PMV2 CLK_PMV2_SVT CLK_PMVIOB
CLK_TERM
CMT_FIFO_L CMT_FIFO_R
CMT_PMV CMT_PMV_L
CMT_TOP_L_LOWER_B CMT_TOP_L_LOWER_T
CMT_TOP_L_UPPER_B CMT_TOP_L_UPPER_T
CMT_TOP_R_LOWER_B CMT_TOP_R_LOWER_T
CMT_TOP_R_UPPER_B CMT_TOP_R_UPPER_T
DSP_L DSP_R
GTH_CHANNEL_0 GTH_CHANNEL_1 GTH_CHANNEL_2 GTH_CHANNEL_3 GTH_COMMON
GTH_INT_INTERFACE GTH_INT_INTERFACE_L
GTX_CHANNEL_0 GTX_CHANNEL_1 GTX_CHANNEL_2 GTX_CHANNEL_3 GTX_COMMON
GTX_INT_INTERFACE GTX_INT_INTERFACE_L
GTZ_BOT GTZ_BRAM
GTZ_CLB_INTF_IOB GTZ_CLK GTZ_CLK_B GTZ_CMT
GTZ_DSP
GTZ_INT GTZ_INT_L GTZ_INT_LB GTZ_INT_R GTZ_INT_RB
GTZ_IOI GTZ_TOP GTZ_VBRK_INTF
HCLK_BRAM HCLK_CLB
HCLK_CMT HCLK_CMT_L
HCLK_DSP_L HCLK_DSP_R
HCLK_FEEDTHRU_1 HCLK_FEEDTHRU_2
HCLK_FIFO_L
HCLK_GTX
HCLK_INT_INTERFACE HCLK_IOB
HCLK_IOI HCLK_IOI3
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
Region
Wire
Package
Site Site Pin
Pin
Tile
I/O
SLR
Standard
X14885-081315
Related Objects
TILE objects are associated with SLR, CLOCK_REGION, SITE, SITE_PIN, BEL and BEL_PIN device
resources, with NODE, WIRE, and PIP routing resources, and with the NET netlist object.
For example, you can query the TILE of a related object using the following command, which
returns the tiles the specified net travels through:
In addition, you can query the SLR, CLOCK_REGION, NODE, PIP, WIRE, SITE, BEL, and NET
objects associated with or found in a TILE.
Properties
Although there are many different types of TILE objects, as represented by the TILE_TYPE
property, all TILE objects have the same set of properties.
You can use the report_property command to report the properties of a TILE object. Refer to
the Vivado Design Suite Tcl Command Reference Guide (UG835) for more information.
The properties on a CLBLL type of TILE object include the following, with example values:
To report the properties for any of the TILE_TYPEs listed previously, you can use the following
form of the report_property command:
Where <SITE_TYPE> should be replaced by one of the listed SITE types. For example:
TIMING_PATH
Description
Timing paths are defined by connections between elements of the design. In digital designs,
timing paths are formed by a pair of sequential elements controlled by the same clock, or by two
different clocks to launch and capture the signal.
In a typical timing path, the data is transferred between two sequential cells within one clock
period. For example, the launch edge occurs at time 0 ns; and the capture edge occurs one
CLOCK period later.
Each timing path is defined by unique startpoints, throughpoints, and endpoints. A path
startpoint is a sequential cell clock pin or a data input port; and a path endpoint is a sequential
cell data input pin or a data output port.
TIMING_PATH objects can be selected or specified with varying degrees of details. A single
unique timing path is defined by a combination of startpoint, throughpoint, and endpoint.
Multiple timing paths can be specified from a common startpoint, or a common endpoint.
Constraints can be applied to timing paths as determined by the definition of the timing path.
The order of precedence for constraints applied to timing paths, from highest to lowest, is as
follows:
For more information on timing paths refer to Vivado Design Suite User Guide: Design Analysis and
Closure Techniques (UG906).
Related Objects
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14886-081315
TIMING_PATH objects can be queried using the get_timing_paths command. This allows
you to specify timing paths using related CLOCK, PIN, PORT, or CELL objects to identify
startpoints, throughpoints, or endpoints on the paths of interest.
In addition, you can query the CELL, NET, PIN, or PORT objects associated with specified timing
paths:
Properties
The properties on a TIMING_PATH object include the following, with example values:
The properties of TIMING_PATH objects can be reported with the following command:
WIRE
Description
A WIRE is a device object used for routing connections, or NETs, on the AMD part. A WIRE is a
strip of interconnect metal inside a single tile. Wires connect between PIPs, tie-offs, and
SITE_PINs.
TIP: The WIRE object should not be confused with the wire entity in the Verilog files of a design. Those
wires are related to NETs in the design rather than the routing resources of the device which are defined by
the WIRE object.
Net
Port
Pin
Clock
Timing Node
Cell
Path
Bel Pin
Clock
Bel
PkgPin Region
_Nibble
Wire
Package
Site/CLB Site Pin
Pin
PkgPin
_ByteGroup
Tile
I/O
SLR
Standard
X14887-081315
Related Objects
As seen in the above figure, WIRE objects are related to TILEs, NODEs, PIPs, or NETs. You can
query WIREs using a form of the following Tcl command:
You can also query the TILEs that WIREs are located in; or the NODEs and PIPs associated with
specific WIREs:
Properties
The properties on a WIRE object can be reported with a command such as the following:
TIP: Due to the number of WIREs on a device, using the get_wires Tcl command without -
of_objects or -filters to narrow the results is not recommended.
Chapter 3
Properties Information
This chapter provides information about AMD Vivado™ Design Suite properties. The entry for
each property contains the following information, where applicable:
Note: When a property is defined in both HDL code and as a constraint in the XDC file, the XDC property
takes precedence and overrides the HDL property.
For more information on the use of these properties within the Vivado Design Suite, refer to the
Vivado Design Suite User Guide: Using Constraints (UG903).
ASYNC_REG
IMPORTANT! If ASYNC_REG and IOB are both assigned to a register, the IOB property takes precedence
over ASYNC_REG and the register is placed in an ILOGIC block rather than into SLICE/CLB logic.
ASYNC_REG is an attribute that affects many processes in the Vivado tools flow. ASYNC_REG
specifies that:
• A register can receive asynchronous data on the D input pin relative to its source clock.
• A register is a synchronizing register within a synchronization chain.
I 0 I 0 clk
clk1 C sync 0 C
_n0017_inv1
CE CE
IBUF1 BUFG1 Q Q I0 0
C
CLR CLR
CE I1
D Q D
CLR LUT2
en
FDCE D FDCE
FDCE
sender
receiver_1
IBUF BUFG
I 0 I 0
clk2
X14888-081315
During simulation, when a timing violation occurs, the default behavior is for a register element
to output an 'X', or unknown state (not a 1 or 0). When this happens, anything that element
drives will see an 'X' on its input and in turn enters an unknown state. This condition can
propagate through the design, in some cases causing large sections of the design to become
unknown, and sometimes the simulator can not recover from this state. ASYNC_REG modifies
the register to output the last known value even though a timing violation occurs.
Vivado synthesis treats the ASYNC_REG property like the DONT_TOUCH property, and pushes
it forward in the synthesized netlist. This ensures that synthesis will not optimize registers or
surrounding logic, and that downstream tools in the design flow receive the ASYNC_REG
property for processing.
Specifying ASYNC_REG also affects optimization, placement, and routing to improve mean time
between failure (MTBF) for registers that can go metastable. If ASYNC_REG is applied, the placer
will ensure the flip-flops on a synchronization chain are placed closely together to maximize
MTBF. Registers that have this property that are directly connected will be grouped and placed
together into a single SLICE/CLB, assuming they have a compatible control set and the number
of registers does not exceed the available resources of the SLICE/CLB.
Note: For UltraScale devices, mean time between failures (MTBF) can be reported for synchronizing
registers identified with ASYNC_REG using the report_synchronizer_mtbf command.
The following is a Verilog example of a two FF, or one-stage synchronizer, as shown in the
preceding figure. The registers synchronize a signal from a separate clock domain. The
ASYNC_REG property is attached to synchronizing stages with a value of TRUE:
TIP: The ASYNC_REG property can also be used with SystemVerilog logic syntax: (* ASYNC_REG =
"TRUE" *) logic sync_0, sync_1; -or- (* ASYNC_REG = "TRUE" *) output logic
sync_0, sync_1,.
With the ASYNC_REG property, the registers are grouped so that they are placed as closely
together as possible.
Architecture Support
All architectures.
Applicable Objects
Values
• FALSE: The register can be optimized away, or absorbed into a block such as SRL, DSP, or
RAMB. No special simulation, placement, or routing rules will be applied to it (default).
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation or reg declaration of a
register:
(* ASYNC_REG = "{TRUE|FALSE}" *)
• VHDL Syntax:
Declare and specify the VHDL attribute as follows for inferred logic:
Where name is the declared signal that will be inferred to a synchronizer register, or the
instance name of an instantiated register.
• XDC Syntax:
Affected Steps
• launch_xsim
• Synthesis
• Place Design
• Route Design
• Phys Opt Design
• Power Opt Design
• report_drc
• write_verilog
• write_vhdl
Related Information
IOB
AUTO_INCREMENTAL_CHECKPOINT
The AUTO_INCREMENTAL_CHECKPOINT property is a boolean property that enables or
disables the automatic incremental implementation flow, to reuse the placement and routing
from an earlier iteration of the current design. This property works with the
INCREMENTAL_CHECKPOINT property to manage incremental implementation in the Vivado
tools. Refer to this Vivado Design Suite User Guide: Implementation (UG904) for more information.
TIP: The AUTO_INCREMENTAL_CHECKPOINT property is only supported in the Vivado tools project-
mode. To reuse prior placement and routing results in non-project mode use the read_checkpoint -
incremental command.
• Automatic reuse of the prior placement and routing of the current design. Enable the
AUTO_INCREMENTAL_CHECKPOINT property.
• Manual reuse of the placement and routing data from a prior implementation of a specified
design checkpoint. Disable the AUTO_INCREMENTAL_CHECKPOINT property, and specify
the INCREMENTAL_CHECKPOINT property.
• Disabled so there is no incremental implementation. Disable the
AUTO_INCREMENTAL_CHECKPOINT property, and do not specify the
INCREMENTAL_CHECKPOINT property.
Architecture Support
All architectures.
Applicable Objects
Values
• 1: Enables the automatic incremental implementation design flow. This lets the Vivado
placement and routing tools reuse the placement and routing from prior implementations of
the current design, to speed processing of the design.
• 0: Disables the automatic incremental implementation design flow. This is the default setting.
Syntax
Not applicable.
• XDC Syntax:
Where <impl_run> is the name of an implementation run in the current design or project.
TIP: You can use the -filter {IS_IMPLEMENTATION} option for the get_runs command to
get just implementation runs.
Affected Steps
• Implementation
Related Information
INCREMENTAL_CHECKPOINT
AUTOPIPELINE_GROUP
The AUTOPIPELINE_GROUP property (see AUTOPIPELINE_MODULE,
AUTOPIPELINE_INCLUDE, AUTOPIPELINE_LIMIT) is used to define a group of nets as the
objects of auto-pipelining optimization. When this optimization feature is triggered, it will insert
and place the additional pipeline stages based on setup timing slack and SLR distance. See “Auto-
Pipelining” in Vivado Design Suite User Guide: Implementation (UG904) for more information.
Architecture Support
Applicable Objects
• Nets (get_nets)
• Cells (get_cells)
Each single net should be directly driven by a flip-flop, and the fanout load can only be 1.
Value
<group_name>: This is a unique string value that can be assigned to one or more nets. The placer
will take the specified objects as one whole group to implement the auto-pipeline insertion. The
signals with a same auto-pipeline group name must receive an equal number of auto-inserted
pipeline flip-flops.
Syntax
Affected Steps
• Place Design
• Phys Opt Design
AUTOPIPELINE_MODULE
The AUTOPIPELINE_MODULE property establishes a separate name-space for all group names
defined throughout sub-hierarchies. It must be set on the hierarchy which includes the nets
tagged with AUTOPIPELINE_GROUP and AUTOPIPELINE_LIMIT. It also must be used when a
module with auto-pipelining properties is instantiated several times in the design. See “Auto-
Pipelining” in Vivado Design Suite User Guide: Implementation (UG904) for more information.
Architecture Support
Applicable Objects
Hierarchical cells.
Value
• <False>: No auto-pipelining insertion happens in the specified module. This is the default
mode.
Syntax
Affected Steps
• Place Design
• Phys Opt Design
AUTOPIPELINE_INCLUDE
The AUTOPIPELINE_INCLUDE property specifies the name of another AUTOPIPELINE_GROUP
to include when applying the AUTOPIPELINE_LIMIT. The normal usage scenario is in the forward
and response shakehands protocal paths, one direction is defined as a “forward” group using
AUTOPIPELINE_GROUP, and the other direction is defined as a primary “response” group using
AUTOPIPELINE_GROUP, while adding reference to the forward group, so the round-trip path
would share the maximum limit as defined.
Architecture Support
Applicable Objects
• Nets (get_nets)
• Cells (get_cells)
Each single net should be directly driven by a flip-flop, and the fanout load can only be 1.
Value
<group_name>: This is a unique string value that can be assigned to one or more nets. The
signals with a same auto-pipeline include group name must receive an equal number of auto-
inserted pipeline flip-flops.
Syntax
The sub_group is included in the primary_group, and shares the maximum limit of 12 stages.
Affected Steps
• Place Design
• Phys Opt Design
AUTOPIPELINE_LIMIT
The AUTOPIPELINE_LIMIT property specifies the maximum limitation for the pipeline stages to
be inserted by the optimization techniques.
Architecture Support
Applicable Objects
• Nets (get_nets)
• Cells (get_cells)
Each single net should be directly driven by a flip-flop, and the fanout load can only be 1.
Value
Syntax
Affected Steps
• Place Design
• Phys Opt Design
BEL
BEL specifies the placement of a leaf-level Cell within a SLICE/CLB, or other site which can
contain multiple cells. BEL is typically used with an associated LOC property to specify the exact
placement of a register or LUT.
IMPORTANT! The BEL property or constraint must be defined prior to the LOC property or constraint, or
a placement error is returned.
Architecture Support
All architectures.
Applicable Objects
• Cells (get_cells)
○ Register (FD, FDCE, FDPE, FDRE, FDSE)
Value
BEL = <name> BEL names can take many different forms depending on the specific logic
contents of the BEL. BEL names can also hierarchically include the SITE name for the BEL. For
instance, some valid BEL names are BSCAN_X0Y0/BSCAN, and SLICE_X1Y199/A5FF.
Syntax
• VHDL Syntax:
Where signal_name is the signal name of an inferred register, LUT, SRL, or LUTRAM.
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation. The Verilog attribute can also
be placed before the reg declaration of an inferred register, SRL, or LUTRAM.
(* BEL = "site_name" *)
• XDC Syntax:
Affected Steps
• Design Floorplanning
• Place Design
Related Information
LOC
BLACK_BOX
The BLACK_BOX attribute is a useful debugging attribute that can turn a whole level of hierarchy
off and enable synthesis to create a black box for that module or entity. When the attribute is
found, even if there is valid logic for a module or entity, Vivado synthesis creates a black box for
that level. This attribute can be placed on a module, entity, or component.
IMPORTANT! Because this attribute affects the synthesis compiler, it can only be set in the RTL.
For more information regarding coding style for Black Boxes, refer to Black Boxes in Vivado
Design Suite User Guide: Synthesis (UG901).
Architecture Support
All architectures.
Applicable Objects
Value
YES | TRUE: Specifies that the module or entity should be viewed as a black box and not
expanded as part of the elaborated or synthesized design.
IMPORTANT! To disable the black box feature, remove the BLACK_BOX attribute from the RTL module or
entity. Do not simply set the attribute to NO or FALSE.
Syntax
• VHDL Syntax:
• Verilog Syntax:
In Verilog, the BLACK_BOX attribute on the module does not require a value. Its presence
defines a black box.
• XDC Syntax:
Not Applicable
Affected Steps
• Synthesis
BLI
The Boundary Logic Interface (BLI) constraint instructs the Vivado placer to place a flip flop cell
into the BLI resources that exist at the interface between Programmable Logic and XPIO/
AI Engine resources. BLI resources can help optimize the timing of the interface. The Vivado
placer will only place the flip-flop cell into the BLI resource if connectivity, control set, and initial
value criteria are met.
Architecture Support
Applicable Objects
Value
• TRUE: The flip-flop cell will be placed into the BLI resource if connectivity, control set, and
initial value criteria are met.
• FALSE: The flip-flop cell will not be placed into the BLI resource (default).
Syntax
• VHDL Syntax:
Not applicable
• Verilog Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Implementation
See Also
BLOCK_SYNTH
The BLOCK_SYNTH property lets you assign synthesis properties to an instance of a hierarchical
module in the design, to provide a greater degree of control over global synthesis. With
BLOCK_SYNTH you can specify different optimizations for two different instances of the same
module, and process them during global synthesis.
By setting a BLOCK_SYNTH on an instance, you will be affecting that instance and everything
below it. For example, if a hierarchical module has other modules nested within it, those modules
are also affected by the BLOCK_SYNTH property. However, you can also assign another
BLOCK_SYNTH property to the nested module to change its settings, or restore it to the default
value.
When working with IP, you can use the BLOCK_SYNTH property when the IP is specified for
global synthesis.
IMPORTANT! If the IP is specified for out-of-context (OOC) synthesis, the BLOCK_SYNTH property is
ignored.
You can use the block-level synthesis strategy to synthesize different levels of hierarchy with
different synthesis options in a top-down flow. You can specify constraints for the full design,
and also specify unique constraints for specific instances of hierarchical modules. For more
information on block-level synthesis, refer to Vivado Design Suite User Guide: Synthesis (UG901).
Architecture Support
All architectures.
Applicable Objects
Note: Set the property on a cell instance, and not on an entity or module name.
Value
Syntax
• VHDL Syntax:
Not applicable
• Verilog Syntax:
Not applicable
• XDC Syntax:
Set the BLOCK_SYNTH property in the XDC file using the following syntax:
Where:
Affected Steps
• Synthesis
BUFFER_TYPE
This property has been deprecated, and is replaced by the CLOCK_BUFFER_TYPE and
IO_BUFFER_TYPE properties.
CARRY_REMAP
The opt_design -carry_remap option lets you remap single CARRY* cells into LUTs to
improve the routing results of the design. When using the -carry_remap option, only single-
stage carry chains are converted to LUTs. The CARRY_REMAP property lets you specify carry
chains of greater length to be converted during optimization.
You can control the conversion of individual carry chains of any length by using the
CARRY_REMAP cell property. The CARRY_REMAP property value is an integer that specifies the
maximum carry chain length to be mapped to LUTs. The CARRY_REMAP property is applied to
CARRY* primitives within a chain, and each cell must have the same value to be converted to
LUTs during optimization.
IMPORTANT! Each CARRY cell in a carry chain must have the same CARRY_REMAP value. If at least one
of the cascaded cells cannot be remapped due to presence of the DONT_TOUCH property, then the entire
chain cannot be remapped. A warning will be issued when this occurs.
Refer to the Vivado Design Suite User Guide: Synthesis (UG901) for more information on
optimization.
Architecture Support
All architectures.
Applicable Objects
Value
<VALUE>: Specify an integer value that indicates the length of the carry chain that can be
converted to LUTs during opt_design.
Syntax
• VHDL Syntax:
Not applicable
• Verilog Syntax:
Not applicable
• XDC Syntax:
Affected Steps
Related Information
DONT_TOUCH
LUT_REMAP
MUXF_REMAP
CASCADE_HEIGHT
The CASCADE_HEIGHT attribute is an integer used to describe the length of the cascade chains
of large RAMS that are put into block RAMs. When an inferred RAM is deeper than a single RAM
block, the Vivado synthesis tool can map the array to a cascade of RAM blocks instead.
Often, the Vivado synthesis tool chooses to cascade the block RAMs that it creates. This
attribute can be used to shorten or limit the length of the chain. A value of 0 or 1 for this
attribute effectively turns off any cascading of block RAMs.
This attribute can be placed on the RAM array in the RTL source files, or in an XDC file, to drive
synthesis.
Architecture Support
Applicable Objects
Value
Syntax
• VHDL Syntax:
• Verilog Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
CELL_BLOAT_FACTOR
The CELL_BLOAT_FACTOR property lets you specify the addition of “whitespace” or increased
cell spacing to increase placement distance between the cells of a hierarchical module. The
Vivado placer will space out the cells in the module to improve routing results of the design.
You can use cell bloating, when the placement of cells from a module is close together and
causing congestion, to insert whitespace during the placement step. This leads to a lower density
of cells in a given area of the die, which can reduce congestion by increasing available routing
resources. This technique is particularly effective in small, congested areas of relatively high-
performance logic.
TIP: The unused logic between cells of a module can be used by the Vivado placer for other cells that are
not contained in the hierarchical module.
To use cell bloating, apply the CELL_BLOAT_FACTOR property to cells and set the value to LOW,
MEDIUM, or HIGH.
HIGH is the recommended setting when working with smaller modules of several hundred cells.
Using cell bloating on larger modules might force the placed cells of the module to be too far
apart.
IMPORTANT! If the device already uses too many routing resources, cell bloating is not recommended.
Architecture Support
All architectures.
Applicable Objects
Cells (get_cells)
Value
LOW | MEDIUM | HIGH: Specifies the relative spacing between the cells of an hierarchical
module.
TIP: The property can be applied to both hierarchical and leaf level cells. However, it is recommended to
apply the property to hierarchical cells ONLY for better compile time and memory consumption.
Syntax
• VHDL Syntax:
Not applicable
• Verilog Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
• Routing (Route Design)
CFGBVS
AMD devices support configuration interfaces with 3.3V, 2.5V, 1.8V, or 1.5V I/O. The
configuration interfaces include the JTAG pins in bank 0, the dedicated configuration pins in bank
0, and the pins related to specific configuration modes in bank 14 and bank 15 in 7 series
devices, and bank 65 in the UltraScale architecture.
To support the appropriate configuration interface voltage on bank 0, the Configuration Bank
Voltage Select pin (CFGBVS) must be set to VCCO_0 or GND to configure I/O Bank 0 for either
3.3V/2.5V or 1.8V/1.5V operation respectively. The CFGBVS is a logic input pin referenced
between VCCO_0 and GND. When the CFGBVS pin is connected to the VCCO_0 supply, the I/O
on bank 0 support operation at 3.3V or 2.5V during configuration. When the CFGBVS pin is
connected to GND, the I/O in bank 0 support operation at 1.8V or 1.5V during configuration.
The CFGBVS pin setting determines the I/O voltage support for bank 0 at all times. For 7 series
devices in which bank 14 and bank 15 are the HR bank type, or bank 65 in UltraScale
architecture, the CFGBVS pin and the respective CONFIG_VOLTAGE property determine the I/O
voltage support during configuration.
IMPORTANT! When the CFGBVS pin is set to GND for 1.8V/1.5V I/O operation, the VCCO_0 supply and
I/O signals to Bank 0 must be 1.8V (or lower) to avoid damage to the AMD FPGA.
Refer to the 7 Series FPGAs Configuration User Guide (UG470), or the UltraScale Architecture
Configuration User Guide (UG570) for more information on Configuration Bank Voltage Select.
The Report DRC command checks the CFGBVS and CONFIG_VOLTAGE properties to determine
the compatibility of CONFIG_MODE setting on the current design.
Architecture Support
All architectures.
Applicable Objects
Designs (current_design)
Value
Syntax
• VHDL Syntax:
Not applicable
• Verilog Syntax:
Not applicable
Affected Steps
• I/O Planning
• Report DRC
• Write Bitstream
Related Information
CONFIG_MODE
CONFIG_VOLTAGE
CLOCK_BUFFER_TYPE
By default, Vivado synthesis infers an input buffer and global clock buffer (IBUF/BUFG)
combination for clocks ports. However, you can use the IO_BUFFER_TYPE and the
CLOCK_BUFFER_TYPE properties together to direct the Vivado synthesis tool to change the
default buffer types, to an IBUF/BUFR pair, no input buffer with a BUFIO clock buffer, or to
eliminate the buffers Zynq UltraScale+ MPSoCaltogether.
Mandatory logic optimization (MLO), which occurs at the beginning of link_design and
opt_design supports the use of the CLOCK_BUFFER_TYPE property to insert global clock
buffers. Commonly used values include BUFG for 7 series, and BUFG and BUFGCE for
UltraScale, UltraScale+, and Versal devices. The value NONE can be used for all architectures to
suppress global clock buffer insertion through MLO and opt_design. For the values BUFG and
BUFGCE, opt_design and MLO inserts the corresponding buffer type to drive the specified
net.
The CLOCK_BUFFER_TYPE property indicates what type of clock buffer to infer for the
specified net or port objects. The IO_BUFFER_TYPE property indicates whether to infer an input
or output buffer for the port.
TIP: The use of the CLOCK_BUFFER_TYPE property implies a KEEP on the target net, which preserves the
net name and prevents removing the net through RTL optimization.
CLOCK_BUFFER_TYPE can be defined in the RTL or in the XDC. When specified in the RTL, the
property can be attached to a port. After synthesis, the property CLOCK_BUFFER_TYPE should
be attached to the net driven by the input buffer.
Applicable Objects
Value
• BUFGCE, BUFG, BUFH, BUFIO, BUFMR, BUFR: Directs the tool to infer the specified clock
buffer for clock ports or nets.
Note: For Versal architecture, when the net only drives non-clock pins, the property value BUFG or
BUFGCE results in a BUFG_FABRIC being inferred. If the net drives one or more clock pins, then a
BUFGCE is inferred.
• BUFG_FABRIC (Versal Only): Directs the tool to infer a BUFG_FABRIC for the nets. This
property value preferably be set for nets driving non-clock pins. When the value
BUFG_FABRIC is used on non-Versal architectures, no buffer is inserted and the placer fails
with the Vivado error 31-1012.
• NONE: Directs the tool to not infer any clock buffers for the clocks.
Note: Use with IO_BUFFER_TYPE “NONE” to prevent Vivado synthesis from inferring any buffers.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
• Opt Design
Related Information
IO_BUFFER_TYPE
CLOCK_DEDICATED_ROUTE
The CLOCK_DEDICATED_ROUTE property is enabled (TRUE) by default, and ensures that clock
resource placement DRCs are considered error conditions that must be corrected prior to routing
or bitstream generation. CLOCK_DEDICATED_ROUTE=FALSE downgrades the placement DRC
to a warning and lets the Vivado router use fabric routing to connect from a clock-capable IO
(CCIO) to a global clock resource such as an MMCM.
External user clocks must be brought into the FPGA on differential clock pin pairs called clock-
capable inputs (CCIO). These CCIOs provide dedicated, high-speed routing to the internal global
and regional clock resources to guarantee timing of various clocking features. Refer to the 7
Series FPGAs Clocking Resources User Guide (UG472), or the UltraScale Architecture Clocking
Resources User Guide (UG572) for more information on clock placement rules.
Architecture Support
All architectures.
Applicable Objects
Nets (get_nets) directly connected to the input of a global clock buffer (BUFG, BUFGCE,
BUFGMUX, BUGCTRL).
IMPORTANT! CLOCK_DEDICATED_ROUTE must be set on a net segment at the highest level of design
hierarchy, or the top-level net.
Value
• 7 series devices:
• BACKBONE: Clock driver and load(s) must be placed in the same Clock Management Tile
(CMT) column. The clock routing still uses dedicated global clock routing resources.
• FALSE: Clock driver and load(s) can be placed anywhere in the device. The clock net can be
routed with both global clock routing resources, and standard fabric routing resources. This
can adversely affect the timing and performance of the clock net.
• SAME_CMT_COLUMN (BACKBONE can also be used): Clock driver and load(s) must be
placed in the same Clock Management Tile (CMT) column. The clock routing uses
dedicated global clock routing resources.
• SAME_CMT_ROW (Versal devices only): Clock driver and load(s) must be placed in the
same Clock Management Tile (CMT) row, also called Horizontal Special Region (HSR). The
clock routing uses dedicated global clock routing resources.
• ANY_CMT_COLUMN: Clock driver and load(s) can be placed in any CMT column and the
net uses dedicated global clock routing resources.
• FALSE: Clock driver and load(s) can be placed anywhere in the device. The clock net can be
routed with both global clock routing resources, and standard fabric routing resources. This
can adversely affect the timing and performance of the clock net.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where net_name is the signal name directly connected to the input of a global clock buffer.
Affected Steps
• Place Design
• report_drc
Related Information
CLOCK_LOW_FANOUT
CLOCK_DELAY_GROUP
The CLOCK_DELAY_GROUP property identifies related clocks that have the same MMCM, PLL,
GT source, or common driver that should be balanced during placement and routing to reduce
clock skew on timing paths between the clocks.
TIP: Clock matching (via the CLOCK_DELAY_GROUP property) is intended for use with clocks from the
same MMCM, PLL, or GT source.
• Value: <name>: A unique string identifier used by the Vivado placer to match the delays on
specified clock nets.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where <name> is the unique name to associate with the specified clock nets and
<clk_nets> is a list of clock nets directly connected to the output of global clock buffers,
that are driven by a common cell, such as an MMCM for example.
Affected Steps
• Place Design
• report_drc
Related Information
CLOCK_LOW_FANOUT
CLOCK_LOW_FANOUT
CLOCK_LOW_FANOUT is a boolean property that can be assigned to clocks that have a small
number of loads and that should be contained in a single clock region. The property is assigned
to clock nets driven by a global clock buffer or a set of flip flops driven by a global clock buffer.
TIP: A global clock buffer is a BUFGCE, BUFGCE_DIV, BUFGCTRL, BUFG_GT, BUFG_PS, or BUFG_HDIO.
When CLOCK_LOW_FANOUT is TRUE on a clock net driven by a global clock buffer, the loads
should be contained within a single clock region and be driven by global clock resources. A load is
defined as any leaf input pin on the clock network, not only the sequential clock pins. For
example, LUT pins are counted as loads. If there are too many loads on the net, the Vivado tool
will return a warning and ignore the CLOCK_LOW_FANOUT property.
When CLOCK_LOW_FANOUT is TRUE on a set of flip flops driven by a BUFGCE global clock
buffer, the BUFGCE global clock buffer will be replicated and drives only the flip flops with the
setting. The flip flops are placed in a single clock region and driven by global clock resources.
The CLOCK_LOW_FANOUT property can conflict with other clock or placement properties. For
instance, if CLOCK_DEDICATED_ROUTE is specified on the same net with any value other than
TRUE, the CLOCK_DEDICATED_ROUTE property takes precedence and CLOCK_LOW_FANOUT
is ignored with a warning, CLOCK_DELAY_GROUP will take precedence over
CLOCK_LOW_FANOUT if all of the members of the CLOCK_DELAY_GROUP cannot be placed in
a single clock region. USER_CLOCK_ROOT, LOC, and PBLOCK properties can also create
conflicts with the CLOCK_LOW_FANOUT property. In each of these cases
CLOCK_LOW_FANOUT is ignored and a warning is returned.
• Applicable Objects:
• Clock nets (get_nets) connected to the output of global clock buffers that should be
constrained to a single clock region.
• Flip flop cells (get_cells) connected to the output of a BUFGCE global clock buffer. A
new BUFGCE global clock buffer is replicated in parallel with the existing BUFGCE global
clock buffer and the loads of the new BUFGCE global clock buffer are constrained to a
single clock region.
• Value:
• TRUE: The clock is a low fanout net and should be constrained into a single clock region.
• FALSE: The clock is not a low fanout signal, or should not be constrained to a single clock
region (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where
• <clk_nets> is a list of clock nets directly connected to the output of global clock buffers,
that are driven by a common cell, such as an MMCM for example.
• <ff_cells> is a list of flip flop cells directly connect to the output of a BUFGCE global
clock buffer.
Affected Steps
• Opt Design
• Place Design
• report_drc
Related Information
CLOCK_DEDICATED_ROUTE
CLOCK_DELAY_GROUP
LOC
PBLOCK
USER_CLOCK_ROOT
CLOCK_REGION
The CLOCK_REGION property lets you assign a clock buffer to a specific clock region of an
UltraScale device, while letting the Vivado placer assign the clock buffer to the best site within
that region.
IMPORTANT! For UltraScale devices, it is not recommended to fix a Clock Buffer to a specific site, as you
might do in clock planning a 7 series design. Instead, you can assign a Clock Buffer to a specific
CLOCK_REGION and leave the clock resources available to the Vivado placer to determine the best
clocking structure.
• Architecture Support:
• Applicable Objects:
• Values: <VALUE>: Specify the CLOCK_REGION to place the cell or cells into. The
CLOCK_REGION is specified by name as X#Y#, or as returned by the get_clock_regions
Tcl command.
Note: Refer to Vivado Design Suite Tcl Command Reference Guide (UG835) for more information on the
get_clock_regions command.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
• report_drc
Related Information
CLOCK_BUFFER_TYPE
CLOCK_ROOT
CLOCK_ROOT
IMPORTANT! The CLOCK_ROOT property has changed from a user-definable property to a read-only
property. The user-definable property has been changed to USER_CLOCK_ROOT, which should be used
instead.
The CLOCK_ROOT property is a read-only property reflecting the current resource assignment
of the driver, or root, of the global clock net in the physical design. The CLOCK_ROOT reflects
the clock root assigned by the Vivado placer. The place and route tools will automatically assign
the clock root to achieve the best timing for the design.
TIP: If the Vivado router is run with the Explore directive, it can add additional clock roots to a net in order
to improve the quality of the results.
• Applicable Objects: Global clock net (get_nets) directly connected to the output of a global
clock buffer.
• Value:
• <clock_region | pblock_name>: Specifies the name of a clock region on the target part, or a
defined Pblock in the current design.
Syntax
Not applicable.
Affected Steps
• Place Design
• Routing
Related Information
CLOCK_BUFFER_TYPE
CLOCK_REGION
USER_CLOCK_ROOT
CONFIG_MODE
The CONFIG_MODE property defines which device configuration mode or modes to use for pin
allocations, DRC reporting, and bitstream generation.
IMPORTANT! COMPATIBLE_CONFIG_MODES property has been deprecated in the 2013.3 release, and
is replaced by the CONFIG_MODE property.
Refer to the 7 Series FPGAs Configuration User Guide (UG470), or the UltraScale Architecture
Configuration User Guide (UG570) for more information on device configuration modes.
Value
TIP: Not all of the following values apply to all device architectures. Refer to the 7 Series FPGAs
Configuration User Guide (UG470), or the UltraScale Architecture Configuration User Guide (UG570) for
more information.
• S_SERIAL
• M_SERIAL
• S_SELECTMAP
• M_SELECTMAP
• B_SCAN
• S_SELECTMAP+READBACK
• M_SELECTMAP+READBACK
• B_SCAN+READBACK
• S_SELECTMAP32
• S_SELECTMAP32+READBACK
• S_SELECTMAP16
• S_SELECTMAP16+READBACK
• SPIx1
• SPIx2
• SPIx4
• SPIx8
• BPI8
• BPI16
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• I/O Planning
• Place Design
• report_drc
• Write Bitstream
CONFIG_VOLTAGE
AMD devices support configuration interfaces with 3.3V, 2.5V, 1.8V, or 1.5V I/O. The
configuration interfaces include the JTAG pins in bank 0, the dedicated configuration pins in bank
0, and the pins related to specific configuration modes in bank 14 and bank 15 in the 7 series
devices, and bank 65 in the UltraScale architecture. You can set the CONFIG_VOLTAGE property,
or VCCO_0 voltage, to 3.3, 2.5, 1.8, or 1.5.
CONFIG_VOLTAGE must be set to the correct configuration voltage, to determine the I/O
voltage support for the pins in bank 0. Refer to the 7 Series FPGAs Configuration User Guide
(UG470), or the UltraScale Architecture Configuration User Guide (UG570) for more information on
configuration voltage.
The CFGBVS pin setting determines the I/O voltage support for bank 0 at all times. For 7 series
devices in which bank 14 and bank 15 are the HR bank type, or bank 65 in UltraScale
architecture, the CFGBVS pin and the respective CONFIG_VOLTAGE property determine the I/O
voltage support during configuration.
Report DRC checks are run on Bank 0, 14, and 15 in the 7 series, or 0 and 65 in the UltraScale
architecture, to determine compatibility of CONFIG_MODE settings on the current design. DRCs
are issued based on IOSTANDARD and CONFIG_VOLTAGE settings for the bank. The
configuration voltages are also used when exporting IBIS models.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
• report_drc
• Write Bitstream
Related Information
CFGBVS
CONFIG_MODE
CONTAIN_ROUTING
The CONTAIN_ROUTING property restricts the routing of signals contained within a Pblock to
use routing resources within the area defined by the Pblock. This prevents signals inside the
Pblock from being routed outside the Pblock, and increases the reusability of the design.
By default the definition of a Pblock restricts the placement of logic assigned to the Pblock to
within the area defined by the Pblock. This property has the same effect for routing. The
CONTAIN_ROUTING property is specific to a Pblock and must come after the create_pblock
commands in an XDC file.
Only signals that are entirely owned by the Pblock cells will be contained within the Pblock. For
example, if no BUFGMUX resources are found within the Pblock, paths from or to a BUFGMUX
cannot be contained.
Value
• TRUE: Contain the routing of signals inside a Pblock to the area defined by the Pblock range.
• FALSE: Do not contain the routing of signals inside the Pblock. This is the default.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where <pblock_name> specifies the Pblock or Pblocks to apply the property to.
XDC Example:
Affected Steps
• Routing
Related Information
EXCLUDE_PLACEMENT
PBLOCK
CONTROL_SET_REMAP
While all registers support resets and clock enables, their use can significantly affect the end
implementation in terms of performance, utilization, and power. Designs with a large number of
unique control sets can have fewer options for placement, resulting in higher power and lower
performance. The CONTROL_SET_REMAP property is placed on register primitives to trigger a
control set reduction on a specific register during logical optimization (opt_design).
When a logic path ends at a fabric register (FD) clock enable, or synchronous set/reset, the
property on the register instructs Vivado logic optimization to map the enable or reset signal to
the data pin (D), which has a dedicated LUT connection and can be faster. If possible, the logic is
combined with an existing LUT driving the D-input to prevent the insertion of extra levels of
logic.
For more information on reducing control sets, refer to this UltraFast Design Methodology Guide
for FPGAs and SoCs (UG949) for more information.
• Value:
• NONE: Do nothing. This is the default, and is the same as if the property were not set on
the cell.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Opt Design
Related Information
EQUIVALENT_DRIVER_OPT
DCI_CASCADE
DCI_CASCADE defines a master-slave relationship between a set of high-performance (HP) I/O
banks. The digitally controlled impedance (DCI) reference voltage is chained from the master I/O
bank to the slave I/O banks.
DCI_CASCADE specifies which adjacent banks use the DCI Cascade feature, thereby sharing
reference resistors with a master bank. If several I/O banks in the same I/O bank column are
using DCI, and all of those I/O banks use the same VRN/VRP resistor values, the internal VRN
and VRP nodes can be cascaded so that only one pair of pins for all of the I/O banks in the entire
I/O column is required to be connected to precision resistors. DCI_CASCADE identifies the
master bank and all associated slave banks for this feature. Refer to the 7 Series FPGAs SelectIO
Resources User Guide (UG471), or the UltraScale Architecture SelectIO Resources User Guide
(UG571) for more information.
• Architecture Support:
• Applicable Objects:
• Value: Valid High Performance (HP) bank numbers. See the 7 Series FPGAs Packaging and
Pinout Product Specification (UG475), or the UltraScale and UltraScale+ FPGAs Packaging and
Pinouts Product Specification (UG575) for more information.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where
Affected Steps
• I/O planning
• Place Design
• DRC
• Write Bitstream
• report_power
DELAY_BYPASS
The DELAY_BYPASS property reduces the delay through the BUFIO in AMD 7 series FPGAs.
There is an intrinsic delay in the BUFIO to match the delay of the BUFR to allow for smooth data
transference from those domains. For 7 series devices, this property disables that delay.
• Value:
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Timing Analysis
DELAY_VALUE_XPHY
The DELAY_VALUE_XPHY property on PORT objects specifies the amount of delay to add on an
input or output path for Versal XPHY Logic Interfaces. During the early phases of opt_design
when the Advanced I/O Wizard IP is being regenerated, the DELAY_VALUE_XPHY value will be
copied from the PORT onto the XPHY instance for the input or output path. DRCs exist in the
Vivado Design Suite to ensure that the DELAY_VALUE_XPHY value aligns to the value on the
XPHY instance. In the case where you want to update the amount of delay on an input or output
path for an already implemented design, you can apply your new value to the PORT by using the
DELAY_VALUE_XPHY property. Then, you can run the implement_xphy_cores -
update_delay_value_only command to deposit the new value onto the XPHY instance.
• Architecture Support:
Versal architecture.
• Applicable Objects:
Ports (get_ports)
• Value:
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
# Write a new checkpoint and device image with the updated delay
write_checkpoint top_routed_125.dcp
write_device_image top_routed_125.pdi
Affected Steps
• Timing Analysis
• Opt Design
DIFF_TERM
The differential termination (DIFF_TERM) property supports the differential I/O standards for
inputs and bidirectional ports. It is used to enable or disable the built-in, 100Ω, differential
termination. Refer to the 7 Series FPGAs SelectIO Resources User Guide (UG471) for more
information.
DIFF_TERM indicates a differential termination method should be used on differential input and
bidirectional port buffers, and that the Vivado tool should add on-chip termination to the port.
RECOMMENDED: For UltraScale architecture devices, you should use DIFF_TERM_ADV to enable
differential termination.
• Applicable Objects:
• Ports (get_ports)
○ Input or bidirectional ports connected to a differential input buffer
○ PPDS_25
○ RSDS_25
• Values:
Syntax
Note: Use the instantiation template from the Language Templates or the Vivado Design Suite 7 Series FPGA
and Zynq 7000 SoC Libraries Guide (UG953) to specify the proper syntax.
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Where:
Affected Steps
• I/O Planning
• report_ssn
• report_power
Related Information
DIFF_TERM_ADV
IBUF_LOW_PWR
IOSTANDARD
DIFF_TERM_ADV
The advanced differential termination (DIFF_TERM_ADV) property is intended for use with
UltraScale architecture only, and is used to enable or disable the built-in, 100Ω, differential
termination for inputs or bidirectional ports. DIFF_TERM_ADV indicates a differential
termination method should be used on differential input and bidirectional port buffers, and that
the Vivado Design Suite should add on-chip termination to the port.
DIFF_TERM_ADV is only available for inputs and bidirectional ports and can only be used with
the appropriate VCCO voltage. The VCCO of the I/O bank must be connected to 1.8V for HP I/O
banks, and 2.5V for HR I/O banks to provide 100Ω of effective differential termination. Refer to
the UltraScale Architecture SelectIO Resources User Guide (UG571) for more information.
IMPORTANT! To support the migration of 7 series designs to UltraScale architecture, the Vivado tool. will
automatically migrate the DIFF_TERM property to the DIFF_TERM_ADV property. However, in some cases
this property is not supported, and should not be specified, or should be specified as “” (NULL) value.
• Applicable Objects:
• Ports (get_ports)
○ Input or bidirectional ports connected to a differential input buffer
○ PPDS_25
○ RSDS_25
• Values:
Note: The TERM_NONE value is the default value when the DIFF_TERM_ADV property is valid,
such as for supported IOSTANDARDs and voltage levels. However, where it is not supported, it
should not be specified and DIFF_TERM_ADV=TERM_NONE can result in a DRC violation. In these
cases you can set the property to a NULL value using one of the following commands:
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where:
Affected Steps
• I/O Planning
• report_drc
• report_ssn
• report_power
Related Information
DIFF_TERM
IOSTANDARD
DIRECT_ENABLE
Apply DIRECT_ENABLE on an input port or other signal to have it go directly to the enable line
of a flop when there is more than one possible enable or when you want to force the synthesis
tool to use the enable lines of the flop.
• Applicable Objects: The DIRECT_ENABLE attribute can be placed on any port or signal.
• Values:
• FALSE (or NO): Do not direct synthesis to use the enable line of a flop. This is the default.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Note: For XDC usage, this attribute only works on type net, so you need to use the get_nets command
for the object.
Affected Steps
• Synthesis
Related Information
DIRECT_RESET
GATED_CLOCK
DIRECT_RESET
Apply DIRECT_RESET on an input port or other signal to have it go directly to the RESET line of
a flop when there is more than one possible reset or when you want to force the synthesis tool
to use the reset lines of the flop.
• Applicable Objects: The DIRECT_RESET attribute can be placed on any port or signal.
• Values:
• TRUE (or YES): Direct synthesis to use the RESET line of a flop.
• FALSE (or NO): Do not direct synthesis to use the RESET line. This is the default.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Note: For XDC usage, this attribute only works on type net, so you need to use the get_nets command
for the object.
Affected Steps
• Synthesis
Related Information
DIRECT_ENABLE
DONT_TOUCH
DONT_TOUCH directs the tool to not optimize a user hierarchy, instantiated component, or
signal, so that optimization does not occur across the module boundary, or eliminate the object.
While this can assist floorplanning, analysis, and debugging, it can inhibit optimization, resulting
in a larger, slower design.
IMPORTANT! AMD recommends setting this attribute in the RTL source files. Signals that need to be kept
are often optimized before the XDC file is read. Therefore, setting this attribute in the RTL ensures that the
attribute is used.
The DONT_TOUCH property works in the same way as KEEP or KEEP_HIERARCHY; however,
unlike KEEP and KEEP_HIERARCHY, DONT_TOUCH is forward-annotated to place and route to
prevent logic optimization during implementation. The effect of DONT_TOUCH on various
objects is as follows:
• Primitive Instance: Do not remove the instance. However, the tool can connect or disconnect
pins of the instance.
• Hierarchical Instance: Do not remove the instance or add or remove any pins of the instance.
The tool can connect or disconnect pins and optimize logic inside the hierarchical module.
However, optimization can not move logic into or out of the hierarchical module. This is a
constraint on the hierarchical boundary of the instance.
TIP: Register all the outputs of a hierarchical instance with DONT_TOUCH applied.
• Hierarchical Net: Do not remove the net, or connect or disconnect any pins on the net.
TIP: On a hierarchical net, DONT_TOUCH will preserve only the hierarchical segment it is attached to,
so you will need to attach it to all segments you want to preserve.
flatten_hierarchy = “none”
• Applicable Objects: This attribute can be placed on any signal, hierarchical module, or
primitive instance.
• Cells (get_cells)
• Nets (get_nets)
• Values:
• FALSE: Allows optimization across the hierarchy. This is the default setting.
• TRUE: Preserves the hierarchy by not allowing optimization across the hierarchy boundary.
Preserves an instantiated component or a net to prevent it from being optimized out of the
design.
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the user hierarchy instantiation:
(* DONT_TOUCH = "{TRUE|FALSE}" *)
Wire Example:
Module Example:
Instance Example:
• VHDL Syntax:
• XDC Syntax:
Where:
Affected Steps
• Synthesis
• Opt Design
• Phys Opt Design
• Floorplanning
Related Information
KEEP
KEEP_HIERARCHY
MARK_DEBUG
DQS_BIAS
DQS_BIAS is a property of the top-level port driving a differential input buffer or bidirectional
buffer primitive (IBUFDS, IOBUFDS). The DQS_BIAS attribute provides an optional DC bias at
the inputs of certain pseudo-differential I/O standards (DIFF_SSTL) and true differential I/O
standards (LVDS). If nothing is driving the buffer, DQS_BIAS provides a weak bias so that the
logic state is not unknown in pseudo-differential I/O standards. DQS_BIAS provides a pull-up/
pull-down feature required for some DQS memory interface pins.
RECOMMENDED: Because DQS_BIAS affects the logic function of the design, it should be defined via a
Verilog parameter statement, or VHDL generic_map, to correctly support simulation. However, it is also
supported as an XDC property.
In high-performance (HP) I/O banks, DQS_BIAS can be used to support differential inputs, such
as LVDS. The use of DQS_BIAS can provide the DC-bias in AC-coupled LVDS applications. See
the 7 Series FPGAs SelectIO Resources User Guide (UG471), or the UltraScale Architecture SelectIO
Resources User Guide (UG571) for more information.
Note: DQS_BIAS is not available in high-range (HR) I/O banks for true differential I/O standards.
• Applicable Objects:
• Ports (get_ports)
○ Ports driving differential Input buffers: IBUFDS, IBUFDS_IBUFDISABLE,
IBUFDS_INTERMDISABLE, IBUFDSE3
○ Ports driving differential IO buffers: IOBUFDS, IOBUFDS_DCIEN,
IOBUFDS_INTERMDISABLE, IOBUFDSE3, IBUFGDS
• Values:
• TRUE: Enable the DC bias voltage on the input or bidirectional buffer driven by the top-
level port.
Note: When EQUALIZATION = EQ_NONE, the DQS_BIAS must be FALSE. Any other
EQUALIZATION value (EQ_LEVEL1, EQ_LEVEL2...) can support either DQS_BIAS of TRUE or
FALSE.
Syntax
• Verilog Syntax:
Assign the DQS_BIAS parameter on the top-level port driving the instantiated differential
buffer immediately before the port declaration:
The following example enables differential termination on the top-level port CLK_p driving
the differential input buffer IBUFDS.
// Enables the DC bias voltage on the buffer driven by the specified port
(* DQS_BIAS = "TRUE" *) input CLK_p;
• VHDL Syntax:
Assign the generic DQS_BIAS on the top-level port driving the instantiated differential buffer:
The following example enables differential termination on the top-level port CLK_p driving
the differential input buffer IBUFDS.
--Enables the DC bias voltage on the buffer driven by the specified port
attribute DQS_BIAS of CLK_p : signal is "TRUE";
• XDC Syntax:
The DQS_BIAS attribute uses the following syntax in the XDC file:
Affected Steps
• Synthesis
• Simulation
Related Information
EQUALIZATION
DRIVE
DRIVE specifies output buffer drive strength in mA for output buffers configured with I/O
standards that support programmable output drive strengths.
• Architecture Support:
Versal architecture.
• Applicable Objects:
• Ports (get_ports)
○ Output or bidirectional ports connected to output buffers
• Value:
Integer values:
• 2
• 4
• 6
• 8
• 12 (default)
• 16
• 24 (this value is not applicable to UltraScale architecture.)
Syntax
• Verilog Syntax:
For both inferred and instantiated output buffers, place the proper Verilog parameter syntax
before the top-level output port declaration.
(* DRIVE = "{2|4|6|8|12|16|24}" *)
• VHDL Syntax:
For both inferred and instantiated output buffers, place the proper VHDL attribute syntax
before the top-level output port declaration.
• XDC Syntax:
Affected Steps
• I/O Planning
• Report Noise
• Report Power
See Also
Refer to the following design elements in the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953), or the UltraScale Architecture Libraries Guide (UG974):
• OBUF
• OBUFT
• IOBUF
EDIF_EXTRA_SEARCH_PATHS
This property defines a search path on the current fileset for the Vivado Design Suite to look for
EDIF files referenced by the design.
TIP: The following error occurs during implementation when the Vivado Design Suite is unable to locate
the EDIF netlist associated with the blackbox. This can be fixed by defining the
EDIF_EXTRA_SEARCH_PATHS:
• Values: <path_to_edif_file>: Specifies the search path for the Vivado tool to locate
EDIF files in use by the current fileset.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• link_design
• Opt Design
EQUALIZATION
EQUALIZATION is available on differential receivers, implementing specific I/O standards, to
overcome frequency-dependent attenuation through the transmission line.
Linear receiver equalization provides an AC gain at the receiver to compensate for high-
frequency losses through the transmission line.
TIP: Equalization at the receiver can be combined with PRE_EMPHASIS at the transmitter to improve the
overall signal integrity.
• Values:
IMPORTANT! The EQUALIZATION values are not specifically calibrated. The recommendation is to
run simulations to determine the best setting for the specific frequency and transmission line
characteristics in the design. In some cases, lower equalization settings can provide better results than
over-equalization. Over-equalization degrades the signal quality instead of improving it.
• In HP I/O Banks
○ EQ_LEVEL0
○ EQ_LEVEL1
○ EQ_LEVEL2
○ EQ_LEVEL3
○ EQ_LEVEL4
○ EQ_NONE (default)
• In HR I/O Banks
○ EQ_LEVEL0, EQ_LEVEL0_DC_BIAS
○ EQ_LEVEL1, EQ_LEVEL1_DC_BIAS
○ EQ_LEVEL2, EQ_LEVEL2_DC_BIAS
○ EQ_LEVEL3, EQ_LEVEL3_DC_BIAS
○ EQ_LEVEL4, EQ_LEVEL4_DC_BIAS
○ EQ_NONE (default)
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The EQUALIZATION attribute uses the following syntax in the XDC file:
Where,
Related Information
LVDS_PRE_EMPHASIS
PRE_EMPHASIS
EQUIVALENT_DRIVER_OPT
The Vivado tool merges the drivers of all logically-equivalent signals into single drivers when the
-merge_equivalent_drivers option is specified during logic optimization (opt_design).
Refer to Logic Optimization in the Vivado Design Suite User Guide: Implementation (UG904) for
more information.
The EQUIVALENT_DRIVER_OPT cell property lets you control which equivalent nets and drivers
are merged or not when running opt_design:
• Setting the EQUIVALENT_DRIVER_OPT property to MERGE on the original driver, and its
replicas, triggers the merge equivalent driver phase during opt_design, and merges the
logically equivalent drivers that have that property.
• Setting the EQUIVALENT_DRIVER_OPT property to KEEP on the original driver, and its
replicas, prevents the merging of those specified drivers during the equivalent driver merging
and the control set merging phase. This excludes the specified drivers, but otherwise runs
equivalent driver merging on the rest of the design.
• Values:
• MERGE: Enable the equivalent driver merging optimization on the specified cells only.
• KEEP: Disables the equivalent driver merging optimization on the specified cells, but
otherwise merge the rest of the design.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Opt Design
Related Information
CONTROL_SET_REMAP
EXCLUDE_PLACEMENT
The EXCLUDE_PLACEMENT property is used to indicate that the device resources inside of the
area defined by a Pblock should only be used for logic contained in the Pblock.
The default is to allow the Vivado placer to place logic not assigned to a Pblock within the range
of resources reserved by the Pblock. This property prevents that, and reserves the logic resources
for the Pblock.
Note: This only closes the Pblock's logic resources. Outside logic can still use routing resources within the
area defined by the Pblock.
• Values:
• TRUE: Reserve the device logic resources inside a Pblock for use by logic assigned to the
Pblock, thus preventing placement of outside logic.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Floorplanning
• Placement
Related Information
CONTAIN_ROUTING
PBLOCK
EXTRACT_ENABLE
EXTRACT_ENABLE controls whether registers infer enables. Typically, the Vivado tools extract
or not extract enables based on heuristics that typically benefit the most amount of designs. In
cases where Vivado is not behaving in a desired way, this attribute overrides the default behavior
of the tool. If there is an undesired enable going to the CE pin of the flip-flop, this attribute can
force it to the D input logic. Conversely, if the tool is not inferring an enable that is specified in
the RTL, this attribute can tell the tool to move that enable to the CE pin of the flip-flop.
This is a way for user to indicate on a granular level whether they want enable logic on control
path or data path.
• Applicable Objects: The EXTRACT_ENABLE attribute can be placed on the cells, ports and
nets.
• Values: The enable will go directly to the enable pin (CE) of the register.
• FALSE (or NO): The enable will not go to the enable pin (CE) of the register.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
EXTRACT_RESET
EXTRACT_RESET
EXTRACT_RESET controls whether registers infer resets. Typically, the Vivado tools extract or
not extract resets based on heuristics that typically benefit the most amount of designs. In cases
where Vivado is not behaving in a desired way, this attribute overrides the default behavior of
the tool. If there is an undesired synchronous reset going to the flip-flop, this attribute can force
it to the D input logic. Conversely, if the tool is not inferring a reset that is specified in the RTL,
this attribute can tell the tool to move that reset to the dedicated reset of the flop. This attribute
can only be used with synchronous resets; asynchronous resets are not supported with this
attribute.
This is a way for user to indicate on a granular level whether they want reset logic on control
path or data path.
• Applicable Objects: The EXTRACT_RESET attribute can be placed on the cells, ports and nets.
• Values:
• TRUE (or YES): The enable will go directly go to the pin (R) of the register.
• FALSE (or NO): The reset will not go to the reset pin (R) of the register.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
EXTRACT_ENABLE
FORCE_MAX_FANOUT
You can force the replication of a register or a LUT driving a net by adding the
FORCE_MAX_FANOUT property to the net. The value of the FORCE_MAX_FANOUT specifies
the maximum physical fanout the nets should have after the replication optimization. The
physical fanout in this case refers to the actual site pin loads, not the logical loads. For example, if
the replica drives multiple LUTRAM loads that are all grouped in the same slice, the combined
fanout will be 1 for all of the LUTRAMs in the same slice. The FORCE_MAX_FANOUT forces the
replication during physical synthesis regardless of the slack of the signal.
• Applicable Objects: Nets (get_nets) directly connected to the output of a Register (FD,
FDCE, FDPE, FDRE, FDSE) or LUT (LUT1, LUT2, LUT3, LUT4, LUT5, LUT6, LUT6_2)
• Values: <Integer>: Specifies the maximum limit of fanout, after which the driver is
replicated
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
Related Information
MAX_FANOUT_MODE
FSM_ENCODING
FSM_ENCODING controls how a state machine is encoded during synthesis.
As a default, the Vivado synthesis tool chooses an encoding protocol for state machines based on
internal algorithms that determine the best solution for most designs. However, the
FSM_ENCODING property lets you specify the state machine encoding of your choice.
• Values:
• AUTO: This is the default behavior when FSM_ENCODING is not specified. It allows the
Vivado synthesis tool to determine the best state machine encoding method. In this case,
the tool might use different encoding styles for different state machine registers in the
same design.
• ONE_HOT
• SEQUENTIAL
• JOHNSON
• GRAY
• NONE: This disables state machine encoding within the Vivado synthesis tool for the
specified state machine registers. In this case the state machine is synthesized as logic.
Syntax
• Verilog Syntax:
• VHDL Syntax:
type count_state is (zero, one, two, three, four, five, six, seven);
signal my_state : count_state;
attribute fsm_encoding : string;
attribute fsm_encoding of my_state : signal is "sequential";
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
FSM_SAFE_STATE
FSM_SAFE_STATE
This attribute can be set in both the RTL and in the XDC.
The Vivado synthesis tool supports extraction of Finite State Machines (FSM) in a variety of
configurations as determined by the FSM_ENCODING property, or the -fsm_extraction
command line option for Vivado synthesis. Refer to the Vivado Design Suite User Guide: Synthesis
(UG901) for more information.
A state machine can enter into an invalid, or “unreachable” state that causes the design to fail.
FSM_SAFE_STATE tells synthesis to insert logic into the state machine that detects if there is an
invalid state and then puts it into a known state on the next clock cycle. If an FSM enters an
invalid state, the FSM_SAFE_STATE property defines a recovery state for use when an FSM is
synthesized in the Vivado synthesis tool.
TIP: While providing for safe recovery of FSM states, this property can affect the quality of synthesis
results, typically resulting in less performance with greater area.
• Values:
• reset_state: Return the state machine to the RESET state, as determined by the Vivado
synthesis tool.
• power_on_state: Return the state machine to the POWER_ON state, as determined by
the Vivado synthesis tool.
• default_state: Return the state machine to the default state, as defined by the state
machine; even if that state is unreachable, using Hamming-2 encoding detection for one
bit/flip.
• auto_safe_state: implies Hamming-3 encoding.
Syntax
• Verilog Syntax:
• VHDL Syntax:
type count_state is (zero, one, two, three, four, five, six, seven);
signal my_state : count_state;
attribute fsm_safe_state : string;
attribute fsm_safe_state of my_state : signal is "power_on_state";
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
FSM_ENCODING
GATED_CLOCK
Use the GATED_CLOCK property to enable Vivado synthesis to perform conversion of gated
clocks. Convert clock gating logic to utilize the flop enable pins when available. This optimization
can eliminate logic on the clock tree and simplify the netlist.
This RTL attribute that instructs the tool about which signal in the gated logic is the clock. The
attribute is placed on the signal or port that is the clock.
Note: You can also use a switch in the Vivado synthesis tool that instructs the tool to attempt the
conversion:
synth_design -gated_clock_conversion on
• Applicable Objects:
• Values:
○ The Vivado synthesis can detect the gate and there is a valid clock constraint set. This
option lets the tool make decisions.
Syntax
• Verilog Syntax:
• VHDL Syntax:
Affected Steps
• Synthesis
GENERATE_SYNTH_CHECKPOINT
By default, the Vivado Design Suite uses an out-of-context (OOC) design flow to synthesize IP
cores from the Vivado IP catalog, and block designs from the Vivado IP integrator. The OOC flow
reduces design cycle time, and eliminates design iterations, letting you save synthesis results in
design checkpoint (DCP) files. The GENERATE_SYNTH_CHECKPOINT property determines
whether the post-synthesis checkpoint will be generated as an output product for the associated
IP file (XCI) or block design (BD) file. Refer to Generating Output Products in the Vivado Design
Suite User Guide: Designing with IP (UG896) or Vivado Design Suite User Guide: Designing IP
Subsystems using IP Integrator (UG994) for more information.
The Vivado Design Suite automatically generates the synthesized design checkpoint file (DCP)
needed to support the out-of-context (OOC) design flow when generating the output products
for an IP or block design. OOC modules are seen as black boxes in the top-level design until the
synthesized design is opened and all the OOC checkpoints are integrated.
IMPORTANT! Vivado implementation resolves black boxes by extracting the netlists from the DCP of the
IP and BD.
For block design files (.bd), the SYNTH_CHECKPOINT_MODE property determines how the DCP
for the block design will be synthesized. By default, the block design will be synthesized as Out-
of-Context per IP, but you change the default mode by manually setting the
SYNTH_CHECKPOINT_MODE property.
When generating the output products for an included IP or BD, you can decide whether to use
the out-of-context flow, including the creation of a synthesis Design Checkpoint (DCP), or to let
the IP be globally synthesized as part of the top-level design.
You can set the GENERATE_SYNTH_CHECKPOINT property to FALSE, or 0, to disable the OOC
flow, and disable the generation of the synthesized DCP output product for specified XCI or BD
files.
This property will become read-only if the IP is locked for any reason. In this case, you can run
Reports → Report IP Status in the Vivado IDE, or run the report_ip_status Tcl command to
see why the IP is locked. You will not be able to generate the DCP without first updating the IP
to the latest version in the Vivado IP catalog. Refer to this Vivado Design Suite User Guide:
Designing with IP (UG896) for more information.
• Applicable Objects:
• Values:
• TRUE: Generate the synthesis design checkpoint (DCP) as part of the output products of an
IP or block design, to enable the out-of-context (OOC) design flow (default).
• FALSE: Do not generate the synthesis DCP and disable the OOC flow.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
TIP: A warning will be returned by the tool if you try to assign or query the
GENERATE_SYNTH_CHECKPOINT property on an object other than an XCI or BD file.
Affected Steps
• Synthesis
• Implementation
Related Information
SYNTH_CHECKPOINT_MODE
H_SET is a property that is implied due to the presence of RLOC properties on logic cells in the
hierarchy of a design. Logic elements inside of a hierarchical block, that have the RLOC property,
are automatically assigned to the same Hierarchical Set, or H_SET.
Each hierarchical module is assigned an H_SET property based on the instance name of the
module. Each hierarchical module can only have a single H_SET name, and all logic elements
inside that hierarchy are elements of that H_SET.
Note: H_SET is only defined if there is no HU_SET or U_SET defined, but RLOC is defined.
You can also manually create a User-defined Hierarchical Set, or HU_SET, or a User-defined Set,
or U_SET, that is not dependent on the hierarchy of the design.
You can define multiple HU_SET names for a single hierarchical module, and assign specific
instances of that hierarchy to the HU_SET. This allows you to divide the logic elements of a single
hierarchical module into multiple HU_SETs.
IMPORTANT! When using H_SET or HU_SET, the KEEP_HIERARCHY property is also required for Vivado
Synthesis to preserve the hierarchy for the RPM in the synthesized design.
When RLOC is also present in the RTL source files, the H_SET, HU_SET, and U_SET properties
get translated to a read-only RPM property on cells in the synthesized netlist. The HU_SET and
U_SET are visible on the RTL source file in the Text editor in the Vivado Design Suite. However,
in the Properties window of a cell object, the RPM property is displayed.
• Applicable Objects: The HU_SET property can be used in one or more of the following design
elements, or categories of design elements. Refer to the Vivado Design Suite 7 Series FPGA and
Zynq 7000 SoC Libraries Guide (UG953) or the UltraScale Architecture Libraries Guide (UG974)
for more information on the specific design elements:
• Registers
• LUT
• Macro Instance
• RAMS
• RAMD
• RAMB18/FIFO18
• RAMB36/FIFO36
• DSP48
Syntax
• Verilog Syntax:
This is a Verilog attribute used in combination with the RLOC property to define the set
content of a hierarchical block that will define an RPM in the synthesized netlist. Place the
Verilog attribute immediately before the instantiation of a logic element.
Verilog Example:
The following Verilog module defines RLOC and HU_SET properties for the shift register Flops
in the module.
module ffs (
input clk,
input d,
output q
);
In the preceding example, you will need to specify the KEEP_HIERARCHY property to
instances of the ffs module to preserve the hierarchy and define the RPM in the synthesized
design:
module top (
input clk,
input d,
output q
);
endmodule // top
• VHDL Syntax:
Where,
• XDC Syntax:
The HU_SET property can not be defined using XDC constraints. The HU_SET property, when
present on logic elements with the RLOC property, defines relatively placed macros (RPMs),
and results in the read-only RPM property in the netlist of synthesized designs.
TIP: You can use the create_macro and update_macro commands to define macro objects in
the Vivado Design Suite, that act like RPMs within the design. Refer to the Vivado Design Suite Tcl
Command Reference Guide (UG835) for more information on these commands.
Affected Steps
• Design Floorplanning
• Place Design
• Synthesis
Related Information
KEEP_HIERARCHY
RLOC
RLOCS
RLOC_ORIGIN
RPM
U_SET
HIODELAY_GROUP
HIODELAY_GROUP groups IDELAYCTRL components to their associated IDELAY or ODELAY
instances for proper placement and replication.
If you use HIODELAY_GROUP to assign a group name to an IDELAYCTRL, you need to also
associate an IDELAY or ODELAY cell to the group using the same HIODELAY_GROUP property.
IMPORTANT! While an HIODELAY_GROUP can contain multiple cells, a cell can only be assigned to one
HIODELAY_GROUP.
The following example uses set_property to group all the IDELAY/ODELAY elements
associated with a specific IDELAYCTRL.
HIODELAY_GROUP names are made unique per hierarchy, whereas IODELAY_GROUP names
can exist across hierarchies. Use HIODELAY_GROUP when:
• Applicable Objects:
• Cells (get_cells)
○ IDELAY, ODELAY, or IDELAYCTRL instances
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation of an IDELAY, ODELAY, or
IDELAYCTRL.
(* HIODELAY_GROUP = "value" *)
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Place Design
See Also
Refer to the following design elements in the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953) or the UltraScale Architecture Libraries Guide (UG974).
• IDELAYCTRL
• IDELAYE2
• ODELAYE2
Related Information
IODELAY_GROUP
HLUTNM
The HLUTNM property lets you group two specific and compatible LUT primitives to be placed
into a single physical LUT by assigning the same <group_name>.
When LUT availability is low, the Vivado placer can automatically combine LUT instance pairs
onto single LUTs to fit the design successfully. You can also use the DISABLED value for the
HLUTNM property on specific LUTs to prevent the Vivado placer from combining them with
other LUTs. This is useful, for example, to prevent LUT combining for debug ILA and VIO cores,
keeping probes available for later modification in the ECO flow. Refer to this Vivado Design Suite
User Guide: Programming and Debugging (UG908) for more information on the ECO flow.
TIP: The HLUTNM property and the LUTNM property are similar in purpose, and should be assigned
different values when used in the same level of hierarchy. The Vivado placer will combine LUTs that have
the same LUTNM and HLUTNM values, or return warnings related to conflicting values.
• Use LUTNM to group two LUT components that exist anywhere in the design, including in
different levels of the hierarchy.
• Use HLUTNM to group LUT components in a single hierarchical module, when you expect to
have multiple instances of that module used in the design.
○ HLUTNM is uniquified per hierarchy.
• Architecture Support:
All architectures.
• Values:
• <group_name>: A unique group name to pack specified LUTs into the same LUT6 site.
• DISABLED: Prevents the placer from grouping the specified LUT with another LUT during
placement.
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation of a LUT. The Verilog attribute
must be used in pairs in the same logical hierarchy.
(* HLUTNM = "group_name" *)
• VHDL Syntax:
Where:
The VHDL attribute must be used in pairs in the same logical hierarchy.
• XDC Syntax:
Where
Affected Steps
• link_design
• Place Design
Related Information
LUTNM
IBUF_LOW_PWR
The IBUF_LOW_PWR property allows an optional trade-off between performance and power.
The IBUF_LOW_PWR property is applied to an input port. This property is set to TRUE by
default, which implements the input buffer for the port in the lower-power mode rather than the
higher-performance mode (FALSE).
The change in power can be estimated using the Xilinx Power Estimator (XPE) or the
report_power command in the Vivado Design Suite.
• Applicable Objects: Input ports (get_ports) with a VREF-based I/O Standard such as SSTL
or HSTL or a differential standard such as LVDS or DIFF_HSTL.
• Values:
• TRUE: Implements the input or bidirectional buffer for the port in low power mode. This is
the default value.
• FALSE: Implements the input or bidirectional buffer in high performance mode.
Syntax
• Verilog Syntax:
For both inferred and instantiated input and bidirectional buffers, place the proper Verilog
parameter syntax before the top-level port declaration.
(* IBUF_LOW_PWR = "FALSE" *)
• VHDL Syntax:
For both inferred and instantiated input buffers, place the proper VHDL attribute syntax
before the top-level port declaration.
STATE : in std_logic;
attribute IBUF_LOW_PWR : boolean;
-- Sets the input buffer to high performance attribute IBUF_LOW_PWR of
STATE : signal is FALSE;
• XDC Syntax:
Where:
Affected Steps
• report_power
• report_timing
Related Information
IOSTANDARD
IN_TERM
IN_TERM specifies an uncalibrated input termination impedance value. The termination is
present constantly on inputs, and on bidirectional pins whenever the output buffer is 3-stated.
IMPORTANT! For UltraScale architecture ODT is to be used instead of IN_TERM to specify uncalibrated
termination.
IN_TERM is supported on High Range (HR) bank inputs only. For inputs in High Performance (HP)
banks, specify a digitally controlled impedance (DCI) IOSTANDARD for on-chip termination.
While the 3-state split-termination DCI is calibrated against external reference resistors on the
VRN and VRP pins, the IN_TERM property invokes an uncalibrated split-termination option using
internal resistors that have no calibration to compensate for temperature, process, or voltage
variations. This option has target Thevenin equivalent resistance values of 40Ω, 50Ω, and 60Ω.
For more information refer to the 7 Series FPGAs SelectIO Resources User Guide (UG471).
• Architecture Support: 7 series FPGAs on High Range (HR) bank inputs only.
• Values:
• NONE (default)
• UNTUNED_SPLIT_40
• UNTUNED_SPLIT_50
• UNTUNED_SPLIT_60
Syntax
• Verilog Syntax:
To set this attribute, place the proper Verilog attribute syntax before the top-level input or
bidirectional port declaration.
(* IN_TERM = "{NONE|UNTUNED_SPLIT_40|UNTUNED_SPLIT_50|UNTUNED_SPLIT_60}"
*)
• VHDL Syntax:
ACT5 : in std_logic;
attribute IN_TERM : string;
-- Sets an on-chip input impedance of 50 Ohms to input ACT5 attribute
IN_TERM of ACT5 : signal is “UNTUNED_SPLIT_50”;
Where:
• IN_TERM can be assigned to port objects, and nets connected to port objects.
• port_name is an input or bidirectional port.
Affected Steps
• I/O Planning
• Report Noise
• Report Power
Related Information
DCI_CASCADE
DIFF_TERM
INCREMENTAL_CHECKPOINT
The INCREMENTAL_CHECKPOINT property specifies the path and filename to a design
checkpoint file (DCP) to be used during incremental implementation. Specify this property to
reuse the placement and routing data of a previously placed or routed design. Refer to Vivado
Design Suite User Guide: Implementation (UG904) for more information.
TIP: The INCREMENTAL_CHECKPOINT property is only supported in the Vivado tools project-mode. To
reuse prior placement and routing results in non-project mode use the read_checkpoint -
incremental command.
• Automatic reuse of the prior placement and routing of the current design. Enable the
AUTO_INCREMENTAL_CHECKPOINT property.
• Manual reuse of the placement and routing data from a prior implementation of a specified
design checkpoint. Disable the AUTO_INCREMENTAL_CHECKPOINT property, and specify
the INCREMENTAL_CHECKPOINT property.
• Disabled so there is no incremental implementation. Disable the
AUTO_INCREMENTAL_CHECKPOINT property, and do not specify the
INCREMENTAL_CHECKPOINT property.
The reference design checkpoint is usually an earlier iteration or variation of the design that has
been synthesized, placed, and routed. However, you can also reference a checkpoint that has
placement only.
IMPORTANT! For the incremental flow to work properly, the device and speed grade of the reference
design must match the device and speed grade of the current design.
• Values: {filename}: Specifies the path and filename to a design checkpoint file (DCP) to be
used during incremental implementation.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where {filename} is the path and filename of design checkpoint file (DCP) to be used
during incremental implementation.
TIP: You can use the -filter {IS_IMPLEMENTATION} option for the get_runs command to
get just implementation runs.
Affected Steps
• Implementation
Related Information
AUTO_INCREMENTAL_CHECKPOINT
INTERNAL_VREF
Single-ended I/O standards with a differential input buffer require an input reference voltage
(VREF). When VREF is required within an I/O bank, you can use the dedicated VREF pin as an
external VREF supply, or an internally generated VREF using the INTERNAL_VREF property, or
for HP I/O banks on UltraScale devices use the VREF scan accessed through the HPIO_VREF
primitive.
The INTERNAL_VREF property specifies the use of an internal regulator on an I/O bank to
supply the voltage reference (VREF) for I/O standards requiring a reference voltage. Internally
generated reference voltages remove the need to provide a particular VREF through a supply rail
on the printed circuit board (PCB). This can reduce routing congestion on the system-level
design.
TIP: Consider using the Internal Vref when the AMD device is the only device on the board/system
requiring a particular VREF voltage supply level.
Refer to 7 Series FPGAs SelectIO Resources User Guide (UG471) or to UltraScale Architecture
SelectIO Resources User Guide (UG571) for more information.
• Values:
• 0.60
• 0.675
• 0.7 (UltraScale only)
• 0.75
• 0.84 (UltraScale only)
• 0.90
Note: Not all values are supported in all types of I/O banks.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• I/O planning
• Place Design
• DRC
• report_power
IO_BUFFER_TYPE
Apply IO_BUFFER_TYPE on a top level port to tell the tool to use IBUFs and OBUFs, or not to
use input or output buffers. This attribute can be placed on any primary port or signal.
By default, Vivado synthesis infers input buffers for input ports, and infers output buffers for
output ports. However, you can manually use the IO_BUFFER_TYPE property to disable this
default behavior for specific ports or nets.
Note: The use of the IO_BUFFER_TYPE property implies a KEEP on the target net, which preserves the net
name and prevents removing the net through RTL optimization.
The IO_BUFFER_TYPE can be used with the CLOCK_BUFFER_TYPE property to determine the
combination of buffers to be inferred for clock signals.
• Applicable Objects:
Note: The property IO_BUFFER_TYPE is only available from HDL for Synthesis.
• Values: NONE: Specify this value on input or output ports. The presence of this property
indicates that no input or output buffers are to be inferred
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Not applicable.
Affected Steps
• Synthesis
Related Information
CLOCK_BUFFER_TYPE
IOB
IOB directs the Vivado tool to place a register that is connected to the specified port into the
input or output logic block. Place this attribute on a port, connected to a register that you want
to place into the I/O block.
IMPORTANT! With this property set to TRUE, the Vivado placer will only place the register into the IOB.
The tool will not move the flop out of the IOB to improve timing because the IOB constraint takes
precedence.
• Applicable Objects:
• Ports (get_ports)
○ Any port connected to a register
• Registers (get_cells)
• Values:
Syntax
• Verilog Syntax:
To set this attribute, place the proper Verilog attribute syntax before the top-level port
declaration.
(* IOB = "{TRUE|FALSE}" *)
• VHDL Syntax:
ACK : in std_logic;
attribute IOB : string;
-- Place the register connected to ACK in the input logic site attribute
IOB of ACK: signal is "TRUE";
• XDC Syntax:
Affected Steps
• Place Design
• Synthesis
IOB_TRI_REG
For UltraScale+ devices, the IOB_TRI_REG property tells the placer to place flip flops driving
Tristate signals on High-density (HD) I/O banks in the I/O Logic (IOB) instead of the device fabric.
Refer to the UltraScale Architecture SelectIO Resources User Guide (UG571) for more information
on High Density I/O.
TIP: TIP: This property must be assigned to the register cell as an XDC constraint, it is not supported in
HDL source files, and cannot be assigned to the port.
• Values:
• TRUE: Place the specified tristate register into the HD I/O Block.
• FALSE: Do not place the specified register into the I/O Block (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
IOBDELAY
The Input Output Block Delay (IOBDELAY) property specifies whether to add or remove delay in
the ILOGIC block to help mitigate input hold times for system-synchronous data input capture.
The ILOGIC block is located next to the I/O block (IOB), and contains the synchronous elements
for capturing data as it comes into the FPGA through the IOB. The ILOGIC block in 7 series
FPGAs can be configured as ILOGICE2 in HP I/O banks, and as ILOGICE3 in HR I/O banks.
ILOGICE2 and ILOGICE3 are functionally identical except that ILOGICE3 has a zero hold delay
element (ZHOLD) which can be configured with IOBDELAY. Refer to the 7 Series FPGAs SelectIO
Resources User Guide (UG471) or the UltraScale Architecture SelectIO Resources User Guide (UG571)
for more information on the use of IOBDELAY.
• Applicable Objects:
• Ports (get_ports)
• Cells, for assignment to input buffers (IBUFs)
• Nets
• Values:
• NONE: Sets the delay to OFF for both the IBUF and input flip-flop (IFD) paths.
• IBUF
○ Sets the delay to OFF for any register inside the I/O component.
○ Sets the delay to ON for the buffered path through the ILOGIC block.
• IFD
○ Sets the delay to ON for the IFF register inside the I/O component.
○ Sets the delay to OFF for the BUFFERED path through the ILOGIC.
• BOTH: Sets the delay to ON for both the IBUF and IFD paths.
Syntax
• Verilog Syntax:
Place the Verilog constraint immediately before the module or instantiation. Specify the
Verilog constraint as follows:
(* IOBDELAY = {NONE|BOTH|IBUF|IFD} *)
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Timing
• Place Design
• Routing
IODELAY_GROUP
IODELAY_GROUP groups IDELAYCTRL cells together with their associated IDELAY and
ODELAY cells to allow proper placement and replication.
If you use IODELAY_GROUP to assign a group name to an IDELAYCTRL, you need to also
associate an IDELAY or ODELAY cell to the group using the same IODELAY_GROUP property.
IMPORTANT! While an IODELAY_GROUP can contain multiple cells, a cell can only be assigned to one
IODELAY_GROUP. For automatic placement purposes, each bank can only be assigned a single
IODELAY_GROUP.
The following example uses set_property to group all the IDELAY/ODELAY elements
associated with a specific IDELAYCTRL.
HIODELAY_GROUP groups I/O delay components under the same hierarchical module.
Architecture Support
All architectures.
Applicable Objects
• Cells (get_cells)
○ IDELAY, ODELAY, or IDELAYCTRL instances
Values
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation of an IDELAY, ODELAY, or
IDELAYCTRL.
(* IODELAY_GROUP = "value" *)
• VHDL Syntax:
• XDC Syntax:
Where
Affected Steps
• Placement
See Also
Refer to the following design elements in the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953) or the UltraScale Architecture Libraries Guide (UG974).
• IDELAYCTRL
• IDELAYE2
• ODELAYE2
Related Information
HIODELAY_GROUP
IOSTANDARD
IOSTANDARD specifies which programmable I/O Standard to use to configure input, output, or
bidirectional ports on the target device.
IMPORTANT! You must explicitly define an IOSTANDARD on all ports in an I/O Bank before Vivado
Design Suite will create a bitstream from the design. However, IOSTANDARDs cannot be applied to GTs or
XADCs.
You can mix different IOSTANDARDs in a single I/O Bank, however, the IOSTANDARDs must be
compatible. The following rules must be followed when combining different input, output, and
bidirectional I/O standards in a single I/O bank:
1. Output standards with the same output VCCO requirement can be combined in the same
bank.
2. Input standards with the same VCCO and VREF requirements can be combined in the same
bank.
3. Input standards and output standards with the same VCCO requirement can be combined in
the same bank.
4. When combining bidirectional I/O with other standards, make sure the bidirectional standard
can meet the first three rules.
• Applicable Objects:
• Ports (get_ports)
○ Any port - Define the IOSTANDARD in the RTL source of I/O Ports, or as XDC
constraints for port cells.
• Values: There are many different valid I/O Standards for the target AMD FPGA. Refer to the 7
Series FPGAs SelectIO Resources User Guide (UG471) and the UltraScale Architecture SelectIO
Resources User Guide (UG571) for device specific IOSTANDARD values.
Syntax
• Verilog Syntax:
To set this parameter, place the proper Verilog syntax before the top-level port declaration.
(* IOSTANDARD = "value" *)
• VHDL Syntax:
Place the proper VHDL attribute syntax before the top-level port declaration. Declare and
specify the VHDL attribute as follows:
• XDC Syntax:
The IOSTANDARD can also be defined as an XDC constraint on port objects in the design.
Affected Steps
• I/O Planning
• Report Noise
• Report Power
• Report DRC
• Place Design
See Also
Refer to the following design elements in the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953), or the UltraScale Architecture Libraries Guide (UG974):
• OBUF
• OBUFT
• IOBUF
IP_REPO_PATHS
This property lets you create a custom IP catalog for use with the Vivado Design Suite.
The IP_REPO_PATHS property defines the path to one or more directories containing third-party
or user-defined IP. The specified directories, and any sub-directories, are searched for IP
definitions to add to the Vivado Design Suite IP catalog for use in design entry or with the IP
integrator. The property is assigned to the current fileset of the current project.
TIP: To configure the Vivado Design Suite to assign the IP_REPO_PATHS property to each new project as it
is created, you can use the Tools → Settings command in the Vivado IDE to set the default IP Repository
Search Paths under the IP Defaults page. The default IP repository search path is stored in the
vivado.ini file, and added to new projects using the IP_REPO_PATHS property.
The IP_REPO_PATHS looks for a <component>.xml file, where <component> is the name of
the IP to add to the catalog. The XML file identifies the various files that define the IP. The
IP_REPO_PATHS property does not have to point directly at the XML file for each IP in the
repository. The IP catalog searches through the sub-folders of the specified IP repositories,
looking for IP to add to the catalog.
IMPORTANT! You must use the update_ip_catalog command after setting the IP_REPO_PATHS
property to have the new IP repository directories added to the IP catalog.
If the third-party or user-defined IP in the repository supports the product family of the device in
use in the current project or design, the IP is added to the catalog as compatible IP. If the IP
compatibility does not include the target part, the IP is not compatible with the current project or
design and might not be visible in the IP catalog. Refer to the Vivado Design Suite User Guide:
Designing with IP (UG896) for more information.
• Values: <dir_name> : Specify one or more directory names where user-defined IP are stored.
Directory names can be specified as relative or absolute, should be separated, or delimited by
a space, and should be enclosed in braces, {}, or quotes, “”.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Design Entry
IS_ENABLED
The IS_ENABLED property lets you enable or disable individual design rule checks (DRC) in the
Vivado Design Suite when running Report DRC. For more information on Running DRCs, see this
Vivado Design Suite User Guide: System-Level Design Entry (UG895).
You can enable or disable both built-in and custom DRCs. For information on writing custom
design rule checks, see this Vivado Design Suite User Guide: Using Tcl Scripting (UG894).
IMPORTANT! Although Vivado allows you to disable and downgrade the severity of the built-in DRC
Objects, this practice is highly discouraged as it can cause unpredictable results and could potentially
cause permanent damage to the device.
To restore the DRC objects to the factory default setting, use the reset_drc_check Tcl
command.
• Values:
• TRUE: Enable the specified DRC for use during the report_drc command (default).
• FALSE: Disable the DRC so that the rule is not evaluated during report_drc.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• report_drc
• Write Bitstream
Related Information
SEVERITY
IS_SOFT
This is a Pblock property that indicates whether the Pblock must strictly be obeyed.
When the IS_SOFT property is set to TRUE, Pblocks are ignored starting with physical synthesis
in placer through the end of the implementation flow. This approach is particularly helpful for
preserving the overall placement while giving additional flexibility to placement algorithms that
reduce congestion, move logic closer to optimal locations, and increase the efficiency of physical
optimizations.
Restrictions: If a Pblock defines a Dynamic Function eXchange (DFX) dynamic region, then
IS_SOFT TRUE is ignored to prevent DRC failures.
• Values:
• TRUE: Pblock used for initial placement, then assigned leaf cells are allowed to move
outside Pblock boundaries to improve timing. This is default.
• FALSE: Pblock boundaries are hard and must be obeyed throughout the flow.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where <pblock_name> specifies the Pblock or Pblocks to apply the property to.
XDC Example:
Affected Steps
• Place Design
• Phys Opt Design
KEEP
Use the KEEP attribute to prevent optimizations. Where signals are optimized or absorbed into
logic blocks, the KEEP attribute instructs the synthesis tool to keep the signal it was placed on,
and extract that signal to the netlist.
For example, if a signal is an output of a 2-bit AND gate, and it drives another AND gate, the
KEEP attribute can be used to prevent that signal from being merged into a larger LUT that
encompasses both AND gates.
KEEP is also commonly used with timing constraints. If there is a timing constraint on a signal
that would normally be optimized, KEEP prevents that and allows the correct timing rules to be
used.
However, you should use care not to put KEEP on signals that do not drive anything. Synthesis
will preserve those signals, and they can cause problems in downstream processes.
Note: KEEP is not supported on the port of a module or entity. If specific ports are needed to be kept,
either use the flatten_hierarchy = “none” setting, or put a DONT_TOUCH on the module or
entity itself.
CAUTION! Be careful when using KEEP with other attributes. In cases where other attributes are in
conflict with KEEP, the KEEP attribute usually takes precedence.
Examples:
• When you have a MAX_FANOUT attribute on one signal and a KEEP attribute on a second
signal that is driven by the first; the KEEP attribute on the second signal would not allow
fanout replication.
• With a RAM STYLE=”block”, when there is a KEEP on the register that would need to
become part of the RAM, the KEEP attribute prevents the block RAM from being
inferred.
• Applicable Objects:
• get_nets
• get_cells
• Values:
RECOMMENDED: Set this attribute in the RTL only. Because signals that need to be kept are often
optimized before the XDC file is read, setting this attribute in the RTL ensures that the attribute is used.
Syntax
The syntax examples in this section show how to use this constraint with particular tools or
methods. If a tool or method is not listed, you cannot use this constraint with it.
• Verilog Syntax:
Place the Verilog constraint immediately before the module or instantiation. Specify the
Verilog constraint as follows:
(* KEEP = “{TRUE|FALSE|SOFT}” *)
Verilog Example:
• VHDL Syntax:
VHDL Example:
• XDC Syntax:
Not applicable
Affected Steps
• Synthesis
Related Information
DONT_TOUCH
KEEP_HIERARCHY
MARK_DEBUG
KEEP_COMPATIBLE
During the FPGA design process, you can change the target device when a design decision calls
for a larger or different part. The KEEP_COMPATIBLE property defines a list of one or more
AMD FPGA parts that the current design should be compatible with to permit targeting the
design on a different device as needed. This will allow the design to be mapped onto the current
part, or any of the compatible parts by preventing the use of IO or PACKAGE_PINs that are not
compatible between the specified devices.
The KEEP_COMPATIBLE property lets you define alternate compatible devices early in the
design flow so that I/O pin assignments will work across the specified list of compatible devices.
The Vivado Design Suite defines package pin PROHIBIT properties to prevent assignment of I/O
ports to pins that are not common to all the parts.
• Values:
COMPATIBLE_PARTs are defined by a combination of the device and the package of the
current target part. For example, the xc7k70tfbg676-2 part has the following properties:
The COMPATIBLE_PARTS property of the part object lists variations of the DEVICE and the
PACKAGE, without specifying the SPEED. This results in the following compatible parts:
xc7k160tfbg676-1
xc7k160tfbg676-2
xc7k160tfbg676-2L
xc7k160tfbg676-3
xc7k160tffg676-1
xc7k160tffg676-2
xc7k160tffg676-2L
xc7k160tffg676-3
xc7k325tfbg676-1
xc7k325tfbg676-2
xc7k325tfbg676-2L
xc7k325tfbg676-3
xc7k410tfbg676-1
xc7k410tfbg676-2
xc7k410tfbg676-2L
xc7k410tfbg676-3
xc7k410tffg676-1
xc7k410tffg676-2
xc7k410tffg676-2L
xc7k410tffg676-3
xc7k70tfbg676-1
xc7k70tfbg676-2
xc7k70tfbg676-2L
xc7k70tfbg676-3
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• I/O Planning
• Place Design
KEEP_HIERARCHY
KEEP_HIERARCHY directs the tool to retain a user hierarchy so that optimization does not occur
across its boundary. While this can assist floorplanning, analysis, and debugging, it can inhibit
optimization, resulting in a larger, slower design.
RECOMMENDED: To avoid these negative effects, register all outputs of a module instance in which a
KEEP_HIERARCHY is attached. To be most effective, apply this attribute before synthesis.
KEEP_HIERARCHY is used to prevent optimizations along the hierarchy boundaries. The Vivado
synthesis tool attempts to keep the same general hierarchies specified in the RTL, but to improve
quality of results (QoR), it can flatten or modify them.
If KEEP_HIERARCHY is placed on the instance, the synthesis tool keeps the boundary on that
level static. This can affect QoR and also should not be used on modules that describe the
control logic of 3-state outputs and I/O buffers. The KEEP_HIERARCHY can be placed in the
module or architecture level or the instance.
• Values:
• TRUE: Preserves the hierarchy by not allowing optimization across the hierarchy boundary.
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the user hierarchy instantiation:
(* KEEP_HIERARCHY = "{TRUE|FALSE}" *)
On Module:
On Instance:
• VHDL Syntax:
On a module:
On an instance:
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
DONT_TOUCH
KEEP
MARK_DEBUG
KEEPER
IMPORTANT! The KEEPER property has been deprecated and should be replaced by PULLTYPE.
KEEPER applies a weak driver on a tri-stateable output or bidirectional port to preserve its value
when not being driven. The KEEPER property retains the value of the output net to which the
port is attached.
For example, if logic 1 is being driven through the specified port, KEEPER drives a weak or
resistive 1 through the port. If the net driver is then tri-stated, KEEPER continues to drive a weak
or resistive 1 onto the net, through the connected port, to preserve that value.
Input buffers (for example., IBUF), 3-state output buffers (for example., OBUFT), and
bidirectional buffers (for example, IOBUF) can have a weak pull-up resistor, a weak pull-down
resistor, or a weak “keeper” circuit. This feature can be invoked by adding the PULLTYPE
property with one of the following values to the port object connected to the buffer:
• PULLUP
• PULLDOWN
• KEEPER
Note: When this attribute is applied, the KEEPER functionality will not be shown during RTL simulation
which can create a functional difference between RTL simulation and the implemented design. This
functionality can be verified using a gate-level simulation netlist or else the PULLDOWN UNISIM might be
instantiated in the design in place of using this property to reflect this behavior in the RTL simulation.
• Values:
• TRUE|YES: Use a keeper circuit to preserve the value on the net connected to the specified
port.
• FALSE|NO: Do not use a keeper circuit (default).
Syntax
• Verilog Syntax:
Place the Verilog constraint immediately before port definition. Specify the Verilog constraint
as follows:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
Related Information
PULLDOWN
PULLTYPE
PULLUP
LOC
LOC specifies the placement assignment of a logic cell to the SITE resources of the target AMD
part.
The LOC property or constraint is sometimes used with the BEL property to define the exact
placement of cells within the device. In these cases the BEL constraint must be defined before
the LOC constraint, or a placement error will occur.
TIP: To assign I/O ports to physical pins on the device package, use the PACKAGE_PIN property rather
than LOC.
Syntax
• Verilog Syntax:
TIP: The Verilog attribute can also be placed before the reg declaration of an inferred register, SRL, or
LUTRAM when that reg can be placed into a single device site:
(* LOC = "site_name" *)
// Designates placed_reg to be placed in SLICE site SLICE_X0Y0
(* LOC = "SLICE_X0Y0" *) reg placed_reg;
• VHDL Syntax:
Where signal_name is the signal name of an inferred primitive that can be placed into a
single site.
• XDC Syntax:
Affected Steps
• Design Floorplanning
• Place Design
Related Information
BEL
PACKAGE_PIN
PBLOCK
LOCK_PINS
LOCK_PINS is a cell property used to specify the mapping of logical LUT inputs (I0, I1, I2, …) to
physical LUT inputs (A6, A5, A4, …) on the AMD FPGA resource. A common use is to force
timing-critical LUT inputs to be mapped to the fastest A6 and A5 physical LUT inputs.
By default, LUT pins are mapped in order from highest to lowest. The highest logical pin is
mapped to the highest physical pin.
• ALUT6 placed on an A6LUT bel, would have a default pin mapping of:
I5:A6 I4:A5 I3:A4 I2:A3 I1:A2 I0:A1
• A LUT5 placed on a D5LUT bel, would have a default pin mapping of:
I5:A5 I4:A4 I3:A3 I2:A2 I1:A1
• A LUT2 placed on an A6LUT bel, would have a default pin mapping of:
I1:A6 I0:A5
The LOCK_PINS property is used by the Vivado router, which will not modify pin mappings on
locked LUTs even if it would result in improved timing. LOCK_PINS is also important for directed
routing. If a pin that is connected by a directed route, is swapped with another pin, the directed
route will no longer align with the LUT connection, resulting in an error. All LUT cells driven by a
directed route net should have their pins locked using LOCK_PINS. Refer to the Vivado Design
Suite User Guide: Implementation (UG904) for more information on directed routing.
When the LOCK_PINS property is removed from a cell, the pin mapping is cleared and the pins
are free to be swapped. However, there is no immediate change to the current pin assignments.
• Values:
• LOCK_PINS {I0:A6 I1:A5}: One or more pin mapping pairs, assigning LUT logical pins
to LUT physical pins using logical-to-physical pin map pairs.
○ The LOCK_PINS value syntax is an unordered list of pin mappings, separated by commas
in HDL, or by white space in XDC.
○ The list of possible instance pins ranges from I0 for a LUT1, to I0 through I5 for a LUT6.
The physical pins range from A6 (fastest) to A1 for a 6LUT and A5 (fastest) to A1 for a
5LUT.
Note: The ISE supported values of ALL, or no value to imply ALL, are not supported in the Vivado
Design Suite. To lock ALL pins, each pin must be explicitly specified. Any unlisted logical pins are
mapped to a physical pin using the default mapping.
Syntax
• Verilog Syntax:
LOCK_PINS values can be assigned as a Verilog attribute placed on instantiated LUT cells (e.g.
LUT6, LUT5, etc).
The following example defines LOCK_PINS with pin mapping logical I1 to A5, and logical I2 to
A6, on a LUT cell LUT_inst_0:
Verilog Example:
.I2(i2),
.I3(i3),
.I4(i4),
.I5(i5),
.O(o0));
endmodule
• VHDL Syntax:
LOCK_PINS values can be assigned as a VHDL attribute placed on instantiated LUT cells (e.g.
LUT6, LUT5, etc).
The following example defines LOCK_PINS with pin mapping logical I1 to A5, and logical I2 to
A6, on a LUT cell LUT_inst_0:
VHDL Example:
begin
LUT_inst_0 : LUT6 generic map ( INIT => "1"
) port map ( I0 => i0, I1 => i1, I2 => i2, I3 => i3, I4 => i4, I5 => i5,
O => o0
);
end architecture struct;
• XDC Syntax:
The LOCK_PINS property can be set on LUT cells using the set_property Tcl command in
the Vivado Design Suite:
IMPORTANT! XDC requires white space separation between pin pairs to satisfy the Tcl list syntax,
while HDL syntax requires comma-separated values.
Affected Steps
Related Information
BEL
DONT_TOUCH
LOC
LOCK_UPGRADE
Often, users want IP that was validated in the previous release to be not upgraded. It is possible
to selectively upgrade some IP within a block design. There are some limitations to this flow that
a user must understand. This section describes the process to selectively upgrade IP, the
requirements the consequences of doing so, and the limitations to this flow.
The LOCK_UPGRADE property lets you specify certain cells or IP in a block design to prevent
those cells or IP from being upgraded.
It might be that you have validated the IP in a prior release, and you have all of the required
output products, and you want to work with that content without upgrading to the latest version
of the IP. With the LOCK_UPGRADE property you can select specific IP to be excluded from the
upgrade process.
However, there are some limitations to this flow that you should understand. Refer to the section
on “Selectively Upgrading IP in Block Designs” in Vivado Design Suite User Guide: Designing IP
Subsystems using IP Integrator (UG994) to learn the requirements of this flow, and to “Limitations
of Selectively Upgrading IP in Block Designs” to learn the limitations.
• Values:
• TRUE | 1: Lock the specified block design cell or IP to prevent it from being upgraded as
part of the rest of the block design.
• FALSE | 0: Do not lock the block design cell to prevent upgrading (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
XDC Example:
Affected Steps
• IP upgrade
LUTNM
The LUTNM property lets you group two specific and compatible LUT primitives to be placed
into a single physical LUT by assigning the same <group_name>.
When LUT availability is low, the Vivado placer might automatically combine LUT instance pairs
onto single LUTs to fit the design successfully. You can also use the DISABLED value for the
LUTNM property on specific LUTs to prevent the Vivado placer from combining them with other
LUTs. This is useful, for example, to prevent LUT combining for debug ILA and VIO cores, keeping
probes available for later modification in the ECO flow. Refer to this Vivado Design Suite User
Guide: Programming and Debugging (UG908) for more information on the ECO flow.
TIP: The HLUTNM property and the LUTNM property are similar in purpose, and should be assigned
different values when used in the same level of hierarchy. The Vivado placer will combine LUTs that have
the same LUTNM and HLUTNM values, or return warnings related to conflicting values.
• Use LUTNM to group two LUT components that exist anywhere in the design, including in
different levels of the hierarchy.
• Use HLUTNM to group LUT components in a single hierarchical module, when you expect to
have multiple instances of that module used in the design.
○ HLUTNM is uniquified per hierarchy.
• Values:
• <group_name>: A unique group name to pack specified LUTs into the same LUT6 site.
• DISABLED: Prevents the placer from grouping the specified LUT with another LUT during
placement.
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the instantiation of a LUT. The Verilog attribute
must be used in pairs in the same logical hierarchy.
(* LUTNM = "group_name" *)
• VHDL Syntax:
Where:
The VHDL attribute must be used in pairs in the same logical hierarchy.
• XDC Syntax:
Where:
Affected Steps
• link_design
• Place Design
Related Information
HLUTNM
LUT_REMAP
The opt_design -remap option combines multiple LUTs into a single LUT to reduce the depth
of the logic. Remap optimization can also combine LUTs that belong to different levels of the
logical hierarchy.
Remapped logic is combined into the LUT that is furthest downstream in the logic cone.
The LUT_REMAP property lets you perform selective LUT remapping by applying the property to
sequential LUT pairs to direct opt_design to merge them into a single LUT.
Chains of LUTs with LUT_REMAP properties are collapsed into fewer logic levels where possible.
TIP: Setting the LUT_REMAP property to FALSE does not prevent LUTs from getting remapped when
running opt_design with the -remap option. To prevent LUTs from being remapped, apply the
DONT_TOUCH property with a value of true.
Refer to the Vivado Design Suite User Guide: Implementation (UG904) for more information on
optimization.
• Values:
• TRUE | 1
○ If opt_design -remap is called, the presence of the LUT_REMAP property with a
value of TRUE has no additional effect.
○ If opt_design -remap is not called, the presence of the LUT_REMAP property with a
value of TRUE on specific cells will call LUT remapping only for those specific cells
during opt_design.
• FALSE | 0: This setting has no effect as it does not prevent the LUT from being remapped.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The following assigns the LUT_REMAP property to the specified LUT primitives:
Affected Steps
Related Information
CARRY_REMAP
DONT_TOUCH
MUXF_REMAP
LUT_DECOMPOSE
The LUT_DECOMPOSE property lets you reduce design congestion by executing LUT
decomposition during logic optimization. The property can reduce interconnect density, and local
routing congestion without having much effect on the design performance, but could have a
larger impact on the design utilization when too many LUTs are decomposed. You must set
LUT_DECOMPOSE to true on the hierarchical or leaf cells where LUT decomposition is desired.
Note: LUT6 and LUT5 cells are targeted for decomposition. When LUT_DECOMPOSE attribute is applied
on selected LUT5/LUT6s, the tool tries to decompose them into back-to-back connected smaller LUTs
whenever possible. LUTs with timing constraints, DONT_TOUCH, SOFT_HLUTNM, HLUTNM, LUTNM will
not be considered for decomposition.
Syntax
• XDC Syntax:
Affected Steps
LVDS_PRE_EMPHASIS
On UltraScale devices, the LVDS_PRE_EMPHASIS property is used to improve signal integrity of
high-frequency signals that suffer high-frequency losses through the transmission line.
LVDS Transmitter pre-emphasis provides a voltage boost (gain) at the signal transitions to
compensate for transmission-line losses on the drivers implementing certain I/O standards. Pre-
emphasis for DDR4 HP I/O banks and LVDS TX HP/HR I/O banks is available to reduce inter-
symbol interference and to minimize the effects of transmission line loss.
TIP: Pre-emphasis at the transmitter can be combined with EQUALIZATION at the receiver to improve the
overall signal integrity.
The pre-emphasis at the transmitter is also a key to the signal integrity at the receiver. Pre-
emphasis increases the signal edge rate, which also increases the crosstalk on neighboring
signals.
• Values:
• TRUE: Enable pre-emphasis for differential inputs and bidirectional buffers implementing
the LVDS I/O standard. When set to TRUE, the ENABLE_PRE_EMPHASIS property on the
TX_BITSLICE must also be set to TRUE.
• FALSE: Do not enable pre-emphasis (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The LVDS_PRE_EMPHASIS attribute uses the following syntax in the XDC file:
Where:
Related Information
EQUALIZATION
PRE_EMPHASIS
MARK_DEBUG
Use MARK_DEBUG to specify that a net should be preserved during synthesis for hardware
debug. This will prevent optimization that could otherwise eliminate or change the name of the
specified signal. The MARK_DEBUG property preserves the signal to provide an easy means of
observing the values on this signal during hardware debug.
IMPORTANT! In some cases MARK_DEBUG can have unintended consequences on the optimization of
signals that are not marked for debug, but that are connected to hierarchical modules that also connect to
signals marked for debug.
Often, you identify nets for debugging through the pins of hierarchies or cells; however, the
MARK_DEBUG property must be assigned to nets. Therefore, it is recommended that you assign
MARK_DEBUG using both the get_nets and the get_pins commands:
This ensures that the MARK_DEBUG property is assigned to the net connected to the specified
pin regardless of how the net is named or renamed.
• Applicable Objects: Nets (get_nets): Any net accessible to the internal array.
Note: Some nets can have dedicated connectivity or other aspects that prohibit visibility for debug
purposes.
• Values:
Syntax
• Verilog Syntax:
To set this attribute, place the proper Verilog attribute syntax before the top-level output port
declaration:
(* MARK_DEBUG = "{TRUE|FALSE}" *)
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
• Opt Design
• Place Design
• Vivado hardware manager
Related Information
DONT_TOUCH
KEEP
KEEP_HIERARCHY
MAX_FANOUT
MAX_FANOUT constrains Vivado synthesis and placer to limit fanout on registers and signals,
replicating drivers as needed to stay within the MAX_FANOUT limit. The value is specified as an
integer.
IMPORTANT! Use MAX_FANOUT sparingly during synthesis. The place_design command in the
Vivado tools perform placement-based replication, which is more effective than logical replication in
synthesis. If a specific fanout is desired, it is often worth the time and effort to manually code the extra
registers.
This attribute only works on registers and combinatorial signals. To meet the specified fanout
limit, Vivado synthesis replicates the register or the driver that drives the combinatorial signal.
This attribute can be set in the RTL or the XDC.
MAX_FANOUT is also used during placement optimization when the placer can replicate
registers driving high-fanout nets, or registers driving nets with loads that are placed far apart, or
nets with a MAX_FANOUT property value that has not been satisfied. Fanout optimization
occurs early in the placement flow, reducing the timing critical aspect of paths before starting
detailed placement.
When the MAX_FANOUT value is less than the actual fanout of the constrained net the net is
always evaluated for replication, but the optimization can be skipped if timing does not improve.
The post-replication fanout will not necessarily match the MAX_FANOUT constraint value.
• Applicable Objects: Registers and combinatorial signals in RTL and net objects in synthesized
designs.
• Values: <Integer>:The MAX_FANOUT value is a fanout limit that guides synthesis and
placer to replicate MAX_FANOUT drivers until the fanout is at or below the fanout limit. For
synthesis the MAX_FANOUT value refers to the logical fanout, the fanout in the logical netlist.
For placement the value refers to the physical fanout, the site-based fanout after placement.
Syntax
• Verilog Syntax:
On Signal:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
• Place Design
MAX_FANOUT_MODE
You can force replication based on physical device attributes with the MAX_FANOUT_MODE
property. The property can take on the value of CLOCK_REGION, SLR, or MACRO. For example,
the MAX_FANOUT_MODE property with a value of CLOCK_REGION replicates the driver based
on the physical clock region, the loads placed into same clock region will be clustered together.
The MAX_FANOUT_MODE property takes precedence over the FORCE_MAX_FANOUT
property and physical synthesis will try to honor both by applying MAX_FANOUT_MODE-based
optimization first and then all its replicated drivers will inherit the FORCE_MAX_FANOUT
property to do further replication within a clock region.
• Applicable Objects: Nets (get_nets) directly connected to the output of a Register (FD,
FDCE, FDPE, FDRE, FDSE) or LUT (LUT1, LUT2, LUT3, LUT4, LUT5, LUT6, LUT6_2).
• Values: CLOCK_REGION, SLR, MACRO: Directs the tool replicate the driver per object
specified. MACRO loads are Block RAM, UltraRAM, or DSP.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Place Design
Related Information
FORCE_MAX_FANOUT
MAX_NAMES
The MAX_NAMES property lets you control the number of objects reported by individual Design
Rule Checks (DRCs) that return a list of objects. The default value is 15. For more information on
Running DRCs, see the Vivado Design Suite User Guide: System-Level Design Entry (UG895).
IMPORTANT! The MAX_NAMES property is only effective for the DRCs that include a list of objects
(typically at the end of the DRC message).
• Values: Integer Values of 0 or greater. The default is 15. A value of 0 will result in the default
of 15 being reported.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where:
Affected Steps
• report_drc
MBUFG_GROUP
AMD Versal™ Multi-Clock buffers (MBUFG) are clock buffers with multiple outputs that generate
a/1, /2, /4, /8 version of the input clock on the output pins O1, O2, O3, O4 respectively. Clock
buffers that are driven by the same clock modifying block such as MMCM, DPLL or XPLL or
parallel clock buffers that have a common driver can be converted to an MBUFG clock primitive
if the divide factors of the output clocks with relationship to the input clocks are 1, 2, 4, 8. The
MBUFG_GROUP property can be applied to the clock nets driven by global clock buffers that
have the same MMCM, PLL, GT, or a common driver that should be converted to an MBUFG
primitive during the opt_design stage.
• Applicable Objects: Clock net segments (get_nets) directly connected to the output of
global clock buffers (BUFG_PS, BUFGCE, BUFGCTRL, BUFGCE_DIV, BUFG_GT) that have a
common driver and have clock period requirements related by a factor of 1, 2, 4, or 8.
• Values: <name>: A unique string identifier used by the Vivado placer to match the delays on
specified clock nets.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where
• <name> is the unique name to associate with the specified clock nets.
• <clk_nets> is a list of clock nets directly connected to the output of global clock buffers,
that are driven by a common cell, such as an MMCM for example.
Affected Steps
• Opt Design
MIG_FLOORPLAN_MODE
The MIG_FLOORPLAN_MODE guides the tool to perform placement of memory interface (MIG)
logic instances for UltraScale and UltraScale+ devices. The MIG_FLOORPLAN_MODE is applied
to the hierarchical cell of the memory interface. In most designs, the memory interface logic will
be placed to the right of the I/O Column containing the memory interface. This placement results
in consistent timing for the memory interface logic.
If a parent hierarchy of the memory interface is assigned to a Pblock that does not fully cover an
SLR, the default placement behavior of the memory interface logic will be overridden, and the
memory interface can be placed on both sides of the I/O Column. This is often undesirable
because it creates timing closure challenges for the memory interface. In order to force the
placement of the memory interface logic to the right of the I/O Column, the
MIG_FLOORPLAN_MODE can be set to FULL.
In cases where it is not necessary to place the memory interface logic to the right of the I/O
Column, the MIG_FLOORPLAN_MODE can be set to NONE allowing the memory interface logic
to be placed on both sides of the I/O Column.
• Applicable Objects:
Cell (get_cells)
The cell specified should be the hierarchy of the Memory Interface (MIG) Instance.
• Values:
• NONE: Allow the memory interface logic to be placed on both sides of the I/O Column
• AUTO: Tool determines the placement of the memory interface logic (default)
• FULL: Force the memory interface logic to the right of the I/O Column
• PHY_ONLY: Reserved for future use
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
# Force the memory interface logic placement to the right of the I/O
Column
set_property MIG_FLOORPLAN_MODE FULL [get_cells example_top_inst_3/
u_ddr4_0]
set_property MIG_FLOORPLAN_MODE FULL [get_cells example_top_inst_1/
u_ddr4_0]
# Allow the memory interface logic placement on both sides of the I/O
Column
set_property MIG_FLOORPLAN_MODE NONE [get_cells example_top_inst_2/
u_ddr4_0]
Affected Steps
• Place Design
MUXF_REMAP
The opt_design -muxf_remap option lets you convert MUXF7, MUXF8, and MUXF9
primitives to LUT3 to reduce routing congestion.
This property works similar to the LUT_REMAP property. If it is set to true on a MUXF* cell it will
automatically trigger the MUX remap optimization during opt_design, and map those cells to a
LUT3.
Unlike the LUT_REMAP property though, the MUXF_REMAP property also lets you limit the
scope of the -muxf_remap optimization by setting the property to FALSE on individual MUXF
cells. If it the property is set to FALSE on a MUXF cell, and the opt_design -muxf_remap
command is called, it will prevent those MUXF cells from being mapped to a LUT3.
Refer to the Vivado Design Suite User Guide: Implementation (UG904) for more information on
optimization.
• Values:
• TRUE | 1
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The following assigns the MUXF_REMAP property as FALSE to the specified MUXF primitives
to exclude these cells from remapping when the opt_design -mux_remap command is
used:
Affected Steps
Related Information
CARRY_REMAP
LUT_REMAP
ODT
The On-Die Termination (ODT) property is used to define the value of the on-die termination for
both digitally controlled impedance (DCI) and non-DCI versions of the I/O standards supported.
The advantage of using ODT over external resistors is that signal integrity is improved by
completely removing the stub at the receiver.
IMPORTANT! For 7 series FPGAs, use IN_TERM instead of ODT to specify uncalibrated termination.
ODT supports split or single termination on the inputs of the HSTL, SSTL, POD, and HSUL
standards. The VCCO of the I/O bank must be connected to the appropriate voltage level for the
ODT attribute to perform as expected. Refer to the UltraScale Architecture SelectIO Resources User
Guide (UG571) for the VCCO levels required for specific I/O standards.
For the I/O standards that support parallel termination, DCI creates a Thevenin equivalent, or
split-termination resistance to the VCCO /2 voltage level. For POD and HSUL standards, DCI
supports a single-termination to the VCCO voltage level. The exact value of the termination
resistors is determined by the ODT value. Possible ODT values for split-termination DCI are
RTT_40, RTT_48, RTT_60, or RTT_NONE.
Note: DCI is only available in high-performance (HP) I/O banks. High-range (HR) I/O banks do not support
DCI.
Both HR and HP I/O banks have an optional uncalibrated on-chip split-termination feature that
creates a Thevenin equivalent circuit using two internal resistors of twice the target resistance
value for HSTL and SSTL standards. They also provide an un-calibrated on-chip single-
termination feature for POD and HSUL I/O standards. The termination is present constantly on
inputs, and is present on bidirectional ports whenever the output buffer is 3-stated. The use of a
DCI-based I/O standard determines whether the DCI or un-calibrated termination is invoked in a
design. In both DCI and un-calibrated I/O standards, the values of the termination resistors are
determined by the ODT attribute.
While the 3-state split-termination DCI is calibrated against external reference resistors on the
VRN and VRP pins, the ODT property invokes an uncalibrated split-termination option using
internal resistors that have no calibration to compensate for temperature, process, or voltage
variations.
• Values:
• RTT_40
• RTT_48
• RTT_60
• RTT_120
• RTT_240
• RTT_NONE
Note: Not all values are allowed for all applicable I/O standards and configurations.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The ODT attribute uses the following syntax in the XDC file:
Where:
Related Information
IN_TERM
IOSTANDARD
OPT_MODIFIED
When logic optimization is performed on a primitive cell, the OPT_MODIFIED property of the
cell is updated to reflect the optimizations performed on the cell. When multiple optimizations
are performed on the same cell, the OPT_MODIFIED value contains a list of optimizations in the
order they occurred.
Values
The following table lists the OPT_MODIFIED property value for the various opt_design
options:
Note: The block RAM power optimizations are not covered under OPT_MODIFIED property.
Syntax
Affected Steps
• Implementation
Related Information
PHYS_OPT_MODIFIED
OPT_SKIPPED
When logic optimization is skipped on a candidate primitive cell, the OPT_SKIPPED property of
the cell is updated to reflect the skipped optimizations. When multiple optimizations are skipped
on the same cell, the OPT_SKIPPED value contains a list of skipped optimizations.
Values
The following table lists the OPT_SKIPPED property value for the various opt_design options:
Syntax
Affected Steps
• Implementation
Related Information
PHYS_OPT_SKIPPED
OFFSET_CNTRL
Receiver OFFSET Control, OFFSET_CNTRL, is available for some I/O standards on UltraScale
devices to compensate for process variations. OFFSET_CNTRL can only be assigned to high-
performance (HP) I/Os.
In HP I/O banks, for a subset of I/O standards, the UltraScale architecture provides the option of
canceling the inherent offset of the input buffers that occurs due to process variations (up to ±35
mV).
Offset calibration requires building control logic into your interconnect logic design. Refer to the
UltraScale Architecture SelectIO Resources User Guide (UG571) for more information.
• Applicable Objects:
IMPORTANT! There must be an offset control circuit on the fabric to handle the offset cancellation.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The OFFSET_CNTRL attribute uses the following syntax in the XDC file:
Where:
Affected Steps
• Place Design
• Routing
PACKAGE_PIN
PACKAGE_PIN defines a specific assignment, or placement, of a top-level port in the logical
design to a physical package pin on the device.
RECOMMENDED: To assign I/O ports to physical pins on the device package, use the PACKAGE_PIN
property rather than LOCS. Use the LOC property to assign logic cells to device resources on the target
AMD FPGA.
Syntax
• Verilog Syntax:
(* PACKAGE_PIN = "pin_name" *)
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Pin planning
• Place Design
Related Information
LOC
PATH_MODE
The PATH_MODE property determines how the Vivado Design Suite evaluates a path when
trying to locate a file or reading a path-based constraint or property.
For every file in a project, and for most properties that refer to files and directories, the Vivado
Design Suite attempts to store and maintain both a relative path and an absolute path to the file
or directory. When a project is opened, these paths are used to locate the files and directories.
By default the Vivado Design Suite applies a Relative First approach to resolving paths, searching
the relative path first, then the absolute path. You can use the PATH_MODE property to change
how the Vivado tool resolves file paths or properties for specific objects.
TIP: For some paths, in particular those on different drives on Windows, the Vivado tool cannot maintain a
relative path. In these cases, only an absolute path is stored.
When the RelativeFirst or AbsoluteFirst settings are used, the Vivado tool will issue a warning
when it has to use the alternate, or second path to find an object.
• Values:
• RelativeFirst: Use the relative path to the project to locate the file. If the file can not
be found with this path, use the absolute path. This is the default value and is suitable for
most uses.
• AbsoluteFirst: Use the absolute path to locate the file. If the file can not be found, use
the relative path. AbsoluteFirst or AbsoluteOnly might be appropriate for files stored in a
fixed repository, for example standard files used by everyone in a design group or company,
or for a library of IP.
• RelativeOnly: Use only the relative path to locate the file. If the file can not be found,
issue an appropriate message and treat the file as missing. The RelativeOnly or
AbsoluteOnly settings might be appropriate when multiple files with the same name exist,
and you need to insure that the correct file is located.
• AbsoluteOnly: Use only the absolute path to locate the file. If the file can not be found,
issue an appropriate message and treat the file as missing.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
PBLOCK
PBLOCK is a read-only property attached to cells that assigned to Pblocks in the Vivado Design
Suite.
A Pblock is a collection of cells, and one or more rectangular areas or regions that specify the
device resources contained by the Pblock. Pblocks are used during floorplanning placement to
group related logic and assign it to a region of the target device. Refer to the Vivado Design Suite
User Guide: Design Analysis and Closure Techniques (UG906) for more information on the use of
Pblocks in floorplanning your design.
Pblocks are created using the create_pblock Tcl command, and are populated with cells using
the add_cells_to_pblock command. The following code defines a 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
{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 second line assigns logic cells to the Pblock. In this case, all of the cells in the specified
hierarchical module are assigned to the Pblock. Cells that are assigned to a specific Pblock are
assigned the Pblock property.
The subsequent commands, resize_pblock, define the size of the Pblock by specifying a range of
device resources that are contained inside the Pblock. A pblock has a grid of four device resource
types: SLICE/CLB, DSP48, RAMB18, RAMB36. Logic that does not match one of these device
types can be placed anywhere in the device. To constrain only the Block RAMs in the level of
hierarchy, disable (or simply do not define) the other Pblock grids.
Refer to the Vivado Design Suite Tcl Command Reference Guide (UG835) for details on the specific
Tcl commands mentioned above.
• Values: <NAME>: The property value is the name of the Pblock that the cell is assigned to. The
Pblock name is defined when the Pblock is created with the create_pblock command.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The Pblock can be defined in the XDC file, or directly in the design, with the Tcl command:
create_pblock <pblock_name>
XDC Example
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}
Affected Steps
• Design Floorplanning
• Place Design
Related Information
BEL
CONTAIN_ROUTING
LOC
EXCLUDE_PLACEMENT
SNAPPING_MODE
PHYS_OPT_MODIFIED
When physical optimization is performed on a primitive cell, the PHYS_OPT_MODIFIED
property of the cell is updated to reflect the optimizations performed on the cell. When multiple
optimizations are performed on the same cell, the PHYS_OPT_MODIFIED value contains a list of
optimizations in the order they occurred.
Values
The following table lists the phys_opt_design options that trigger an update to the
PHYS_OPT_MODIFIED property and the corresponding value.
Syntax
Affected Steps
• Implementation
Related Information
OPT_MODIFIED
PHYS_OPT_SKIPPED
When physical optimization is skipped on a candidate primitive cell, the PHYS_OPT_MODIFIED
property of the cell is updated to reflect the skipped optimizations. When multiple optimizations
are skipped on the same cell, the OPT_SKIPPED value contains a list of skipped optimizations.
Values
The following table lists the OPT_SKIPPED property value for the various opt_design options:
Syntax
Affected Steps
• Implementation
Related Information
OPT_SKIPPED
PHYSOPT_RETIMING_BACKWARD
The PHYSOPT_RETIMING_BACKWARD attribute instructs the tool to move a register from the
output of a gate and creates new registers at the inputs of the same gate. Applying this attribute
on a cell instructs the physical synthesis optimization engine (post placement step) to perform
retiming.
• Values:
Affected Steps
PHYSOPT_RETIMING_FORWARD
The PHYSOPT_RETIMING_FORWARD attribute instructs the tool to move a register from the
input of a gate and creates new registers at the output of same gate. Applying this attribute on a
cell instructs the physical synthesis optimization engine (post placement step) to perform
retiming.
• Values:
Affected Steps
POST_CRC
The Post CRC (POST_CRC) constraint enables or disables the Cyclic Redundancy Check (CRC)
error detection feature for configuration logic, allowing for notification of any possible change to
the configuration memory. This feature is only supported in 7 series FPGAs. For more
information refer to the 7 Series FPGAs Configuration User Guide (UG470).
TIP: Alternatively, AMD recommends use of the AMD Soft Error Mitigation (SEM) IP for all architectures.
This IP automates the implementation of single event upset (SEU) detection and correction. For additional
information, refer to the Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036).
Enabling the POST_CRC property controls the generation of a pre-computed CRC value in the
bitstream. As the configuration data frames are loaded, the device calculates a Cyclic
Redundancy Check (CRC) value from the configuration data packets. After the configuration data
frames are loaded, the configuration bitstream can issue a Check CRC instruction to the device,
followed by the pre-computed CRC value. If the CRC value calculated by the device does not
match the expected CRC value in the bitstream, the device pulls INIT_B Low and aborts
configuration.
When CRC is disabled a constant value is inserted in the bitstream in place of the CRC, and the
device does not calculate a CRC.
• Values:
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Write Bitstream
• launch_runs
Related Information
POST_CRC_ACTION
POST_CRC_FREQ
POST_CRC_INIT_FLAG
POST_CRC_SOURCE
POST_CRC_ACTION
The Post CRC Action property (POST_CRC_ACTION) applies to the configuration logic CRC error
detection mode. This property determines the action that the device takes when a CRC
mismatch is detected: correct the error, continue operation, or stop configuration. This feature is
only supported in 7 series FPGAs. For more information refer to the 7 Series FPGAs Configuration
User Guide (UG470).
TIP: Alternatively, AMD recommends use of the AMD Soft Error Mitigation (SEM) IP for all architectures.
This IP automates the implementation of single event upset (SEU) detection and correction. For additional
information, refer to the Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036).
During readback, the syndrome bits are calculated for every frame. If a single bit error is
detected, the readback is stopped immediately. If correction is enabled using the
POST_CRC_ACTION property, then the readback CRC logic performs correction on single bit
errors. The frame in error is readback again, and using the syndrome information, the bit in error
is fixed and written back to the frame. If the POST_CRC_ACTION is set to
Correct_And_Continue, then the readback logic starts over from the first address. If the
Correct_And_Halt option is set, the readback logic stops after correction.
• Values:
• HALT: If a CRC mismatch is detected, stop reading back the bitstream, stop computing the
comparison CRC, and stop making the comparison against the pre-computed CRC.
• CONTINUE: If a CRC mismatch is detected by the CRC comparison, continue reading back
the bitstream, computing the comparison CRC, and making the comparison against the pre-
computed CRC.
• CORRECT_AND_CONTINUE: If a CRC mismatch is detected by the CRC comparison, it is
corrected and continues reading back the bitstream, computing the comparison CRC, and
making the comparison against the pre-computed CRC.
• CORRECT_AND_HALT: If a CRC mismatch is detected, it is corrected and stops reading
back the bitstream, computing the comparison CRC, and making the comparison against
the pre-computed CRC.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where <VALUE> is one of the accepted values for the POST_CRC_ACTION property.
Affected Steps
• Write Bitstream
• launch_runs
Related Information
POST_CRC
POST_CRC_FREQ
POST_CRC_INIT_FLAG
POST_CRC_SOURCE
POST_CRC_FREQ
The Post CRC Frequency property (POST_CRC_FREQ) controls the frequency with which the
configuration CRC check is performed for the current design. This feature is only supported in
7 series FPGAs. For more information refer to the 7 Series FPGAs Configuration User Guide
(UG470).
TIP: Alternatively, AMD recommends use of the AMD Soft Error Mitigation (SEM) IP for all architectures.
This IP automates the implementation of single event upset (SEU) detection and correction. For additional
information, refer to the Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036).
This property is only applicable when POST_CRC is set to ENABLE. Enabling the POST_CRC
property controls the periodic comparison of a pre-computed CRC value in the bitstream with an
internal CRC value computed by readback of the configuration memory cells.
The POST_CRC_FREQ defines the frequency in MHz of the readback function, with a default
value of 1 MHz.
• Values: Specify the frequency in MHz as an integer with one of the following accepted values:
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where <VALUE> is one of the accepted values for the POST_CRC_FREQ property.
Affected Steps
• Write Bitstream
• launch_runs
Related Information
POST_CRC
POST_CRC_ACTION
POST_CRC_INIT_FLAG
POST_CRC_SOURCE
POST_CRC_INIT_FLAG
The Post CRC INIT Flag property (POST_CRC_INIT_FLAG) determines whether the INIT_B pin is
enabled as an output for the SEU (Single Event Upset) error signal. This feature is only supported
in 7 series FPGAs. For more information refer to the 7 Series FPGAs Configuration User Guide
(UG470).
TIP: Alternatively, AMD recommends use of the AMD Soft Error Mitigation (SEM) IP for all architectures.
This IP automates the implementation of single event upset (SEU) detection and correction. For additional
information, refer to the Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036).
The error condition is always available from the FRAME_ECC site. However, when the
POST_CRC_INIT_FLAG is ENABLED, which is the default, the INIT_B pin also flags the CRC error
condition when it occurs.
• Values:
• DISABLE: Disables the use of the INIT_B pin, with the FRAME_ECC site as the sole source
of the CRC error signal.
• ENABLE: Leaves the INIT_B pin enabled as a source of the CRC error signal (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Write Bitstream
• launch_runs
Related Information
POST_CRC
POST_CRC_ACTION
POST_CRC_FREQ
POST_CRC_SOURCE
POST_CRC_SOURCE
The Post CRC Source (POST_CRC_SOURCE) constraint specifies the source of the CRC value
when the configuration logic CRC error detection feature is used for notification of any possible
change to the configuration memory. This feature is only supported in 7 series FPGAs. For more
information refer to the 7 Series FPGAs Configuration User Guide (UG470).
TIP: Alternatively, AMD recommends use of the AMD Soft Error Mitigation (SEM) IP for all architectures.
This IP automates the implementation of single event upset (SEU) detection and correction. For additional
information, refer to the Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036).
This property is only applicable when POST_CRC is set to ENABLE. Enabling the POST_CRC
property controls the generation of a pre-computed CRC value in the bitstream. As the
configuration data frames are loaded, the device calculates a Cyclic Redundancy Check (CRC)
value from the configuration data packets.
The POST_CRC_SOURCE property defines the expected CRC value as either coming from a pre-
computed value, or as being taken from the configuration data in the first readback pass.
• Values:
Architecture Support
7 series FPGAs.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Write Bitstream
• launch_runs
Related Information
POST_CRC
POST_CRC_ACTION
POST_CRC_FREQ
POST_CRC_INIT_FLAG
PRE_EMPHASIS
The PRE_EMPHASIS property is used to improve signal integrity of high-frequency signals that
suffer high-frequency losses through the transmission line. The transmitter pre-emphasis
(PRE_EMPHASIS) feature allows pre-emphasis on the signal drivers for certain I/O standards.
TIP: Pre-emphasis at the transmitter can be combined with EQUALIZATION at the receiver to improve the
overall signal integrity.
Ideal signals perform a logic transition within the symbol interval of the frequency. However,
lossy transmission lines can expand beyond the symbol interval. Pre-Emphasis provides a voltage
gain at the transitions to account for transmission-line losses. In the frequency domain, pre-
emphasis boosts the high-frequency energy on every transition in the data stream.
The pre-emphasis selection is also a key to the signal integrity at the receiver. Pre-emphasis
increases the signal edge rate, which also increases the crosstalk on neighboring signals.
Because the impact of pre-emphasis on crosstalk and signal discontinuity is dependent on the
transmission line characteristics, simulation is required to ensure the impact is minimal. Over
emphasis of the signal can further degrade the signal quality instead of improving it.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The PRE_EMPHASIS attribute uses the following syntax in the XDC file:
Where:
Related Information
EQUALIZATION
LVDS_PRE_EMPHASIS
PROCESSING_ORDER
The PROCESSING_ORDER property determines if an XDC file will be processed early by the
Vivado Design Suite during constraint processing, or processed normally, or processed late. The
PROCESSING_ORDER can be: EARLY, NORMAL, or LATE.
By default, the Vivado Design Suite reads XDC files for IP cores before the user XDC files
defined in the constraint fileset for the top-level design. Processing constraints in this way allows
an IP to define constraints required by the core, while letting you override those IP constraints
with user constraints processed later. Refer to this Vivado Design Suite User Guide: Using
Constraints (UG903) for more information.
User constraint files marked with a common PROCESSING_ORDER will be processed in the
order they are defined in a constraint set, as displayed in the Vivado IDE. The order of the files
can be modified by changing the compile order of the files in the Vivado IDE, or by using the
reorder_files command.
• Values:
• NORMAL: Process these files after the EARLY files and before the LATE files (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Synthesis
• Implementation
PROHIBIT
PROHIBIT specifies that a BEL or SITE cannot be used for placement.
TIP: The use of PROHIBIT on RAMB18 sites will not prohibit the placement of a RAMB36. Likewise the
use of PROHIBIT on RAMB36 sites will not prohibit the placement of the RAMB18.
• Applicable Objects:
• SITEs (get_sites)
• BELs (get_bels)
• Values: TRUE (or 1): Prohibit the specified BEL or SITE from use during placement.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• I/O planning
• Place Design
PSIP_RETIMING_BACKWARD
The PSIP_RETIMING_BACKWARD attribute instructs the tool to move a register from the output
of a gate and creates new registers at the inputs of the same gate. Applying this attribute on a
cell instructs the PSIP engine (Physical Synthesis in Placer, a sub phase in placer optimization) to
perform retiming.
• Architecture Support:
All architectures.
• Applicable Objects:
Cells (get_cells).
• Values:
• True (or 1): The Vivado PSIP engine performs backward retiming.
• False (or 0): The Vivado PSIP engine does not perform backward retiming.
Affected Steps
• Place Design
PSIP_RETIMING_FORWARD
The PSIP_RETIMING_FORWARD attribute instructs the tool to move a register from the input of
a gate and creates new registers at the output of same gate. Applying this attribute on a cell
instructs the PSIP engine (Physical Synthesis in Placer, a sub phase in placer optimization) to
perform retiming.
• Values:
• True (or 1): The Vivado PSIP engine performs forward retiming.
• False (or 0): The Vivado PSIP engine does not perform forward retiming.
Affected Steps
• Place Design
PULLDOWN
IMPORTANT! The PULLDOWN property has been deprecated and should be replaced by PULLTYPE.
PULLDOWN applies a weak logic low level on a tri-stateable output or bidirectional port to
prevent it from floating. The PULLDOWN property guarantees a logic Low level to allow tri-
stated nets to avoid floating when not being driven.
Input buffers (for example., IBUF), 3-state output buffers (for example, OBUFT), and bidirectional
buffers (for example, IOBUF) can have a weak pull-up resistor, a weak pull-down resistor, or a
weak “keeper” circuit. This feature can be invoked by adding the PULLTYPE property with one of
the following properties to the port or net object connected to the buffer:
• PULLUP
• PULLDOWN
• KEEPER
Note: When this attribute is applied, the PULLDOWN functionality will not be shown during RTL
simulation that can create a functional difference between RTL simulation and the implemented design.
This functionality can be verified using a gate-level simulation netlist or else the PULLDOWN UNISIM
might be instantiated in the design in place of using this property to reflect this behavior in the RTL
simulation.
For more information see the Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide
(UG953) or the UltraScale Architecture Libraries Guide (UG974).
• Values:
• TRUE|YES: Use a pulldown circuit to avoid signal floating when not being driven.
• FALSE|NO: Do not use a pulldown circuit (default).
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the module or instantiation. Specify as follows:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
Related Information
KEEPER
PULLUP
PULLTYPE
IMPORTANT! The PULLTYPE property replaces KEEPER, PULLDOWN, and PULLUP properties, which
have been deprecated.
Input buffers (for example, IBUF), 3-state output buffers (for example, OBUFT), and bidirectional
buffers (for example, IOBUF) can have a weak pull-up resistor, a weak pull-down resistor, or a
weak “keeper” circuit. This feature can be invoked by adding the PULLTYPE property with one of
the following properties to the port or net object connected to the buffer:
• PULLUP
• PULLDOWN
• KEEPER
Note: When this property is applied, the KEEPER, PULLDOWN, or PULLUP functionality will not be shown
during RTL simulation which can create a functional difference between the RTL simulation results and the
implemented design. This functionality can be verified by using the post-synthesis gate-level netlist which
includes the object; or by instantiating the appropriate UNISIM object into the design in place of using the
PULLTYPE property to reflect this behavior in the RTL simulation.
For differential inputs or outputs, you can set the following parameter to define the preferred
termination strategy:
Where:
○ For UltraScale and UltraScale+ architecture, AUTO has the same effect as OPPOSITE.
• SAME: both the positive and negative side are PULLUP or PULLDOWN, as defined by the
PULLTYPE property.
• OPPOSITE: If the PULLTYPE of the P-side is assigned a PULLUP, then the N-side is assigned a
PULLDOWN.
For more information see the Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide
(UG953) or the UltraScale Architecture Libraries Guide (UG974).
• Values:
• KEEPER: Use a keeper circuit to preserve the value on the net connected to the specified
port.
• PULLDOWN: Use a pulldown circuit to avoid signal floating when not being driven.
• PULLUP: Use a pullup circuit to avoid signal floating when not being driven.
• {}: (NULL) Do not use a keeper, pulldown, or pullup circuit (default).
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the module or instantiation. Specify as follows:
• VHDL Syntax:
• XDC Syntax:
-or-
Affected Steps
Related Information
KEEPER
PULLDOWN
PULLUP
PULLUP
IMPORTANT! The PULLUP property has been deprecated and should be replaced by the PULLTYPE
property.
PULLUP applies a weak logic High on a tri-stateable output or bidirectional port to prevent it
from floating. The PULLUP property guarantees a logic High level to allow tri-stated nets to
avoid floating when not being driven.
Input buffers (for example, IBUF), 3-state output buffers (for example, OBUFT), and bidirectional
buffers (for example, IOBUF) can have a weak pull-up resistor, a weak pull-down resistor, or a
weak “keeper” circuit. This feature can be invoked by adding the PULLTYPE property with one of
the following values to the port object connected to the buffer:
• PULLUP
• PULLDOWN
• KEEPER
Note: When this property is applied, the PULLUP functionality will not be shown during RTL simulation
which can create a functional difference between RTL simulation and the implemented design. This
functionality can be verified using a gate-level simulation netlist or else the PULLUP UNISIM might be
instantiated in the design in place of using this property to reflect this behavior in the RTL simulation.
For more information see the Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide
(UG953) or the UltraScale Architecture Libraries Guide (UG974).
• Values:
• TRUE|YES: Use a pullup circuit to avoid signal floating when not being driven.
• FALSE|NO: Do not use a pullup circuit (default).
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the module or instantiation. Specify as follows:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
RAM_DECOMP
The RAM_DECOMP property instructs the tool to infer RTL RAMs that are too large to fit in a
single block RAM primitive to use a power efficient configuration, rather than a timing efficient
solution.
TIP: This property only applies to Block RAMs, so it has no effect when RAM_STYLE indicates a distributed
RAM configuration.
For example, a RAM specified as 2K x 36 would often be configured as two 2K x 18 block RAMs
arranged side by side. This configuration yields the best timing results. However, by setting the
RAM_DECOMP property, the RAM would instead be configured as 2 1K x 36 block RAMs. This
configuration is more power-efficient because during a read or write, only the RAM with the
address being used is active. This configuration is less timing efficient though, because Vivado
synthesis must then use address decoding. This attribute can be set in either RTL or XDC.
• Values: power: Configure RAM in a power efficient way, rather than timing efficient.
IMPORTANT! To restore the default synthesis behavior, you must remove the RAM_DECOMP
property as there is no default setting.
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
RAM_STYLE
RAM_STYLE
RAM_STYLE instructs the Vivado synthesis tool on how to infer memory in the design. For more
information about RAM coding styles, see HDL Coding Techniques in Vivado Design Suite User
Guide: Synthesis (UG901).
By default, the tool selects the type of RAM to infer based upon heuristics that give the best
results for most designs. Place this attribute on the array that is declared for the RAM, or a level
of hierarchy, to direct synthesis to infer a specific style of RAM. If set on a level of hierarchy, this
affects all RAM in that level of hierarchy. Nested levels of hierarchy are not affected.
• Values:
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
Related Information
RAM_DECOMP
RAM_AVERAGE_ACTIVITY
The RAM_AVERAGE_ACTIVITY property is a read-only property where the value is a pessimistic
estimate performed by Vivado representing the average frequency of all UltraRAM and Block
RAM on the device that can be switched (enabled/disabled). The value is used by Vivado to
model power supply noise induced by RAM switching and calculate jitter for global clocks in
static timing analysis.
• Architecture Support:
Syntax
Not Applicable.
Affected Steps
• Timing Analysis
• Implementation
See Also
Related Information
USER_RAM_AVERAGE_ACTIVITY
REF_NAME
REF_NAME is a read-only property on cells of the design indicating a logical cell name that
uniquely identifies the cell.
This property is defined automatically by the Vivado Design Suite, and can not be modified by
the user in either HDL or XDC. It is intended for reference only.
The property does not influence any steps but is very useful in defining filters and other Vivado
Tcl command queries to identify specific cells or other objects.
For example, to select the clock pins on RAM cells, you can filter the pin objects based on the
REF_NAME property of the cells:
TIP: When an RTL module is instantiated multiple times in the design, synthesis sequentially numbers the
original REF_NAME property to provide a unique identifier for each cell. In this case, the ORIG_REF_NAME
property is used to store the original RTL module name (REF_NAME). As a result, you can filter both on
REF_NAME and ORIG_REF_NAME to identify all instances of the cell:
get_cells -hierarchical \
-filter {ORIG_REF_NAME == FifoBuffer || REF_NAME == FifoBuffer}
Syntax
Not applicable
REF_PIN_NAME
REF_PIN_NAME is a read-only property on pins in the design indicating a logical name that
uniquely identifies the pin.
This property is automatically defined from the NAME or HIERARCHICAL NAME of the pin, and
can not be modified by the user in either HDL or XDC. It is intended for reference only.
The property does not influence any steps but is very useful in defining filters and other Vivado
Tcl command queries to identify specific cells or other objects.
Syntax
Not applicable
REG_TO_SRL
A chain of register primitives can be converted to a logically equivalent SRL primitive using the
REG_TO_SRL property with a value of true. This transform is typically used to reduce the number
of pipeline register stages used by signals to traverse long distances within a device. Having too
many register stages can create congestion or other placement problems.
• Values:
• True (or 1): The Vivado logic optimization will convert the specified register primitives into
an SRL.
• False (or 0): The Vivado logic optimization will not convert the specified register
primitives into an SRL.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The property is false by default. The objects should be registers, and the registers to be
absorbed into the same SRL should share the same control set with no reset.
XDC Example:
Affected Steps
• Opt Design
Related Information
SRL_TO_REG
RLOC
Relative Location (RLOC) constraints define the relative placement of logic elements assigned to
a set, such as an H_SET, HU_SET, or U_SET.
When RLOC is present in the RTL source files, the H_SET, HU_SET, or U_SET properties get
translated into a read-only RPM property on cells in the synthesized netlist. The RLOC property
is preserved, but becomes a read-only property after synthesis. For more information on using
these properties, and defining RPMs, refer to the Vivado Design Suite User Guide: Using Constraints
(UG903).
TIP: When building hierarchical RPMs, use synth_design -flatten_hierarchy none to ensure
that the RLOC properties are retained on their intended levels of hierarchy.
You can define the placement of any element within the set relative to other elements in the set,
regardless of the eventual placement of the entire group onto the target device. For example, if
RLOC constraints are applied to a group of eight flip-flops organized in a column, the mapper
maintains the column and moves the entire group of flip-flops as a single unit. In contrast, the
LOC constraint specifies the absolute location of a design element on the target device, without
reference to other design elements.
RLOC=XmYn
Where:
TIP: Because the X and Y numbers in Relative Location (RLOC) constraints define only the order and
relationship between design elements, and not their absolute locations on the target device, their
numbering can include negative integers.
Syntax
• Verilog Syntax:
The RLOC property is a Verilog attribute defining the relative placement of design elements
within a set specified by H_SET, HU_SET, or U_SET in the RTL source files. Place the Verilog
attribute immediately before the instantiation of a logic element.
Verilog Example
The following Verilog module defines RLOC property for the shift register Flops in the ffs
hierarchical module.
endmodule // inv
module ffs (
input clk, input d, output q
);
wire sr_0, sr_0n; wire sr_1, sr_1n; wire sr_2, sr_2n; wire sr_3, sr_3n;
wire sr_4, sr_4n; wire sr_5, sr_5n; wire sr_6, sr_6n; wire sr_7, sr_7n;
inv i0 (sr_0, sr_0n); inv i1 (sr_1, sr_1n); inv i2 (sr_2, sr_2n); inv i3
(sr_3, sr_3n); inv i4 (sr_4, sr_4n); inv i5 (sr_5, sr_5n); inv i6 (sr_6,
sr_6n); inv i7 (sr_7, sr_7n); inv i8 (inr, inrn);
TIP: In the preceding example, the presence of the RLOC property implies the use of the H_SET
property on the FD instances in the ffs hierarchical module.
When using the modules defined in the preceding example, you will need to specify the
KEEP_HIERARCHY property to instances of the ffs module to preserve the hierarchy and
define the RPM in the synthesized design:
module top (
input clk, input d, output q
);
• VHDL Syntax:
Where:
• XDC Syntax:
The RLOC property can not be defined using XDC constraints. The RLOC property defines the
relative locations of objects in a relatively placed macro (RPM), and results in read-only RPM
and RLOC properties in the netlist of synthesized designs.
TIP: You can use the create_macro and update_macro commands to define macro objects in
the Vivado Design Suite, that act like RPMs within the design. Refer to the Vivado Design Suite Tcl
Command Reference Guide (UG835) for more information on these commands.
Affected Steps
Related Information
RLOCS
RLOCS is a read-only property that is assigned to an XDC macro object that is created by the
create_macro Tcl command in the Vivado Design Suite. The RLOCS property is assigned to the
macro when it is updated with the update_macro comand. Refer to the Vivado Design Suite Tcl
Command Reference Guide (UG835) for more information on these commands.
Like relatively placed macros (RPMs), XDC macros enable relative placement of groups of cells.
Macros are similar to RPMs in many ways, yet also have significant differences:
• RPMs are defined in the RTL source files by a combination of the RLOC property and the
H_SET, HU_SET, or U_SET property.
• RPMs cannot be edited in the post-synthesis design.
• Macros are created from leaf cells that are grouped together with relative placement, after
synthesis, and can be edited.
• RPMs cannot be automatically converted to macros.
• RPMs are not design objects, and the XDC macro commands cannot be used on RPMs.
The RLOCS property reflects the relative placement values specified by the update_macro
command, as represented by the rlocs argument:
You can use update_macro command to change the RLOCS property assigned to an XDC
macro object.
The RLOCS property is converted to an RLOC property on each of the individual cells that are
part of the XDC macro. The RLOC property then functions in the same way it does for an RPM,
by defining the relative placement of cells in the macro.
• Values: Cell1 RLOC1 Cell2 RLOC2 Cell3 RLOC3...: The name of a cell in the macro
paired with the relative location of the cell in the macro, defined for each cell in the macro.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The RLOCS property is indirectly defined when an XDC macro is created and populated with
cells and relative locations:
XDC Example
create_macro macro1
update_macro macro1 {u1/sr3 X0Y0 u1/sr4 X1Y0 u1/sr5 X0Y1}
report_property -all [get_macros macro1]
Property Type Read-only Visible Value
ABSOLUTE_GRID bool true true 0
CLASS string true true macro
NAME string true true macro1
RLOCS string* true true u1/sr3 X0Y0 u1/sr4 X1Y0 u1/sr5
Affected Steps
Related Information
RLOC_ORIGIN
The RLOC_ORIGIN property provides an absolute location, or LOC, for the relatively placed
macro (RPM) in the RTL design. For more information on defining RPMs, and using the
RLOC_ORIGIN property, refer to the Vivado Design Suite User Guide: Using Constraints (UG903).
RPMs are defined by assigning design elements to a set using the H_SET, HU_SET, or U_SET
properties in the RTL design. The design elements are then assigned a relative placement to one
another using the RLOC property. You can define the relative placement of any element within
the set relative to other elements in the set, regardless of the eventual placement of the entire
group onto the target device.
Having defined the elements of an RPM, and their relative placement, the RLOC_ORIGIN
property lets you define the absolute placement of the RPM onto the target device. The
RLOC_ORIGIN property is converted into LOC constraint during synthesis.
In the Vivado Design Suite, the RLOC_ORIGIN property defines the lower-left corner of the
RPM. This is most often the design element whose RLOC property is X0Y0. Each remaining cell
in the RPM set is placed on the target device using its relative location (RLOC) as an offset from
the group origin (RLOC_ORIGIN).
Architecture Support
All architectures.
Applicable Objects
Values
RLOC_ORIGIN=XmYn
Where:
• m is an integer representing the absolute X coordinate on the target device of the lower-left
corner of the RPM.
• n is an integer representing the absolute Y coordinate on the target device of the lower-left
corner of the RPM.
Syntax
• Verilog Syntax:
The RLOC_ORIGIN property is a Verilog attribute defining the absolute placement of an RPM
on the target device. Place the Verilog attribute immediately before the instantiation of a logic
element.
Verilog Example:
The following top-level Verilog module defines the RLOC_ORIGIN property for the ffs
modules in the design.
module top (
input clk, input d, output q
);
• VHDL Syntax:
Where:
• XDC Syntax: The RLOC_ORIGIN property translates to the LOC property in the synthesized
design. You can specify the LOC property of RPMs by placing one of the elements of the RPM
onto the target device. The other elements of the RPM will be placed relative to that location,
and assigned to LOC property.
Affected Steps
• Synthesis
Related Information
ROUTE_STATUS
ROUTE_STATUS is a read-only property that is assigned to nets by the Vivado router to reflect
the current state of the routing on the net.
The property can be queried by the individual net, or group of nets, using the get_property or
report_property commands. The property is used by the report_route_status
command to return the ROUTE_STATUS of the whole design.
• Values:
• ANTENNAS: The route has at least one antenna (a branch leaf that connects to a site pin,
but that site pin does not show that it is connected to this logical net) or the route has at
least one island (a section of routing that is not connected to any of the site pins associated
with the logical net). This is a routing error.
• CONFLICTS: The router has one or more of the following routing errors:
○ Routing conflict: One or more of the nodes in this route are also used in some other
route, or another branch of this route.
○ Site pin conflict: The logical net that is connected to the given site pin from inside the
site is different from the logical net that is connected via the route to the outside of the
site.
○ Invalid site conflict: The route connects to a site pin on a site where the programming of
the site is in an invalid state, making it impossible to determine if the route is connected
correctly within the site.
• ERROR: There was an internal error in determining the route status.
• NONET: The net object specified for route status does not exist, or could not be found as
entered.
• NOROUTE: No routing object could be retrieved for the specified net due to an error.
• NOROUTESTORAGE: No route storage object is available for this device due to an error.
• UNKNOWN: The state of the route can not be calculated due to an error.
Syntax
The ROUTE_STATUS property is an enumerated property with one of the preceding property
values. It is a read-only property assigned by the Vivado router and cannot be directly modified.
Affected Steps
• Route Design
RPM
The RPM property is a read-only property assigned to the logic elements of a set as defined by
the H_SET, HU_SET, or U_SET property in the RTL source files.
When RLOC is also present in the RTL source files, the H_SET, HU_SET, and U_SET properties
get translated to a read-only RPM property on cells in the synthesized netlist. The HU_SET and
U_SET property are visible on the RTL source file in the Text editor in the Vivado Design Suite.
However, in the Properties window of a cell object, the RPM property is displayed. For more
information on using these properties, and defining RPMs, refer to the Vivado Design Suite User
Guide: Using Constraints (UG903).
• Values: <NAME>.
Syntax
The RPM property is a read-only property derived during synthesis of an RTL design with RLOC
defined together with one of H_SET, HU_SET, or U_SET to define the RPM. The RPM property
cannot be directly defined or edited.
Related Information
RPM_GRID
The RPM_GRID property defines the RLOC grids as absolute coordinates instead of relative
coordinates. The RPM_GRID system is used for heterogeneous RPMs where the cells belong to
different site types (such as a combination of SLICEs, block RAM, and DSP). Because the cells can
occupy sites of various sizes, the RPM_GRID system uses absolute RPM_GRID coordinates that
are derived directly from the target device.
The RPM_GRID values are visible in the Site Properties window of the Vivado Integrated Design
Environment (IDE) when a specific site is selected in the Device window. The coordinates can
also be queried with Tcl commands using the RPM_X and RPM_Y site properties. For more
information on using the RPM_GRID property, and defining RPMs with absolute coordinates,
refer to the Vivado Design Suite User Guide: Using Constraints (UG903).
• Values: ”GRID”: The RPM_GRID property and GRID keyword combine to inform the Vivado
Design Suite that the specified RLOCs are absolute grid coordinates from the target device,
rather than the relative coordinates usually specified by RLOC.
Syntax
• Verilog Syntax:
Place the Verilog attribute immediately before the module or instantiation. Specify as follows:
(* RPM_GRID = "GRID" *)
Verilog Example:
module iddr_regs (
input clk, d, output y, z
);
endmodule // iddr_regs
• VHDL Syntax:
To use the RPM_GRID system, first define the attribute, then add the attribute to one of the
design elements:
• XDC Syntax:
The RPM_GRID property is assigned in the RTL source file, and cannot be defined in XDC files
or with Tcl commands. However, for XDC macros, the corresponding construct is the -
absolute_grid option used with the update_macros command.
Affected Steps
Related Information
SEVERITY
The SEVERITY property lets you change the severity assigned to individual design rule checks
(DRC) in the Vivado Design Suite when running Report DRC. For more information on Running
DRCs, see this Vivado Design Suite User Guide: System-Level Design Entry (UG895).
You can set the severity of both built-in and custom DRCs. For information on writing custom
design rule checks, see this Vivado Design Suite User Guide: Using Tcl Scripting (UG894).
IMPORTANT! Although Vivado allows you to disable and downgrade the severity of the built-in DRC
objects, this practice is highly discouraged as it can cause unpredictable results and could potentially cause
permanent damage to the device.
To restore the DRC objects to the default setting, use the reset_drc_check Tcl command.
Built-in DRC checks are returned to their default settings as defined by the Vivado tool. Custom
DRCs are returned to their default settings as defined by the create_drc_check command
that created it.
• Values:
• Fatal
• Error
• {Critical Warning}
• Warning
• Advisory
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where
• <VALUE> is one of the recognized DRC severity levels in the Vivado tool: Advisory,
Warning, {Critical Warning}, Error, Fatal.
• <id> is the DRC ID recognized by the Vivado Design Suite.
Affected Steps
• report_drc
• Write Bitstream
Related Information
IS_ENABLED
SLEW
SLEW specifies output buffer slew rate for output buffers configured with I/O standards that
support programmable output slew rates.
• Applicable Objects:
• Ports (get_ports)
○ Output or bidirectional ports connected
• Cells (get_cells)
• Values:
• SLOW (default)
• MEDIUM: for UltraScale architecture, only available on high-performance (HP) I/Os.
• FAST
Syntax
• Verilog Syntax:
To set this attribute when inferring I/O buffers, place the proper Verilog attribute syntax
before the top-level output port declaration.
(* DRIVE = "{SLOW|FAST}" *)
• VHDL Syntax:
To set this attribute when inferring I/O buffers, place the proper VHDL attribute syntax before
the top-level output port declaration.
• XDC Syntax:
Affected Steps
• I/O Planning
• Report Noise
• Report Power
See Also
Refer to the following design elements in the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953) or the UltraScale Architecture Libraries Guide (UG974).
• OBUF
• OBUFT
• IOBUF
• IOBUF_DCIEN
• IOBUF_INTERMDISABLE
SNAPPING_MODE
SNAPPING MODE property is applied on Pblocks to automatically adjust the size and shape. The
property can be applied to Reconfigurable Partition Pblocks, to have them automatically adjusted
to meet DFX floorplan requirements. Refer to Vivado Design Suite User Guide: Dynamic Function
eXchange (UG909).
• Values:
• ON: This causes the specified Pblock grid range to grab the fundamental Programmable
Units which results in the same or smaller derived ranges required for DFX. This is used for
Reconfigurable Pblocks and default in ON for DFX designs.
• OFF: The Pblock grid range is equal to derived ranges. This is the default for non-DFX
designs.
• NESTED: This mode limits the ranges of a DFX child Pblock to always be included within
the DFX parent Pblock range. When a child Pblock is already fully included within another
Pblock, the parent-child relationship is automatically created, and in DFX mode, the
NESTED mode is automatically set. When the child Pblock uses simpler ranges such as
CLOCKREGION and is not fully included within the intended parent Pblock, you must set
the Pblock PARENT property first, and then set the SNAPPING_MODE to NESTED next.
Note: When SNAPPING_MODE is set to ON or ROUTING, the tool creates a new set of derived Pblock
ranges that are used for implementation. The new ranges are stored in memory and are not written out
to XDC. Only the SNAPPING_MODE property is written along with normal Pblock constraints.
Syntax
• XDC Syntax:
Affected Steps
• Design Floorplanning
Related Information
PBLOCK
SRL_TO_REG
An SRL primitive can be converted to a logically equivalent chain of register primitives using the
SRL_TO_REG property with a value of true. This transform is typically used to increase the
number of available pipeline register stages that can be spread to allow signals to traverse long
distances within a device.
• Values:
• 1: The Vivado logic optimization will pull out a register from the specified SRL primitive(s)
input.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The property is false by default. The objects should be static shift registers which can be
instantiated or inferred, e.g., SRL16E, SRL32E.
XDC Example:
Affected Steps
• Opt Design
Related Information
REG_TO_SRL
SRL_STAGES_TO_REG_INPUT
A register stage can be pulled out through SLR input or pushed into SRL input using the
SRL_STAGES_TO_REG_INPUT property.
This provides control on pipeline register structures to address under and over-pipeline at the
input side of SRL primitives.
• Values:
• 1: The Vivado logic optimization will pull out a register from the specified SRL primitive(s)
input.
• -1: The Vivado logic optimization will push a register into a specified SRL primitive(s) input.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The objects should be SRLs, and the registers to be absorbed into the SRL should share the
same control set with no reset.
XDC Example:
Affected Steps
• Opt Design
Related Information
REG_TO_SRL
SRL_TO_REG
SRL_STAGES_TO_REG_OUTPUT
SRL_STAGES_TO_REG_OUTPUT
A register stage can be pulled out from SLR output or pushed into SRL output using the
SRL_STAGES_TO_REG_OUTPUT property.
This provides control on pipeline register structures to address under and over-pipeline at the
output side of SRL primitives.
• Values:
• 1: The Vivado logic optimization will pull out a register from the specified SRL primitive(s)
output.
• -1: The Vivado logic optimization will push a register into a specified SRL primitive(s)
output.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
The objects should be SRLs, and the registers to be absorbed into the same SRL should share
the same control set with no reset.
XDC Example:
Affected Steps
• Opt Design
Related Information
REG_TO_SRL
SRL_TO_REG
SRL_STAGES_TO_REG_INPUT
SYNTH_CHECKPOINT_MODE
When generating the output products for a Vivado IP integrator block design file (.bd), you can
chose how the block design is synthesized in coordination with the top-level design. Refer to this
Vivado Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994) for more
information. Using the SYNTH_CHECKPOINT_MODE you can specify that the block design will
be synthesized as part of the top-level design, during global synthesis. Do this by setting
SYNTH_CHECKPOINT_MODE to NONE, disabling the generation of the OOC synthesis
checkpoint for the block design.
IMPORTANT! When SYNTH_CHECKPOINT_MODE is set to NONE, the Vivado tool automatically sets
the GENERATE_SYNTH_CHECKPOINT property to FALSE, or 0, to disable the OOC flow and the
generation of the synthesized DCP output product for BD files.
You can also choose that the block design should be synthesized out-of-context (OOC) from the
rest of the design, by setting the SYNTH_CHECKPOINT_MODE property to either SINGULAR or
HIERARCHICAL:
• SINGULAR specifies that the block design will be synthesized as a single unit, and written to a
single DCP. In the Vivado IDE this option is referred to as Out-of-context per Block Design.
• HIERARCHICAL specifies that all IP used in the block design will be synthesized, and written
to separate DCP files for each IP. In the Vivado IDE this option is referred to as Out-of-
context per IP. This is the default mode.
This property will become read-only if the IP is locked for any reason. In this case, you can run
Reports → Report IP Status in the Vivado IDE, or run the report_ip_status Tcl command to
see why the IP is locked. You will not be able to generate the DCP without first updating the IP
to the latest version in the Vivado IP catalog. Refer to this Vivado Design Suite User Guide:
Designing with IP (UG896) for more information.
• Applicable Objects:
• Values:
• None: Indicates that the block design should be synthesized along with the rest of the
design. This is known as global synthesis.
• Singular: Indicates that the entire block design should be synthesized as an out-of-
context block.
• Hierarchical: Indicates that each IP used in the block design should be synthesized
separately. That is each IP should be synthesized out-of-context to maximize the use of the
synthesis cache whenever re-synthesis is needed. This is the default mode.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Global Synthesis:
Affected Steps
• Synthesis
• Implementation
Related Information
GENERATE_SYNTH_CHECKPOINT
U_SET
Groups design elements with attached Relative Location (RLOC) constraints that are distributed
throughout the design hierarchy into a single set.
U_SET is an attribute within the HDL design source files, and does not appear in the synthesized
or implemented design. U_SET is used when defining Relatively Placed Macros, or RPMs in the
RTL design. For more information on using these properties, and defining RPMs, refer to the
Vivado Design Suite User Guide: Using Constraints (UG903).
While H_SET or HU_SET are used to define sets of logic elements based on the design hierarchy,
you can manually create a User-defined set of logic elements, or U_SET, that is not dependent on
the hierarchy of the design.
When RLOC is also present in the RTL source files, the H_SET, HU_SET, and U_SET properties
get translated to a read-only RPM property on cells in the synthesized netlist. The HU_SET and
U_SET property are visible on the RTL source file in the Text editor in the Vivado Design Suite.
However, in the Properties window of a cell object, the RPM property is displayed.
IMPORTANT! When attached to hierarchical modules, the U_SET constraint propagates downward
through the hierarchy to any primitive symbols that are assigned RLOC constraints.
• Applicable Objects:
The U_Set constraint can be used in one or more of the following design elements, or
categories of design elements. Refer to the Vivado Design Suite 7 Series FPGA and Zynq 7000
SoC Libraries Guide (UG953) or the UltraScale Architecture Libraries Guide (UG974) for more
information on the specific design elements:
• Registers
• Macro Instance
• RAMS*
• RAMD*
• RAMB*
• DSP48*
Syntax
• Verilog Syntax:
This is a Verilog attribute used in combination with the RLOC property to define the set
content of a hierarchical block that will define an RPM in the synthesized netlist. Place the
Verilog attribute immediately before the instantiation of a logic element.
Verilog Example:
The following Verilog module defines RLOC and U_SET properties for the shift register flops
in the module.
wire sr_0, sr_0n; wire sr_1, sr_1n; wire sr_2, sr_2n; wire sr_3, sr_3n;
wire sr_4, sr_4n; wire sr_5, sr_5n; wire sr_6, sr_6n; wire sr_7, sr_7n;
inv i0 (sr_0, sr_0n); inv i1 (sr_1, sr_1n); inv i2 (sr_2, sr_2n); inv i3
(sr_3, sr_3n); inv i4 (sr_4, sr_4n); inv i5 (sr_5, sr_5n); inv i6 (sr_6,
sr_6n); inv i7 (sr_7, sr_7n); inv i8 (inr, inrn);
(* RLOC = "X0Y0", U_SET = "Uset0" *) FD sr0
(.C(clk), .D(sr_1n), .Q(sr_0));
(* RLOC = "X0Y0", U_SET = "Uset0" *) FD sr1
(.C(clk), .D(sr_2n), .Q(sr_1));
(* RLOC = "X0Y1", U_SET = "Uset0" *) FD sr2
(.C(clk), .D(sr_3n), .Q(sr_2));
(* RLOC = "X0Y1", U_SET = "Uset0" *) FD sr3
(.C(clk), .D(sr_4n), .Q(sr_3));
(* RLOC = "X0Y0", U_SET = "Uset1" *) FD sr4
(.C(clk), .D(sr_5n), .Q(sr_4));
(* RLOC = "X0Y0", U_SET = "Uset1" *) FD sr5
(.C(clk), .D(sr_6n), .Q(sr_5));
(* RLOC = "X0Y1", U_SET = "Uset1" *) FD sr6
(.C(clk), .D(sr_7n), .Q(sr_6));
(* RLOC = "X0Y1", U_SET = "Uset1" *) FD sr7 (.C(clk), .D(inrn), .Q(sr_7));
Unlike the HU_SET property, which applies to the level of hierarchy it is defined in, the U_SET
property transcends hierarchy. In this case, the following top-level module defines three
instances of the ffs module, but results in only two U_SETS being created: Uset_0 and Uset_1,
which contain Flops from all three ffs module instances defined below:
endmodule // top
• VHDL Syntax:
Where:
• XDC Syntax:
The U_SET property can not be defined using XDC constraints. The U_SET property, when
present on logic elements with the RLOC property, defines relatively placed macros (RPMs),
and results in the read-only RPM property in the netlist of synthesized designs.
TIP: You can use the create_macro and update_macro commands to define macro objects in
the Vivado Design Suite, that act like RPMs within the design. Refer to the Vivado Design Suite Tcl
Command Reference Guide (UG835) for more information on these commands.
Affected Steps
• Design Floorplanning
• Place Design
• Synthesis
UNAVAILABLE_DURING_CALIBRATION
For UltraScale architecture, the UNAVAILABLE_DURING_CALIBRATION property disables a
DRC error message to report that BITSLICE0 is not available during the built-in self-calibration
(BISC) process.
If these restrictions do not affect a design, the DRC can be disabled with the
UNAVAILABLE_DURING_CALIBRATION property.
TIP: This property must be assigned as an XDC constraint. It is not supported in HDL source files.
Values
• TRUE: Disable reporting of the DRC error message related to the BISC process.
• FALSE: Do not disable the reporting of the DRC error message (default).
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• DRC
USE_DSP
The USE_DSP property directs the Vivado Design Suite to synthesize mathematical modules into
DSP blocks on the targeted device.
By default, multipliers (mults), mult-add, mult-sub, mult-accumulate type structures are assigned
into DSP blocks. However, adders, subtractors, and accumulators can also go into DSP blocks,
but by default are implemented with logic instead. The USE_DSP attribute overrides the default
behavior and defines these structures using DSPs.
DSPs can also be used to implement many other logic functions, beyond mathematics, such as
counters, multiplexers, and shift registers. However, for complex modules such as multiplexers,
you need to manually instantiate DSPs.
This property can be placed in the RTL as an attribute on signals, for example:
You can apply USE_DSP to a module in the RTL source, but it only applies to the module it is
specified on. You can also apply it to hierarchical cells in the design as an XDC constraint.
• Applicable Objects: This attribute can be placed in the RTL on signals, architectures and
components, entities and modules. The priority is as follows:
1. Signals
2. Architectures and components
3. Modules and entities
• Values:
Syntax
• Verilog Syntax:
• VHDL Syntax:
• XDC Syntax:
Affected Steps
• Synthesis
USED_IN
The USED_IN property is assigned to design files (.v, .vhd, .xdc, .tcl) in the Vivado Design Suite to
indicate what stage in the FPGA design flow the files are used.
For example, you could use the USED_IN property to specify an XDC file for use by the Vivado
synthesis tool, but not for use in implementation. You could also specify HDL source files (.v
or .vhd) as USED_IN simulation, but not for use in synthesis.
You can also use the more granular values to specify an unmanaged Tcl file to be USED_IN
opt_design or place_design, rather than simply used in implementation.
• Values:
• synthesis
• synthesis_post
• implementation
• simulation
• out_of_context
• opt_design
• opt_design_post
• power_opt_design
• power_opt_design_post
• place_design
• place_design_post
• phys_opt_design
• phys_opt_design_post
• route_design
• route_design_post
• write_bitstream
• write_bitstream_post
• synth_blackbox_stub
• test bench
• board
• single_language
• power_data
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where
Affected Steps
• Synthesis
• Simulation
• Implementation
• Bitstream generation
USER_CLOCK_ROOT
Used to assign the clock driver, or root, to a specific clock region or Pblock on the target part.
The USER_CLOCK_ROOT property is intended to help manage clock skew across the device. By
default, the place and route tools will automatically assign a clock root to achieve the best timing
characteristics for the design. The tool assigned clock root is defined in the read-only
CLOCK_ROOT property. The USER_CLOCK_ROOT property lets you manually assign the clock
root.
IMPORTANT! The USER_CLOCK_ROOT property can be set on a global clock net, and can only be
assigned to the net segment directly driven by the global clock buffer (BUFG).
The USER_CLOCK_ROOT property is validated and used during clock resource placement, so the
assignment should be made prior to placement. However, if you assign the property after
placement, you will need to rerun placement to implement the clock root and affect the design.
Due to a more flexible clocking architecture, designs that target UltraScale devices and
UltraScale+ devices require a two-step process for routing global clocks. First the Vivado placer
assigns the routing resources required to route the global clocks from the clock source to the
destination clock regions (CLOCK_ROOT or USER_CLOCK_ROOT). Next the Vivado router fills in
the routing gaps on the clock nets.
The global clock routing is handled automatically during implementation. However in cases
where the USER_CLOCK_ROOT property on a clock net has been changed after implementation,
the Vivado tool might require the update_clock_routing command to properly reroute the
clock nets.
• Applicable Objects: Global clock net (get_nets) directly connected to the output of a global
clock buffer.
• Values:
• <clock_region | pblock>: Specifies as the name of a clock region on the target part,
or a defined Pblock in the current design. The clock region can be specified by name or
passed as a clock_region object by the get_clock_regions command. Similarly, the
Pblock can be specified by name or returned by the get_pblocks command.
• <objects>: Specified as one or more clock nets, or net segments.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
TIP: The clock net can also be defined using the global clock buffer instance, or output pin, as shown in
the following example:
Affected Steps
• Place Design
• Routing
Related Information
CLOCK_BUFFER_TYPE
CLOCK_REGION
CLOCK_ROOT
USER_CLOCK_VTREE_TYPE
USER_CROSSING_SLR
When placing design elements on stacked silicon interconnect (SSI) devices, you can use
USER_SLR_ASSIGNMENT, USER_CROSSING_SLR, and USER_SLL_REG properties to manage
logic partitioning, and the behavior of the Vivado placement tool. SSI devices consist of multiple
super logic regions (SLRs), joined by interposer connections called super long lines (SLLs). For
more information on placing and routing in and across SLRs, refer to this UltraFast Design
Methodology Guide for FPGAs and SoCs (UG949).
USER_CROSSING_SLR is a boolean property that indicates that a net is allowed to cross an SLR
boundary, or that the net should not cross the SLR boundary. The constraint can be applied to
either nets or pins. If the USER_CROSSING_SLR is set to 1, the net can cross the SLR boundary
through the SLL channel. When set to 0, the net should not cross the SLR boundary.
IMPORTANT! A value of 0 can be used on any pin or net segment to indicate the net should not cross the
boundary. A value of 1 can only be applied to single-fanout pipeline register connections.
To manage placement across SLRs, start with USER_SLR_ASSIGNMENT to assign logic to an SLR
or group, add USER_CROSSING_SLR to control which net segment in the logic crosses the SLR
boundary. Add USER_SLL_REG if needed.
However, if both pins of a register with USER_SLL_REG (true) also have USER_CROSSING_SLR
(true), but the source cell of Reg/D and the load cell of Reg/Q are placed in the same SLR, then
both USER_SLL_REG and USER_CROSSING_SLR should be ignored.
• Applicable Objects:
• Nets (get_nets)
• Pins (get_pins)
• Values:
• Null (or “”): Indicates that the property is found on the net or pin, but that the property
value has not been set to either TRUE or FALSE, or has been unset.
• True (or 1): The net connected to the pin will be routed onto SLL channel if necessary for
placement purposes.
• False (or 0): The net connected to the pin will be routed inside an SLR.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Where:
• <value> is the specified value for the property of NULL, TRUE, or FALSE.
• <net_name> specifies the name of the net to assign the property to.
XDC Example 1:
Affected Steps
• Place Design
Related Information
USER_SLL_REG
USER_SLR_ASSIGNMENT
USER_RAM_AVERAGE_ACTIVITY
The USER_RAM_AVERAGE_ACTIVITY constraint specifies a value representing the average
frequency of all UltraRAM and Block RAM on the device that can be switched (enabled/disabled).
The value is used by Vivado to model power supply noise induced by RAM switching and
calculate jitter for global clocks in static timing analysis.
For example, a design using 40% of the available UltraRAM and Block RAM operating at 400
MHz results in a USER_RAM_AVERAGE_ACTIVITY of 160. The value of 160 results in less jitter
versus the pessimistic default value, easing design timing closure.
• Applicable Objects:
Design (current_design)
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
Affected Steps
• Timing Analysis
• Implementation
See Also
Related Information
RAM_AVERAGE_ACTIVITY
USER_SLL_REG
Stacked silicon interconnect (SSI) devices consist of multiple super logic regions (SLRs), joined by
interposer connections called super long lines (SLLs). Paths crossing between SLRs through SLLs
can present timing closure challenges.
USER_SLL_REG instructs the implementation tools to place the register in a location that is
optimal for connections to the SLL. For UltraScale based architectures, this is a LAGUNA register.
This is a dedicated register that drives data to, or receives data from the SLL. For Versal adaptive
SoC based architectures, this selects a slice register that is adjacent to the SLL. The cells where
the USER_SLL_REG property is set to true must be register cells, and should have FD/Q -> FD/D
connectivity. The property can be set on either source or destination registers, or both the
source and destination cells.
For an FD cell with the USER_SLL_REG property set to false, the placer will never place the cell
on a nearby LAGUNA site (hard constraint).
To further refine the placement of the registers, you can use Pblocks. In UltraScale architectures,
they should include the LAGUNA sites that you can achieve using a Pblock range that includes
the clock region closest to the SLR boundary. For Versal adaptive SoCs, they should be within 75
slices from the SLR boundary.
IMPORTANT! This property is considered a guideline which the placer will attempt to follow, but can be
overridden to achieve a valid placement result.
• Value:
• True (or 1): The Vivado placer will place (during detail placement) the FD cell at an optimal
site, if the net connected to FD/D or FD/Q crosses an SLR boundary.
• False (or 0): Do not place the register into a LAGUNA site. This is ignored for Versal
devices.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
XDC Example:
The placer will try to place cell1 and cell2 into Laguna registers at the SLR boundary.
Affected Steps
• Place Design
Related Information
IOB
PBLOCK
USER_CROSSING_SLR
USER_SLR_ASSIGNMENT
USER_SLR_ASSIGNMENT
When placing design elements on stacked silicon interconnect (SSI) devices, you can use
USER_SLR_ASSIGNMENT, USER_CROSSING_SLR, and USER_SLL_REG properties to manage
logic partitioning, and the behavior of the Vivado placement tool. SSI devices consist of multiple
super logic regions (SLRs), joined by interposer connections called super long lines (SLLs). For
more information on placing and routing in and across SLRs, refer to this UltraFast Design
Methodology Guide for FPGAs and SoCs (UG949).
The USER_SLR_ASSIGNMENT property lets you specify the placement of cells into a defined
super logic region (SLR), or grouped together into the same SLR without defining a specific SLR.
The property has two forms, as defined in the Value section below: SLRn which defines a specific
SLR to place the cells into, or group_name which groups cells together to be placed into the same
SLR, though not a specific SLR.
IMPORTANT! This property is considered a guideline which the placer will attempt to follow, but can be
overridden to achieve a valid placement result.
To manage placement across SLRs, start with USER_SLR_ASSIGNMENT to assign logic to an SLR
or group, add USER_CROSSING_SLR to control which net segment in the logic crosses the SLR
boundary, and add USER_SLL_REG if necessary. USER_SLR_ASSIGNMENT has the highest
priority. Use that together with USER_CROSSING_SLR to control individual nets/pins crossing
the SLR boundary.
• Value:
• SLRn: Where ‘n’ is an integer representing a specific SLR in a device. The placer will
attempt to keep the contents of the hierarchical cell within the specified SLR.
• group_name: This is a unique string value that can be assigned to one or more hierarchical
cells or modules. The placer will try to place the cells or module with a common
group_name into a single SLR, but the specific SLR is not important.
Syntax
• Verilog Syntax:
Not applicable
• VHDL Syntax:
Not applicable
• XDC Syntax:
XDC Example 1:
The placer will try to avoid partitioning cells cell1 and cell2 and try to place them in SLR1.
XDC Example 2:
The placer will try to avoid partitioning cell1 and cell2 and try to place them in the same SLR,
but the specific SLR is not important.
Affected Steps
• Place Design
Related Information
USER_CROSSING_SLR
USER_SLL_REG
VCCAUX_IO
VCCAUX_IO specifies the operating voltage of the VCCAUX_IO rail for a given I/O. DRCs are
available to ensure that VCCAUX_IO property assignments are correct:
• VCCAUXIOBT (warning): Ensures that ports with VCCAUX_IO values of NORMAL or HIGH
are only placed in HP banks.
• VCCAUXIOSTD (warning): Ensures that ports with VCCAUX_IO values of NORMAL or HIGH
do not use IOSTANDARDs that are only supported in HR banks.
• VCCAUXIO (error): Ensures that ports with VCCAUX_IO values of NORMAL are not
constrained/placed in the same bank as a port with a VCCAUX_IO value of HIGH.
• Architecture Support: 7 series FPGAs and Zynq 7000 SoC devices on High Performance (HP)
bank I/O only.
• Value:
• DONTCARE (default)
• NORMAL
• HIGH
Syntax
• Verilog Syntax:
To set this attribute, place the proper Verilog attribute syntax before the top-level output port
declaration.
(* VCCAUXIO = "{DONTCARE|NORMAL|HIGH}" *)
• VHDL Syntax:
To set this attribute, place the proper VHDL attribute syntax before the top-level output port
declaration.
ACT3 : in std_logic;
attribute VCCAUX_IO : string;
-- Specifies a HIGH voltage for the VCCAUX_IO rail connected to this I/O
attribute VCCAUX_IO of ACT3 : signal is “HIGH”;
• XDC Syntax:
# Specifies a HIGH voltage for the VCCAUX_IO rail connected to this I/O
set_property VCCAUX_IO HIGH [get_ports ACT3]
Affected Steps
• I/O Planning
• Place Design
• report_power
USER_CLOCK_VTREE_TYPE
The USER_CLOCK_VTREE_TYPE property is intended to help manage clock skew across a Versal
stacked silicon interconnect (SSI) device. By default, the place and route tools will automatically
assign a clock v-tree type to achieve the best timing characteristics for the design. The tool
assigned clock v-tree is defined in the read-only CLOCK_VTREE_TYPE property. The
USER_CLOCK_VTREE_TYPE property lets you manually assign a v-tree type for a clock net.
IMPORTANT! The USER_CLOCK_VTREE_TYPE property can be set on a global clock net, and must only
be assigned to the net segment directly driven by the global clock buffer (BUFG).
The global clock routing is handled automatically during implementation. However in cases
where the USER_CLOCK_VTREE_TYPE property on a clock net has been changed after
implementation, the Vivado tool might require the update_clock_routing command to
properly reroute the clock nets.
• Applicable Objects: Global clock net (get_nets) directly connected to the output of a global
clock buffer except the BUFG_FABRIC
• Value: The following values are available for the USER_CLOCK_VTREE_TYPE property:
Syntax
• XDC Syntax:
TIP: The clock net can also be defined using the global clock buffer instance, or output pin, as shown in
the following example:
Affected Steps
• Place Design
• Routing Design
USER_CLUSTER
To group and place certain instances or design elements as closely as possible, you can use the
USER_CLUSTER property to specify the placement of grouped cells. This allows you to manage
logic partitioning as well as the behavior of the Vivado placer. You can specify the
USER_CLUSTER property on a set of hierarchical instances to form a soft cluster that is taken
into account during the SLR partitioning and partition-driven placer phases.
The USER_CLUSTER property lets you specify the placement of the cells grouped together. The
property has only one form, that is, it takes the <group_name> of the groups cells that must be
place together.
When using this property, analyze the design and find the specific instances involved in the top
failing path. Check if the placement of the logic in the specific failing instance is spread out.
IMPORTANT! This property is considered as a guideline, in which the placer attempts to follow, but can
be overridden to achieve a valid placement result.
To manage placement across SLRs, start with USER_SLR_ASSIGNMENT to assign logic to an SLR
or group. Add USER_CLUSTER to control the grouping of logic/instances in SLR.
• Value: group_name: This is a unique string value that can be assigned to one or more
hierarchical cells or modules. The placer will try to place the cells or module with a common
group_name as close as possible.
Syntax
• XDC Syntax:
• XDC Example:
The placer tries to place all cells in the specified instance as close as possible, that is, with
minimal spreading.
Affected Steps
• Place Design
Appendix A
The AMD Technical Information Portal is an online tool that provides robust search and
navigation for documentation using your web browser. To access the Technical Information
Portal, go to https://docs.amd.com.
Documentation Navigator
Documentation Navigator (DocNav) is an installed tool that provides access to AMD Adaptive
Computing documents, videos, and support resources, which you can filter and search to find
information. To open DocNav:
• From the AMD Vivado™ IDE, select Help → Documentation and Tutorials.
• On Windows, click the Start button and select Xilinx Design Tools → DocNav.
• At the Linux command prompt, enter docnav.
Note: For more information on DocNav, refer to the Documentation Navigator User Guide (UG968).
Design Hubs
AMD Design Hubs provide links to documentation organized by design tasks and other topics,
which you can use to learn key concepts and address frequently asked questions. To access the
Design Hubs:
Support Resources
For support resources such as Answers, Documentation, Downloads, and Forums, see Support.
References
These documents provide supplemental material useful with this guide:
24. Vivado Design Suite 7 Series FPGA and Zynq 7000 SoC Libraries Guide (UG953)
25. UltraScale Architecture Libraries Guide (UG974)
26. Vivado Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994)
27. Soft Error Mitigation Controller LogiCORE IP Product Guide (PG036)
28. JTAG to AXI Master LogiCORE IP Product Guide (PG174)
29. Integrated Bit Error Ratio Tester 7 Series GTX Transceivers LogiCORE IP Product Guide (PG132)
30. Virtual Input/Output LogiCORE IP Product Guide (PG159)
31. Vivado Design Suite Documentation
32. Versal Adaptive SoC AI Engine Architecture Manual (AM009)
33. Versal Adaptive SoC SelectIO Resources Architecture Manual (AM010)
34. Versal Adaptive SoC Clocking Resources Architecture Manual (AM003)
35. Versal Adaptive SoC Hardware, IP, and Platform Development Methodology Guide (UG1387)
Training Resources
AMD provides a variety of training courses and QuickTake videos to help you learn more about
the concepts presented in this document. Use these links to explore related training resources:
Revision History
Section Revision Summary
06/05/2023 Version 2024.1
Copyright
© Copyright 2012-2024 Advanced Micro Devices, Inc. AMD, the AMD Arrow logo, Kintex,
UltraScale, UltraScale+, Versal, Virtex, Vivado, Zynq, and combinations thereof are trademarks of
Advanced Micro Devices, Inc. Other product names used in this publication are for identification
purposes only and may be trademarks of their respective companies.