CMosObsCommands.mesa (part of Chipndale)
Copyright © 1983, 1985 by Xerox Corporation. All rights reserved.
by Christian Jacobi, June 24, 1983 5:03 pm
last edited Christian Jacobi, March 19, 1986 12:14:14 pm PST
DIRECTORY
CD,
CDAtomicObjects,
CDOps,
CDSequencer,
TerminalIO,
CMos;
CMosObsCommands: CEDAR PROGRAM
IMPORTS CDAtomicObjects, CDOps, CDSequencer, TerminalIO, CMos =
BEGIN
lambda: CD.Number = CMos.lambda;
CreateXstr: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
layer: CD.Layer;
size: CD.Position ← [8*lambda, 6*lambda];
TerminalIO.WriteRope["create transistor "];
SELECT comm.key FROM
$DrawNXstr => layer ← CMos.ndif;
$DrawWNXstr => layer ← CMos.wndif;
$DrawPXstr => layer ← CMos.pdif;
$DrawWPXstr => layer ← CMos.wpdif;
ENDCASE => layer ← CMos.ndif;
TerminalIO.WriteRope[CDOps.LayerName[layer]];
TerminalIO.WriteLn[];
ob ← CDAtomicObjects.CreateAtomicOb[$CTrans, size, comm.design.technology, layer];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateLXstr: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
layer: CD.Layer;
TerminalIO.WriteRope["create L transistor "];
SELECT comm.key FROM
$DrawAngleNXstr => layer ← CMos.ndif;
$DrawAngleWNXstr => layer ← CMos.wndif;
$DrawAnglePXstr => layer ← CMos.pdif;
$DrawAngleWPXstr => layer ← CMos.wpdif;
ENDCASE => layer ← CMos.ndif;
TerminalIO.WriteRope[CDOps.LayerName[layer]];
TerminalIO.WriteLn[];
ob ← CDAtomicObjects.CreateAtomicOb[$CLTrans, [0, 0], comm.design.technology, layer];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateCont: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
layer: CD.Layer;
TerminalIO.WriteRope["create contact "];
SELECT comm.key FROM
$DrawNDifCon => layer ← CMos.ndif;
$DrawWNDifCon => layer ← CMos.wndif;
$DrawPDifCon => layer ← CMos.pdif;
$DrawWPDifCon => layer ← CMos.wpdif;
$DrawPolCon => layer ← CMos.pol;
$DrawNWCntCon => layer ← CMos.nwellCont;
$DrawPWCntCon => layer ← CMos.pwellCont;
ENDCASE => layer ← CMos.pol;
TerminalIO.WriteRope[CDOps.LayerName[layer]];
TerminalIO.WriteLn[];
ob ← CDAtomicObjects.CreateAtomicOb[$CSimpleCon, [0, 0], comm.design.technology, layer];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateDiffShortCont: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
layer: CD.Layer;
TerminalIO.WriteRope["create diff short contact "];
SELECT comm.key FROM
$DrawNDifShortCon => layer ← CMos.ndif;
$DrawWNDifShortCon => layer ← CMos.wndif;
$DrawPDifShortCon => layer ← CMos.pdif;
$DrawWPDifShortCon => layer ← CMos.wpdif;
ENDCASE => layer ← CMos.ndif;
TerminalIO.WriteRope[CDOps.LayerName[layer]];
TerminalIO.WriteLn[];
ob ← CDAtomicObjects.CreateAtomicOb[$CDifShortCon, [0, 0], comm.design.technology, layer];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateButtingCont: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
layer: CD.Layer;
TerminalIO.WriteRope["create butting contact "];
SELECT comm.key FROM
$DrawNButCon => layer ← CMos.ndif;
$DrawWNButCon => layer ← CMos.wndif;
$DrawPButCon => layer ← CMos.pdif;
$DrawWPButCon => layer ← CMos.wpdif;
ENDCASE => layer ← CMos.ndif;
TerminalIO.WriteRope[CDOps.LayerName[layer]];
TerminalIO.WriteLn[];
ob ← CDAtomicObjects.CreateAtomicOb[$CButtingCont, [0, 0], comm.design.technology, layer];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateViaCont: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
TerminalIO.WriteRope["create via\n"];
ob ← CDAtomicObjects.CreateAtomicOb[$CVia, [0, 0], comm.design.technology];
IF ob=NIL THEN
TerminalIO.WriteRope["not done\n"]
ELSE
CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
ImplCommands: PROC [] =
BEGIN
CDSequencer.ImplementCommand[$DrawNXstr, CreateXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPXstr, CreateXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWNXstr, CreateXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWPXstr, CreateXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawAngleNXstr, CreateLXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawAnglePXstr, CreateLXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawAngleWNXstr, CreateLXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawAngleWPXstr, CreateLXstr, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNDifCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWNDifCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPDifCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWPDifCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPolCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNWCntCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPWCntCon, CreateCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNDifShortCon, CreateDiffShortCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWNDifShortCon, CreateDiffShortCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPDifShortCon, CreateDiffShortCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWPDifShortCon, CreateDiffShortCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNButCon, CreateButtingCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWNButCon, CreateButtingCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPButCon, CreateButtingCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawWPButCon, CreateButtingCont, CMos.cmos];
CDSequencer.ImplementCommand[$DrawMm2Con, CreateViaCont, CMos.cmos];
END;
ImplCommands[];
END.