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; 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. ΪGCPrivate.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Bryan Preas, January 15, 1987 11:46:28 am PST Don Curry December 7, 1987 11:29:50 am PST Massoud Pedram May 6, 1988 6:50:22 pm PDT indicates method to connect el or order breaking tee intersections -- information about max track density and its range(s) along channel Determine order in which to route channels. Enumerate routing channels in route order. Assign locations to all channels and components. find lower left position of a channel find upper right position of a channel find lower left position of a channel in PQ space find upper right position of a channel in PQ space find limits of width of a Phoenix channel create channels for the context destroy channels for the context onList _ TRUE iff phyPin is on the global routing list for net onList _ TRUE iff Intersection is on the global routing list for net include an object in a cell; position refers to base of interest rect Κα˜šœ™Jšœ Οmœ1™˜›Jšœ%™%J˜—š Ÿœžœžœ žœ žœžœ>˜›Jšœ&™&J˜—šŸœžœžœ˜CJšœ)žœ™1J˜—šŸœžœžœ˜CJšœ*žœ™2J˜—š Ÿ œžœžœžœžœ˜IJšœ)™)J˜—šŸœžœ žœ ˜+Jšœ™J˜—šŸœžœžœ žœ ˜3Jšœ ™ J˜—šŸ œžœžœ;˜QJšžœ žœžœ˜"Jšœ žœ2™?J˜—šŸœžœžœA˜`Jšžœ žœžœ˜"Jšœ žœ8™EJ˜—šŸ œžœžœ˜Jšœžœ˜Jšœžœ ˜Jšœ žœ˜#šœ žœ˜'Jšžœžœ ˜"—JšœE™EJ™Jšžœ˜—J˜J˜J˜—…—2ν