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 8, 1988 8:08:13 pm PDT
DIRECTORY
Core, CoreCreate,
PipalCore;
Tiling: CEDAR DEFINITIONS ~ BEGIN
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).
Tiles
Tile: TYPE ~ REF TileRec;
TileRec: TYPE ~ RECORD [
type: Core.CellType,   -- type of the tile.
renaming: LIST OF CoreCreate.PANIL, -- binding [public of the tile -> public of the whole array]. There is no implicit renaming (contrarily to CoreCreate).
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: Core.CellType] RETURNS [publicPairs: LIST OF PipalCore.WirePair ← NIL];
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).
CreateTiling: PROC [public: Core.WireSeq, tileArray: TileArray, neighborX, neighborY: NeighborProc, name: Core.ROPENIL, props: Core.Properties ← NIL] RETURNS [tiling: Core.CellType];
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
LayoutNeighborX: NeighborProc;
LayoutNeighborY: NeighborProc;
Those functions call PWCore.Layout on their arguments, and use the PWCore.extractMode.decoration to compute which public is in front of which public.
SchematicsNeighborX: NeighborProc;
SchematicsNeighborY: NeighborProc;
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
tilingClass: PRIVATE Core.CellClass;
TilingData: PRIVATE TYPE = REF TilingDataRec;
TilingDataRec: PRIVATE TYPE = RECORD [
tileArray: TileArray,
neighborX, neighborY: NeighborProc
];
END.