DIRECTORY CD, CDDirectory, CDGenerate, CDGenerateRemote, CDIO, CDOps, Core, CoreCreate, CoreOps, CoreClasses, IO, Rope, SC, TerminalIO, ViewerIO; SCTestA: CEDAR PROGRAM IMPORTS CD, CDDirectory, CDGenerateRemote, CDIO, CDOps, CoreCreate, CoreOps, Rope, SC, TerminalIO, ViewerIO SHARES SC = BEGIN CreateCore: PROC [] RETURNS [Core.Design, Core.CellType] = BEGIN coreDesign: Core.Design _ CoreOps.CreateDesign["SCTestA"]; SCTestA: Core.CellType _ CoreCreate.CreateRecordCell[coreDesign, "SCTestA"]; nand: Core.CellType _ CoreCreate.CreateRecordCell[coreDesign, "NAND"]; cols: Core.Wire _ CoreCreate.CreatePublicWire[coreDesign, SCTestA, NIL, LIST["Col1", "Col2", "Col3", "Col4", "Col5"]]; rows: Core.Wire _ CoreCreate.CreatePublicWire[coreDesign, SCTestA, NIL, LIST["Row1", "Row2", "Row3", "Row4", "Row5"]]; outs: Core.Wire _ CoreCreate.CreatePublicWire[coreDesign, SCTestA, NIL, LIST["nandInst15W", "nandInst25W", "nandInst35W", "nandInst45W", "nandInst55W"]]; nandPorts: Core.Wire _ CoreCreate.CreatePublicWire[coreDesign, nand, NIL, LIST["InA", "InB", "Out"]]; nandInst11W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst11W"]; nandInst12W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst12W"]; nandInst13W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst13W"]; nandInst14W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst14W"]; nandInst21W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst21W"]; nandInst22W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst22W"]; nandInst23W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst23W"]; nandInst24W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst24W"]; nandInst31W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst31W"]; nandInst32W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst32W"]; nandInst33W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst33W"]; nandInst34W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst34W"]; nandInst41W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst41W"]; nandInst42W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst42W"]; nandInst43W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst43W"]; nandInst44W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst44W"]; nandInst51W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst51W"]; nandInst52W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst52W"]; nandInst53W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst53W"]; nandInst54W: Core.Wire _ CoreCreate.CreateWire[coreDesign, SCTestA, "nandInst54W"]; nandInst11: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col1, InB: Row1, Out: nandInst11W", NIL, "nandInst11"]; nandInst12: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col2, InB: nandInst11W, Out: nandInst12W", NIL, "nandInst12"]; nandInst13: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col3, InB: nandInst12W, Out: nandInst13W", NIL, "nandInst13"]; nandInst14: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col4, InB: nandInst13W, Out: nandInst14W", NIL, "nandInst14"]; nandInst15: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col5, InB: nandInst14W, Out: nandInst15W", NIL, "nandInst15"]; nandInst21: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col1, InB: Row2, Out: nandInst21W", NIL, "nandInst21"]; nandInst22: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col2, InB: nandInst11W, Out: nandInst22W", NIL, "nandInst22"]; nandInst23: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col3, InB: nandInst12W, Out: nandInst23W", NIL, "nandInst23"]; nandInst24: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col4, InB: nandInst13W, Out: nandInst24W", NIL, "nandInst24"]; nandInst25: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col5, InB: nandInst14W, Out: nandInst25W", NIL, "nandInst25"]; nandInst31: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col1, InB: Row3, Out: nandInst31W", NIL, "nandInst31"]; nandInst32: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col2, InB: nandInst11W, Out: nandInst32W", NIL, "nandInst32"]; nandInst33: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col3, InB: nandInst12W, Out: nandInst33W", NIL, "nandInst33"]; nandInst34: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col4, InB: nandInst13W, Out: nandInst34W", NIL, "nandInst34"]; nandInst35: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col5, InB: nandInst14W, Out: nandInst35W", NIL, "nandInst35"]; nandInst41: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col1, InB: Row4, Out: nandInst41W", NIL, "nandInst41"]; nandInst42: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col2, InB: nandInst11W, Out: nandInst42W", NIL, "nandInst42"]; nandInst43: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col3, InB: nandInst12W, Out: nandInst43W", NIL, "nandInst43"]; nandInst44: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col4, InB: nandInst13W, Out: nandInst44W", NIL, "nandInst44"]; nandInst45: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col5, InB: nandInst14W, Out: nandInst45W", NIL, "nandIns45"]; nandInst51: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col1, InB: Row5, Out: nandInst51W", NIL, "nandInst51"]; nandInst52: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col2, InB: nandInst11W, Out: nandInst52W", NIL, "nandInst52"]; nandInst53: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col3, InB: nandInst12W, Out: nandInst53W", NIL, "nandInst53"]; nandInst54: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col4, InB: nandInst13W, Out: nandInst54W", NIL, "nandInst54"]; nandInst55: CoreClasses.CellInstance _ CoreCreate.CreateCellInstance[coreDesign, SCTestA, nand, "InA: Col5, InB: nandInst14W, Out: nandInst55W", NIL, "nandIns55"]; RETURN [coreDesign, SCTestA]; END; DoLayout: PROC [coreDesign: Core.Design, cellType: Core.CellType, cdDesign, libDesign: CD.Design] RETURNS [result: SC.Result _ NIL] = BEGIN technology: CD.Technology _ CD.FetchTechnology[$cmos]; metal: SC.Layer _ CD.FetchLayer[technology, $met]; metal2: SC.Layer _ CD.FetchLayer[technology, $met2]; rules: SC.DesignRules _ SC.CreateDesignRules[$cmos, metal, metal2, horizontal]; IF libDesign # NIL THEN {handle: SC.Handle _ SC.CreateHandle[coreDesign, cellType, cdDesign, libDesign, rules]; SC.InitialPlace[handle]; SC.PlaceImprove[handle, $globalRouting]; SC.GlobalRoute[handle]; SC.PlaceImprove[handle, $globalRouting]; result _ SC.DetailRoute[handle]}; END; WriteLayout: PROC [result: SC.Result, design: CD.Design] = BEGIN IF CDIO.WriteDesign[design, result.handle.name] THEN BEGIN newCellName: Rope.ROPE _ CDDirectory.Name[result.object]; IF ~Rope.Equal[result.handle.name, newCellName] THEN TerminalIO.WriteRope[Rope.Cat["cell name changed to: ", newCellName, "\n"]]; END ELSE TerminalIO.WriteRope["Error: design not written\n"]; END; debug: BOOLEAN _ FALSE; coreDesign: Core.Design; cellType: Core.CellType; result: SC.Result; technology: CD.Technology _ CD.FetchTechnology[$cmos]; cdDesign: CD.Design _ CDOps.CreateDesign[technology]; libName: Rope.ROPE _"/indigo/autolayout/arbiter/StandardCells/ArbiterPartsNewPins.dale"; libDesign: CD.Design _ CDGenerateRemote.FetchRemoteDesign[cdDesign, libName]; IF libDesign = NIL THEN {libDesign _ CDIO.ReadDesign[libName]; IF libDesign = NIL THEN {TerminalIO.WriteRope[Rope.Cat["Unable to read Chipndale library from: ", libName, "\n"]]} ELSE CDGenerateRemote.CacheRemoteDesign[cdDesign, libDesign]}; [coreDesign, cellType] _ CreateCore[]; IF debug THEN { out: IO.STREAM _ ViewerIO.CreateViewerStreams[ name: "Core: SCTestA", viewer: NIL, editedStream: FALSE].out; CoreOps.PrintDesign[coreDesign, out]}; result _ DoLayout[coreDesign, cellType, cdDesign, libDesign]; WriteLayout[result, cdDesign]; END. &///StdCell/SCTestA.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by: Preas, September 5, 1985 10:39:21 am PDT Bryan Preas September 5, 1985 10:37:21 am PDT Create a Core design Create a standard cell object Write a standard cell object to a CND design Κb˜Jšœ™Jšœ Οmœ1™<™8Icode™-—J™šΟk œ˜ Jšžœ˜J˜ J˜ J˜Jšžœ˜J˜J˜J˜ J˜J˜ J˜Jšœ˜Jšžœ˜Jšœ ˜ Jšœ ˜ —J˜šœ žœž˜J˜Jšžœžœ!žœ$žœ˜kJšžœžœ˜ —˜Jšž˜J˜šΟn œžœžœ˜:Jšœ™J™Jšž˜Jšœ:˜:JšœL˜LJšœF˜FJšœCžœžœ*˜vJšœCžœžœ*˜vJšœCžœžœM˜™JšœJžœ˜eJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœS˜SJšœŠžœ˜Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€JšœŠžœ˜Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€JšœŠžœ˜Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€JšœŠžœ˜Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜£JšœŠžœ˜Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜€Jšœ‘žœ˜£Jšžœ˜Jšžœ˜—J˜š ŸœžœIžœ žœ žœ žœ˜…Jšœ™J˜Jšž˜Jšœ žœžœ˜6Jšœžœ žœ˜2Jšœžœ žœ˜4Jšœžœžœ5˜Ošžœ žœž˜Jšœ žœ žœ@˜WJšžœ˜Jšœ(˜(Jšžœ˜Jšœ(˜(Jšœ žœ˜!—šžœ˜J˜——šŸ œžœ žœžœ ˜:Jšœ,™,J™Jšž˜šžœžœ*ž˜5Jšž˜Jšœžœ#˜9šžœ.ž˜4JšœL˜L—Jšž˜—šž˜J˜4—Jšžœ˜J˜—Jšœžœžœ˜Jšœ˜Jšœ˜Jšœžœ˜Jšœ žœžœ˜6Jšœ žœ)˜5JšœžœF˜XJšœ žœ@˜Mšžœ žœž˜Jšœ žœ˜&šžœ žœž˜JšœZ˜Z—šž˜Jšœ9˜9——Jšœ&˜&šžœžœ˜šœžœžœ ˜.J˜Jšœžœ˜ Jšœžœ˜—Jšœ&˜&—Jšœ=˜=Jšœ˜J˜Jšžœ˜——…—"~)