CMosContactCommands.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 12, 1985 3:38:07 pm PST
DIRECTORY
CD,
CMosContacts,
CDOps,
CDSequencer,
CDPanel,
CDValue,
TerminalIO,
CMos;
CMosContactCommands:
CEDAR
PROGRAM
IMPORTS CDOps, CDSequencer, CDValue, TerminalIO, CMosContacts, CMos =
BEGIN
lambda: CD.DesignNumber = CD.lambda;
CreateAnyButCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
l: CD.Layer = CMos.CurrentDiffusion[comm.design];
TerminalIO.WriteRope["Create butting contact (current dif)\n"];
ob ← CMosContacts.CreateButCon[l];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateButCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create butting contact (n-dif)\n"];
ob ← CMosContacts.CreateButCon[CMos.ndif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePButCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create butting contact (p-dif)\n"];
ob ← CMosContacts.CreateButCon[CMos.pdif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePolyCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (poly)\n"];
ob ← CMosContacts.CreatePolyCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda];
ob ← CMosContacts.CreatePolyCon[0];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateAnyDifCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
l: CD.Layer = CMos.CurrentDiffusion[comm.design];
TerminalIO.WriteRope["Create contact (current dif)\n"];
ob ← CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, l];
ob ← CMosContacts.CreateDifCon[0, l];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateDifCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (n-dif)\n"];
ob ← CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.ndif];
ob ← CMosContacts.CreateDifCon[0, CMos.ndif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePDifCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (p-ndif)\n"];
ob ← CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.pdif];
ob ← CMosContacts.CreateDifCon[0, CMos.pdif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateNWellCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (n-well)\n"];
ob ← CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.nwelCont];
ob ← CMosContacts.CreateDifCon[0, CMos.nwelCont];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePWellCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (p-well)\n"];
ob ← CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.pwelCont];
ob ← CMosContacts.CreateDifCon[0, CMos.pwelCont];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateAnyBurCon: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
l: CD.Layer = CMos.CurrentDiffusion[comm.design];
TerminalIO.WriteRope["Create burried contact (current dif)\n"];
ob ← CMosContacts.CreateBurCon[
w: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
l: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
wex: 2*lambda,
lex: lambda,
difLev: l];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateBurCon: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create burried contact (n-dif)\n"];
ob ← CMosContacts.CreateBurCon[
w: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
l: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
wex: 2*lambda,
lex: lambda,
difLev: CMos.ndif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePBurCon: PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create burried contact (p-dif)\n"];
ob ← CMosContacts.CreateBurCon[
w: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
l: CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda,
wex: 2*lambda,
lex: lambda,
difLev: CMos.pdif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateMmCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create Via\n"];
ob ← CMosContacts.CreateMmCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda];
ob ← CMosContacts.CreateMmCon[0];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreateDifShortCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (n-diff short)\n"];
ob ← CMosContacts.CreateDifShortCon[CMos.ndif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
CreatePDifShortCon:
PROC [comm: CDSequencer.Command] =
BEGIN
ob: CD.ObPtr;
TerminalIO.WriteRope["Create contact (p-diff short)\n"];
ob ← CMosContacts.CreateDifShortCon[CMos.pdif];
CDOps.AddAnObject[design: comm.design, ob: ob, location: comm.pos, orientation: 0]
END;
ImplCommands:
PROC [] =
BEGIN
CDValue.EnregisterKey[$CMosContactL, CMos.cmos];
CDPanel.DefineIntEntry[cdValueKey: $CMosContactL, tech: CMos.cmos,
text: "Contact length:", min: 4, default: 4];
CDPanel.DefineNewLine[CMos.cmos];
CDValue.StoreInt[boundTo: CMos.cmos, key: $CMosContactL, value: 4];
CDSequencer.ImplementCommand[$DrawNButCon, CreateButCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPButCon, CreatePButCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawButCon, CreateAnyButCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPolCon, CreatePolyCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNDifCon, CreateDifCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPDifCon, CreatePDifCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNWCntCon, CreateNWellCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPWCntCon, CreatePWellCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawDifCon, CreateAnyDifCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNBurCon, CreateBurCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPBurCon, CreatePBurCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawBurCon, CreateAnyBurCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawMm2Con, CreateMmCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawNDifShortCon, CreateDifShortCon, CMos.cmos];
CDSequencer.ImplementCommand[$DrawPDifShortCon, CreatePDifShortCon, CMos.cmos];
END;
ImplCommands[];
END.