com.sun.electric.tool.drc
Class Quick

java.lang.Object
  extended by com.sun.electric.tool.drc.Quick

public class Quick
extends java.lang.Object

This is the "quick" DRC which does full hierarchical examination of the circuit.

The "quick" DRC works as follows: It first examines every primitive node and arc in the cell For each layer on these objects, it examines everything surrounding it, even in subcells R-trees are used to limit search. Where cell instances are found, the contents are examined recursively It next examines every cell instance in the cell All other instances within the surrounding area are considered When another instance is found, the two instances are examined for interaction A cache is kept of instance pairs in specified configurations to speed-up arrays All objects in the other instance that are inside the bounds of the first are considered The other instance is hierarchically examined to locate primitives in the area of consideration For each layer on each primitive object found in the other instance, Examine the contents of the first instance for interactions about that layer

Since Electric understands connectivity, it uses this information to determine whether two layers are connected or not. However, if such global connectivity is propagated in the standard Electric way (placing numbers on exports, descending into the cell, and pulling the numbers onto local networks) then it is not possible to decompose the DRC for multiple processors, since two different processors may want to write global network information on the same local networks at once.

To solve this problem, the "quick" DRC determines how many instances of each cell exist. For every network in every cell, an array is built that is as large as the number of instances of that cell. This array contains the global network number for that each instance of the cell. The algorithm for building these arrays is quick (1 second for a million-transistor chip) and the memory requirement is not excessive (8 megabytes for a million-transistor chip). It uses the CheckInst and CheckProto objects.

Author:
Steve Rubin, Gilda Garreton

Constructor Summary
Quick(DRC.CheckDRCJob j, DRC.DRCPreferences dp, GeometryHandler.GHMode mode)
          to control OD2 combination in the same die according to foundries
 
Method Summary
static ErrorLogger checkDesignRules(DRC.DRCPreferences dp, ErrorLogger errorLog, Cell cell, Geometric[] geomsToCheck, boolean[] validity, java.awt.geom.Rectangle2D bounds)
           
static ErrorLogger checkDesignRules(ErrorLogger errorLog, Cell cell, Geometric[] geomsToCheck, boolean[] validity, java.awt.geom.Rectangle2D bounds, DRC.CheckDRCJob drcJob, DRC.DRCPreferences dp, GeometryHandler.GHMode mode, boolean onlyArea)
          This is the entry point for DRC.
 boolean polyCoverByAnyVTLayer(Cell cell, DRCTemplate theRule, Technology tech, Poly[] polys, Layer[] layers, Geometric[] geoms, boolean ignoreCenterCuts)
          This method determines if one of the polysilicon polygons is covered by a vth layer.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Quick

public Quick(DRC.CheckDRCJob j,
             DRC.DRCPreferences dp,
             GeometryHandler.GHMode mode)
to control OD2 combination in the same die according to foundries

Method Detail

checkDesignRules

public static ErrorLogger checkDesignRules(DRC.DRCPreferences dp,
                                           ErrorLogger errorLog,
                                           Cell cell,
                                           Geometric[] geomsToCheck,
                                           boolean[] validity,
                                           java.awt.geom.Rectangle2D bounds)

checkDesignRules

public static ErrorLogger checkDesignRules(ErrorLogger errorLog,
                                           Cell cell,
                                           Geometric[] geomsToCheck,
                                           boolean[] validity,
                                           java.awt.geom.Rectangle2D bounds,
                                           DRC.CheckDRCJob drcJob,
                                           DRC.DRCPreferences dp,
                                           GeometryHandler.GHMode mode,
                                           boolean onlyArea)
This is the entry point for DRC. Method to do a hierarchical DRC check on cell "cell". If "count" is zero, check the entire cell. If "count" is nonzero, only check that many instances (in "nodesToCheck") and set the entry in "validity" TRUE if it is DRC clean.

Parameters:
bounds - if null, check entire cell. If not null, only check area in bounds.
drcJob -
onlyArea -
Returns:
ErrorLogger containing the information

polyCoverByAnyVTLayer

public boolean polyCoverByAnyVTLayer(Cell cell,
                                     DRCTemplate theRule,
                                     Technology tech,
                                     Poly[] polys,
                                     Layer[] layers,
                                     Geometric[] geoms,
                                     boolean ignoreCenterCuts)
This method determines if one of the polysilicon polygons is covered by a vth layer. If yes, VT{H/L}_{P/N}.S.2 doesn't apply

Parameters:
polys -
layers -
geoms -
ignoreCenterCuts -
Returns:
true if geometry is covered by a VTH layer