DIRECTORY Core, CoreCreate, CoreGeometry; Tiling: CEDAR DEFINITIONS ~ BEGIN CellType : TYPE = Core.CellType; Properties : TYPE = Core.Properties; ROPE: TYPE = Core.ROPE; Wire: TYPE = Core.Wire; WireSeq: TYPE = Core.WireSeq; Wires: TYPE = Core.Wires; PA: TYPE = CoreCreate.PA; WR: TYPE = CoreCreate.WR; Tile: TYPE ~ REF TileRec; TileRec: TYPE ~ RECORD [ type: CellType, -- type of the tile. renaming: LIST OF PA _ NIL, -- binding [public of the tile -> public of the whole array]. There is no implicit renaming (contrarily to CoreCreate). flatten: BOOL _ FALSE, -- if flatten, the tile's type should be a record cell, and is flattened once at Recast time. All the internals of the tile's type should be public. No impact on layout. Non-wizards: default is fine! properties: Core.Properties _ NIL -- to store arbitrary information. implementation uses it. ]; TileRow: TYPE ~ REF TileRowRec; TileRowRec: TYPE ~ RECORD [ tiles: SEQUENCE size: NAT OF Tile -- tiles, from left to right. ]; TileArray: TYPE ~ REF TileArrayRec; TileArrayRec: TYPE ~ RECORD [ tileRows: SEQUENCE size: NAT OF TileRow -- rows, from bottom to top. ]; NeighborProc: TYPE = PROC [ct1, ct2: CellType] RETURNS [publicPairs: LIST OF CoreGeometry.WirePair _ NIL]; CreateTiling: PROC [public: WireSeq, tileArray: TileArray, neighborX, neighborY: NeighborProc, name: ROPE _ NIL, props: Properties _ NIL] RETURNS [tiling: CellType]; LayoutNeighborX: NeighborProc; LayoutNeighborY: NeighborProc; SchematicsNeighborX: NeighborProc; SchematicsNeighborY: NeighborProc; tilingClass: PRIVATE Core.CellClass; TilingData: PRIVATE TYPE = REF TilingDataRec; TilingDataRec: PRIVATE TYPE = RECORD [ tileArray: TileArray, neighborX, neighborY: NeighborProc ]; END. ζTiling.mesa Copyright Σ 1986, 1987, 1988 by Xerox Corporation. All rights reversed. Created by Bertrand Serlet September 19, 1986 1:48:15 pm PDT Bertrand Serlet May 7, 1988 11:32:57 pm PDT Purpose Tiling is a way to represent efficiently large regular structures such as PLAs, or RAMs. The basic observation behing Tiling is that it is much more expensive to represent two-dimensional structures by vectors of vectors (lines * columns public wires versus lines + columns public wires). Conveniences Tiles cellType is of class tilingClass. ct1 and ct2 are the two neighbors. For 2 tiles, abutted in X or in Y, indicates their stitches. Creation of Tiling The LayoutProc associated to tilingClass assumes that: there is the same number of tiles in every row, all tiles in a given row have the same height (of the IR), all tiles in a given column have the same width (of the IR), no two tiles in the array are shared (ref-equal). public is the resulting public of the whole tiling. tileArray gives the tiles. neighborX, neighborY are used to compute the stitches. name, if non NIL, has precedence over props. tiling is of class tilingClass. Predefined NeighborProcs Those functions call PWCore.Layout on their arguments, and use the PWCore.extractMode.decoration to compute which public is in front of which public. Those functions assume that their arguments are schematics cells, and use the Sisyph.mode.decoration to compute which public is in front of which public. Private data structures Κ˜codešœ ™ KšœH™HKšœ9Οk™