CabbagePrivate.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
by Bryan Preas, May 20, 1986 5:12:19 pm PDT
DIRECTORY
CD,
Cabbage,
Connections,
PWRoute,
Rope,
Route,
RTBasic;
CabbagePrivate: CEDAR DEFINITIONS =
BEGIN
Handle: TYPE = REF HandleRec;
HandleRec: TYPE = RECORD [
name: Rope.ROPENIL,
routeType: RouteType ← normal,
size: CD.Position ← [0, 0],
vddNet, gndNet: Connections.Net ← NIL,
connections: Connections.Table ← NIL,
parms: Cabbage.PadRingParams ← NIL,
rules: DesignRules ← NIL,
globalRouting: GlobalRouting ← NIL,
detailedRouting: DetailedRouting ← NIL,
detailedRoutingPL: DetailedRoutingPL ← NIL,
widthTable: Connections.Table ← NIL,
inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: ObjectDescription
];
RouteType: TYPE ~ {normal, padLimited};
ObjectDescription: TYPE ~ RECORD[
orgin, size: CD.Position ← [0, 0],
object: Cabbage.Object ← NIL
];
DesignRules: TYPE = REF DesignRulesRec;
DesignRulesRec: TYPE = RECORD[
horizParms, vertParms: ParmSet
];
ParmSet: TYPE = RECORD[
parms: PWRoute.RouterParams,
rules: Route.DesignRules
];
GlobalRouting: TYPE = REF GlobalRoutingRec;
GlobalRoutingRec: TYPE = RECORD[
exitLists: ARRAY Division OF ExitList ← ALL[NIL]
];
ExitList: TYPE = LIST OF Connections.Net;
Division: TYPE = {bottomLeft, bottomRight, rightBottom, rightTop, topRight, topLeft, leftTop, leftBottom};
DetailedRouting: TYPE = REF DetailedRoutingRec;
DetailedRoutingRec: TYPE = RECORD[
channels: ARRAY Route.Side OF Channel,
switchBoxes: ARRAY Corners OF SwitchBox
];
DetailedRoutingPL: TYPE = REF DetailedRoutingPLRec;
DetailedRoutingPLRec: TYPE = RECORD[
channels: ARRAY RTBasic.LRSide OF Channel,
switchBoxes: ARRAY RTBasic.TBSide OF SwitchBox
];
Channel: TYPE = RECORD[
size, orgin: CD.Position ← [0, 0],
object: Cabbage.Object ← NIL];
SwitchBox: TYPE = RECORD[
size, orgin: CD.Position ← [0, 0],
object: Cabbage.Object ← NIL];
Corners: TYPE = {bottomLeft, bottomRight, topRight, topLeft};
SegmentSeq: TYPE = REF SegmentSeqRec;
SegmentSeqRec: TYPE = RECORD[seq: SEQUENCE numSegments: NAT OF Connections.Segment];
SegmentPair: TYPE = RECORD[
seg1, seg2: Connections.Segment];
CreateHandle: PROC [inner, bottomLeft, bottom, bottomRight, right, topRight, top, topLeft, left: Cabbage.Object, connections: Connections.Table, parms: Cabbage.PadRingParams, name: Rope.ROPE, routeType: CabbagePrivate.RouteType] RETURNS [handle: CabbagePrivate.Handle];
CheckInnerPos: PROC [handle: CabbagePrivate.Handle, innerPos: CD.Position];
GlobalRoute: PROC [handle: CabbagePrivate.Handle];
DetailedRoute: PROC [handle: CabbagePrivate.Handle];
MakeChip: PROC [handle: CabbagePrivate.Handle] RETURNS [chip: Cabbage.Object];
END.