DIRECTORY CD, Core, CoreDirectory, CoreGeometry, CoreOps, CoreProperties, LogicUtils, PWCore, RefTab, Rope, SymTab; StdCellsCmosB: CEDAR PROGRAM IMPORTS CoreDirectory, CoreGeometry, CoreOps, CoreProperties, LogicUtils, PWCore, RefTab, Rope, SymTab ~ BEGIN GetMask: PROC [cellType: Core.CellType] RETURNS [mask: Core.CellType] = { mask _ LogicUtils.LibraryGet[ NARROW [CoreProperties.GetCellTypeProp[cellType, $Library]], Rope.Cat[CoreOps.GetCellTypeName[cellType], ".mask"] ]; }; LayoutLibrary: PWCore.LayoutProc = { obj _ CoreGeometry.GetObject[PWCore.extractMode.decoration, GetMask[cellType]]; }; DecorateLibrary: PWCore.DecorateProc = { extractedCT: Core.CellType _ GetMask[cellType]; extractedToSource: RefTab.Ref _ RefTab.Create[extractedCT.public.size]; FindInExtractedPublic: CoreOps.EachWireProc = { FOR names: LIST OF Rope.ROPE _ CoreOps.GetFullWireNames[cellType.public, wire], names.rest WHILE names#NIL DO name: Rope.ROPE _ names.first; extractedWire: Core.Wire _ CoreOps.FindWire[extractedCT.public, name]; previousSourceWire: Core.Wire _ NARROW [RefTab.Fetch[extractedToSource, extractedWire].val]; IF extractedWire=NIL OR extractedWire.size#0 THEN LOOP; IF previousSourceWire#NIL AND previousSourceWire#wire THEN SIGNAL PWCore.PinsCorrespondingToSeveralPublics[cellType, obj, LIST [previousSourceWire, wire], CoreGeometry.GetPins[PWCore.extractMode.decoration, extractedWire]]; IF NOT CoreGeometry.HasPins[PWCore.extractMode.decoration, extractedWire] THEN SIGNAL PWCore.NoPinsOnAtomicPublic[cellType, obj, extractedWire, name]; CoreGeometry.AddIndirectLazyPins[PWCore.extractMode.decoration, wire, extractedWire]; [] _ RefTab.Store[extractedToSource, extractedWire, wire]; ENDLOOP; }; [] _ CoreOps.VisitWire[cellType.public, FindInExtractedPublic]; }; library: CoreDirectory.Library _ SymTab.Create[]; schLibrary: Rope.ROPE = "SCLibCMOSBSch"; maskLibrary: Rope.ROPE = "SCLibCMOSBMask"; MakeSCCell: PROC [name, schName: Rope.ROPE] ~ { sch: Core.CellType _ LogicUtils.LibraryGet[schLibrary, schName]; PWCore.SetLayout[sch, $GetLibrary, $Library, maskLibrary]; [] _ CoreDirectory.Insert[library, name, sch]; }; [] _ PWCore.RegisterLayoutAtom[$GetLibrary, LayoutLibrary, DecorateLibrary]; MakeSCCell["feedthru", "feedthru.sch"]; MakeSCCell["gnd", "gnd.sch"]; MakeSCCell["vdd", "vdd.sch"]; MakeSCCell["inv", "inv.sch"]; MakeSCCell["invBuffer", "invBuffer.sch"]; MakeSCCell["tstDriver", "tstDriver.sch"]; MakeSCCell["rec2V", "rec2V.sch"]; MakeSCCell["and2", "and2.sch"]; MakeSCCell["and3", "and3.sch"]; MakeSCCell["and4", "and4.sch"]; MakeSCCell["nand2", "nand2.sch"]; MakeSCCell["nand3", "nand3.sch"]; MakeSCCell["nand4", "nand4.sch"]; MakeSCCell["or2", "or2.sch"]; MakeSCCell["or3", "or3.sch"]; MakeSCCell["or4", "or4.sch"]; MakeSCCell["nor2", "nor2.sch"]; MakeSCCell["nor3", "nor3.sch"]; MakeSCCell["nor4", "nor4.sch"]; MakeSCCell["xor2", "xor2.sch"]; MakeSCCell["xnor2", "xnor2.sch"]; MakeSCCell["a22o2i", "a22o2i.sch"]; MakeSCCell["o22a2i", "o22a2i.sch"]; MakeSCCell["a21o2i", "a21o2i.sch"]; MakeSCCell["o21a2i", "o21a2i.sch"]; MakeSCCell["pd", "pd.sch"]; MakeSCCell["pu", "pu.sch"]; MakeSCCell["pdw", "pdw.sch"]; MakeSCCell["puw", "puw.sch"]; MakeSCCell["ff", "ff.sch"]; MakeSCCell["ffEn", "ffEn.sch"]; MakeSCCell["dLatch", "dLatch.sch"]; [] _ CoreDirectory.RegisterLibrary[library, "CMOSB"]; END. StdCellsCmosB.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. Louis Monier, July 14, 1986 1:25:29 pm PDT Bertrand Serlet June 4, 1987 11:57:13 pm PDT Louis Monier September 27, 1987 12:29:04 pm PDT Defines every cell of a standard cell library for CMosB (2m CMOS with two levels of metal, fabricated by both VTI and ICL). Will be used by the library "Logic". Library Layout Atom Preparation Adding in the Library Needed by the router Basic combinatorial cells Flip-flops and Latches Registration Κ3˜codešœ™KšœB™BKšœ'Οk™*Kšœ,™,Kšœ/™/—K™Kš œ:ΟgœΠksΟsœ-œ œ(™’K™š ˜ Kšœg˜i—K˜šΟn œœ˜Kšœ_˜fKšœ˜—head™š‘œœœ˜Išœ˜Kšœ7˜=Kšœ4˜4Kšœ˜—K˜K˜—š‘ œ˜$KšœO˜OK˜K˜—š‘œ˜(Kšœ/˜/JšœG˜GšΠbnœ˜/š œœœœ?œœ˜mKšœ œ˜KšœF˜FKšœ œ6˜\Kš œœœœœ˜7Kš œœœœœ9œa˜ίšœœD˜JJšœœA˜L—JšœU˜UKšœ:˜:Kšœ˜—J˜—Jšœ?˜?Kšœ˜——™ Kšœ1˜1—™Kšœœ˜(Kšœœ˜*š‘ œœœ˜/Kšœ@˜@Kšœ:˜:Kšœ.˜.K˜K˜—KšœL˜L—™Kšœ'˜'—™Kšœ˜Kšœ˜Kšœ˜Kšœ)˜)Kšœ)˜)Kšœ!˜!Kšœ˜Kšœ˜Kšœ˜Kšœ!˜!Kšœ!˜!Kšœ!˜!Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ!˜!Kšœ#˜#Kšœ#˜#Kšœ#˜#Kšœ#˜#Kšœ˜Kšœ˜Kšœ˜Kšœ˜—™Kšœ˜Kšœ˜Kšœ#˜#—™ Kšœ5˜5—K˜Kšœ˜K˜—…— όA