DIRECTORY CD USING [Design, Instance, Layer, Number, Orientation, Position, Rect, Technology, undefLayer], CDBasics USING [empty], Core USING [CellType, Wire], Rope USING [ROPE], SoSTNT USING [TNT]; SoS: CEDAR DEFINITIONS ~ BEGIN CheckDesignRules: PUBLIC PROC [cell: Core.CellType, design: CD.Design _ NIL, technology: CD.Technology _ NIL, abortFlag: REF BOOL _ NIL, verbose: BOOL _ FALSE, cdObjKey, cdInstKey, cdInstListKey: ATOM]; coreInconsistent: ERROR; DRV: TYPE = REF DesignRuleViolation; DRVkey: ATOM; DesignRuleViolation: TYPE = RECORD [count: INT _ 0, places: LIST OF ErrorRect]; ErrorRect: TYPE = RECORD [r: CD.Rect, msg: Rope.ROPE]; State: TYPE = REF StateRec; StateRec: TYPE = RECORD [design: CD.Design, abort: REF BOOL, nt: SoSTNT.TNT, -- neighbourhood table maxSeparation: CD.Number _ 200, -- a large number cut1, cut2: CD.Layer, -- not ok if connected (exceptions) globalErrorCount: CARDINAL, verbose: BOOL, wireCreationCount: CARDINAL _ 1, -- for debugging cdObjKey: ATOM, -- key of ChipNDale object cdInstKey: ATOM, -- key of ChipNDale instance cdInstListKey: ATOM]; -- key of list of ChipNDale instances FindGeometry: TYPE = PROC [self: CD.Instance] RETURNS [r: CD.Rect _ CDBasics.empty, l: CD.Layer _ CD.undefLayer]; CellHullProc: TYPE = PROC [self: Core.CellType, state: State] RETURNS [h: CD.Rect _ CDBasics.empty]; CheckCell: TYPE = PROC [self: Core.CellType, state: State, actual: Core.Wire, loc: CD.Position, orient: CD.Orientation]; MaterialToCellProc: TYPE = PROC [self: Core.CellType, state: State, actual, wire: Core.Wire, father: Core.CellType, materialLoc, cellLoc: CD.Position, materialOrient, cellOrient: CD.Orientation]; CellToCellProc: TYPE = PROC [self: Core.CellType, state: State, otherCell: Core.CellType, selfActual, otherActual: Core.Wire, father: Core.CellType, selfLoc, otherLoc: CD.Position, selfOrient, otherOrient: CD.Orientation]; END. πSoS.mesa Agewmetrhtos Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Giordano Bruno Beretta, October 17, 1985 4:37:14 pm PDT gbb June 9, 1986 6:07:51 pm PDT SoS is the Son of Spinifex. It is a hierarchical design rule checker that monkeys around in a Core design and tries to find all the ChipNDale geometry in order to check as many design rules as it possibly can. Gli uomini vollero piuttosto le tenebre che la luce (Giovanni, III, 19.) DRC cell and its subcells are verified, except the cells with property $DoNotDRC <> NIL. Design rule violations are flagged in the Core cell using the property DRV (Design Rule Violation) with key DRVkey = $SoSError. The property DRV is put only on cells having at least one violation. If a design is specified and the ChipNDale cell containing the violation can be accessed, an error rectangle is inserted at the proper location. If verbose is set and the error cannot be flagged in the ChipNDale design, a warning is written in the typescript viewer. Only one of the parameters design and technology may be defaulted. The keys to retrieve the geometry from the Core objects are passed as parameters due to their frequent change. - cdObjKey is used to attach the error rectangle in the ChipNDale design. cdObjKey can be any value if ChipNDale flagging is not needed. - cdInstKey is the key to retrieve location and orientation of subcells; it is mandatory and error coreInconsistent will be raised if it proves to be wrong. - cdInstListKey is the key to retrieve the geometry of the wires; it is mandatory and nothing will be verified if it is wrong. The abortFlag is tested periodically. If it is TRUE SoS aborts. Access to violations Types for writing own DRC procedures Input: a ChipNDale instance as delivered by Sinix. Output: a rectangle to intersect. Attached as property $SoSAnalysis to ChipNDale classes. Computes the bounding box of a cell. Attached as property $SoSHull to Core classes and/or objects. Design rule checks a Core cell. Must remove existing error information and check the intenal geometry. It has to perform both the binding and the propagation of the binding, making sure the Core data structure is not altered. Attached as property $SoSAnalysis to Core classes and/or objects. Checks a rectangle of material against all rectangles of material in a cell. It has to perform both the binding and the propagation of the binding, making sure the Core data structure is not altered. Attached as property $SoSmc to Core classes and/or objects. Checks all rectangles of material in a cell against those in another cell. It has to perform both the binding and the propagation of the binding, making sure the Core data structure is not altered. Attached as property $SoScc to Core classes and/or objects. ΚB˜codešœ Πeg ™Kšœ Οmœ7™BKšœ7™7K™K™—Icode2™ΡIquotešΟsH™HšΟk ˜ Kš œ œX˜`Kšœ  œ ˜Kšœ œ˜Kšœ œ œ˜Kšœ œ œ˜—LšΠblœ œ  ˜Lšœ ˜head™šΟnœ œ œ œ  œ œ œ  œ œ œ  œ œ& œ˜ΚIunitšΟeœ?£ œP£œΟzœ€œ€œ£ œ£œ4™šOšœ”£œo™ŠOšœ£œ£ œ™BOšœn™nIitemšΟiœ₯Aœ₯6™‰Pš₯œ ₯Xœ₯)™œPš₯œ ₯o™~Ošœ£ œ"Πekœ ™?—Lšœ œ˜—™Lš œ œ œ˜$Kšœ œ˜ Kš œ œ œ  œ œ œ ˜OKš œ  œ œ œ œ˜6—™$Lšœ œ œ ˜Kš*œ  œ œ  œ œ œ  œΟcœ œ§œ  œ §$œ œ  œ œ§œ  œ§œ  œ§œ œ§%˜Ιšœ œ œ œ  œ œ œ  œ ˜qK™TKšœ£ œ™7—š œ œ œ% œ œ˜dL™$Kšœ£œ ™=—š œ  œ œ= œ œ˜xL™L™ΒKšœ£ œ ™A—š œ œ œk œ' œ˜ΓLšœΘ™ΘKšœ£œ%™;—š œ œ œ œ$ œ˜ήK™ΖKšœ£œ%™;—Lš œ˜——…—d–