<> <> <> <> DIRECTORY CD, CDAtomicObjects, CDOps, CDSequencer, TerminalIO, CMos; CMosObsCommands: CEDAR PROGRAM IMPORTS CDAtomicObjects, CDOps, CDSequencer, TerminalIO, CMos = BEGIN CreateXstr: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; layer: CD.Layer; size: CD.Position _ [8*CMos.lambda, 6*CMos.lambda]; TerminalIO.PutRope["create transistor "]; SELECT comm.key FROM $DrawNXstr => layer _ CMos.ndif; $DrawWNXstr => layer _ CMos.wndif; $DrawPXstr => layer _ CMos.pdif; $DrawWPXstr => layer _ CMos.wpdif; ENDCASE => layer _ CMos.ndif; TerminalIO.PutRope[CDOps.LayerRope[layer]]; TerminalIO.PutRope["\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CTrans, size, comm.design.technology, layer]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; CreateLXstr: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; layer: CD.Layer; TerminalIO.PutRope["create L transistor "]; SELECT comm.key FROM $DrawAngleNXstr => layer _ CMos.ndif; $DrawAngleWNXstr => layer _ CMos.wndif; $DrawAnglePXstr => layer _ CMos.pdif; $DrawAngleWPXstr => layer _ CMos.wpdif; ENDCASE => layer _ CMos.ndif; TerminalIO.PutRope[CDOps.LayerRope[layer]]; TerminalIO.PutRope["\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CLTrans, [0, 0], comm.design.technology, layer]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; CreateCont: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; layer: CD.Layer; TerminalIO.PutRope["create contact "]; SELECT comm.key FROM $DrawNDifCon => layer _ CMos.ndif; $DrawWNDifCon => layer _ CMos.wndif; $DrawPDifCon => layer _ CMos.pdif; $DrawWPDifCon => layer _ CMos.wpdif; $DrawPolCon => layer _ CMos.pol; $DrawNWCntCon => layer _ CMos.nwellCont; $DrawPWCntCon => layer _ CMos.pwellCont; ENDCASE => layer _ CMos.pol; TerminalIO.PutRope[CDOps.LayerRope[layer]]; TerminalIO.PutRope["\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CSimpleCon, [0, 0], comm.design.technology, layer]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; CreateDiffShortCont: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; layer: CD.Layer; TerminalIO.PutRope["create diff short contact "]; SELECT comm.key FROM $DrawNDifShortCon => layer _ CMos.ndif; $DrawWNDifShortCon => layer _ CMos.wndif; $DrawPDifShortCon => layer _ CMos.pdif; $DrawWPDifShortCon => layer _ CMos.wpdif; ENDCASE => layer _ CMos.ndif; TerminalIO.PutRope[CDOps.LayerRope[layer]]; TerminalIO.PutRope["\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CDifShortCon, [0, 0], comm.design.technology, layer]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; CreateButtingCont: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; layer: CD.Layer; TerminalIO.PutRope["create butting contact "]; SELECT comm.key FROM $DrawNButCon => layer _ CMos.ndif; $DrawWNButCon => layer _ CMos.wndif; $DrawPButCon => layer _ CMos.pdif; $DrawWPButCon => layer _ CMos.wpdif; ENDCASE => layer _ CMos.ndif; TerminalIO.PutRope[CDOps.LayerRope[layer]]; TerminalIO.PutRope["\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CButtingCont, [0, 0], comm.design.technology, layer]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; CreateViaCont: PROC [comm: CDSequencer.Command] = BEGIN ob: CD.Object; TerminalIO.PutRope["create via\n"]; ob _ CDAtomicObjects.CreateAtomicOb[$CVia, [0, 0], comm.design.technology]; IF ob=NIL THEN TerminalIO.PutRope["not done\n"] ELSE CDOps.IncludeObjectI[design: comm.design, ob: ob, location: comm.pos] END; ImplCommands: PROC [] = BEGIN CDSequencer.ImplementCommand[$DrawNXstr, CreateXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPXstr, CreateXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWNXstr, CreateXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWPXstr, CreateXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawAngleNXstr, CreateLXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawAnglePXstr, CreateLXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawAngleWNXstr, CreateLXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawAngleWPXstr, CreateLXstr, CMos.cmos]; CDSequencer.ImplementCommand[$DrawNDifCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWNDifCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPDifCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWPDifCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPolCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawNWCntCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPWCntCon, CreateCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawNDifShortCon, CreateDiffShortCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWNDifShortCon, CreateDiffShortCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPDifShortCon, CreateDiffShortCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWPDifShortCon, CreateDiffShortCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawNButCon, CreateButtingCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWNButCon, CreateButtingCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawPButCon, CreateButtingCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawWPButCon, CreateButtingCont, CMos.cmos]; CDSequencer.ImplementCommand[$DrawMm2Con, CreateViaCont, CMos.cmos]; END; ImplCommands[]; END.