Esempio n. 1
0
        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);
        }
Esempio n. 2
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);
            }
        }