Edge Qualifiers
Use edge qualifiers either to select special options for a step of a rule or to filter tests between pairs of edges. These are called qualifiers because they qualify the rule.
DVE_RN_UPPER_BOUND
Specifies the upper bound value in a 1-layer clearance test with a GT or GE operator.
Qualifier Resource Value:
| <real positive value> | Upper bound |
This qualifier applies only to a gap(), notch(), spacing(), width() or single_clearance() test.
The program uses the fringe value as upper bound value if this qualifier is not specified in a GT or GE clearance test (see dveFringe under Preference File Format and Descriptions in the Customization and Configuration documentation).
Example:
// bounded test drc_error += dve_drc(gap(cond) > 2, DVE_RN_UPPER_BOUND, 7, DVE_RN_TEMPLATE, DVE_RV_OPPOSITE, "2 < gap <= 7"); // use the fringe value drc_error += dve_drc(gap(cond) > 2, DVE_RN_TEMPLATE, DVE_RV_OPPOSITE, "2 < gap <= fringe");
DVE_RN_EDGE_ANGLES
Qualifier Resource Value:
| DVE_RV_PARALLEL | Select only parallel edges |
| DVE_RV_NOT_PARALLEL | Select only non-parallel edges |
| DVE_RV_PERPENDICULAR | Select only perpendicular edges |
| DVE_RV_NOT_PERPENDICULAR | Select only non-perpendicular edges |
| DVE_RV_ANY_ANGLE | ( default ) Select edges at any angle |
| Note DVE_RV_PARALLEL and DVE_RV_PERPENDICULAR are mutually exclusive. DVE_RV_NOT_PARALLEL and DVE_RV_NOT_PERPENDICULAR are not mutually exclusive. |
DVE_RN_ANGLE_TOLERANCE
Qualifier Resource Value:
| <real value> | Edge angle tolerance in degrees |
This qualifier can only be used in conjunction with RUL_RN_EDGE_ANGLES.
For example:
text += dve_drc(external(cond2, cond) < 1.0, "cond2 separation from cond < 1.0 um", DVE_RN_EDGE_ANGLES, DVE_RV_NOT_PARALLEL, DVE_RN_ANGLE_TOLERANCE, 10.0);
Using DVE_RN_ANGLE_TOLERANCE without specifying an angle qualifier will result in a warning: qualifier ignored.
| Note Any custom DRC rules need to be updated to the correctly spelled version of this command, TOLERANCE. TOLLERANCE (with two L's) is no longer supported. |
DVE_RN_POLARITY, DVE_RN_POLARITY_FROM, DVE_RN_POLARITY_TO
Qualifier Resource Value:
| DVE_RV_INDSIDE | Direct search toward inside of polygon |
| DVE_RV_OUTSIDE | (default) Direct search toward outside of polygon |
DVE_RN_STRUCTURE
Qualifier Resource Value:
| DVE_RV_ANY_POLYGON | ( default ) Test applies to any edge |
| DVE_RV_SAME_POLYGON | Test applies only between edge of same polygon |
| DVE_RV_DIFF_POLYGON | Test applies only between edge of different polygons |
DVE_RN_SEPARATE
Determines how two adjacent edges are checked.
Qualifier Resource Value:
| DVE_RV_SEPARATE | applies only to non-intersecting edges |
| DVE_RV_NOT_SEPARATE | applies only to intersecting edges |
| DVE_RV_ANY_SEPARATE | applies to edges regardless of whether they intersect or not |
| DVE_RV_PERP_SEPARATE | applies only if two adjacent edges are not perpendicular |
| DVE_RV_JOIN_SEPARATE | applies only to non-intersecting edges, joining edges are added in |
DVE_RV_SEPARATE normally applies to a width or a notch test, so that an edge is not checked against its immediate neighbors in a polygon
Examples
- Consider some geometry with an acute angle and a rule to check the width of 100:
lyrError101 = dve_drc(width(lyrEdges) < 100.0);
This rule fails to detect the error at the acute angle. Use the following rule conjunction to address this problem:
// insert error segments onto the edges forming an acute angle lyrEdges= dve_drc(corner_edges(lyrCond, 200.0, 0.1, 89.9)); // show the width which is in error. This can be done by applying a width // check. Enable DVE_RV_ANY_SEPARATE, so that adjacent edges are checked. lyrError101 = dve_drc(width(lyrEdges) < 100.0, DVE_RN_SEPARATE, DVE_RV_ANY_SEPARATE);

- See the command corner_edges() for an example with DVE_RV_SEPARATE.
DVE_RN_SLOPE, DVE_RN_SLOPE_FROM, DVE_RN_SLOPE_TO
Use a slope qualifier to activate a rule step only if it has a specified slope.
Qualifier Resource Value:
| DVE_RV_VERTICAL | Select only vertical edges |
| DVE_RV_HORIZONTAL | Select only horizontal edges |
| DVE_RV_ORTHOGONAL | Select only vertical and horizontal edges |
| DVE_RV_DIAGONAL | Select only diagonal edges |
| DVE_RV_OCTAGONAL | Select only vertical, horizontal and diagonal edges |
| DVE_RV_OTHER | Select only non-octagonal edges |
| DVE_RV_ALL_SLOPES | (default) Select edges at any slope |
Examples
- Consider a gap check which is applied only between vertical edges:
lyrError101= dve_drc(gap(lyrCond) < 35.0, DVE_RN_SLOPE, DVE_RV_VERTICAL);
- Consider a gap check which is applied only between diagonal edges:
lyrError101= dve_drc(gap(lyrCond) < 35.0, DVE_RN_SLOPE, DVE_RV_DIAGONAL);
- Consider a gap check which is applied only between orthogonal and diagonal edges:
lyrError101= dve_drc(gap(lyrCond) < 35.0, DVE_RN_SLOPE_FROM, DVE_RV_ORTHOGONAL, DVE_RN_SLOPE_TO, DVE_RV_DIAGONAL);
DVE_RN_TOUCH
Qualifier Resource Value:
| DVE_RV_DTOUCH | Edges which touch are also diagnosed as errors. The error segment is constrained to the touching edges. |
| DVE_RV_CLEAR_TOUCH | Edges which touch are also diagnosed as errors. The error segment extends beyond the touching edges. |
| DVE_RV_OVERLAP | Edges which overlap are also diagnosed as errors. |
Examples
- Consider two polygons on layer lyrCond and lyrCond2 which touch externally and an external rule:
lyrError101 = dve_drc(external(lyrCond,lyrCond2) < 30.0, "d min is 30", DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL);The default is that butting edges are not diagnosed as errors. Now consider the use of the qualifier DVE_RV_CLEAR_TOUCH:
lyrError101 = dve_drc(external(lyrCond,lyrCond2) < 30.0, "d min is 30", DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL, DVE_RN_TOUCH, DVE_RV_CLEAR_TOUCH);Then the touching section is given as an error:

- Consider some geometry on 2 layers and a nests rule:
lyrError101 = dve_drc(nests(lyrCond2,lyrCond) < 30.0, "d min is 30", DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL);
lyrError101 = dve_drc(nests(lyrCond2,lyrCond) < 30.0, "d min is 30", DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL, DVE_RN_TOUCH, DVE_RV_OVERLAP);detects violations of "nests" distance, and also diagnoses edges of polygons on layer lyrCond2 which are outside of polygons on layer lyrCond1:

Similarly,lyrError101 = dve_drc(external(lyrCond2,lyrCond) < 30.0, "d min is 30", DVE_RN_EDGE_ANGLES, DVE_RV_PARALLEL, DVE_RN_TOUCH, DVE_RV_OVERLAP);detects violations of "external" distance, and also diagnoses edges of polygons on layer lyrCond2 which are inside of polygons on layer lyrCond1:

DVE_RN_TEMPLATE, DVE_RN_TEMPLATE_TO, DVE_RN_TEMPLATE_FROM
Control over templates is very important. Most false errors or missed real errors can be eliminated with carefully specified templates. The program starts with very pessimistic templates, usually round ones, which may generate false errors. Specifying a particular template may eliminate these errors.
How Clearance Templates are Applied
Clearance checks are done between edges of polygons, referred to as FROM and TO.

A template is constructed around each FROM edge.

The program checks if this template captures a TO segment. If no edge crosses this template, it is regarded as a "miss" between these FROM and TO segments, and no more checks are made between them. Below is an example of a miss:

But if there is a "hit" with a To segment, the program creates a provisional result segment consisting of the parts of the TO edge which are within the FROM template.

Then the process is reversed and a template is constructed on the TO segment (not just from the TO result segment), and the program checks to see if the template encloses a FROM segment.

If there is a hit on this second pass, the provisional segments are accepted for both the FROM and the TO tests, and they are added as result segments.

Also, if this was the last rule of a conjunctive set, the program relates the new result error segments. In this case, edges adjacent to those shown are also checked so the error segments usually go around corners.

The length of the error segment around the corner acts as a visual clue to the severity of the error.
Specifying a Template
A template for a rule is defined by specifying the shape that is applied for a concave corner of the polygon and for a convex corner of the polygon.
Consider an edge that has a concave corner at one end, and a convex corner at the other end:

A concave corner subtends an angle of less than 180 degrees when looking from the edge in the direction of the polarity. A convex corner subtends an angle of more than 180 degrees. If the polarity of the rule is reversed, then the concave and convex corners are also reversed:

The same template can be applied to both ends of the line. For example:

Or a different template can be specified for the concave corner and the convex corner:

Types of Templates
The choices for each end of the edge are:
- round - Extend search area using rounded corners

- opposite - (default) Extend search area just opposite the edge

- arc - Extend search area using arced corners. Refer to note below.

Note
The Arc template requires a curvature angle. Curvature is expressed as the angle (in degrees) by which the arc is raised. An Arc with a curvature angle of 0 degrees is equivalent to the "round" template; and Arc with a curvature angle of 90 degrees is equivalent to the "opposite" template. - square - Extend search area treating corners as squares

or for checking both sides of a line, the template - bothsides - Must be used for both convex and concave corners. Extend search area on both sides of edge. Use this template with the polarity DVE_RN_POLARITY

Specify whether the template is to be used for the FROM segment, the TO segment or both segments. Refer, to How Clearance Templates are Applied for the definition of FROM and TO and refer to Specifying a Template for the definition of concave and convex corners.
Qualifier Resource Values:
| DVE_RV_ROUND | DVE_RV_ARC |
| DVE_RV_ROUND_ARC | DVE_RV_ARC_OPPOSITE |
| DVE_RV_ROUND_OPPOSITE | DVE_RV_ARC_ROUND |
| DVE_RV_ROUND_SQUARE | DVE_RV_ARC_SQUARE |
| DVE_RV_OPPOSITE | DVE_RV_SQUARE |
| DVE_RV_OPPOSITE_ARC | DVE_RV_SQUARE_ARC |
| DVE_RV_OPPOSITE_ROUND | DVE_RV_SQUARE_OPPOSITE |
| DVE_RV_OPPOSITE_SQUARE | DVE_RV_SQUARE_ROUND |
| DVE_RV_BOTHSIDES |
Edge Selection Based on Corners
Edge Selection Based on Corners selection function includes: corner_edges().
Privacy
Statement
|
Terms of Use
|
Legal |
Contact Us
|
© Agilent 2000-2008 ![]()