CoreGlue:
CEDAR
DEFINITIONS =
BEGIN
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: REF ← NIL];
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: BOOL←TRUE];
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: ROPE ← NIL,
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 INT←NIL,
bot: LIST OF INT←NIL ];
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 CCDUtils.
NWMML, layer:
CD.Layer, length:
INT ← 0]
RETURNS[cell: CD.Object]; -- nwmml.max => size
END.