Commands that return more than one object, such as get_cells or
get_sites, return a collection in the Vivado tool that looks and
behaves like a native Tcl list. This feature allows performance gains when handling
large lists of Tcl objects without the need to use special commands like the
foreach_in_collection command. In the Vivado Design Suite
collections can be processed like Tcl lists using built-in commands such as
lsort, lsearch, and
foreach.
Typically, when you run a get_* command, the returned results are
echoed to the console and to the log file as a Tcl string, rather than as a list due to
a feature of Tcl called "shimmering". Internally, Tcl can store a variable or value both
as a string and as a faster native object such as a float or a list object. In Tcl,
shimmering occurs when the representation of the object or value changes from the list
object to the string object, or from string to list. A list of Vivado objects is
returned by the get_* command, but the shimmered string
representation is written to the log file and Tcl console.
tcl.collectionResultDisplayLimit parameter, which has a default
value of 500. Commands that can return a significant number of objects, such as
get_cells or get_sites, will truncate the returned
string, ending it with an ellipsis ('...'). You can use the
set_param command to change the
tcl.collectionResultDisplayLimit parameter value to return more
or fewer results.tcl.collectionResultDisplayLimit parameter prevents the use of
in and ni list operators in the Vivado Design
Suite. Since a string shimmered from the list may be truncated, the
in and ni operators cannot effectively
determine if a specified object is in, or not-in, a list of objects. You should use
list commands such as lsearch and lsort instead of
in or ni.
if {[lsearch -exact [get_cells *] $cellName] != -1} {...}
get_* command by
assigning the results to a Tcl variable:
set allSites [get_sites]
tcl.collectionResultDisplayLimit parameter. An example
of this is seen in hierarchically querying all the cells in a design:
%set allCells [get_cells -hierarchical]
DataIn_pad_0_i_IBUF[0]_inst DataIn_pad_0_i_IBUF[1]_inst \
DataIn_pad_0_i_IBUF[2]_inst DataIn_pad_0_i_IBUF[3]_inst \
DataIn_pad_0_i_IBUF[4]_inst ...
%llength $allCells
42244
%lindex $allCells end
wbArbEngine/s4/next_regIn
the preceding example, the result of the hierarchical get_cells command
was assigned to the $allCells variable. In appearance, the results are
truncated. However, a check of the length of the list reports more than forty thousand
cell objects, and the last index in the list returns an actual object, and not an
ellipsis.join
command, to join the list of objects returned by the get_* Tcl
command, with a newline (\n), tab (\t), or a space (" "), to display the
un-truncated list of objects:
join [get_parts] " "