DIRECTORY Atom, CD, CDStretchyExtras, CMos, CDAtomicObjects, Rope; CMosBuriedContactsImpl: CEDAR PROGRAM IMPORTS CDAtomicObjects, CDStretchyExtras, CMos = BEGIN lambda: CD.DesignNumber = CD.lambda; MatchContact: PROC [me: CD.ObPtr, r: CD.DesignRect, layer: CD.Layer, prim: BOOL, horz: BOOL] RETURNS [BOOL] = BEGIN RETURN [ layer=CMos.ndif OR layer=CMos.pol ] END; FillBuried: PROC [ob: CD.ObPtr] = BEGIN CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.size.x, y1: 0, y2: ob.size.y], lev: CMos.bur ]; ob.layer _ CMos.ndif; END; FillConS: PROC [ob: CD.ObPtr] RETURNS [mustFail: BOOL_FALSE] = BEGIN ob.size.x _ MAX[4*lambda, ob.size.x]; ob.size.y _ MAX[5*lambda, ob.size.y]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.size.x, y1: 2*lambda, y2: ob.size.y-lambda], lev: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.size.x-lambda, y1: 0, y2: ob.size.y], lev: CMos.ndif ]; END; FillConPS: PROC [ob: CD.ObPtr] RETURNS [mustFail: BOOL_FALSE] = BEGIN ob.size.x _ MAX[5*lambda, ob.size.x]; ob.size.y _ MAX[4*lambda, ob.size.y]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.size.x-2*lambda, y1: 0, y2: ob.size.y], lev: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.size.x, y1: lambda, y2: ob.size.y-lambda], lev: CMos.ndif ]; END; FillConDL: PROC [ob: CD.ObPtr] RETURNS [mustFail: BOOL_FALSE] = BEGIN ob.size.x _ MAX[4*lambda, ob.size.x]; ob.size.y _ MAX[5*lambda, ob.size.y]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.size.x-lambda, y1: 2*lambda, y2: ob.size.y-lambda], lev: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.size.x, y1: lambda, y2: ob.size.y], lev: CMos.ndif ]; END; FillConDI: PROC [ob: CD.ObPtr] RETURNS [mustFail: BOOL_FALSE] = BEGIN ob.size.x _ MAX[5*lambda, ob.size.x]; ob.size.y _ MAX[4*lambda, ob.size.y]; FillBuried[ob]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: 0, x2: ob.size.x-2*lambda, y1: lambda, y2: ob.size.y-lambda], lev: CMos.pol ]; CDAtomicObjects.Incorporate[ob: ob, r: [x1: lambda, x2: ob.size.x-lambda, y1: 0, y2: ob.size.y], lev: CMos.ndif ]; END; Register: PROC [key: ATOM, creator: CDAtomicObjects.FillObjectProc, desc: Rope.ROPE] = BEGIN p: REF CD.ObjectProcs _ CDAtomicObjects.RegisterAtomicObClass[key, creator, desc, CMos.cmos]; IF p=NIL THEN ERROR; CDStretchyExtras.InstallMatch[p, MatchContact]; END; Init: PROC [] = BEGIN 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)"]; END; Init[]; END. âCMosBuriedContactsImpl.mesa (part of ChipNDale) Copyright c 1983, 1985 by Xerox Corporation. All rights reserved. Christian Jacobi, June 24, 1983 5:03 pm last edited Christian Jacobi, April 11, 1985 10:57:27 am PST ÊϘšœ0™0Jšœ Ïmœ7™BJšœ)™)Jšœ=™=J˜—šÏk ˜ Jšœ˜Jšžœ˜Jšœ˜J˜Jšœ˜Jšœ˜J˜—šÏbœžœžœ˜&Jšžœ.˜5—Jšžœ˜J˜Jšœžœžœ˜$J˜šÐbn Ÿžœžœ žœ ˜4Jš œžœžœžœžœžœ˜9Jšž˜Jšžœžœ˜,Jšžœ˜J˜—šÏn œžœžœ ˜!Jšž˜šœ$˜$šœ ˜ Jšœ˜Jšœ˜Jšœ˜—Jšœ ˜ Jšœ˜—Jšœ˜Jšžœ˜—J˜š ¡œžœžœžœ žœžœ˜@Jšž˜Jšœ žœ˜%Jšœ žœ˜%Jšœ˜šœ$˜$šœ ˜ Jšœ˜Jšœ˜Jšœ˜—Jšœ ˜ Jšœ˜—šœ$˜$šœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜——Jšžœ˜—J˜š ¡ œžœžœžœ žœžœ˜?Jšž˜Jšœ žœ˜%Jšœ žœ˜%Jšœ˜šœ$˜$šœ ˜ Jšœ˜Jšœ˜Jšœ˜—Jšœ ˜ Jšœ˜—šœ$˜$šœ˜Jšœ˜Jšœ ˜ Jšœ˜—Jšœ˜Jšœ˜—Jšžœ˜—J˜š ¡ œžœžœžœ žœžœ˜?Jšž˜Jšœ žœ˜%Jšœ žœ˜%Jšœ˜šœ$˜$šœ ˜ Jšœ˜Jšœ˜Jšœ˜—Jšœ ˜ Jšœ˜—šœ$˜$šœ˜Jšœ˜Jšœ ˜ Jšœ˜—Jšœ˜Jšœ˜—Jšžœ˜—J˜š ¡ œžœžœžœ žœžœ˜?Jšž˜Jšœ žœ˜%Jšœ žœ˜%Jšœ˜šœ$˜$šœ ˜ Jšœ˜Jšœ ˜ Jšœ˜—Jšœ ˜ Jšœ˜—šœ$˜$šœ˜Jšœ˜Jšœ˜Jšœ˜—Jšœ˜Jšœ˜—Jšžœ˜—J˜š¡œžœžœ6žœ˜VJšž˜JšœžœžœT˜]Jšžœžœžœžœ˜Jšœ/˜/Jšžœ˜—J˜š¡œžœ˜Jšž˜Jšœ:˜:Jšœ>˜>Jšœ;˜;Jšœ;˜;Jšžœ˜J˜—J˜Jšžœ˜J˜—…— °a