SCRoutePinsUtil:
CEDAR
DEFINITIONS =
BEGIN
NetDat: TYPE = REF NetDatRec;
NetDatRec:
TYPE =
RECORD [
bounds1: SC.Number ← LAST[INT],
bounds2: SC.Number ← -LAST[INT],
pinCount: INT ← 0,
exits: ARRAY SCPrivate.LRSide OF SCPrivate.Exit ← ALL[NIL],
chanPins: ARRAY SCPrivate.TBSide OF ChannelPinList ← ALL[NIL]];
ChannelPinList: TYPE = LIST OF ChannelPin;
ChannelPin: TYPE = REF ChannelPinRec;
ChannelPinRec:
TYPE =
RECORD [
min, max, depth: SC.Number,
netPin: SCPrivate.PinNet,
side: SC.Side,
alwaysUse: BOOLEAN];
ExitPin: TYPE = REF ExitPinRec;
ExitPinRec:
TYPE =
RECORD [
exit: SCPrivate.Exit];
initialize for determining the width of a channel
InitGetChanPins: PROCEDURE [handle: SC.Handle];
initialize for determining the width of a channel
TermGetChanPins: PROCEDURE [handle: SC.Handle];
enter a net on a channel into data structure
EnterPin: PROCEDURE[min, max, depth: SC.Number, netPin: SCPrivate.PinNet, side: SCPrivate.TBSide, alwaysUse: BOOLEAN];
enter exit data for a channel into routing data base
EnterExit: PROCEDURE[exit: SCPrivate.Exit, side: SCPrivate.LRSide];
minmium route channels need special processing to include the minimun number of wire segments of minimum length
EnterNetDat: PROCEDURE [handle: SC.Handle, chan: SCPrivate.ZMaxChanSr, pinProc: PinProc, exitProc: ExitProc, netProc: NetProc];
PinProc: TYPE = PROC [min, max, depth: SC.Number, netPin: SCPrivate.PinNet, side: SC.Side];
ExitProc: TYPE = PROC [exit: SCPrivate.Exit, side: SCPrivate.LRSide];
NetProc: TYPE = PROC [net: SCPrivate.Net];
END.