<<--///DATools/SCTestPads.mesa>> <<--created by ChipNDale>> <> DIRECTORY CDCells, CDGenerate, CD, CDDirectory, CDRects, CDRemote, CDSymbolicObjects, Rope; SCTestPads: CEDAR PROGRAM IMPORTS CDCells, CDGenerate, CD, CDDirectory, CDRects, CDRemote, CDSymbolicObjects = BEGIN tech: CD.Technology _ CD.FetchTechnology[$cmosB]; met2: CD.Layer _ CD.FetchLayer[t: tech, uniqueKey: $met2]; met: CD.Layer _ CD.FetchLayer[t: tech, uniqueKey: $met]; TopSide: CDGenerate.GeneratorProc = BEGIN inst: CD.Instance; outputPadxmask: CD.Object; inputPadxmask: CD.Object; pinOb0: CD.Object; child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "VddPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 0], obCSystem: interrestCoords]; child _ CDRects.CreateRect[size: [x: 32, y: 1136], l: met2]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 232, y: 0], orientation: 2, obCSystem: interrestCoords]; child _ CDSymbolicObjects.CreatePin[[x: 800, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 568, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "Vdd"]; CDSymbolicObjects.SetLayer[inst, met2]; outputPadxmask _ CDGenerate.FetchNCall[directory, design, "OutputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 1600, y: 0], obCSystem: interrestCoords]; pinOb0 _ CDSymbolicObjects.CreatePin[[x: 32, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 3080, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL4Q"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 3200, y: 0], obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4680, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutOr2"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 4800, y: 0], obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 6280, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutAnd4"]; CDSymbolicObjects.SetLayer[inst, met2]; inputPadxmask _ CDGenerate.FetchNCall[directory, design, "InputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: inputPadxmask, position: [x: 6400, y: 0], obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 6952, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "In4"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 8000, y: 0], obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 9480, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutXor"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: inputPadxmask, position: [x: 9600, y: 0], obCSystem: interrestCoords]; child _ CDSymbolicObjects.CreatePin[[x: 32, y: 40]]; inst _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 10152, y: 0], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "In3"]; CDSymbolicObjects.SetLayer[inst, met2]; child _ CDGenerate.FetchNCall[directory, design, "PadGndPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 11200, y: 0], obCSystem: interrestCoords]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 12800, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "TopSide"]; END; LeftSide: CDGenerate.GeneratorProc = BEGIN inst: CD.Instance; pinOb0: CD.Object; outputPadxmask: CD.Object; child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; outputPadxmask _ CDGenerate.FetchNCall[directory, design, "OutputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 0], orientation: 2, obCSystem: interrestCoords]; pinOb0 _ CDSymbolicObjects.CreatePin[[x: 32, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 1480], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutAnd3"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 1600], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 3080], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNOr2"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 3200], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 4680], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutAnd2"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 4800], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 6280], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL2Q"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 6400], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 7880], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutXnor"]; CDSymbolicObjects.SetLayer[inst, met]; child _ CDGenerate.FetchNCall[directory, design, "InputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 8000], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 8552], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "In2"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 9600], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 11080], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutInv"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 11200], orientation: 2, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4336, y: 12680], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL4NQ"]; CDSymbolicObjects.SetLayer[inst, met]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 12800]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "LeftSide"]; END; BottomSide: CDGenerate.GeneratorProc = BEGIN inst: CD.Instance; pinOb0: CD.Object; outputPadxmask: CD.Object; child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "PadVddPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 0], orientation: 4, obCSystem: interrestCoords]; outputPadxmask _ CDGenerate.FetchNCall[directory, design, "OutputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 1600, y: 0], orientation: 4, obCSystem: interrestCoords]; pinOb0 _ CDSymbolicObjects.CreatePin[[x: 32, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 1688, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL2NQ"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 3200, y: 0], orientation: 4, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 3288, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL3Q"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 4800, y: 0], orientation: 4, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 4888, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNAnd2"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 6400, y: 0], orientation: 4, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 6488, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL1NQ"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 8000, y: 0], orientation: 4, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 8088, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL1Q"]; CDSymbolicObjects.SetLayer[inst, met2]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 9600, y: 0], orientation: 4, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 9688, y: 4336], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNAnd3"]; CDSymbolicObjects.SetLayer[inst, met2]; child _ CDGenerate.FetchNCall[directory, design, "GndPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 11200, y: 0], orientation: 4, obCSystem: interrestCoords]; child _ CDSymbolicObjects.CreatePin[[x: 800, y: 40]]; inst _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 11232, y: 4328], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "Gnd"]; CDSymbolicObjects.SetLayer[inst, met2]; child _ CDRects.CreateRect[size: [x: 56, y: 1464], l: met2]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 11304, y: 4312], orientation: 2, obCSystem: interrestCoords]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 12800, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "BottomSide"]; END; RightSide: CDGenerate.GeneratorProc = BEGIN inst: CD.Instance; outputPadxmask: CD.Object; pinOb0: CD.Object; child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; outputPadxmask _ CDGenerate.FetchNCall[directory, design, "OutputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 0], orientation: 3, obCSystem: interrestCoords]; pinOb0 _ CDSymbolicObjects.CreatePin[[x: 32, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 1480], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNOr3"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 1600], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 3080], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutDummy"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 3200], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 4680], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNAnd4"]; CDSymbolicObjects.SetLayer[inst, met]; child _ CDGenerate.FetchNCall[directory, design, "InputPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 4800], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 5352], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "In1"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 6400], orientation: 3, obCSystem: interrestCoords]; child _ CDSymbolicObjects.CreatePin[[x: 24, y: 32]]; inst _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 7880], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutNOr4"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 8000], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 9480], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutOr4"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 9600], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 11080], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutL3NQ"]; CDSymbolicObjects.SetLayer[inst, met]; [] _ CDCells.IncludeOb[cell: ob, ob: outputPadxmask, position: [x: 0, y: 11200], orientation: 3, obCSystem: interrestCoords]; inst _ CDCells.IncludeOb[cell: ob, ob: pinOb0, position: [x: 0, y: 12680], obCSystem: interrestCoords].newInst; CDSymbolicObjects.SetName[inst, "OutOr3"]; CDSymbolicObjects.SetLayer[inst, met]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 12800]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "RightSide"]; END; TopLeftCorner: CDGenerate.GeneratorProc = BEGIN child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "CornerPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 4400, y: -32], orientation: 2]; child _ CDGenerate.FetchNCall[directory, design, "CopyRight.pict"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 2768, y: 1816]]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "TopLeftCorner"]; END; TopRightCorner: CDGenerate.GeneratorProc = BEGIN child: CD.Object; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "CornerPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: -32, y: -32]]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "TopRightCorner"]; END; BottomLeftCorner: CDGenerate.GeneratorProc = BEGIN child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "CornerPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 4400, y: 4400], orientation: 4]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "BottomLeftCorner"]; END; BottomRightCorner: CDGenerate.GeneratorProc = BEGIN child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[directory, design, "CornerPad.mask"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: -32, y: 4400], orientation: 6]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 4368, y2: 4368]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "BottomRightCorner"]; END; PadPicture: CDGenerate.GeneratorProc = BEGIN child: CD.Object; IF design.technology#tech THEN ERROR; ob _ CDCells.CreateEmptyCell[]; child _ CDGenerate.FetchNCall[frameTable, design, "RightSide"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 21864, y: 5944]]; child _ CDGenerate.FetchNCall[frameTable, design, "LeftSide"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 240, y: 6368]]; child _ CDGenerate.FetchNCall[frameTable, design, "BottomRightCorner"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 22144, y: 568]]; child _ CDGenerate.FetchNCall[frameTable, design, "BottomLeftCorner"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 480, y: 56]]; child _ CDGenerate.FetchNCall[frameTable, design, "TopRightCorner"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 21856, y: 19416]]; child _ CDGenerate.FetchNCall[frameTable, design, "TopLeftCorner"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 0, y: 19672]]; child _ CDGenerate.FetchNCall[frameTable, design, "TopSide"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 6736, y: 19744]]; child _ CDGenerate.FetchNCall[frameTable, design, "BottomSide"]; [] _ CDCells.IncludeOb[cell: ob, ob: child, position: [x: 5200, y: 0]]; CDCells.SetInterestRect[ob, [x1: 0, y1: 0, x2: 26512, y2: 24112]]; [] _ CDDirectory.Include[design: design, object: ob, alternateName: "PadPicture"]; END; input: Rope.ROPE _ "Pads"; frameTable: CDGenerate.Table _ CDGenerate.AssertTable["SCTESTPADFRAME"]; table: CDGenerate.Table _ CDGenerate.AssertTable["USER"]; <> directory: CDGenerate.Table _ CDRemote.GetTable[input]; [] _ frameTable.Register["TopSide", TopSide]; [] _ frameTable.Register["LeftSide", LeftSide]; [] _ frameTable.Register["RightSide", RightSide]; [] _ frameTable.Register["BottomSide", BottomSide]; [] _ frameTable.Register["TopLeftCorner", TopLeftCorner]; [] _ frameTable.Register["TopRightCorner", TopRightCorner]; [] _ frameTable.Register["BottomLeftCorner", BottomLeftCorner]; [] _ frameTable.Register["BottomRightCorner", BottomRightCorner]; [] _ table.Register["PadPicture", PadPicture]; END.