← %CDProperties.PutPropOnTechnology[onto: %CMos.cmos, prop: $CDMEBESNmPerLambda, val: NEW[CDMEBES.Nm ← 1000]]
← %CDProperties.PutPropOnTechnology[onto: %CMos.cmos, prop: $CDMEBESXNmPerDie, val: NEW[CDMEBES.Nm ← 8400000]]
← %CDProperties.PutPropOnTechnology[onto: %CMos.cmos, prop: $CDMEBESYNmPerDie, val: NEW[CDMEBES.Nm ← 9400000]]
← %CDProperties.PutPropOnTechnology[onto: %CMos.cmos, prop: $CDMEBESNmMaxBloat, val: NEW[CDMEBES.Nm ← 10000 -- 10 um is an upper bound on the greatest distance the "influence" of a drawn object extends beyond itself -- ]]
← %CDProperties.PutPropOnTechnology[onto: %CMos.cmos, prop: $CDMEBESActiveToScribeCenter, val: NEW[CDMEBES.Nm ← (IF &doingICLScribe THEN 105000 -- active area 25 um inside metal 2 scribe ring -- ELSE &s+6000+14000+40000 -- active area allowed 40 um inside metal scribe ring --)]]
Note: We thought it might be interesting to try some Schottky diodes, that would likely result from making metal contact to the lightly-doped n-well. For this purpose, we use the layer CMos.bur to generate thin oxide and to inhibit n+ and p+ implants.
thin oxide or diffusion = 10
← &thinOxBias ← (IF &doingICLBias THEN 1000 -- now (maybe 1500 later) -- ELSE 2000) -- nm
← &thinOxScribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: (IF &doingICLScribe THEN 55000 ELSE &s+14000 -- nm --)]]
← &thinOx ←
NEW[%
CDMEBES.MaskSpecRec ← [name: "10", mebesPixelPitch: (
IF (&doingICLBias
AND ((&thinOxBias
MOD 1000) = 0))
THEN 500
ELSE 250), cover:
LIST[$OR,
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.ndif, deltaDiameter: &thinOxBias ]],
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.pdif, deltaDiameter: &thinOxBias]],
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.pwellCont, deltaDiameter: &thinOxBias]],
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.nwellCont, deltaDiameter: &thinOxBias]],
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.bur, deltaDiameter: &thinOxBias]], &thinOxScribe]]]
The reason for the ugliness in mebesPixelPitch is that VTI wants to do bias adjustment below 250 nm, which is done with beam voltage or current, and we suppose is easier to do with the smaller pixel size. The fact is, we don't know for sure.
pwell = PField dope
← &pWellName ← (IF &doingICLNames THEN "22" ELSE "11")
← &nWellBias ← (IF (&doingICLBias AND NOT &vtiExperiment) THEN -8000 ELSE -3000) -- nm
← &pWellBias ← (IF (&doingICLBias AND NOT &vtiExperiment) THEN &nWellBias+6000 ELSE &nWellBias+4000) -- nm
← &pWellScribe ← IF &doingICLScribe THEN &thinOxScribe ELSE NIL
← &pWell ← NEW[%CDMEBES.MaskSpecRec ← [name: &pWellName, cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.nwell, deltaDiameter: &pWellBias -- nm --]], &pWellScribe]]]
Note: For the source/drain implants, the ideal situation for the implanter is alleged to be minimum photoresist. Therefore we implant everywhere EXCEPT where the opposite sex of implant is required in the design. I'm not sure what we should do about a scribe line. I'm also not quite sure what I should do about VTI's proposed skew of +0.5 micron/side of N+ implant.
nimp
← &ndifs ← LIST[NEW[%CDMEBES.CDLayerRec ← [source: %CMos.ndif]], NEW[%CDMEBES.CDLayerRec ← [source: %CMos.nwellCont]], NEW[%CDMEBES.CDLayerRec ← [source: %CMos.bur]]]
← &pdifs ← LIST[NEW[%CDMEBES.CDLayerRec ← [source: %CMos.pdif]], NEW[%CDMEBES.CDLayerRec ← [source: %CMos.pwellCont]], NEW[%CDMEBES.CDLayerRec ← [source: %CMos.bur]]]
← &nImpName ← (IF &doingICLNames THEN "23" ELSE "24")
← &nImpScribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: &s+2000, width: 12000 -- nm --]]
← &pImpScribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: &s+14000 -- nm --]]
← &nImp ← NEW[%CDMEBES.MaskSpecRec ← [name: &nImpName, cover: LIST[$NOT, LIST[$OR, &pImpScribe, LIST[$DeNotch, NEW[CDMEBES.Nm ← 1500 -- diameter of smallest collapsing space between pImp, nm -- ], NEW[CDMEBES.Nm ← -1500 -- diameter of smallest collapsing piece of pImp, nm -- ], LIST[$RestrictedEnlarge, NEW[CDMEBES.Nm ← 1500 -- maxRadialExtension, nm -- ], CONS[$OR, CONS[NEW[%CDMEBES.CDLayerRec ← [source: %CMos.bur]], &pdifs]], CONS[$OR, &ndifs]]]]]]]
pimp
← &pImpName ← (IF &doingICLNames THEN "24" ELSE "25")
← &pImp ← NEW[%CDMEBES.MaskSpecRec ← [name: &pImpName, cover: LIST[$NOT, LIST[$OR, &nImpScribe, LIST[$DeNotch, NEW[CDMEBES.Nm ← 1500 -- diameter of smallest collapsing space between nImp, nm -- ], NEW[CDMEBES.Nm ← -1500 -- diameter of smallest collapsing piece of nImp, nm -- ], LIST[$RestrictedEnlarge, NEW[CDMEBES.Nm ← 1500 -- maxRadialExtension, nm -- ], CONS[$OR, CONS[NEW[%CDMEBES.CDLayerRec ← [source: %CMos.bur]], &ndifs]], CONS[$OR, &pdifs]]]]]]]
nwell
← &nWellScribe ← IF &doingICLScribe THEN &thinOxScribe ELSE NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: &s+2000 -- nm --]]
← &nWellName ← (
IF &doingICLNames
THEN "25"
ELSE "26")
(December 4, 1985 11:08:36 am PST) We blew it !! The ICL name for this layer is supposed to be 21, not 25. This should be fixed for the next run.
← &nWell ← NEW[%CDMEBES.MaskSpecRec ← [name: &nWellName, cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.nwell, deltaDiameter: &nWellBias]], &nWellScribe]]]
poly
← &polyName ← (IF &doingICLNames THEN "30" ELSE "40")
← &polyBias ← (IF &doingICLBias THEN 0 ELSE 500) -- nm
← &polyScribe ← NEW[%CDMEBES.ScribeRec ← (IF &doingICLScribe THEN [scribeCenterToOuterEdge: 54000, width: 18000 -- nm --] ELSE [scribeCenterToOuterEdge: &s+10000 -- nm --, width: 8000 -- nm --])]
← &poly ← NEW[%CDMEBES.MaskSpecRec ← [name: &polyName, mebesPixelPitch: (IF (&doingICLBias AND ((&polyBias MOD 1000) = 0)) THEN 500 ELSE 250), cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.pol, deltaDiameter: &polyBias]], &polyScribe]]]
cut = contact
← &cutName ← (IF &doingICLNames THEN "40" ELSE "50")
← &cutScribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: (IF &doingICLScribe THEN 53000 ELSE &s+16000 -- nm --)]]
← &cut ← NEW[%CDMEBES.MaskSpecRec ← [name: &cutName, cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.cut, deltaDiameter: 0 -- nm --]], &cutScribe]]]
cut2 = via
← &cut2Name ← (IF &doingICLNames THEN "70" ELSE "51")
← &cut2Scribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: (IF &doingICLScribe THEN 40000 ELSE &s+2000 -- nm --)]]
← &cut2 ←
NEW[%
CDMEBES.MaskSpecRec ← [name: &cut2Name, cover:
LIST[$OR,
NEW[%
CDMEBES.CDLayerRec ← [source: %CMos.cut2, deltaDiameter: 0
-- nm --]], &cut2Scribe]]]
Watch this space. VTI is leaning toward enlarging minimum-size Via's over thin oxide by a diameter of 500 nm
metal
← &metalName ← (IF &doingICLNames THEN "50" ELSE "60")
← &metalScribe ← NEW[%CDMEBES.ScribeRec ← (IF &doingICLScribe THEN [scribeCenterToOuterEdge: 59000, width: 20000 -- nm --] ELSE [scribeCenterToOuterEdge: &s+6000 -- nm --, width: 14000 -- nm --])]
← &metal ← NEW[%CDMEBES.MaskSpecRec ← [name: &metalName, cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.met, deltaDiameter: 1000 -- nm -- ]], &metalScribe]]]
metal2
← &metal2Name ← (IF &doingICLNames THEN "80" ELSE "61")
← &metalScribe ← (IF &doingICLScribe THEN NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 75000, width: 10000 -- nm --]] ELSE NIL)
← &metal2 ← NEW[%CDMEBES.MaskSpecRec ← [name: &metal2Name, cover: NEW[%CDMEBES.CDLayerRec ← [source: %CMos.met2, deltaDiameter: 1000 -- nm --]]]]
glass = oxide passivation
← &glassName ← (IF &doingICLNames THEN "60" ELSE "70")
← &glassScribe ← NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: (IF &doingICLScribe THEN 40000 ELSE &s -- nm --)]]
← &glass ← NEW[%CDMEBES.MaskSpecRec ← [name: &glassName, cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.ovg, deltaDiameter: 0 -- nm --]], NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: &s -- nm --]]]]]
nitride passivation = 71
← &nitride ← NEW[%CDMEBES.MaskSpecRec ← [name: "71", cover: LIST[$OR, NEW[%CDMEBES.CDLayerRec ← [source: %CMos.ovg, deltaDiameter: -10000 -- nm --]], NEW[%CDMEBES.ScribeRec ← [scribeCenterToOuterEdge: 0, width: &s-10000 -- nm --]]]]]