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. 8AlpsTile.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 Types and data structures Flags when input is TRUE Flags when route is TRUE Field when special is TRUE Fields always valid Procs Uses the context for affecting its field tileArray Ê蘚œ ™ J™9J™2—J™J™šÏk ˜ Jšœ˜—J˜•StartOfExpansion[]šœ œ œ˜J˜Jš˜J˜™J˜JšÐbkœœœ˜J˜šÏbœœœ˜$Jš œ œ œœœ œœ˜D—J˜JšŸœœœ ˜šœ œœ˜JšœœÏc˜6Jšœ )˜FJšœ!˜!Jšœ (˜AJšœœ %˜SJšœ œœ (˜CJšœœ˜Jšœœ˜"Jšœœ˜Jšœœœ˜Jšœœ˜Jšœ˜—J™JšŸœœœ ˜šœ œœ˜Jšœ œœ ˜9Jš œœœ œ  œ ˜FJšœœœ œ ˜9JšŸ™Jšœ œœ T˜nJšœœœ 1˜NJšœ œœ 1˜KJšœ œœ E˜_Jšœœœ 4˜KJšœœœ S˜jJšŸ™Jšœ œœ ?˜[Jšœ œœ ˜1Jšœ œœ ˜4Jšœ œœ 4˜PJšœœœ 3˜PJšœœœ P˜gJšŸ™Jšœœœ ˜+JšŸ™Jšœœœ ˜:Jšœ˜—J˜JšŸ œœ9˜JJ˜JšŸ œœœ˜#šœœœ˜Jšœ œœœ œœœ ?˜Š—J˜JšŸœœ˜—J˜šœ™J˜Jšžœœœœ˜:J˜Jš Ïn œœœ œœ˜EJ˜Jš ¡ œœœœœœ˜[J˜Jš¡œœœ˜>J˜Jšœ2™2Jš¡œœœ˜