protected override void DoCommandAction() { NetlistContainer netlistContainer = GetNetlistContainer(); int numberOfUnroutedNets = netlistContainer.Nets.Where(n => n.PipCount == 0 && n.OutpinCount == 1 && n.InpinCount > 0).Count(); int routedNets = 0; List <XDLNet> unrouteableNets = new List <XDLNet>(); foreach (XDLNet unroutedNet in netlistContainer.Nets.Where(n => n.PipCount == 0 && n.OutpinCount == 1 && n.InpinCount > 0)) { int pipCount = unroutedNet.PipCount; RouteNet routeCmd = new RouteNet(); routeCmd.NetlistContainerName = NetlistContainerName; routeCmd.NetName = unroutedNet.Name; routeCmd.SearchMode = SearchMode; CommandExecuter.Instance.Execute(routeCmd); // pip count did not change if no paht was found if (pipCount == unroutedNet.PipCount) { unrouteableNets.Add(unroutedNet); } ProgressInfo.Progress = ProgressStart + (int)((double)routedNets++ / (double)numberOfUnroutedNets * ProgressShare); } foreach (XDLNet net in unrouteableNets) { RouteNet routeCmd = new RouteNet(); routeCmd.NetlistContainerName = NetlistContainerName; routeCmd.NetName = net.Name; routeCmd.SearchMode = SearchMode; OutputManager.WriteOutput(routeCmd.ToString()); CommandExecuter.Instance.Execute(routeCmd); } }
private void ExecutePathSearch(Location startLocation, Location targetLocation) { m_paths.Clear(); CheckExistence(startLocation); CheckExistence(targetLocation); if (KeepPathsIndependet) { LatencyMan = new LatencyManager(KeepPathsIndependet); } else { LatencyMan = new LatencyManager(PrintLatency, SortByAttribute); } // print results if (PrintBanner && !OutputMode.ToUpper().Equals("TCL")) { OutputManager.WriteOutput(GetBannerWithLatency(startLocation, targetLocation)); } RouteNet routeCmd = new RouteNet(); routeCmd.Watch = Watch; foreach (List <Location> path in routeCmd.Route(SearchMode, Forward, Enumerable.Repeat(startLocation, 1), targetLocation, 1000, MaxDepth, KeepPathsIndependet)) { if (!PathAlreadyFound(path, m_paths)) { m_paths.Add(path); if (BlockUsedPorts) { foreach (Location l in path) { if (!l.Tile.IsPortBlocked(l.Pip)) { l.Tile.BlockPort(l.Pip, Tile.BlockReason.Blocked); } } } ProgressInfo.Progress = ProgressStart + (int)(m_paths.Count / (double)MaxSolutions * ProgressShare); if (m_paths.Count >= MaxSolutions) { break; } } } if (m_paths.Count == 0) { OutputManager.WriteOutput("No path found"); } else if (OutputMode.ToUpper().Equals("CHAIN")) { PrintAsChain(m_paths); } else if (OutputMode.ToUpper().Equals("XDL")) { OutputManager.WriteOutput(PathToString(startLocation, targetLocation, m_paths)); } else if (OutputMode.ToUpper().Equals("TCL")) { AddToTCLOutput(m_paths); } }