DIRECTORY Atom, CD, CDBasics, CDStretchyBackdoor, CMos, CDAtomicObjects, Rope; CMosBuriedContactsImpl: CEDAR PROGRAM IMPORTS CDAtomicObjects, CDBasics, CDStretchyBackdoor, CMos = BEGIN lambda: CD.Number = CMos.lambda; MatchContact: PROC [me: CD.Object, r: CD.Rect, layer: CD.Layer, prim: BOOL, horz: BOOL] RETURNS [BOOL] = { RETURN [ layer=CMos.ndif OR layer=CMos.pol ] }; FillBuried: PROC [ob: CD.Object] = { CDAtomicObjects.Incorporate[ob: ob, r: ob.bbox, layer: CMos.bur]; ob.layer _ CMos.ndif; }; FillConS: PROC [ob: CD.Object] RETURNS [mustFail: BOOL_FALSE] = { sz: CD.Position _ CDBasics.SizeOfRect[ob.bbox]; ob.bbox _ [0, 0, MAX[4*lambda, sz.x], MAX[5*lambda, sz.y]]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.bbox.x2, y1: 2*lambda, y2: ob.bbox.y2-lambda], layer: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.bbox.x2-lambda, y1: 0, y2: ob.bbox.y2], layer: CMos.ndif ]; }; FillConPS: PROC [ob: CD.Object] RETURNS [mustFail: BOOL_FALSE] = { sz: CD.Position _ CDBasics.SizeOfRect[ob.bbox]; ob.bbox _ [0, 0, MAX[5*lambda, sz.x], MAX[4*lambda, sz.y]]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.bbox.x2-2*lambda, y1: 0, y2: ob.bbox.y2], layer: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.bbox.x2, y1: lambda, y2: ob.bbox.y2-lambda], layer: CMos.ndif ]; }; FillConDL: PROC [ob: CD.Object] RETURNS [mustFail: BOOL_FALSE] = { sz: CD.Position _ CDBasics.SizeOfRect[ob.bbox]; ob.bbox _ [0, 0, MAX[4*lambda, sz.x], MAX[5*lambda, sz.y]]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.bbox.x2-lambda, y1: 2*lambda, y2: ob.bbox.y2-lambda], layer: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.bbox.x2, y1: lambda, y2: ob.bbox.y2], layer: CMos.ndif ]; }; FillConDI: PROC [ob: CD.Object] RETURNS [mustFail: BOOL_FALSE] = { sz: CD.Position _ CDBasics.SizeOfRect[ob.bbox]; ob.bbox _ [0, 0, MAX[5*lambda, sz.x], MAX[4*lambda, sz.y]]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.bbox.x2-2*lambda, y1: lambda, y2: ob.bbox.y2-lambda], layer: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.bbox.x2-lambda, y1: 0, y2: ob.bbox.y2], layer: CMos.ndif ]; }; Register: PROC [key: ATOM, creator: CDAtomicObjects.FillObjectProc, desc: Rope.ROPE] = { class: CD.ObjectClass _ CDAtomicObjects.RegisterAtomicObClass[key, creator, desc, CMos.cmos]; IF class=NIL THEN ERROR; CDStretchyBackdoor.InstallMatchProc[class, MatchContact]; }; Init: PROC [] = { Register[$CBurContS, FillConS, "buried contact (simple)"]; Register[$CBurContPS, FillConPS, "buried contact (poly sur)"]; Register[$CBurContDI, FillConDI, "buried contact (dif I)"]; Register[$CBurContDL, FillConDL, "buried contact (dif L)"]; }; Init[]; END. ςCMosBuriedContactsImpl.mesa (part of ChipNDale) Copyright c 1983, 1985 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, June 24, 1983 5:03 pm Last edited by: Christian Jacobi, October 31, 1986 2:57:29 pm PST Κd˜codešœ0™0Kšœ Οmœ7™BKšœ4™4K™AK˜—šΟk ˜ Kšœ˜Kšžœ˜Kšœ ˜ Kšœ˜K˜Kšœ˜Kšœ˜K˜—šΟbœžœžœ˜&Kšžœ:˜A—Kšžœ˜K˜Kšœžœ˜ K˜šΠbn Ÿžœžœ žœžœžœžœžœžœ˜jKšžœžœ˜,Kšœ˜K˜—šΟn œžœžœ ˜$KšœA˜AKšœ˜Kšœ˜—K˜š ‘œžœžœ žœ žœžœ˜AKšœžœ)˜/Kšœžœžœ˜;Kšœ˜šœ$˜$šœ ˜ Kšœ˜Kšœ˜Kšœ˜—Kšœ˜Kšœ˜—šœ$˜$šœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜——Kšœ˜—K˜š ‘ œžœžœ žœ žœžœ˜BKšœžœ)˜/Kšœžœžœ˜;Kšœ˜šœ$˜$šœ ˜ Kšœ˜Kšœ˜Kšœ˜—Kšœ˜Kšœ˜—šœ$˜$šœ˜Kšœ˜Kšœ ˜ Kšœ˜—Kšœ˜Kšœ˜—Kšœ˜—K˜š ‘ œžœžœ žœ žœžœ˜BKšœžœ)˜/Kšœžœžœ˜;Kšœ˜šœ$˜$šœ ˜ Kšœ˜Kšœ˜Kšœ˜—Kšœ˜Kšœ˜—šœ$˜$šœ˜Kšœ˜Kšœ ˜ Kšœ˜—Kšœ˜Kšœ˜—Kšœ˜—K˜š ‘ œžœžœ žœ žœžœ˜BKšœžœ)˜/Kšœžœžœ˜;Kšœ˜šœ$˜$šœ ˜ Kšœ˜Kšœ ˜ Kšœ˜—Kšœ˜Kšœ˜—šœ$˜$šœ˜Kšœ˜Kšœ˜Kšœ˜—Kšœ˜Kšœ˜—Kšœ˜—K˜š‘œžœžœ6žœ˜XKšœžœT˜]Kšžœžœžœžœ˜Kšœ9˜9Kšœ˜—K˜š‘œžœ˜Kšœ:˜:Kšœ>˜>Kšœ;˜;Kšœ;˜;Kšœ˜K˜—K˜Kšžœ˜K˜—…— n