IFUPWCMos.mesa
Copyright c 1985 by Xerox Corporation. All rights reserved.
Last Edited by Curry, November 26, 1985 7:25:09 pm PST
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]=
{transCMosBObjects.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.