DIRECTORY Atom USING [GetPName], CD USING [DrawContextProc, DrawProc, Layer, LayerKey, Number, Position], CMosB USING [cut, cut2, ndif, nwell, nwellCont, pdif, pol, pwell, pwellCont, wndif, wnwellCont, wpdif, wpwellCont], CoreProperties USING [PropPrintProc], CStitching USING [Tesselation], Drc USING [Rect, State, Wire, WireInstance], Rope USING [ROPE], Saguaro USING [gate]; DrcUtilities: CEDAR DEFINITIONS IMPORTS Atom, CD, CMosB, Saguaro SHARES Drc ~ BEGIN OPEN Drc; Layer: TYPE ~ CD.Layer; ROPE: TYPE ~ Rope.ROPE; Tess: TYPE ~ CStitching.Tesselation; diffContactLayer: ARRAY Layer OF BOOL; ignoreConnectivity: BOOL; IsCut: PROC [layer: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(layer = CMosB.cut) OR (layer = CMosB.cut2)] END; -- IsCut IsWell: PROC [layer: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(layer = CMosB.pwell) OR (layer = CMosB.nwell)] END; -- IsWell IsDiffContact: PROC [class: ATOM, layer: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(((class = $C2SimpleCon) OR (class = $C2WellSimpleCon) OR (class = $C2DiffShortCon) OR (class = $C2DifShortCon) OR (class = $C2WellDifShortCon)) AND (diffContactLayer[layer]))] END; -- IsDiffContact IsLargeDiffContact: PROC [class: ATOM, layer: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(((class = $C2LargeSimpleCon) OR (class = $C2LargeWellSimpleCon)) AND (diffContactLayer[layer]))] END; -- IsLargeDiffContact IsAbstract: PROC [layer: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(layer = CMosB.wndif) OR (layer = CMosB.wpdif) OR (layer = CMosB.wpwellCont) OR (layer = CMosB.wnwellCont)] END; -- IsAbstract SameRect: PROC [r1, r2: Rect, l1, l2: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(r1 = r2) AND (SameLayer [l1, l2])] END; -- SameRect SameLayer: PROC [l1, l2: Layer] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(l1 = l2) OR ((l1 = CMosB.pol) AND (l2 = Saguaro.gate)) OR ((l1 = Saguaro.gate) AND (l2 = CMosB.pol)) OR ((l1 = CMosB.nwellCont) AND (l2 = CMosB.pdif)) OR ((l1 = CMosB.pdif) AND (l2 = CMosB.nwellCont)) OR ((l1 = CMosB.pwellCont) AND (l2 = CMosB.ndif)) OR ((l1 = CMosB.ndif) AND (l2 = CMosB.pwellCont))] END; -- SameLayer Intersecting: PROC [r1, r2: Rect] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(r1.x1 <= r2.x2) AND (r2.x1 <= r1.x2) AND (r1.y1 <= r2.y2) AND (r2.y1 <= r1.y2)] END; -- Intersecting IntersectingOpen: PROC [r1, r2: Rect] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(r1.x1 < r2.x2) AND (r2.x1 < r1.x2) AND (r1.y1 < r2.y2) AND (r2.y1 < r1.y2)] END; -- IntersectingOpen Contains: PROC [r1, r2: Rect] RETURNS [BOOL] ~ INLINE BEGIN RETURN [(r1.x1 <= r2.x1) AND (r1.x2 >= r2.x2) AND (r1.y1 <= r2.y1) AND (r1.y2 >= r2.y2)] END; -- Contains Intersection: PROC [r1, r2: Rect] RETURNS [Rect] ~ INLINE BEGIN RETURN [[MAX [r1.x1, r2.x1], MAX [r1.y1, r2.y1], MIN [r1.x2, r2.x2], MIN [r1.y2, r2.y2]]] END; -- Intersection Size: PROC [r: Rect] RETURNS [s: CD.Position] ~ INLINE BEGIN s.x _ (r.x2 - r.x1); s.y _ (r.y2 - r.y1) END; -- Size Bloat: PROC [r: Rect, a: CD.Number] RETURNS [Rect] ~ INLINE BEGIN RETURN [[(r.x1 - a), (r.y1 - a), (r.x2 + a), (r.y2 + a)]] END; -- Bloat Normalize: PROC [r: Rect] RETURNS [Rect] ~ INLINE BEGIN RETURN [[MIN [r.x1, r.x2], MIN [r.y1, r.y2], MAX [r.x1, r.x2], MAX [r.y1, r.y2]]] END; -- Normalize DeleteRect: PROC [plane: Tess, rect: Rect]; LayerName: PROC [l: Layer] RETURNS [ROPE] ~ INLINE BEGIN RETURN [Atom.GetPName [CD.LayerKey [l]]] END; -- LayerName CoreWireName: PROC [w: Wire] RETURNS [name: ROPE]; WireName: PROC [w: WireInstance] RETURNS [name: ROPE]; PrintChecked: CoreProperties.PropPrintProc; DoNotDrawContext: CD.DrawContextProc; DoNotDrawObject: CD.DrawProc; Anathema: PROC [dogma: CARDINAL, state: State] END. HDrcUtilities.mesa Copyright c 1988 by Xerox Corporation. All rights reserved. Opera di Giordano Bruno Beretta January 4, 1988 1:43:57 pm PST gbb January 18, 1988 3:19:14 pm PST Spinned out of DrcCMOSBimpl.Mesa because of "Storage overflow in pass 4" of compiler. All 8 layers are used by ChipNDale for diffusion contacts. All 8 layers are used by ChipNDale for diffusion contacts. r1 and r2 are assumed to be closed. r1 and r2 are assumed to be open. Returns r1 I r2. r1 and r2 are assumed to be closed and intersecting. r1 and r2 are assumed to be closed and intersecting. Κ<˜codešœ™Jšœ Οmœ1™™>K™#K™—JšœU™Ucode2šΟk ˜ Kšœžœ ˜Kšžœžœ@˜HKšœžœh˜sKšœžœ˜%Kšœ žœ˜Kšœžœ#˜,Kšœžœžœ˜Kšœžœ˜—šΠln œžœž ˜Lšžœžœ˜ —šžœž œ˜Lšœžœžœ˜Kšžœžœžœ˜Kšœžœ˜$Lšœžœžœžœ˜&Kšœžœ˜š Οnœžœžœžœžœž˜8Kšžœžœ˜4KšžœΟc˜ —š  œžœžœžœžœž˜9Kšžœžœ˜7Kšžœ‘ ˜—š   œžœ žœžœžœžœž˜M™;Kš žœžœžœžœžœžœ˜Έ—Kšžœ‘˜—š  œžœ žœžœžœžœž˜RK™;Kšžœ žœ!žœ˜iKšžœ‘˜—š   œžœžœžœžœž˜=Kšžœžœžœžœ˜sKšžœ‘ ˜—š  œžœžœžœžœž˜JKšžœ žœ˜+Kšžœ ˜—š   œžœžœžœžœž˜=Kšžœ žœžœžœžœžœžœžœžœžœžœžœžœ˜ΆKšžœ‘ ˜—š   œžœžœžœžœž˜?K™#Kšžœžœžœžœ˜XKšžœ‘˜—š  œžœžœžœžœž˜CK™!Kšžœžœžœžœ˜TKšžœ‘˜—š  œžœžœžœžœž˜;Kšœ œ™Kšžœžœžœžœ˜XKšžœ‘˜—š   œžœžœ žœž˜?K™4Kš žœžœžœžœžœ˜YKšžœ‘˜—unitš  œžœ žœžœ žœž˜