Create a DRC violation
Syntax
create_drc_violation ‑name <arg> [‑severity <arg>] [‑msg <arg>] [‑quiet]
[‑verbose] [<objects>...]
Usage
Name | Description |
---|---|
-name
|
Specify the name for this rule. This is the typically a 4-6 letter specification for your rule. |
[-severity]
|
Specify severity level for a DRC rule. Default: WARNING. Values: FATAL, ERROR, CRITICAL WARNING, WARNING, ADVISORY. |
[-msg]
|
Specify your message string for this DRC rule. |
[-quiet]
|
Ignore command errors |
[-verbose]
|
Suspend message limits during command execution |
[<objects>]
|
Cells, ports, pins, nets, clock regions, sites, package banks to query. |
Description
Create a DRC violation object and manage the list of design objects associated with the violation for reporting by the report_drc
command.
The create_drc_violation
command is specified as part of the Tcl checker procedure that defines and implements the checking feature of a user-defined design rule check created by the create_drc_check
command. A violation object is created by the Tcl checker each time a violation of the design rule is encountered.
- Write a Tcl checker procedure to define the method applied when checking the user-defined rule, and the objects to check against the rule. The Tcl checker procedure is defined in a separate Tcl script that must be loaded by the
source
command prior to runningreport_drc
. - Use
create_drc_violation
in the Tcl checker to identify and flag violations found when checking the rule against a design. - Define a user-defined DRC rule check using the
create_drc_check
command that calls the Tcl checker proc from the-rule_body
. - Create a rule deck using the
create_drc_ruledeck
command, and add the user-defined rule check to the rule deck using theadd_drc_checks
command. - Run
report_drc
, and specify either the rule deck, or the user-defined rule check to check for violations.
report_drc
command, and violation objects can be returned by the get_drc_violations
command. The design objects associated with a DRC violation object can be obtained using the -of_objects
option of the appropriate get_*
command, such as get_cells
, get_nets
, or get_ports
for instance:
get_ports -of_objects [get_drc_violations -name drc_1 NSTD*]
Arguments
-name
<arg> - (Required) The name of the design rule check associated with the violation. This should be the same name used by the create_drc_check
command which calls the associated Tcl checker procedure from its -rule_body
argument. Messages from the create_drc_violation
command are passed up to the drc_check with the same -name
.
-severity
<arg> - (Optional) The severity of the created violation. This allows individual DRC violations to override the default severity of a specific rule check. The default severity for user-defined DRCs is determined by the definition of -severity
in the create_drc_check
command. The supported values are:
- ERROR
- "CRITICAL WARNING"
- WARNING
- ADVISORY
SEVERITY
is stored as a property on the DRC rule associated with the DRC violation object.
-msg
<arg> - (Optional) This is a violation specific message that is substituted for the general string variable (%STR) specified in the optional placeholder message defined in the create_drc_check
command.
-quiet
- (Optional) Execute the command quietly, returning no messages from the command. The command also returns TCL_OK regardless of any errors encountered during execution.
-verbose
- (Optional) Temporarily override any message limits and return all messages from this command.
set_msg_config
command.-name
. Design objects map to substitution keys in the message as follows:
- %ELG - netlist elements such as cells, ports, pins, and nets.
- %CRG - clock regions.
- %SIG - device sites.
- %PBG - package I/O banks.
create_drc_violation
command must match the -msg
specification from the create_drc_check
command, or the expected substitution will not occur.Examples
The following Tcl script defines the dataWidthCheck
procedure which is called by the -rule_body
argument of the RAMW-1 check. This Tcl script file must be loaded into the tool using the source
command, prior to running the report_drc
command.
- A list variable is created to store violations (
$vios
) - A violation object is created, and added to the list variable, each time a violation is found.
- The placeholder key
%ELG
in the$msg
string is dynamically substituted with the specific$bram
cell associated with the violation. - The
dataWidthCheck
proc returns an error code when any violations are found ($vios >0
) to inform thereport_drc
command of the results of the check. - The list of violations is passed along with the return code, and the violations are reported by
report_drc
.
# This is a simplistic check -- report BRAM cells with WRITE_WIDTH_B
# wider than 36.
proc dataWidthCheck {} {
# list to hold violations
set vios {}
# iterate through the objects to be checked
foreach bram [get_cells -hier -filter {PRIMITIVE_SUBGROUP == bram}] {
set bwidth [get_property WRITE_WIDTH_B $bram]
if { $bwidth > 36} {
# define the message to report when violations are found
set msg "On cell %ELG, WRITE_WIDTH_B is $bwidth"
set vio [ create_drc_violation -name {RAMW-1} -msg $msg $bram ]
lappend vios $vio
}
}
if {[llength $vios] > 0} {
return -code error $vios
} else {
return {}
}
}
create_drc_check -name {RAMW-1} -hiername {RAMB Checks} \
-desc {Data Width Check} -rule_body dataWidthCheck \
-severity Advisory
create_drc_check
command that defines it for use by report_drc
command. In this case, when the Tcl script file is sourced, both the dataWidthCheck
proc and the RAMW-1 design rule check are loaded into the tool.