private void CutOffISE() { XDLContainer nlc = (XDLContainer)GetNetlistContainer(); int netsDone = 0; foreach (XDLNet n in nlc.Nets) { ProgressInfo.Progress = (int)((double)netsDone++ / (double)nlc.NetCount * 100); int pipCount = n.PipCount; //List<XDLPip> removedPips = n.Remove(p => Remove(p)); n.RemoveAllPinStatements(np => Remove(np, nlc)); // pip count changed -> probably a PRLink that may be decomposed if (pipCount != n.PipCount) { n.PRLink = true; } } nlc.Remove(inst => Remove(inst)); // remove all nets that are now empty nlc.Remove(n => n.PipCount == 0 && n.InpinCount == 0 && n.OutpinCount == 0); }
protected override void DoCommandAction() { FPGATypes.AssertBackendType(FPGATypes.BackendType.ISE); XDLContainer nlc = (XDLContainer)GetNetlistContainer(); List <string> fixedSliceConfigurations = new List <string>(); foreach (XDLInstance inst in nlc.Instances) { // A5LUT:Inst_PE/Mmult_OPA[31]_OPB[31]_MuLt_17_OUT_Madd10_cy<6>:#LUT -> A5LUT::#LUT string originalCode = inst.ToString(); string fixedCode = originalCode; if (!fixedCode.Contains("A5LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " A5LUT:(.+?):#LUT:", " A5LUT::#LUT:"); } if (!fixedCode.Contains("B5LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " B5LUT:(.+?):#LUT:", " B5LUT::#LUT:"); } if (!fixedCode.Contains("C5LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " C5LUT:(.+?):#LUT:", " C5LUT::#LUT:"); } if (!fixedCode.Contains("D5LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " D5LUT:(.+?):#LUT:", " D5LUT::#LUT:"); } if (!fixedCode.Contains("A6LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " A6LUT:(.+?):#LUT:", " A6LUT::#LUT:"); } if (!fixedCode.Contains("B6LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " B6LUT:(.+?):#LUT:", " B6LUT::#LUT:"); } if (!fixedCode.Contains("C6LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " C6LUT:(.+?):#LUT:", " C6LUT::#LUT:"); } if (!fixedCode.Contains("D6LUT::#OFF")) { fixedCode = Regex.Replace(fixedCode, " D6LUT:(.+?):#LUT:", " D6LUT::#LUT:"); } // neu // A5FF:Inst_PE/Mmult_OPA[31]_OPB[31]_MuLt_18_OUT_OPA,OPB<20>_x_OPA,OPB<62>_mand1_FRB: -> A5FF:: if (!fixedCode.Contains("A5FF::")) { fixedCode = Regex.Replace(fixedCode, "A5FF:(.+?):", "A5FF::"); } if (!fixedCode.Contains("B5FF::")) { fixedCode = Regex.Replace(fixedCode, "B5FF:(.+?):", "B5FF::"); } if (!fixedCode.Contains("C5FF::")) { fixedCode = Regex.Replace(fixedCode, "C5FF:(.+?):", "C5FF::"); } if (!fixedCode.Contains("D5FF::")) { fixedCode = Regex.Replace(fixedCode, "D5FF:(.+?):", "D5FF::"); } // BFF:Inst_PE/config_data_en_0:#FF --> BFF::#FF if (!fixedCode.Contains("AFF::#OFF") && !fixedCode.Contains("AFF::#FF")) { fixedCode = Regex.Replace(fixedCode, "AFF:(.+?):", "AFF::"); } if (!fixedCode.Contains("BFF::#OFF") && !fixedCode.Contains("BFF::#FF")) { fixedCode = Regex.Replace(fixedCode, "BFF:(.+?):", "BFF::"); } if (!fixedCode.Contains("CFF::#OFF") && !fixedCode.Contains("CFF::#FF")) { fixedCode = Regex.Replace(fixedCode, "CFF:(.+?):", "CFF::"); } if (!fixedCode.Contains("DFF::#OFF") && !fixedCode.Contains("DFF::#FF")) { fixedCode = Regex.Replace(fixedCode, "DFF:(.+?):", "DFF::"); } fixedSliceConfigurations.Add(fixedCode); } nlc.Remove(delegate(Instance i) { return(true); }); foreach (string xdlCode in fixedSliceConfigurations) { nlc.AddSliceCodeBlock(xdlCode); } }