DIRECTORY CD, CMosContacts, CDOps, CDSequencer, CDPanel, CDValue, TerminalIO, CMos; CMosContactCommands: CEDAR PROGRAM IMPORTS CDOps, CDSequencer, CDPanel, 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[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda]; 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[CDValue.FetchInt[comm.design, $CMosContactL, technology]*lambda, 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]; 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]; 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]; 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]; 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, 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, 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, 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]; 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. šCMosContactCommands.mesa (part of Chipndale) by Christian Jacobi June 24, 1983 5:03 pm last edited Christian Jacobi February 8, 1984 10:56 am Êå˜Jšœ-™-Jšœ,™,Jšœ8™8J˜šÏk ˜ Jšœ˜J˜ J˜J˜ J˜J˜J˜ J˜J˜—šÏbœœœ˜#JšœH˜O—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˜RJšœ˜J˜—šŸœœ˜3Jš˜Jšœœ˜ Jšœœ,˜1J˜7Jšœc˜cJ˜RJšœ˜J˜—šŸ œœ˜0Jš˜Jšœœ˜ J˜1Jšœk˜kJ˜RJšœ˜J˜—šŸ œœ ˜3Jš˜Jšœœ˜ J˜2Jšœk˜kJ˜RJšœ˜J˜—šŸœœ ˜4Jš˜Jšœœ˜ J˜2Jšœo˜oJ˜RJšœ˜J˜—šŸœœ ˜4Jš˜Jšœœ˜ J˜2Jšœo˜oJ˜RJšœ˜J˜—šŸœœ˜3Jš˜Jšœœ˜ Jšœœ,˜1J˜?˜JšœD˜DJšœD˜DJšœ ˜ —J˜RJšœ˜J˜—šŸ œœ˜0Jš˜Jšœœ˜ J˜9˜JšœD˜DJšœD˜DJ˜—J˜RJšœ˜J˜—šŸ œœ˜1Jš˜Jšœœ˜ J˜9˜JšœD˜DJšœD˜DJ˜—J˜RJšœ˜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˜—…—‚