DIRECTORY CD USING [DrawProc, DrawContextProc], CMosB USING [ndif, nwell, nwellCont, pdif, pwell, pwellCont, wndif, wnwellCont, wpdif, wpwellCont], CoreProperties USING [PropPrintProc], CoreOps USING [GetFullWireName, GetShortWireName], CStitching USING [ChangeRect], Drc USING [State, Rect, Wire, WireInstance], DrcDebug USING [ImportantMessage], DrcUtilities, IO USING [card, Put1, PutFR, rope], Rope USING [IsEmpty, ROPE], UserProfile USING [Boolean, CallWhenProfileChanges, ProfileChangedProc]; DrcUtilitiesImpl: CEDAR PROGRAM IMPORTS CMosB, CoreOps, CStitching, DrcDebug, IO, Rope, UserProfile EXPORTS DrcUtilities SHARES Drc ~ BEGIN OPEN CMosB, Drc, DrcUtilities; diffContactLayer: PUBLIC ARRAY Layer OF BOOL _ ALL [FALSE]; ignoreConnectivity: PUBLIC BOOL _ UserProfile.Boolean ["Genista.EmulateMayday", TRUE]; empty: REF ~ NIL; DeleteRect: PUBLIC PROC [plane: Tess, rect: Rect] ~ BEGIN plane.ChangeRect [rect, empty] END; CoreWireName: PUBLIC PROC [w: Wire] RETURNS [name: ROPE] ~ BEGIN name _ CoreOps.GetShortWireName [w]; IF name.IsEmpty THEN name _ CoreOps.GetFullWireName [w, w]; IF name.IsEmpty THEN name _ IO.PutFR ["[%g]", IO.card [LOOPHOLE [w]]] END; -- CoreWireName WireName: PUBLIC PROC [w: WireInstance] RETURNS [name: ROPE] ~ BEGIN name _ CoreOps.GetShortWireName [w.global]; IF name.IsEmpty THEN name _ CoreOps.GetFullWireName [w.global, w.local]; IF name.IsEmpty THEN name _ CoreOps.GetShortWireName [w.local]; IF name.IsEmpty THEN name _ IO.PutFR ["[%g]", IO.card [LOOPHOLE [w.global]]] END; -- WireName PrintChecked: PUBLIC CoreProperties.PropPrintProc ~ BEGIN to.Put1 [IO.rope ["Verified by Genista. "]] END; -- PrintChecked EmulateMayday: UserProfile.ProfileChangedProc ~ BEGIN old: BOOL ~ ignoreConnectivity; ignoreConnectivity _ UserProfile.Boolean ["Genista.EmulateMayday", TRUE]; IF (ignoreConnectivity # old) THEN DrcDebug.ImportantMessage [IF ignoreConnectivity THEN "Will ignore Core's connectivity information" ELSE "Rectangles on the same wire are supposed to be correct"] END; -- EmulateMayday DoNotDrawContext: PUBLIC CD.DrawContextProc ~ {}; DoNotDrawObject: PUBLIC CD.DrawProc ~ {}; Anathema: PUBLIC PROC [dogma: CARDINAL, state: State] ~ BEGIN state.anathemas[dogma] _ state.anathemas[dogma].SUCC END; -- Anathema diffContactLayer[ndif] _ diffContactLayer[pdif] _ diffContactLayer[wndif] _ diffContactLayer[wpdif] _ diffContactLayer[pwell] _ diffContactLayer[nwell] _ diffContactLayer[pwellCont] _ diffContactLayer[nwellCont] _ diffContactLayer[wpwellCont] _ diffContactLayer[wnwellCont] _ TRUE; UserProfile.CallWhenProfileChanges [EmulateMayday] END. \DrcUtilitiesImpl.Mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Opera di Giordano Bruno Beretta January 4, 1988 1:49:39 pm PST gbb January 4, 1988 2:16:03 pm PST Spinned out of DrcCMOSBimpl.Mesa because of "Storage overflow in pass 4" of compiler. Utilities Hides all the wire name hokus-pokus. Hides all the wire name hokus-pokus. Called every time a dogma is violated, but not a design rule. The cost of fixing this is exponential, so the time to communicate an anathema is irrelevant. SELECT dogma FROM 0 => "Cell not correct in isolation but correct in context", 1 => "Rectangle pair not correct in isolation but correct in context", 2 => "Rectangle pair not permitted but allowed by technology", 3 => "Rule is an exception", ENDCASE => "Religion of pairwise correctness at every level was broken but is forgiven (exponentially)" Κ@˜codešœ™šœ<™™>—K™"K˜—JšœU™Ucode2šΟk ˜ Kšœœ˜%KšœœX˜cKšœœ˜%Kšœœ%˜2Kšœ œ˜Kšœœ#˜,Kšœ œ˜"Kšœ ˜ Kšœœ˜#Kšœœ œ˜Kšœ œ7˜H—šΠlnœœ˜Lšœ'œ˜CLšœ ˜Lšœ˜ —Lšœœœ˜&head™ Lš œœœœœœœ˜;Kšœœœ1œ˜VLšœœœ˜šΟn œœœ˜9Kšœ˜Kšœ˜—š Ÿ œœœ œœ˜@K™$Kšœ$˜$Kšœœ'˜;Kš œœœœœ˜EKšœΟc˜—š Ÿœœœœœ˜DK™$Kšœ+˜+Kšœœ4˜HKšœœ+˜?Kš œœœœœ ˜LKšœ  ˜—šŸ œœ ˜9Kšœ œ ˜+Kšœ ˜—šŸ œ#˜5Lšœœ˜LšœCœ˜Išœ˜"Kšœœœ/œ:˜’—Lšœ ˜—LšŸœœœ˜1LšŸœœœ˜)š Ÿœœœ œ˜=K™›šœ™K™Kšœ™Kšœ`™g—Kšœ0˜4Kšœ  ˜—Lšœ”œ˜™Lšœ2˜2—Lšœ˜—…— "Ύ