<> <> <> <<>> <<>> DIRECTORY CD, CMosB, CMosBObjects, CDSimpleRules, IFUPW; IFUPWCMos: CEDAR PROGRAM IMPORTS CMosB, CMosBObjects, CDSimpleRules EXPORTS IFUPW = BEGIN <<>> cmos: PUBLIC CD.Technology = CMosB.cmosB; cmosNDif: PUBLIC CD.Layer _ CMosB.ndif; cmosPDif: PUBLIC CD.Layer _ CMosB.pdif; cmosWPDif: PUBLIC CD.Layer _ CMosB.wpdif; cmosWNDif: PUBLIC CD.Layer _ CMosB.wndif; cmosPoly: PUBLIC CD.Layer _ CMosB.pol; cmosMet: PUBLIC CD.Layer _ CMosB.met; cmosMet2: PUBLIC CD.Layer _ CMosB.met2; cmosPWCont: PUBLIC CD.Layer _ CMosB.pwellCont; cmosNWCont: PUBLIC CD.Layer _ CMosB.nwellCont; cmosNWell: PUBLIC CD.Layer _ CMosB.nwell; lambda: PUBLIC INT _ CMosB.lambda; pwrW: PUBLIC INT _ 5*lambda; metW: PUBLIC INT _ 3*lambda; met2W: PUBLIC INT _ 4*lambda; polW: PUBLIC INT _ 2*lambda; difW: PUBLIC INT _ 2*lambda; topTail: PUBLIC INT _ 2*lambda; leftTail: PUBLIC INT _ 5*lambda; botTail: PUBLIC INT _ 1*lambda; cnctSize: PUBLIC INT _ 4*lambda; metPitch: PUBLIC INT _ 8*lambda; met2Pitch: PUBLIC INT _ 8*lambda; polMuxPitch: PUBLIC INT _ 8*lambda; polPitch: PUBLIC INT _ 6*lambda; -- without adjacent contacts cellBody: INT _ 56*lambda; cellWidth: PUBLIC INT _ IFUPW.nofVWires*metPitch+cellBody; Contact: PUBLIC PROC[layer: CD.Layer] RETURNS[cntc: CD.Object] = { RETURN[SELECT layer FROM cmosMet2, cmosPoly, cmosNDif, cmosPDif, cmosWPDif, cmosWNDif => CDSimpleRules.Contact[cmosMet, layer], cmosPWCont, cmosNWCont => CMosBObjects.CreateDifCon[layer], ENDCASE => ERROR]}; TransistorObject: PUBLIC PROC[size: IFUPW.Size, difLayer: CD.Layer] RETURNS[trans: CD.Object]= {trans _ CMosBObjects.CreateTransistor[size: size, difLayer: difLayer]}; IF metW # CDSimpleRules.MinWidth[cmosMet] THEN ERROR; IF met2W # CDSimpleRules.MinWidth[cmosMet2] THEN ERROR; IF polW # CDSimpleRules.MinWidth[cmosPoly] THEN ERROR; IF difW # CDSimpleRules.MinWidth[cmosNDif] THEN ERROR; END. <<>> <<>>