Diffusion wires
IsWellLayer:
PROC [layer:
CD.Layer]
RETURNS [
BOOL] = {
RETURN [layer=CMosB.pwell OR layer=CMosB.nwell];
};
AddRect:
PROC [wire: Wire, rect:
CD.Rect, layer:
CD.Layer] = {
instance:
CD.Instance ←
NEW [
CD.InstanceRep ← [
ob: CDRects.CreateRect[CDBasics.SizeOfRect[rect], layer],
location: CDBasics.BaseOfRect[rect]
]];
Sinix.AddWireGeometryPropOnWire[wire, instance];
Sinix.AddPinPropOnWire[wire, instance];
};
WellDiffExtractObjProc: Sinix.ExtractProc = {
wire ← CoreOps.CreateWire[];
AddRect[wire, CDBasics.Extend[CDBasics.RectAt[[0, 0], obj.size], -CMosB.wellSurround], CMosB.pdif];
category ← $Wire;
};
Transistors
genericNTrCellType: CellType ← NIL; -- to be created!
genericPTrCellType: CellType ← NIL; -- to be created!
genericNTrObj: CD.Object ← NIL; -- to be created!
genericPTrObj: CD.Object ← NIL; -- to be created!
Initialization
Rectangles
CDProperties.PutProp[CDRects.bareRectClass, Sinix.extractProcProp, NEW [Sinix.ExtractProc ← Sinix.ExtractWire]];
CDProperties.PutProp[CDRects.bareRectClass, Sinix.touchProcProp, NEW [Sinix.TouchProc ← Sinix.TouchRect]];
Cells, Pins, Indirect, Abuts
CDProperties.PutProp[CDCells.cellClass, Sinix.extractProcProp, NEW [Sinix.ExtractProc ← Sinix.ExtractCell]];
CDProperties.PutProp[CDCells.cellClass, Sinix.touchProcProp, NEW [Sinix.TouchProc ← Sinix.TouchCell]];
CDProperties.PutProp[CDPinObjects.pinObjectsClass, Sinix.extractProcProp, NEW [Sinix.ExtractProc ← Sinix.ExtractPin]];
CDProperties.PutProp[CDPinObjects.pinObjectsClass, Sinix.touchProcProp, NEW [Sinix.TouchProc ← Sinix.TouchPin]];
Diffusion wires
CDProperties.PutProp[CD.FetchObjectClass[$C2PDifRect, CMosB.cmosB], Sinix.extractProcProp, NEW [Sinix.ExtractProc ← WellDiffExtractObjProc]];
Transistors
CDProperties.PutPropOnObject[genericNTrObj, Sinix.extractedCoreProp, genericNTrCellType];
CDProperties.PutPropOnObject[genericPTrObj, Sinix.extractedCoreProp, genericPTrCellType];