public static string PathToString(Location start, Location sink, IEnumerable <List <Location> > paths) { Tile startTile = FPGA.FPGA.Instance.GetTile(start.Tile.Location); Port startPip = new Port(start.Pip.Name); Tile targetTile = FPGA.FPGA.Instance.GetTile(sink.Tile.Location); Port targetPip = new Port(sink.Pip.Name); NetOutpin op = new NetOutpin(); op.InstanceName = start.Tile.Location; op.SlicePort = start.Pip.Name; NetInpin ip = new NetInpin(); ip.InstanceName = sink.Tile.Location; ip.SlicePort = sink.Pip.Name; foreach (Slice s in startTile.Slices) { if (s.PortMapping.Contains(startPip)) { op.InstanceName = s.SliceName; } if (s.PortMapping.Contains(targetPip)) { ip.InstanceName = s.SliceName; } } int netCount = 0; StringBuilder buffer = new StringBuilder(); foreach (List <Location> path in paths.OrderBy(l => l.Count)) { XDLNet n = new XDLNet(path); n.Name = "path_" + netCount++; n.Add(op); n.Add(ip); buffer.AppendLine(n.ToString()); } return(buffer.ToString()); }
protected override void DoCommandAction() { FPGATypes.AssertBackendType(FPGATypes.BackendType.ISE); // read file DesignParser parser = DesignParser.CreateDesignParser(XDLInFile); // into design XDLContainer container = new XDLContainer(); parser.ParseDesign(container, this); XDLNet netWithOutPin = (XDLNet)container.Nets.FirstOrDefault(n => n.OutpinCount == 1 && string.IsNullOrEmpty(((XDLNet)n).HeaderExtension)); if (netWithOutPin == null) { throw new ArgumentException("No net with outpin found"); } List <string> namesOfNetsWithoutOutpin = new List <string>(); foreach (Net net in container.Nets.Where(n => n.OutpinCount == 0)) { namesOfNetsWithoutOutpin.Add(net.Name); } foreach (string netName in namesOfNetsWithoutOutpin) { XDLNet net = (XDLNet)container.Nets.FirstOrDefault(n => n.Name.Equals(netName)); if (net == null) { throw new ArgumentException("Net " + netName + " not found"); } foreach (XDLPip pip in net.Pips) { netWithOutPin.Add(pip); } net.ClearPips(); } System.IO.TextWriter tw = new System.IO.StreamWriter(XDLOutFile, false); tw.WriteLine(container.GetDesignConfig().ToString()); foreach (XDLModule mod in container.Modules) { tw.WriteLine(mod.ToString()); } foreach (XDLPort p in container.Ports) { tw.WriteLine(p.ToString()); } foreach (XDLInstance inst in container.Instances) { tw.WriteLine(inst.ToString()); } foreach (XDLNet net in container.Nets) { tw.WriteLine(net.ToString()); } tw.Close(); }