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.Level = 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[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.Level = CMos.CurrentDiffusion[comm.design]; TerminalIO.WriteRope["Create contact (current dif)\n"]; 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[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[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[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[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.Level = 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[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]; 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. NCMosContactCommands.mesa (part of Chipndale) Copyright c 1983, 1984 by Xerox Corporation. All rights reserved. by Christian Jacobi June 24, 1983 5:03 pm last edited Christian Jacobi February 8, 1984 10:56 am ob _ CMosContacts.CreatePolyCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda]; ob _ CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, l]; ob _ CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.ndif]; ob _ CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.pdif]; ob _ CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.nwelCont]; ob _ CMosContacts.CreateDifCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, CMos.pwelCont]; ob _ CMosContacts.CreateMmCon[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda]; CDPanel.DefineIntEntry[cdValueKey: $CMosContactL, tech: CMos.cmos, text: "Contact length:", min: 4, default: 4]; CDPanel.DefineNewLine[CMos.cmos]; ÊI˜šœ-™-Jšœ Ïmœ7™BJšœ,™,Jšœ8™8—J˜šÏk ˜ Jšžœ˜J˜ J˜J˜ J˜J˜J˜ J˜J˜—šÏbœžœžœ˜#Jšžœ?˜F—Jšž˜J˜Jšœžœžœ˜$J˜šÏnœžœ˜3Jšž˜Jšœžœ˜ Jšœžœ,˜1Jšœ?˜?Jšœ"˜"J˜RJšžœ˜J˜—š  œžœ˜0Jšž˜Jšœžœ˜ J˜9J˜*J˜RJšžœ˜J˜—š  œžœ˜1Jšž˜Jšœžœ˜ J˜9J˜*J˜RJšžœ˜J˜—š  œžœ˜1Jšž˜Jšœžœ˜ J˜0J™aJ˜#J˜RJšžœ˜J˜—š œžœ˜3Jšž˜Jšœžœ˜ Jšœžœ,˜1J˜7Jšœc™cJšœ%˜%J˜RJšžœ˜J˜—š  œžœ˜0Jšž˜Jšœžœ˜ J˜1Jšœk™kJšœ-˜-J˜RJšžœ˜J˜—š  œžœ ˜3Jšž˜Jšœžœ˜ J˜2Jšœk™kJšœ-˜-J˜RJšžœ˜J˜—š œžœ ˜4Jšž˜Jšœžœ˜ J˜2Jšœo™oJšœ1˜1J˜RJšžœ˜J˜—š œžœ ˜4Jšž˜Jšœžœ˜ J˜2Jšœo™oJšœ1˜1J˜RJšžœ˜J˜—š œžœ˜3Jšž˜Jšœžœ˜ Jšœžœ,˜1J˜?˜JšœD˜DJšœD˜DJšœ˜Jšœ ˜ Jšœ ˜ —J˜RJšžœ˜J˜—š  œžœ˜0Jšž˜Jšœžœ˜ J˜9˜JšœD˜DJšœD˜DJšœ˜Jšœ ˜ J˜—J˜RJšžœ˜J˜—š  œžœ˜1Jšž˜Jšœžœ˜ J˜9˜JšœD˜DJšœD˜DJšœ˜Jšœ ˜ J˜—J˜RJšžœ˜J˜—š  œžœ˜/Jšž˜Jšœžœ˜ J˜%Jšœ_™_Jšœ!˜!J˜RJšžœ˜—J˜š œžœ˜5Jšž˜Jšœžœ˜ J˜8Jšœ/˜/J˜RJšžœ˜—šœ œžœ˜7Jšž˜Jšœžœ˜ J˜8Jšœ/˜/J˜RJšžœ˜—J˜š  œžœ˜Jšž˜Jšœ/žœ˜1™BJ™-—J™!JšœC˜CJšœD˜DJšœE˜EJšœF˜FJ˜DJšœD˜DJšœE˜EJšœG˜GJšœG˜GJšœF˜FJšœD˜DJšœE˜EJšœF˜FJšœB˜BJšœN˜NJšœO˜OJšžœ˜J˜—J˜J˜Jšžœ˜J˜—…—ˆ!