<> <> <> <> 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.