<> <> <> <<>> <<>> DIRECTORY AlpsBool, CD, RefTab, Rope; AlpsTile: CEDAR DEFINITIONS = BEGIN <> 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: BOOL _ FALSE, -- Filled by TableAndPositionToTileArray distanceBetweenGlue: INT _ 4, distanceBetweenContacts: INT _ 10, nbAuxVarEachGlue: INT _ 0, shared: BOOL _ FALSE, debug: BOOL _ FALSE ]; <<>> Tile: TYPE = REF TileRec; TileRec: TYPE = RECORD [ special: BOOL _ FALSE, -- when TRUE only name is valid input: BOOL _ FALSE, -- when TRUE we are on LeftInput or RightInput route: BOOL _ FALSE, -- when TRUE we are on RightRoute <> leftSide: BOOL _ FALSE, -- when TRUE the tile is leftinput (not right input). Necessary for Gnd transistors. throughTrans: BOOL _ FALSE, -- when TRUE transistor according to high and low gndTrans: BOOL _ FALSE, -- when TRUE transistor according to high and low contact: BOOL _ FALSE, -- when TRUE contact between poly and metal according to high and low high: BOOL _ FALSE, -- when TRUE one of the previous is refering to high low: BOOL _ FALSE, -- when TRUE one of the previous is refering to low (high and low may be both TRUE) <> contactPoly: BOOL _ FALSE, -- when TRUE a contact between metal and poly according to spin noUpPoly: BOOL _ FALSE, -- when TRUE no poly up noDownPoly: BOOL _ FALSE, -- when TRUE no poly down noLeftMetal: BOOL _ FALSE, -- when TRUE it assumes connection on the right side noRightMetal: BOOL _ FALSE, -- when TRUE it assumes connection on the left side spin: BOOL _ TRUE, -- when contactPoly, if TRUE (/FALSE) connects left (/right) poly to upper metal <> name: ROPE _ NIL, -- name of the cell. <> leftPin, rightPin: BOOL _ TRUE -- 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; <> TILE: PUBLIC PROC [tileRec: TileRec] RETURNS [tile: Tile]; EqualTile: PROC [tile1, tile2: Tile] RETURNS [sameTile: BOOL _ TRUE]; EqualTileRec: PUBLIC PROC [tileRec1, tileRec2: TileRec] RETURNS [sameTileRec: BOOL _ TRUE]; NilTile: PROC [horTileType: HorTileType] RETURNS [tile: Tile]; <> TableAndPositionToTileArray: PUBLIC PROC [context: Context]; END.