<> <> <> <<>> DIRECTORY CD, D2Basic, HashTable, Properties, Rope, RTBasic; Route: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> <> <> <<>> <> <> <> <<>> <> <> <> RopeList: TYPE = LIST OF Rope.ROPE; Layer: TYPE = CD.Layer; Object: TYPE = CD.Object; Instance: TYPE = CD.Instance; Rect: TYPE = D2Basic.Rect; RectList: TYPE = LIST OF Rect; RefRect: TYPE = REF Rect; Position: TYPE = D2Basic.Vector; PositionList: TYPE = LIST OF Position; Number: TYPE = D2Basic.Number; SideOrNone: TYPE = RTBasic.SideOrNone; Side: TYPE = RTBasic.Side; DirectionOrNone: TYPE = RTBasic.DirectionOrNone; Direction: TYPE = RTBasic.Direction; PropList: TYPE = Properties.PropList; Optimization: TYPE = {full, noIncompletes}; <> Error: ERROR [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; Signal: SIGNAL [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; ErrorType: TYPE = {programmingError, callingError, noResource, other}; <> RoutingArea: TYPE = REF RoutingAreaRec; RoutingAreaRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, rules: DesignRules _ NIL, routingSides: PRIVATE REF ANY _ NIL, properties: PRIVATE REF ANY _ NIL, nets: PRIVATE REF ANY _ NIL, parms: PRIVATE REF ANY _ NIL, privateData: PRIVATE REF ANY _ NIL]; CreateRoutingArea: PROC [routingAreaName: Rope.ROPE _ NIL, designRules: DesignRules, properties: PropList _ NIL] RETURNS [routingArea: RoutingArea]; <> <> DesignRules: TYPE = REF DesignRulesRec; DesignRulesRec: TYPE = RECORD[ horizLayer, vertLayer, trunkLayer, branchLayer: Layer, CDLambda: Number, trunkDirection, branchDirection: DirectionOrNone, trunkWidth, trunkSpacing, trunkToContact, trunkToTrunk, trunkOffset, branchWidth, branchSpacing, branchToContact, branchToBranch, branchOffset, contactSize, contactToContact, pinSpacing, trunkToEdge: Number _ 0, technology: PRIVATE REF ANY _ NIL]; CreateDesignRules: PROC [technologyKey: ATOM, horizLayer, vertLayer: Layer, trunkDirection: Direction, properties: PropList _ NIL] RETURNS [designRules: DesignRules]; <> <> <> RoutingBarrier: TYPE = REF RoutingBarrierRec; RoutingBarrierList: TYPE = LIST OF RoutingBarrier; RoutingBarrierRec: TYPE = RECORD[ layer: Layer _ CD.undefLayer, barrier: RectList _ NIL, properties: PropList _ NIL]; CreateRoutingBarrier: PROC [layer: Layer, barrier: RectList _ NIL, properties: PropList _ NIL] RETURNS [routingBarrier: RoutingBarrier]; <> <<>> IncludeRoutingAreaSide: PROC [routingArea: Route.RoutingArea, side: Side, sideFiducial: Position _ [0, 0], barriers: RoutingBarrierList _ NIL, properties: PropList _ NIL]; <> <> Pin: TYPE = REF PinRec; PinList: TYPE = LIST OF Pin; PinRec: TYPE = RECORD[ pin: CD.Instance _ NIL, side: Side]; CreatePin: PROC [cdPin: CD.Instance, side: Side] RETURNS [pin: Pin]; <> <<>> IncludeNet: PROC [routingArea: RoutingArea, netName: Rope.ROPE, connections: PinList, properties: PropList _ NIL]; <> <<>> trunkWidthKey: REF ATOM; branchWidthKey: REF ATOM; <> <<>> <> RoutingResult: TYPE = REF RoutingResultRec; RoutingResultRec: TYPE = RECORD[ routingArea: RoutingArea, polyLength, metalLength, metal2Length: Route.Number _ 0, polyToMetal, metalToMetal2, numTrunkTracks, numIncompletes: NAT _ 0, routingRect: Rect _ Rect[0, 0, 0, 0], moreAreaRequired: BOOL _ FALSE, incompleteNets, breakAtExitNets: RopeList _ NIL]; PositionVec: TYPE = ARRAY Side OF Position; ChannelRoute: PROC [routingArea: RoutingArea, sideOrgins: PositionVec, routingRect: Rect, opt: Optimization _ full, signalSinglePinNets, signalCoincidentPins: BOOLEAN _ TRUE] RETURNS [routingResult: RoutingResult]; <> <<>> <> SwitchBoxRoute: PROC [routingArea: RoutingArea, sideOrgins: PositionVec, routingRect: Rect, opt: Optimization _ full, signalSinglePinNets, signalCoincidentPins: BOOLEAN _ TRUE, okToDiddleLLPins, okToDiddleURPins: BOOLEAN _ FALSE] RETURNS [routingResult: RoutingResult]; <> <<>> <> <<>> <> MazeRoute: PROC [routingArea: RoutingArea, sideCoords: PositionVec, routingRect: Rect, opt: Optimization] RETURNS [routingResult: RoutingResult]; <> <> RetrieveRouting: PROC [routingResult: RoutingResult, cellName: Rope.ROPE _ NIL, retrieveRect: RefRect _ NIL, properties: PropList _ NIL, viaTable: HashTable.Table _ NIL] RETURNS [object: Object, externalConnections: PinList]; <> <> < use routingRect from RoutingResult. viaTable is a hash table for reuse of via definitions; NIL => construct a new hash table for this channel.>> <> Destroy: PROC [routingArea: RoutingArea]; <> <<>> END.