CoreGlue.mesa
Copyright c 1985 by Xerox Corporation. All rights resersed.
Last Edited by: Curry, August 14, 1986 0:19:40 am PDT
DIRECTORY CD, Core, CoreFrame, HashTable, PWC, PWRoute;
CoreGlue: CEDAR DEFINITIONS =
BEGIN
RouteCheckPointWritten: SIGNAL[name: ROPE];
ROPE:   TYPE = Core.ROPE;
CellType:  TYPE = Core.CellType;
Glue:    TYPE = REF GlueSpec;
GlueSpec:   TYPE = RECORD[
subClass:  ROPE,
tDir:   PWRoute.HorV,
params:  PWRoute.RouterParams ← NIL,
class:   GlueClass ← fill,
type:   ARRAY CoreFrame.Side OF GlueSideType,
cell:   ARRAY CoreFrame.Side OF CellType  ← ALL[NIL],
data:   REFNIL];
GlueSideType: TYPE = {cap, conn, pwr, ext, chan, sum, diff};
GlueClass:  TYPE = {fill, ext, xlt, chan, pwr, sb, bad};
glueCellClass: Core.CellClass;
CellProc: PROC[
subClass:     ROPE    ← NIL,
name:      ROPE    ← NIL,
l,r,b,t:      GlueSideType ← cap,  -- cap conn ext chan sum diff
bCell,rCell,tCell,lCell:  CellType   ← NIL,
tDir:      PWRoute.HorV ← vertical, -- vertical horizontal
tLayer:     ROPE    ← NIL,  -- metal metal2 poly
bLayer:     ROPE    ← NIL,
xlate:      BOOL    ← FALSE,
data:      REF    ← NIL ]  -- metal2 poly metal
RETURNS [new: CellType];
CellRouter:  TYPE = PROC[frameCT: CellType] RETURNS[success: BOOLTRUE];
FrameRouter: TYPE = PROC[frameCT: CellType] RETURNS[status: Status];
RouteSoft:  FrameRouter;
RouteHard:  FrameRouter;
Status:    TYPE = {rejustify, progress, delayed, complete1, complete2};
MergePwrPins: PROC [
vgTemplate:   CellType,
pinTemplate:   CellType,
pinTemplateSide: CoreFrame.Side,
routingLayerDes: ROPENIL,
minWidth:   INT ← 0]
RETURNS [cell: CellType ← NIL];
XferPins: PROC [
template:    CellType,
objSide:    CoreFrame.Side,
routingLayerDes: ROPE,
minWidth:   INT]
RETURNS [cell: CellType ← NIL];
Node:   TYPE = REF NodeRec;
NodeRec:  TYPE = RECORD[
name:  ROPE,
minX:  INT,
maxX:  INT,
type:  CD.Layer,
row:  INT     ← -1, -- non assigned
clouds: LIST OF Node  ← NIL,
rocks:  LIST OF Node  ← NIL,
top:  LIST OF INTNIL,
bot:  LIST OF INTNIL ];
ThreeLevelRoute: PROC --
[ nodeTable: HashTable.Table, range, left, right, cellWidth, channels: INT ]
RETURNS[cell: CellType];
ChanSideCell: PROC
[side: CoreFrame.Side, list: LIST OF ROPE, layer: CD.Layer] RETURNS[cell: CellType];
SideObject: PROC
[side: CoreFrame.Side, list: LIST OF PWC.NWMML, layer: CD.Layer, length: INT ← 0, sameLayerOnly: BOOLFALSE]
RETURNS[cell: CD.Object]; -- nwmml.max => size
END.