The number and types of additional arguments for create_waiver
depends on the DRC and Methodology violation that needs to be waived. Few DRC and Methodology violations, such as TIMING-9, have no other arguments because the message is generic and non-specific. Other DRC and Methodology violations can include multiple strings and different types of objects.
The strings inside the violation are specified with -string
inside the waiver. The device or design objects (pins, cells, nets, Pblocks, and sites) are specified with the -objects
option. Each of these command line options should be specified as many times as the violation contains those elements.
When a waiver is created from the GUI or from a violation object, the waiver is defined to only waive that exact violation as it specifies all the strings and objects that make that violation unique. When the waiver is manually created, it is possible to widen the coverage of the waiver so that multiple violations can be waived from a single waiver. To expand a waiver to cover multiple violations:
- Use patterns for the
get_*
commands in place of a specific name - Use a wildcard in place of a string or an object. Wildcards are special keywords such as '*' for 'any string' or '*PIN' for 'any pin' (refer to the following table). As long as an object of the same type matches the element found inside the violation for the same position, it is a match. When all the elements from the waiver match the violation, then the violation is waived.
- Specify a list of objects instead of a single object. As long as the object inside the violation matches one of the objects inside the list of objects at the same position inside the waiver, it is a match. When all the elements from the waiver match the violation, then the violation is waived.
For example: the command below waives a single TIMING-14 violation that references the cell mux2_inst/mux_out_INST_0
:
create_waiver -id "TIMING-14" -description "Reviewed by the team" \
-objects [get_cells mux2_inst/mux_out_INST_0 ]
Suppose that the design has multiple cells mux2_inst/mux_out_INST_*
, the above waiver could be modified to waive the TIMING-14 violations related to all those cells by using a pattern for the get_cells
command:
create_waiver -id "TIMING-14" -description "Reviewed by the team" \
-objects [get_cells mux2_inst/mux_out_INST_* ]
The following table summarizes the keywords used as wildcards based on the object type.
Object | Wildcard |
---|---|
Cell | *CELL |
Net | *NET |
Pin | *PIN |
Port | *PORT |
Site | *SITE |
Tile | *TILE |
BEL | *BEL |
Package Bank | *PKGBANK |
Clock Region | *CLKREGION |
Clock | *CLOCK |
Pblock | *PBLOCK |
String | * |
create_waiver -scope
forces the wildcards for pins and cells to be scoped to the current instance where the waiver is created. When creating scoped waivers, -scope
ensures that wildcards for pins and cells do not match objects located at a higher level than the scope, which could result in waiving violations that must not be waived.