The second method to create waivers is to use the DRC, Methodology, or CDC violation objects. This is the method the GUI uses when the create_waiver
commands are sent to the Tcl console.
The following syntax is used to create a waiver from one or more violation objects:
create_waiver -of_objects <ViolationObject(s)> -description <string> [-user <name>]
The description is mandatory. When the user is not specified, the system uses the user id running the Vivado tools.
The violation objects are returned through the get_cdc_violations
, get_drc_violations
, and get_methodology_violations
commands. These commands only return objects when report_cdc
, report_drc
, and report_methodology
have been run earlier. Use the command line option -name
to get the list of violation objects from one of the GUI reports.
The following example code creates a waiver for all CDC-1 violations that have their startpoints inside the module top/sync_1
:
report_cdc -name cdc_1
set vios [get_cdc_violations -name cdc_1 -filter {CHECK == CDC-1}]
foreach vio $vios {
if {[regexp {^top/sync_1} [get_property STARTPOINT_PIN $vio]]} {
create_waiver -of $vio -description {Safe by protocol}
}
}
A waiver created from a violation object is built from all the objects and strings referenced inside the violation. This makes the waiver unique to that violation. If you want the waiver to cover multiple violations, you must export the waiver to an external file and edit the create_waiver
command to replace single objects and strings with, for example, patterns and wildcards. See Creating DRC and Methodology Waivers for more information on using patterns and wildcards.
create_waiver
command automatically replaces the string that represents the slack with a wildcard. This enables the waiver to waive the violation related to a specific object and regardless of the reported slack. Similar behavior applies to UCIO-1 and NSTD-1.