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

  1. 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);

  2. 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

  1. Consider a gap check which is applied only between vertical edges:
    lyrError101= dve_drc(gap(lyrCond) < 35.0, DVE_RN_SLOPE, DVE_RV_VERTICAL);
  2. Consider a gap check which is applied only between diagonal edges:
    lyrError101= dve_drc(gap(lyrCond) < 35.0, DVE_RN_SLOPE, DVE_RV_DIAGONAL);
  3. 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

  1. 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:

  2. 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:

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 

Contents
Additional Resources