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 July 13, 1987 10:12:33 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[ 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.