<> <> <> <> <> <<>> DIRECTORY CD, GC, IPCTG, RefTab, IPTop, Rope, Route, RouteDiGraph, RTBasic, CoreRouteFlat; GCPrivate: CEDAR DEFINITIONS IMPORTS RTBasic = BEGIN nameProp: ATOM; TopologicalOrder: TYPE = RouteDiGraph.Graph; IntersectionType: TYPE = {normal, inverted}; <> <<>> ChanPinType: TYPE = {min, max}; -- indicates type of ChanPin Channel: TYPE = REF ChannelRec; ChannelRec: TYPE = RECORD [ name: Rope.ROPE _ NIL, -- the channel name connections: RefTab.Ref _ NIL, -- pins and exits on channel per net width: CD.Number _ 0, -- estimate before routing, final val after position: CD.Position _ [0, 0], -- coord sys of containing obj direction: GC.Direction _ horizontal, -- direction of the channel lowerIntType: IntersectionType _ normal, upperIntType: IntersectionType _ normal, ch: IPCTG.Channel _ NIL, intermediateResult: Route.IntermediateResult _ NIL, cdObject: CD.Object _ NIL, bottomOrLeftShell: CD.Object _ NIL, topOrRightShell: CD.Object _ NIL, topoOrder: RouteDiGraph.Node _ NIL, trackInfo: TrackInfo _ NIL, any: REF _ NIL ]; NetDesc: TYPE = REF NetDescRec; -- channel.connections entry NetDescRec: TYPE = RECORD [ bottomOrLeftExit: BOOLEAN _ FALSE, -- TRUE iff net has exit on indicated side topOrRightExit: BOOLEAN _ FALSE, -- TRUE iff net has exit on indicated side pinList: LIST OF PhyPinDesc _ NIL, intersectionList: LIST OF IntersectionPinDesc _ NIL -- channel intersections on channel to be connected ]; -- phy pins on chan sides to be conntd PhyPinDesc: TYPE = REF PhyPinDescRec; -- physical pin descriptor PhyPinDescRec: TYPE = RECORD [ instance: CoreRouteFlat.Instance _ NIL, oPin: CoreRouteFlat.ONode _ NIL, pPin: CoreRouteFlat.Pin _ [ ]]; IntersectionPinDesc: TYPE = REF IntersectionPinDescRec; -- intersection pin descriptor IntersectionPinDescRec: TYPE = RECORD [ channel: Channel _ NIL ]; ChanPinDesc: TYPE = REF ChanPinDescRec; ChanPinDescRec: TYPE = RECORD [ net: CoreRouteFlat.Net, position: INT, type: ChanPinType]; TrackInfo: TYPE = REF TrackInfoRec; <<-- information about max track density and its range(s) along channel>> TrackInfoRec: TYPE = RECORD [ rangeList: RTBasic.RangeList, trackDensity: INT]; FindTopologicalOrder: PROC [topology: IPTop.Ref] RETURNS [topologicalOrder: TopologicalOrder]; <> EnumerateChannelsInTopologicalOrder: PROC [context: GC.Context, eachChannel: EachChannelAction] RETURNS [quit: BOOLEAN]; <> <<>> EachChannelAction: TYPE = PROC[context: GC.Context, channel: Channel] RETURNS [quit: BOOLEAN _ FALSE]; AssignCoordinates: PROC [context: GC.Context]; <> DoDetailRoute: PROC [context: GC.Context, layoutStyle: GC.LayoutStyle] RETURNS [result: GC.Result]; DoInitialGlobalRoute: PROC [context: GC.Context, layoutStyle: GC.LayoutStyle]; DoImproveGlobalRoute: PROC [context: GC.Context, layoutStyle: GC.LayoutStyle]; ComputeTrackInfo: PROC[context: GC.Context, channel: Channel] RETURNS [maxTrackInfo: GCPrivate.TrackInfo] ; EstimateChanWidth: PROC [context: GC.Context, channel: Channel] RETURNS[width: INT]; CDOrien: PROC[num: INT] RETURNS [orien: CD.Orientation]; LowerChannelPosition: PROC[channel: Channel] RETURNS [position: CD.Position] = INLINE {RETURN[RTBasic.PQToXY[channel.direction, LowerChannelPQ[channel]]]}; <> UpperChannelPosition: PROC[channel: Channel] RETURNS [position: CD.Position] = INLINE {RETURN[RTBasic.PQToXY[channel.direction, UpperChannelPQ[channel]]]}; <> LowerChannelPQ: PROC[channel: Channel] RETURNS [pq: RTBasic.PQPos]; <> UpperChannelPQ: PROC[channel: Channel] RETURNS [pq: RTBasic.PQPos]; <> ChannelLimits: PUBLIC PROC[channel: Channel] RETURNS [lower, upper: INT]; <> CreateChannels: PROC [context: GC.Context]; <> DestroyChannels: PUBLIC PROC [context: GC.Context]; <> PinOnList: PUBLIC PROC [netDesc: GCPrivate.NetDesc, phyPin: GCPrivate.PhyPinDesc] RETURNS [onList: BOOLEAN _ FALSE]; <> IntersectionOnList: PUBLIC PROC [netDesc: GCPrivate.NetDesc, int: GCPrivate.IntersectionPinDesc] RETURNS [onList: BOOLEAN _ FALSE]; <> IncludeOb: PUBLIC PROC[ cell: CD.Object, ob: CD.Object, position: CD.Position _ [0, 0], orientation: CD.Orientation _ original] RETURNS[application: CD.Instance]; <> <<>> END.