SinixCMosA.mesa
Copyright Ó 1985, 1987 by Xerox Corporation. All rights reversed.
Created by Bertrand Serlet August 15, 1985 2:09:54 pm PDT
Bertrand Serlet September 15, 1987 7:33:38 pm PDT
Pradeep Sindhu December 2, 1985 6:42:40 pm PST
Barth, January 13, 1986 1:41:27 pm PST
Jean-Marc Frailong July 1, 1986 1:48:07 pm PDT
DIRECTORY
CD, CDAtomicObjects, CDCells, CDProperties, CDRects, CDSymbolicObjects, CDTexts,
CMos,
CoreGeometry,
PW,
Sinix, SinixOps;
SinixCMosA: CEDAR PROGRAM
IMPORTS CD, CDCells, CDProperties, CDRects, CDSymbolicObjects, CDTexts, CMos, CoreGeometry, PW, Sinix, SinixOps
SHARES CDCells, CDRects, CDSymbolicObjects, CDTexts =
BEGIN
Properties and extraction of common objects
mode: Sinix.Mode ← NEW [Sinix.ModeRec ← [
extractProcProp: PW.RegisterProp[$CMosAExtractProc, TRUE],
decoration: CoreGeometry.CreateDecoration["CMosA"],
instanceEqualProc: Sinix.CompareProperties,
objectEqualProc: Sinix.AlwaysTrue,
instanceLayer: Sinix.DefaultInstanceLayer,
touchProc: Touch,
nameProc: Sinix.DefaultName
]];
Touch: CoreGeometry.TouchProc = {
IF instance1.obj.class=CDRects.bareRectClass AND instance1.obj.layer=CMos.pwellCont
THEN instance1.obj ← CDRects.CreateRect[CD.InterestSize[instance1.obj], CMos.pwell];
IF instance1.obj.class=CDRects.bareRectClass AND instance1.obj.layer=CMos.nwellCont
THEN instance1.obj ← CDRects.CreateRect[CD.InterestSize[instance1.obj], CMos.nwell];
IF instance2.obj.class=CDRects.bareRectClass AND instance2.obj.layer=CMos.pwellCont
THEN instance2.obj ← CDRects.CreateRect[CD.InterestSize[instance2.obj], CMos.pwell];
IF instance2.obj.class=CDRects.bareRectClass AND instance2.obj.layer=CMos.nwellCont
THEN instance2.obj ← CDRects.CreateRect[CD.InterestSize[instance2.obj], CMos.nwell];
RETURN CoreGeometry.Touch[touch, instance1, instance2];
};
Initialization
Set: PROC [ref: REF, extractAtom: ATOM] = INLINE {
WITH ref SELECT FROM
class: CD.ObjectClass => CDProperties.PutProp[class, mode.extractProcProp, extractAtom];
className: ATOM => CDProperties.PutProp[CD.FetchObjectClass[className, CMos.cmos], mode.extractProcProp, extractAtom];
ENDCASE  => ERROR;
};
Layer properties
CDProperties.PutLayerProp[CMos.ndif, $RoutingLayer, $RoutingLayer];
CDProperties.PutLayerProp[CMos.pdif, $RoutingLayer, $RoutingLayer];
CDProperties.PutLayerProp[CMos.pol, $RoutingLayer, $RoutingLayer];
CDProperties.PutLayerProp[CMos.met, $RoutingLayer, $RoutingLayer];
CDProperties.PutLayerProp[CMos.met2, $RoutingLayer, $RoutingLayer];
Highlight for this technology
SinixOps.RegisterDefaultLayoutMode[mode, CMos.cmos];
Cells, Pins
Set[ CDCells.pCellClass,   $ExtractCell];
Set[ PW.indirectClass,   $ExtractIndirect];
Set[ PW.abutXClass,   $ExtractAbut];
Set[ PW.abutYClass,   $ExtractAbut];
Set[ PW.rotationClass,   $ExtractRotation];
Set[ CDSymbolicObjects.pinClass,  $ExtractPin];
Set[ CDSymbolicObjects.segmentClass,  $ExtractPin];
Set[ CDSymbolicObjects.markClass,  $ExtractPin];
Rectangles
Set[ CDRects.bareRectClass,   $ExtractRect];
Set[ CDRects.wellRectClass,   $ExtractWellAtomic];
Contacts
Set[ $CSimpleCon,   $ExtractAtomic];
Set[ $CWellSimpleCon,   $ExtractWellAtomic];
Set[ $CButtingCont,   $ExtractAtomic];
Set[ $CWellButtingCont,   $ExtractWellAtomic];
Set[ $CVia,    $ExtractAtomic];
Set[ $CDifShortCon,   $ExtractAtomic];
Set[ $CWellDifShortCon,   $ExtractWellAtomic];
Transistors
Set[ $CTrans,    $ExtractTransistor];
Set[ $CWellTrans,   $ExtractTransistor];
Angle Transistors
Set[ $CLTrans,    $ExtractTransistor];
Set[ $CLWellTrans,   $ExtractTransistor];
Texts
Set[ CDTexts.rigidTextClass,   $ExtractNull];
Set[ CDTexts.flipTextClass,   $ExtractNull];
END.