AlpsTile.mesa
Created by Bertrand Serlet, March 12, 1985 9:40:36 am PST
Last edited by serlet July 1, 1985 10:19:41 pm PDT
DIRECTORY
AlpsBool, CD, RefTab, Rope;
AlpsTile: CEDAR DEFINITIONS =
BEGIN
Types and data structures
ROPE: TYPE = Rope.ROPE;
SequenceOfExistance: TYPE = RECORD [
contents: SEQUENCE size: PosNb OF PACKED ARRAY HorTileType OF BOOL];
Context: TYPE = REF ContextRec;
ContextRec: TYPE = RECORD [
design: CD.Design,      -- used by TileArrayToGeometry
computedCells: RefTab.Ref,   -- internally used by TileArrayToGeometry
table: AlpsBool.TableOfVariables,
tileArray: TileArray,    -- Filled by TableAndPositionToTileArray
columnsExistance: REF SequenceOfExistance, -- Filled by TableAndPositionToTileArray
isLatched: BOOLFALSE,   -- Filled by TableAndPositionToTileArray
distanceBetweenGlue: INT ← 4,
distanceBetweenContacts: INT ← 10,
nbAuxVarEachGlue: INT ← 0,
shared: BOOLFALSE,
debug: BOOLFALSE
];
Tile: TYPE = REF TileRec;
TileRec: TYPE = RECORD [
special: BOOLFALSE,    -- when TRUE only name is valid
input: BOOLFALSE,    -- when TRUE we are on LeftInput or RightInput
route: BOOLFALSE,    -- when TRUE we are on RightRoute
Flags when input is TRUE
leftSide: BOOLFALSE,   -- when TRUE the tile is leftinput (not right input). Necessary for Gnd transistors.
throughTrans: BOOLFALSE,  -- when TRUE transistor according to high and low
gndTrans: BOOLFALSE,   -- when TRUE transistor according to high and low
contact: BOOLFALSE,    -- when TRUE contact between poly and metal according to high and low
high: BOOLFALSE,    -- when TRUE one of the previous is refering to high
low: BOOLFALSE,     -- when TRUE one of the previous is refering to low (high and low may be both TRUE)
Flags when route is TRUE
contactPoly: BOOLFALSE,  -- when TRUE a contact between metal and poly according to spin
noUpPoly: BOOLFALSE,   -- when TRUE no poly up
noDownPoly: BOOLFALSE,  -- when TRUE no poly down
noLeftMetal: BOOLFALSE,  -- when TRUE it assumes connection on the right side
noRightMetal: BOOLFALSE,  -- when TRUE it assumes connection on the left side
spin: BOOLTRUE,     -- when contactPoly, if TRUE (/FALSE) connects left (/right) poly to upper metal
Field when special is TRUE
name: ROPENIL,     -- name of the cell.
Fields always valid
leftPin, rightPin: BOOLTRUE-- necessary for stretching
];
HorTileType: TYPE = {LeftInput, RightInput, RightRoute, VddGlue, GndGlue};
TileArray: TYPE = REF TileArrayRec;
TileArrayRec: TYPE = RECORD [
contents: SEQUENCE lastPosNb: PosNb OF ARRAY HorTileType OF LIST OF Tile]; -- from left to right, from LeftVdd to Self, from bottom to top
PosNb: TYPE = AlpsBool.VarNb;
Procs
TILE: PUBLIC PROC [tileRec: TileRec] RETURNS [tile: Tile];
EqualTile: PROC [tile1, tile2: Tile] RETURNS [sameTile: BOOLTRUE];
EqualTileRec: PUBLIC PROC [tileRec1, tileRec2: TileRec] RETURNS [sameTileRec: BOOLTRUE];
NilTile: PROC [horTileType: HorTileType] RETURNS [tile: Tile];
Uses the context for affecting its field tileArray
TableAndPositionToTileArray: PUBLIC PROC [context: Context];
END.