<> <> <> DIRECTORY CMosB, DesignRules; GCHybridRulesImpl: CEDAR PROGRAM IMPORTS CMosB, DesignRules = BEGIN OPEN DesignRules; <> Generate: PROC = { rules: Rules _ NewRules[$Hybrid, CMosB.cmosB, 1, 1]; <> pDif: Layer _ NewLayer[rules, $PDif, "CPD", "P+ well diffusion", "Defines P+ diffused areas when diffusion does not contact substrate or well", CMosB.pdif]; nDif: Layer _ NewLayer[rules, $NDif, "CND", "N+ diffusion", "Defines N+ diffused areas when diffusion does not contact substrate or well", CMosB.ndif]; poly: Layer _ NewLayer[rules, $Poly, "CP", "Polysilicon", "Defines poly gates and poly interconnect", CMosB.pol]; contact: Layer _ NewLayer[rules, $Contact, "CC", "Contact", "Defines contact openings to diffusion and poly", CMosB.cut]; metal1: Layer _ NewLayer[rules, $Metal1, "CM", "Metal 1", "Defines first metal interconnects", CMosB.met]; via: Layer _ NewLayer[rules, $Via, "CC2", "Via", "Defines openings in the insulator between first and second metal", CMosB.cut2]; metal2: Layer _ NewLayer[rules, $Metal2, "CC2", "Metal 2", "Defines second metal interconnects", CMosB.met2]; pad: Layer _ NewLayer[rules, $Pad, "CG", "Pad Window 1", "Defines openings on the passivation layer for probing and bonding", CMosB.ovg]; <> <> <> NewRule[rules, $NDifWidth, width, nDif, NIL, 2, "n dif width"]; NewRule[rules, $PDifWidth, width, pDif, NIL, 2, "p dif width"]; <> NewRule[rules, $NDifSpace, intraspace, nDif, NIL, 35, "n dif space", 10]; NewRule[rules, $PDifSpace, intraspace, pDif, NIL, 35, "p dif space", 10]; <> <> NewRule[rules, $PolyWidth, width, poly, NIL, 2, "poly width"]; <> NewRule[rules, $PolySpace, intraspace, poly, NIL, 25, "poly space", 10]; <> <<$PolyNDifSpace used by ECAD>> <> NewRule[rules, $PolyNDifSpace, interspace, poly, nDif, 1, "poly ndif space"]; NewRule[rules, $PolyPDifSpace, interspace, poly, pDif, 1, "poly pdif space"]; <> <> <> NewRule[rules, $ContactWidth, width, contact, NIL, 2, "contact width"]; <> <> NewRule[rules, $ContactMaxWidth, maxWidth, contact, NIL, 5, "contact max width"]; <> NewRule[rules, $ContactSpace, intraspace, contact, NIL, 3, "contact space"]; <> <> NewRule[rules, $PolyContactSurround, surround, poly, contact, 1, "poly contact surround"]; <> <> NewRule[rules, $PDifContactSurround, surround, pDif, contact, 1, "p dif contact surround"]; NewRule[rules, $NDifContactSurround, surround, nDif, contact, 1, "n dif contact surround"]; <> NewRule[rules, $Metal1ContactSurround, surround, metal1, contact, 1, "metal 1 contact surround"]; <> <> NewRule[rules, $Metal1Width, width, metal1, NIL, 25, "metal 1 width"]; <> NewRule[rules, $Metal1Space, intraspace, metal1, NIL, 25, "metal 1 space"]; <> <> <> NewRule[rules, $ViaWidth, width, via, NIL, 2, "via width"]; <> <> NewRule[rules, $ViaMaxWidth, maxWidth, via, NIL, 5, "via max width"]; <> NewRule[rules, $ViaSpace, intraspace, via, NIL, 4, "vias pace"]; <> NewRule[rules, $Metal1ViaSurround, surround, metal1, via, 1, "metal 1 via surround"]; NewRule[rules, $Metal2ViaSurround, surround, metal2, via, 1, "metal 2 via surround"]; <> <> NewRule[rules, $PolyViaSpace, interspace, poly, via, 2, "poly via space"]; <> NewRule[rules, $PolyViaSurround, surround, poly, via, 3, "poly via surround"]; <> NewRule[rules, $DifCutViaSpace, special, via, contact, 2, "dif cut via space"]; <> <> NewRule[rules, $PolyCutViaSpace, interspace, via, contact, 3, "poly cut via space"]; <> <> <> NewRule[rules, $Metal2Width, width, metal2, NIL, 25, "metal 2 width"]; <> NewRule[rules, $Metal2Space, intraspace, metal2, NIL, 25, "metal 2 space"]; <> <> <> <> <> NewMicronRule[rules, $PadMetalWidth, special, NIL, NIL, 25, "pad metal width"]; <> NewMicronRule[rules, $PadMetalViaSurround, special, NIL, NIL, 5, "pad metal via surround", 10]; <> NewMicronRule[rules, $Metal2PadSurround, surround, metal2, pad, 5, "metal 2 pad surround"]; <> <> NewMicronRule[rules, $PadMetalSpace, special, NIL, NIL, 25, "pad metal space"]; <> { metal1Surround: RuleValue _ FindRuleValue[rules, $Metal1ContactSurround]; NewHoleType[rules, $PolyContact, metal1, poly, contact, metal1Surround, FindRuleValue[rules, $PolyContactSurround]]; NewHoleType[rules, $NDifContact, metal1, nDif, contact, metal1Surround, FindRuleValue[rules, $NDifContactSurround]]; NewHoleType[rules, $PDifContact, metal1, pDif, contact, metal1Surround, FindRuleValue[rules, $PDifContactSurround]]; }; NewHoleType[rules, $Via, metal1, metal2, via, FindRuleValue[rules, $Met1ViaSurround], FindRuleValue[rules, $Met2ViaSurround]]; <> DesignRules.RegisterRuleSet[rules]; }; Generate[]; END.