CreateTransistorComm:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
TerminalIO.PutRope["create transistor\n"];
ob ← NMosTransistors.CreateTransistor[
w: CDValue.FetchInt[comm.design, $NMosTransistorW, technology]*lambda,
l: CDValue.FetchInt[comm.design, $NMosTransistorL, technology]*lambda,
implant: GetImplant[comm.design]
];
[] ← CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos]
END;
CreateATransistorComm:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
TerminalIO.PutRope["Create angle transistor\n"];
ob ← NMosTransistors.CreateAngleTransistor[
w: CDValue.FetchInt[comm.design, $NMosTransistorW, technology]*lambda,
l: CDValue.FetchInt[comm.design, $NMosTransistorL, technology]*lambda,
implant: GetImplant[comm.design]
];
[] ← CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos]
END;
CreatePullUpComm:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.Object;
TerminalIO.PutRope["Create Pullup\n"];
ob ← NMosTransistors.CreatePullUp[
w: CDValue.FetchInt[comm.design, $NMosPullUpW, technology]*lambda,
l: CDValue.FetchInt[comm.design, $NMosPullUpH, technology]*lambda
];
[] ← CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos]
END;
ImplCommands:
PROC [] =
BEGIN
CDSequencer.ImplementCommand[$DrawNXstr, CreateTransistorComm, NMos.nmos];
CDValue.RegisterKey[$NMosTransistorW, NMos.nmos, $nmos];
CDValue.RegisterKey[$NMosTransistorL, NMos.nmos, $nmos];
CDValue.RegisterKey[$NMosTransistorImplant, NMos.nmos, $nmos];
CDValue.RegisterKey[$NMosImplantCrazy, NMos.nmos, $nmos];
CDValue.RegisterKey[$NMosWEx, NMos.nmos, $nmos];
CDValue.RegisterKey[$NMosLEx, NMos.nmos, $nmos];
CDPanel.Number[number: [cdValueKey: $NMosTransistorW], tech: NMos.nmos,
button: [text: "Transistor width:"], min: 1, default: 2];
CDPanel.Number[number: [cdValueKey: $NMosTransistorL], tech: NMos.nmos,
button: [text: "length:"], min: 1, default: 2];
CDPanel.Number[number: [cdValueKey: $NMosTransistorImplant], tech: NMos.nmos,
button: [text: "implant:"], min: 0, max: 1, default: 0];
CDPanel.Number[number: [cdValueKey: $NMosImplantCrazy], tech: NMos.nmos,
button: [text: "weak:"], min: 0, max: 1, default: 0];
CDPanel.Line[NMos.nmos];
CDSequencer.ImplementCommand[$DrawAngleNXstr, CreateATransistorComm, NMos.nmos];
CDSequencer.ImplementCommand[$DrawPullup, CreatePullUpComm, NMos.nmos];
CDValue.RegisterKey[$NMosPullUpW, NMos.nmos];
CDValue.RegisterKey[$NMosPullUpH, NMos.nmos];
CDPanel.Number[number: [cdValueKey: $NMosPullUpW], tech: NMos.nmos,
button: [text: "PullUp width:"], min: 1, default: 2];
CDPanel.Number[number: [cdValueKey: $NMosPullUpH], tech: NMos.nmos,
button: [text: "height:"], min: 1, default: 3];
CDPanel.Line[NMos.nmos];
CDPanel.Number[number: [cdValueKey: $NMosWEx], tech: NMos.nmos,
button: [text: "extension comm: W:"], min: 0, default: 2, lambda: NMos.lambda];
CDPanel.Number[number: [cdValueKey: $NMosLEx], tech: NMos.nmos,
button: [text: " L:"], min: 0, default: 2, lambda: NMos.lambda];
CDPanel.Line[NMos.nmos];
CDSequencer.ImplementCommand[$ChangeExt, ChangeExtComm, NMos.nmos];
END;