<> <> <> DIRECTORY GC, GCPrivate, GCCIG, Rope, RouteDiGraph, RTStructure; GCGlobalRouteImpl: CEDAR PROGRAM IMPORTS GCCIG, GCPrivate, Rope, RouteDiGraph, RTStructure EXPORTS GCPrivate = { DoInitialGlobalRoute: PUBLIC PROC [context: GC.Context] = { <> EachNet: RTStructure.EachNetAction ~ { connectionStrength: GCCIG.ConnectionStrength _ IF Rope.Equal[net.name, "Vdd"] OR Rope.Equal[net.name, "Gnd"] THEN power ELSE goodInternal; nodeSetList: GCCIG.NodeSetList _ GCCIG.InsertNet[cig, net, connectionStrength]; IF GCCIG.Length[nodeSetList] > 1 THEN GCCIG.ShortestPath[cig, nodeSetList, net]; GCCIG.RemoveNodes[cig, nodeSetList]; }; cig: GCCIG.Graph; GCPrivate.DestroyChannels[context]; GCPrivate.CreateChannels[context]; GCPrivate.AssignCoordinates[context]; IF context.topologicalOrder # NIL THEN RouteDiGraph.DestroyGraph[NARROW[context.topologicalOrder]]; context.topologicalOrder _ GCPrivate.FindTopologicalOrder[NARROW[context.topology]]; cig _ GCCIG.Create[context]; [] _ RTStructure.EnumerateNets[context.structure, EachNet]; GCPrivate.AssignCoordinates[context]; <> }; }.