public class Quick
extends java.lang.Object
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.
Constructor and Description |
---|
Quick(DRC.CheckDRCJob j,
DRC.DRCPreferences dp,
GeometryHandler.GHMode mode)
to control OD2 combination in the same die according to foundries
|
Modifier and Type | Method and Description |
---|---|
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.
|
public Quick(DRC.CheckDRCJob j, DRC.DRCPreferences dp, GeometryHandler.GHMode mode)
public static ErrorLogger checkDesignRules(DRC.DRCPreferences dp, ErrorLogger errorLog, Cell cell, Geometric[] geomsToCheck, boolean[] validity, java.awt.geom.Rectangle2D bounds)
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)
bounds
- if null, check entire cell. If not null, only check area in bounds.drcJob
- onlyArea
- public boolean polyCoverByAnyVTLayer(Cell cell, DRCTemplate theRule, Technology tech, Poly[] polys, Layer[] layers, Geometric[] geoms, boolean ignoreCenterCuts)
polys
- layers
- geoms
- ignoreCenterCuts
-