///StdCell/SCSmash.mesa
DIRECTORY
SC,
SCPrivate;
SCSmash: CEDAR DEFINITIONS =
BEGIN
maxFtsSaved: NAT = 200;
maxNetsSaved: NAT = 200;
MFtsSavedSr: TYPE = NAT[1 .. maxFtsSaved];
ZMFtsSavedSr: TYPE = NAT[0 .. maxFtsSaved];
MNetsSavedSr: TYPE = NAT[1 .. maxNetsSaved];
ZMNetsSavedSr: TYPE = NAT[0 .. maxNetsSaved];
GlobalRoute: TYPE = REF GlobalRouteRec;
GlobalRouteRec: TYPE = RECORD [
numFts: ZMFtsSavedSr ← 0,
numNets: ZMNetsSavedSr ← 0,
fts: ARRAY MFtsSavedSr OF FtData ← ALL[NIL],
nets: ARRAY MNetsSavedSr OF NetData ← ALL[NIL]];
FtData: TYPE = REF FtDataRec;
FtDataRec: TYPE = RECORD [
net: SCPrivate.Net ← NIL,
row: SCPrivate.ZMaxRowSr ← 0,
pos: SCPrivate.ZMaxPosSr ← 0];
NetData: TYPE = REF NetDataRec;
NetDataRec: TYPE = RECORD [
net: SCPrivate.Net ← NIL,
exit: ARRAY SCPrivate.LRSide OF SCPrivate.ChanSet ];
SmashNets: PROCEDURE[handle: SC.Handle, nets: SCPrivate.NetList, doWidths: BOOLEAN,
inDoChans: SCPrivate.ChanSet, inDoSides: SCPrivate.LRSideSet, inDoRows: SCPrivate.RowSet]
RETURNS [doChanWidths: SCPrivate.ChanSet, doSideWidths: SCPrivate.LRSideSet, doRowWidths: SCPrivate.RowSet];
add feedthrus to required rows
SmashAllNets: PROCEDURE[handle: SC.Handle, doChanWidths: BOOLEAN];
alter the smash of the nets
RemoveSmash: PROCEDURE[handle: SC.Handle];
ReSmash: PROCEDURE[handle: SC.Handle, doChanWidths: BOOLEAN];
add ft to row width
NewFt: PROCEDURE[handle: SC.Handle, net: SCPrivate.Net, lgRow: SCPrivate.LgRow]
RETURNS [ftComp: SCPrivate.Instance];
remove the fts on a net list
DelFtsOnNet: PROCEDURE[handle: SC.Handle, net: SCPrivate.Net];
add an exit to a channel
AddExit: PROCEDURE[handle: SC.Handle, rowChan: SCPrivate.RowChan, side: SC.Side, net: SCPrivate.Net];
remove an exit for net on chan
RemoveExit: PROCEDURE[handle: SC.Handle, net: SCPrivate.Net, rowChan: SCPrivate.RowChan, lrSide: SCPrivate.LRSide];
remove specified nets with fts
RemoveNetsWFts: PROCEDURE[handle: SC.Handle, netLst: SCPrivate.NetList, save: BOOLEAN,
inDoChans: SCPrivate.ChanSet, inDoSides: SCPrivate.LRSideSet, inDoRows: SCPrivate.RowSet]
RETURNS [doChanWidths: SCPrivate.ChanSet, doSideWidths: SCPrivate.LRSideSet, doRowWidths: SCPrivate.RowSet];
save route data for specified nets
RestoreNetsWFts: PROCEDURE[handle: SC.Handle, netLst: SCPrivate.NetList, inDoChans: SCPrivate.ChanSet, inDoSides: SCPrivate.LRSideSet, inDoRows: SCPrivate.RowSet]
RETURNS [doChanWidths: SCPrivate.ChanSet, doSideWidths: SCPrivate.LRSideSet, doRowWidths: SCPrivate.RowSet];
audit the exits for consistancy
CheckExits: PUBLIC PROCEDURE [handle: SC.Handle];
audit the Fts for consistancy
CheckFts: PUBLIC PROCEDURE [handle: SC.Handle];
END.