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.a
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.AddAnObject[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.a
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.AddAnObject[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.a
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.AddAnObject[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.a
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.AddAnObject[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.a
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.AddAnObject[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;