private void RelocateNetsForXDL(LibraryElement libElement, Tile anchorCLB, XDLContainer netlistContainer) { foreach (XDLNet net in libElement.Containter.Nets) { // insert instance prefix XDLNet relocatedNet = new XDLNet(InstanceName + net.Name); relocatedNet.HeaderExtension = net.HeaderExtension; foreach (NetPin pin in net.NetPins) { NetPin copy = NetPin.Copy(pin); if (InsertPrefix) { // insert instance prefix // remove greedy between double quotes string oldInstanceName = pin.InstanceName; string newInstanceName = "\"" + InstanceName + Regex.Replace(oldInstanceName, "\"", "") + "\""; //xdlCode = Regex.Replace(xdlCode, oldInstanceName, newInstanceName); copy.InstanceName = newInstanceName; copy.InstanceName = copy.InstanceName.Replace("\"", ""); } relocatedNet.Add(copy); } //foreach (NetSegment seg in originalNet.GetAllSegments()) foreach (XDLPip pip in net.Pips) { string targetLocation; bool success = libElement.GetTargetLocation(pip.Location, anchorCLB, out targetLocation); Tile targetTile = null; if (FPGA.FPGA.Instance.Contains(targetLocation)) { targetTile = FPGA.FPGA.Instance.GetTile(targetLocation); } else { throw new ArgumentException("Error during relocation of pip " + pip + " to " + targetLocation); } XDLPip relocatedSegment = null; if (targetTile.SwitchMatrix.Contains(pip.From, pip.To)) { // we do not need to transform identifiers relocatedSegment = new XDLPip(targetTile.Location, pip.From, pip.Operator, pip.To); } else { // naming fun relocatedSegment = FPGATypes.RelocatePip(targetTile, pip, relocatedNet); } if (relocatedSegment == null) { throw new ArgumentException("Could not relocate " + pip.ToString() + " to tile " + targetLocation); } if (!targetTile.SwitchMatrix.Contains(relocatedSegment.From, relocatedSegment.To)) { throw new ArgumentException("Could not relocate " + pip.ToString() + " to tile " + targetLocation); } relocatedNet.Add(relocatedSegment); } if (netlistContainer.Nets.Any(n => n.Name.Equals(relocatedNet.Name))) { throw new ArgumentException("A net named " + relocatedNet.Name + " is alredy inserted to netlist " + netlistContainer.Name + ". Did you try to join two instances of the same macro in one?"); } netlistContainer.Add(relocatedNet); } }