CabbagePrivate:
CEDAR
DEFINITIONS =
BEGIN
Handle: TYPE = REF HandleRec;
HandleRec:
TYPE =
RECORD [
name: Rope.ROPE ← NIL,
routeType: RouteType ← normal,
size: CD.Position ← [0, 0],
vddNet, gndNet: Connections.Net ← NIL,
connections: Connections.Table ← NIL,
parms: Cabbage.PadRingParams ← NIL,
rules: DesignRules ← NIL,
powerDistribution: PowerDistribution ← 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[
origin, 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 Channel
];
DetailedRoutingPL: TYPE = REF DetailedRoutingPLRec;
DetailedRoutingPLRec:
TYPE =
RECORD[
channels: ARRAY RTBasic.LRSide OF Channel,
switchBoxes: ARRAY RTBasic.TBSide OF Channel
];
Channel:
TYPE =
RECORD[
size, origin: CD.Position ← [0, 0],
object: Cabbage.Object ← NIL,
cellType: Core.CellType ← NIL];
Corners:
TYPE = {bottomLeft, bottomRight, topRight, topLeft};
PowerDistribution: TYPE = REF PowerDistributionRec;
PowerDistributionRec:
TYPE =
RECORD[
channels: ARRAY Route.Side OF Channel,
power: ARRAY Route.Side OF Channel,
switchBoxes: ARRAY Corners OF Channel
];
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];
DistributePower:
PROC [handle: CabbagePrivate.Handle];
GlobalRoute:
PROC [handle: CabbagePrivate.Handle];
DetailedRoute:
PROC [handle: CabbagePrivate.Handle];
MakeChip: PROC [handle: CabbagePrivate.Handle] RETURNS [chip: Cabbage.Object];
END.