--///DATools/SCTestPads.mesa
--created by ChipNDale
Last Edited by: Jacobi June 17, 1986 4:22:46 pm PDT
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 ← CDGenerate.AssertTable["DIRECTORY"];
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.