示例#1
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();
            if (PartName != null)
                cmd.Append(" -p " + PartName);
            foreach (var dir in SearchDirs)
                cmd.Append(" -sd " + dir);
            foreach (var lib in Libraries)
                cmd.Append(" -l " + lib);
            if (RulesFile != null)
                cmd.Append(" -ur " + RulesFile);
            if (IntermediateDir != null)
                cmd.Append(" -dd " + IntermediateDir);
            cmd.Append(" -nt ");
            switch (NGOGeneration)
            { 
                case ENGOGeneration.Off:
                    cmd.Append(" off");
                    break;
                case ENGOGeneration.On:
                    cmd.Append(" on");
                    break;
                case ENGOGeneration.Timestamp:
                    cmd.Append(" timestamp");
                    break;
            }
            if (UserConstraintsFile != null)
                cmd.Append(" -uc " + UserConstraintsFile);
            if (IgnoreLocationConstraints)
                cmd.Append(" -r");
            if (AllowUnmatchedLOCConstraints)
                cmd.Append(" -aul");
            if (AllowUnmatchedTimingGroupConstraints)
                cmd.Append(" -aut");
            if (InferPadComponents)
                cmd.Append(" -a");
            if (IgnoreDefaultUCF)
                cmd.Append(" -i");
            if (AllowUnexpandedBlocks)
                cmd.Append(" -u");
            if (InsertKeepHierarchy)
                cmd.Append(" -insert_keep_hierarchy");
            if (BMMFile != null)
                cmd.Append(" -bm " + BMMFile);
            if (FilterFile != null)
                cmd.Append(" -filter " + FilterFile);
            cmd.Append(" -intstyle silent");
            if (Quiet)
                cmd.Append(" -quiet");
            if (Verbose)
                cmd.Append(" -verbose");
            cmd.Append(" " + DesignName);
            if (NGDFile != null)
                cmd.Append(" " + NGDFile);

            return proj.AddToolToBatch(batch, proj.ProjectPath, "ngdbuild", cmd.ToString());
        }
示例#2
0
        private void CopyEDKFiles(string ipRoot, string libName, XilinxProject xproj)
        {
            string libRoot = Path.Combine(ipRoot, libName, "hdl", "vhdl");

            string[] files = Directory.GetFiles(libRoot, "*.vhd");
            foreach (string filePath in files)
            {
                string file = Path.GetFileName(filePath);
                CopyEDKFile(libRoot, file, libName, xproj);
            }
        }
示例#3
0
            static void Main(string[] args)
            {
                ///default values
                int cycles = 100;

                FixedPointSettings.GlobalDefaultRadix = 10;
                FixedPointSettings.GlobalOverflowMode = EOverflowMode.Fail;

                ///elaborate
                SimpleCounterTestbench tb = new SimpleCounterTestbench();

                DesignContext.Instance.Elaborate();

                ///print out config
                Console.WriteLine("#cycles: " + cycles);

                ///simulate
                DesignContext.Instance.Simulate(cycles * SimpleCounterTestbench.ClockPeriod);

                ///notify completion
                Console.WriteLine("Done.  [ #cycles = " + cycles + " ]");


#if RUNANALYSIS
                // Now convert the design to VHDL and embed it into a Xilinx ISE project
                XilinxProject project = new XilinxProject(@".\hdl_output", "SimpleCounter");
                project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                VHDLGenerator codeGen = new VHDLGenerator();
                SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
                project.Save();

                //XilinxProject project_SC = new XilinxProject(@".\SystemC_output", "SimpleCounter");
                //project_SC.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                //project_SC.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                //project_SC.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                //project_SC.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                //project_SC.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                //SystemCGenerator codeGen_SC = new SystemCGenerator();
                //SynthesisEngine.Create(DesignContext.Instance, project_SC).Synthesize(codeGen_SC);
                //project_SC.Save();
#endif
            }
示例#4
0
        protected override void OnSynthesis(ISynthesisContext ctx)
        {
            if (!(ctx.Project is XilinxProject))
            {
                throw new InvalidOperationException("This floating point block can only be synthesized within the context of a Xilinx ISE project.");
            }
            XilinxProject xproj = (XilinxProject)ctx.Project;
            string        name  = ctx.CodeGen.GetComponentID(Descriptor);

            ComponentName = name;
            CoreGenDescription cgproj, xco;

            xproj.AddNewCoreGenDescription(name, out cgproj, out xco);
            xco.FromComponent(this);
            xco.Store();

            xproj.ExecuteCoreGen(xco.Path, cgproj.Path);
        }
示例#5
0
        public ProcessPool.ToolBatch Execute(XilinxProject proj, string xcoPath, string projPath)
        {
            if (proj.SkipIPCoreSynthesis)
            {
                return(null);
            }

            //see: http://www.xilinx.com/itp/xilinx6/books/docs/cgn/cgn.pdf
            projPath = Path.GetFullPath(projPath);
            xcoPath  = Path.GetFullPath(xcoPath);
            string dir       = Path.GetDirectoryName(projPath);
            bool   madeSubst = false;
            char   drivel    = default(char);
            string drive     = null;

            try
            {
                var batch = ProcessPool.Instance.CreateBatch();
                if (projPath.Length >= 160)
                {
                    drivel = SubstManager.Instance.AllocateDrive();
                    drive  = drivel + ":";
                    batch.Add("subst ", drive + " " + dir);
                    dir       = drive + "\\";
                    projPath  = dir + Path.GetFileName(projPath);
                    madeSubst = true;
                }
                string arguments = "-b \"" + xcoPath + "\" -p \"" + projPath + "\"";
                proj.AddToolToBatch(batch, dir, "coregen", arguments);
                if (madeSubst)
                {
                    batch.Add("subst", drive + " /D");
                }
                batch.Start();
                return(batch);
            }
            finally
            {
                if (drivel != default(char))
                {
                    SubstManager.Instance.ReleaseDrive(drivel);
                }
            }
        }
示例#6
0
        internal static void FromProject(this CoreGenDescription desc, XilinxProject proj, EPropAssoc assoc)
        {
            PropertyBag pbag = proj.PBag.Copy(assoc);
            if (assoc == EPropAssoc.CoreGenProj)
            {
                string fname = Path.GetFileNameWithoutExtension(desc.Path);
                string wdir = "./tmp/" + fname + "/";
                pbag.PutProperty(EXilinxProjectProperties.CoreGen_WorkingDirectory, wdir);
            }
            IList<PropDesc> allProps = PropEnum.EnumProps(typeof(EXilinxProjectProperties));
            foreach (PropDesc pd in allProps)
            {
                if (!pd.IDs.ContainsKey(assoc))
                    continue;

                object value = pbag.GetProperty((EXilinxProjectProperties)pd.EnumValue);
                desc.Set(pd.IDs[assoc], PropEnum.ToString(value, assoc), value.GetType());
            }
        }
示例#7
0
        public static void Run()
        {
            DesignContext.Reset();
            Mod2TestDesign td = new Mod2TestDesign(3, 10, 2);
            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(new Time(1.0, ETimeUnit.us));

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_out_ALUTestDesign", "ALUTestDesign");
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.SetVHDLProfile();

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
            project.Save();
        }
示例#8
0
        public static void RunTest()
        {
            DesignContext.Reset();
            var tb = new FileWriterTestbench();
            DesignContext.Instance.Elaborate();

            DesignContext.Instance.Simulate(new Time(0.5, ETimeUnit.us));

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_out_WriteFile", "FileWriterDesign");
            project.ISEVersion = EISEVersion._13_2;
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.SetVHDLProfile();

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
            project.Save();
        }
示例#9
0
        static void Main(string[] args)
        {
            Testbench_XilinxAdderSubtracter tb = new Testbench_XilinxAdderSubtracter();

            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(100 * Testbench_XilinxAdderSubtracter.ClockPeriod);
            //DesignContext.Instance.Simulate(10 * (Testbench_zaehler.DataWidth + 3) * Testbench_zaehler.ClockPeriod);

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_output", "XilinxAdderSubtracter");

            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

            VHDLGenerator codeGen = new VHDLGenerator();

            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
            project.Save();
        }
示例#10
0
        public static void Run()
        {
            DesignContext.Reset();
            ALUTestDesign td = new ALUTestDesign(8, 8, 2);

            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(new Time(0.5, ETimeUnit.us));

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_out_ALUTestDesign", "ALUTestDesign");

            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.SetVHDLProfile();

            VHDLGenerator codeGen = new VHDLGenerator();

            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
            project.Save();
        }
示例#11
0
        internal static void FromProject(this CoreGenDescription desc, XilinxProject proj, EPropAssoc assoc)
        {
            PropertyBag pbag = proj.PBag.Copy(assoc);

            if (assoc == EPropAssoc.CoreGenProj)
            {
                string fname = Path.GetFileNameWithoutExtension(desc.Path);
                string wdir  = "./tmp/" + fname + "/";
                pbag.PutProperty(EXilinxProjectProperties.CoreGen_WorkingDirectory, wdir);
            }
            IList <PropDesc> allProps = PropEnum.EnumProps(typeof(EXilinxProjectProperties));

            foreach (PropDesc pd in allProps)
            {
                if (!pd.IDs.ContainsKey(assoc))
                {
                    continue;
                }

                object value = pbag.GetProperty((EXilinxProjectProperties)pd.EnumValue);
                desc.Set(pd.IDs[assoc], PropEnum.ToString(value, assoc), value.GetType());
            }
        }
示例#12
0
            public static void Run()
            {
                Testbench tb = new Testbench();

                DesignContext.Instance.Elaborate();

                ///remember start time
                Start = System.DateTime.Now.Ticks;

                DesignContext.Instance.Simulate(Cycles * Testbench.ClockCycle);

#if RUNANALYSIS
                // Now convert the design to VHDL and embed it into a Xilinx ISE project
                XilinxProject project = new XilinxProject(@".\hdl_output", "Arbiter");
                project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                VHDLGenerator codeGen = new VHDLGenerator();
                SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
                project.Save();

                // Now convert the design to VHDL and embed it into a Xilinx ISE project
                XilinxProject project_SC = new XilinxProject(@".\SystemC_output", "SimpleCounter");
                project_SC.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                project_SC.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                project_SC.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                project_SC.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                project_SC.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                SystemCGenerator codeGen_SC = new SystemCGenerator();
                SynthesisEngine.Create(DesignContext.Instance, project_SC).Synthesize(codeGen_SC);
                project_SC.Save();
#endif
            }
示例#13
0
 public ProcessPool.Tool SaveToXSTScriptAndAddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch, string scriptPath, string logPath)
 {
     SaveToXSTScript(scriptPath);
     return AddToBatch(proj, batch, scriptPath, logPath);
 }
示例#14
0
 public static ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch, string scriptPath, string logPath)
 {
     string args = "-intstyle \"silent\" -ifn \"" + scriptPath + "\" -ofn \"" + logPath + "\"";
     return proj.AddToolToBatch(batch, proj.ProjectPath, "xst", args);
 }
        public static void RunTest()
        {
            DesignContext.Reset();

            TestHLS_PortAccess_Testbench tb = new TestHLS_PortAccess_Testbench();

            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(new Time(1.0, ETimeUnit.us));
            DesignContext.Stop();
            DesignContext.Instance.CompleteAnalysis();

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_out_TestHLS_PortAccess", "TestHLS_PortAccess");
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Virtex6);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc6vlx240t);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.ff1156);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._2);
            project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);
            project.SetVHDLProfile();
            project.SkipIPCoreSynthesis = true;

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(tb, codeGen);
            project.Save();
        }
示例#16
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            if (PartName != null)
            {
                cmd.Append("-p " + PartName);
            }
            cmd.Append(" -ol \"" + PropEnum.ToString(PlacerEffort, EPropAssoc.MAP) + "\"");
            if (PlacerExtraEffort != EPlacerExtraEffortMap.None)
            {
                throw new NotImplementedException();
            }
            cmd.Append(" -t " + StartingPlacerCostTable);
            cmd.Append(" -logic_opt ");
            if (CombinatorialLogicOptimization)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            cmd.Append(" -register_duplication ");
            cmd.Append("\"" + PropEnum.ToString(RegisterDuplication, EPropAssoc.MAP) + "\"");
            cmd.Append(" -global_opt \"" + PropEnum.ToString(GlobalOptimization, EPropAssoc.MAP) + "\"");
            cmd.Append(" -equivalent_register_removal ");
            if (EquivalentRegisterRemoval)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            if (IgnoreUserTimingConstraints)
            {
                cmd.Append(" -x");
            }
            if (TrimUnconnectedSignals)
            {
                cmd.Append(" -u");
            }
            if (IgnoreKeepHierarchy)
            {
                cmd.Append(" -ignore_keep_hierarchy");
            }
#if false
            //FIXME: Which architectures allow for this property?
            cmd.Append(" -cm \"" + PropEnum.ToString(OptimizationStrategyCoverMode, EPropAssoc.MAP) + "\"");
#endif
            if (GenerateDetailedMapReport)
            {
                cmd.Append(" -detail");
            }
            cmd.Append(" -ir \"" + PropEnum.ToString(UseRLOCConstraints, EPropAssoc.MAP) + "\"");
            cmd.Append(" -pr \"" + PropEnum.ToString(PackIORegistersIntoIOBs, EPropAssoc.MAP) + "\"");
            if (MaximumCompression)
            {
                cmd.Append(" -c");
            }
            cmd.Append(" -lc \"" + PropEnum.ToString(LUTCombining, EPropAssoc.MAP) + "\"");
            if (MapSliceLogicIntoUnusedBlockRAMs)
            {
                cmd.Append(" -bp");
            }
            cmd.Append(" -power ");
            if (PowerReduction)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            if (PowerActivityFile != null)
            {
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            }
            cmd.Append(" -mt \"" + MultiThreading + "\"");
            if (Overwrite)
            {
                cmd.Append(" -w");
            }
            if (OutputFile != null)
            {
                cmd.Append(" -o \"" + OutputFile + "\"");
            }
            cmd.Append(" \"" + InputFile + "\"");
            if (PRFFile != null)
            {
                cmd.Append(" " + PRFFile);
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "map", cmd.ToString()));
        }
示例#17
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            cmd.Append("-ol \"" + PropEnum.ToString(OverallEffortLevel, EPropAssoc.PAR) + "\"");
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -pl \"" + PropEnum.ToString(PlacerEffortLevel, EPropAssoc.PAR) + "\"");
            cmd.Append(" -rl \"" + PropEnum.ToString(RouterEffortLevel, EPropAssoc.PAR) + "\"");
#endif
            if (ExtraEffortLevel != EExtraEffortLevel.None)
            {
                cmd.Append(" -xl \"" + PropEnum.ToString(ExtraEffortLevel, EPropAssoc.PAR) + "\"");
            }
            if (MultiThreading > 1)
            {
                cmd.Append(" -mt \"" + MultiThreading + "\"");
            }
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -t \"" + PlacerCostTableEntry + "\"");
#endif
            if (KeepCurrentPlacement)
            {
                cmd.Append(" -p");
            }
            if (ReentrantRoute)
            {
                cmd.Append(" -k");
            }
            if (DontRunRouter)
            {
                cmd.Append(" -r");
            }
            if (Overwrite)
            {
                cmd.Append(" -w");
            }
            if (SmartGuideFile != null)
            {
                cmd.Append(" -smartguide \"" + SmartGuideFile + "\"");
            }
            if (IgnoreUserTimingConstraintsAutoGen)
            {
                cmd.Append(" -x");
            }
            if (NoPadReport)
            {
                cmd.Append(" -nopad");
            }
            cmd.Append(" -power \"" + PropEnum.ToString(PowerReduction, EPropAssoc.PAR) + "\"");
            if (PowerActivityFile != null)
            {
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            if (IgnoreUserTimingConstraintsNoGen)
            {
                cmd.Append(" -ntd");
            }
            cmd.Append(" -intstyle silent");
            if (ISERepositoryFile != null)
            {
                cmd.Append(" -ise \"" + ISERepositoryFile + "\"");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            cmd.Append(" \"" + InputFile + "\"");
            cmd.Append(" \"" + OutputFile + "\"");
            if (PhysicalConstraintsFile != null)
            {
                cmd.Append(" \"" + PhysicalConstraintsFile + "\"");
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "par", cmd.ToString()));

            batch.Add(proj.ISEBinPath, proj.ProjectPath, "par", cmd.ToString());
        }
示例#18
0
        public static ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch, string scriptPath, string logPath)
        {
            string args = "-intstyle \"silent\" -ifn \"" + scriptPath + "\" -ofn \"" + logPath + "\"";

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "xst", args));
        }
        private void CreateUCF(XilinxProject proj)
        {
            string path = proj.AddFile(proj.ProjectName + ".ucf");
            var sw = new StreamWriter(path);
            foreach (var pin in PinList)
            {
                if (pin.AssociatedSignal == null)
                    continue;

                string indexExpr = "";
                if (pin.AssociatedIndex.Length > 0)
                    indexExpr = pin
                     .AssociatedIndex
                     .Select(i => "[" + i + "]")
                     .Aggregate((x, y) => x + y);

                var sd = (ISignalOrPortDescriptor)((IDescriptive)pin.AssociatedSignal).Descriptor;
                var pd = sd.AsSignalRef(SignalRef.EReferencedProperty.Instance)
                    .RelateToComponent(TopLevelComponent.Descriptor)
                    .Desc;

                sw.WriteLine("NET \"{0}{1}\" LOC = {2};",
                    pd.Name, indexExpr, pin.Name);
            }
            foreach (IPortDescriptor pd in TopLevelComponent.Descriptor.GetPorts())
            {
                var sd = pd.BoundSignal;
                if (sd == null)
                    continue;

                var csa = sd.QueryAttribute<ClockSpecAttribute>();
                if (csa == null)
                    continue;

                sw.WriteLine("TIMESPEC TS_{0} = PERIOD \"{1}\" {2} {3};",
                    pd.Name, pd.Name, csa.Period.Value, csa.Period.Unit);
                sw.WriteLine("NET \"{0}\" TNM_NET = \"{1}\";",
                    pd.Name, pd.Name);
            }
            sw.Close();
        }
示例#20
0
 private void CopyEDKFile(string libRoot, string fileName, string libName, XilinxProject xproj)
 {
     string path = xproj.AddFile(fileName);
     xproj.SetFileLibrary(fileName, libName);
     File.Copy(Path.Combine(libRoot, fileName), path, true);
 }
示例#21
0
        public static void RunTest()
        {
            DesignContext.Reset();

            TestDesign1 td1 = new TestDesign1(3, 4);
            FixedPointSettings.GlobalOverflowMode = EOverflowMode.Wrap;
            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(20 * TestDesign1.ClockPeriod);

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_TestDesign1", "TestDesign1");
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen); ;
            project.Save();

            DesignContext.Reset();
        }
示例#22
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();
            if (VerboseReport || ErrorReport)
            {
                if (VerboseReport)
                    cmd.Append("-v ");
                else
                    cmd.Append("-e ");
                cmd.Append(ReportLimit);
            }
            if (TimingReport)
            {
                cmd.Append(" -l " + TimingReportLimit);
            }
            if (ReportPathsPerEndpoint)
            {
                cmd.Append(" -n " + EndpointsLimit);
            }
            if (SpeedGrade > 0)
            {
                cmd.Append(" -s " + SpeedGrade);
            }
            if (AdvancedAnalysis)
            {
                cmd.Append(" -a");
            }
            if (ReportUnconstrainedPaths)
            {
                cmd.Append(" -u " + UnconstrainedPathsLimit);
            }
            if (ReportFile != null)
            {
                cmd.Append(" -o \"" + ReportFile + "\"");
            }
            if (StampFile != null)
            {
                cmd.Append(" -stamp \"" + StampFile + "\"");
            }
            if (TSIFile != null)
            {
                cmd.Append(" -tsi \"" + TSIFile + "\"");
            }
            if (XMLReportFile != null)
            {
                cmd.Append(" -xml \"" + XMLReportFile + "\"");
            }
            if (NoDatasheet)
            {
                cmd.Append(" -nodatasheet");
            }
            if (TimegroupsSection)
            {
                cmd.Append(" -timegroups");
            }
            if (ReportFastestPaths)
            {
                cmd.Append(" -fastpaths");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            if (TurnOffPackageFlightDelay)
            {
                cmd.Append(" -noflight");
            }
            cmd.Append(" -intstyle silent");
            if (ISEProjectFile != null)
            {
                cmd.Append(" -ise \"" + ISEProjectFile + "\"");
            }
            cmd.Append(" \"" + PhysicalDesignFile + "\"");
            if (PhysicalConstraintsFile != null)
                cmd.Append(" \"" + PhysicalConstraintsFile + "\"");
            if (UserConstraintsFile != null)
                cmd.Append(" -ucf \"" + UserConstraintsFile + "\"");

            return proj.AddToolToBatch(batch, proj.ProjectPath, "trce", cmd.ToString());
        }
示例#23
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            if (VerboseReport || ErrorReport)
            {
                if (VerboseReport)
                {
                    cmd.Append("-v ");
                }
                else
                {
                    cmd.Append("-e ");
                }
                cmd.Append(ReportLimit);
            }
            if (TimingReport)
            {
                cmd.Append(" -l " + TimingReportLimit);
            }
            if (ReportPathsPerEndpoint)
            {
                cmd.Append(" -n " + EndpointsLimit);
            }
            if (SpeedGrade > 0)
            {
                cmd.Append(" -s " + SpeedGrade);
            }
            if (AdvancedAnalysis)
            {
                cmd.Append(" -a");
            }
            if (ReportUnconstrainedPaths)
            {
                cmd.Append(" -u " + UnconstrainedPathsLimit);
            }
            if (ReportFile != null)
            {
                cmd.Append(" -o \"" + ReportFile + "\"");
            }
            if (StampFile != null)
            {
                cmd.Append(" -stamp \"" + StampFile + "\"");
            }
            if (TSIFile != null)
            {
                cmd.Append(" -tsi \"" + TSIFile + "\"");
            }
            if (XMLReportFile != null)
            {
                cmd.Append(" -xml \"" + XMLReportFile + "\"");
            }
            if (NoDatasheet)
            {
                cmd.Append(" -nodatasheet");
            }
            if (TimegroupsSection)
            {
                cmd.Append(" -timegroups");
            }
            if (ReportFastestPaths)
            {
                cmd.Append(" -fastpaths");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            if (TurnOffPackageFlightDelay)
            {
                cmd.Append(" -noflight");
            }
            cmd.Append(" -intstyle silent");
            if (ISEProjectFile != null)
            {
                cmd.Append(" -ise \"" + ISEProjectFile + "\"");
            }
            cmd.Append(" \"" + PhysicalDesignFile + "\"");
            if (PhysicalConstraintsFile != null)
            {
                cmd.Append(" \"" + PhysicalConstraintsFile + "\"");
            }
            if (UserConstraintsFile != null)
            {
                cmd.Append(" -ucf \"" + UserConstraintsFile + "\"");
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "trce", cmd.ToString()));
        }
示例#24
0
 /// <summary>
 /// Constructs a new instance.
 /// </summary>
 /// <param name="project">ISE project</param>
 public ToolFlow(XilinxProject project)
 {
     Project = project;
     XST = new XSTFlow();
     NGDBuild = new NGDBuildFlow();
     Map = new MAPFlow();
     PAR = new PARFlow();
     TRCE = new TRCEFlow();
 }
示例#25
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();
            if (PartName != null)
                cmd.Append("-p " + PartName);
            cmd.Append(" -ol \"" + PropEnum.ToString(PlacerEffort, EPropAssoc.MAP) + "\"");
            if (PlacerExtraEffort != EPlacerExtraEffortMap.None)
                throw new NotImplementedException();
            cmd.Append(" -t " + StartingPlacerCostTable);
            cmd.Append(" -logic_opt ");
            if (CombinatorialLogicOptimization)
                cmd.Append("\"on\"");
            else
                cmd.Append("\"off\"");
            cmd.Append(" -register_duplication ");
            cmd.Append("\"" + PropEnum.ToString(RegisterDuplication, EPropAssoc.MAP) + "\"");
            cmd.Append(" -global_opt \"" + PropEnum.ToString(GlobalOptimization, EPropAssoc.MAP) + "\"");
            cmd.Append(" -equivalent_register_removal ");
            if (EquivalentRegisterRemoval)
                cmd.Append("\"on\"");
            else
                cmd.Append("\"off\"");
            if (IgnoreUserTimingConstraints)
                cmd.Append(" -x");
            if (TrimUnconnectedSignals)
                cmd.Append(" -u");
            if (IgnoreKeepHierarchy)
                cmd.Append(" -ignore_keep_hierarchy");
#if false
            //FIXME: Which architectures allow for this property?
            cmd.Append(" -cm \"" + PropEnum.ToString(OptimizationStrategyCoverMode, EPropAssoc.MAP) + "\"");
#endif
            if (GenerateDetailedMapReport)
                cmd.Append(" -detail");
            cmd.Append(" -ir \"" + PropEnum.ToString(UseRLOCConstraints, EPropAssoc.MAP) + "\"");
            cmd.Append(" -pr \"" + PropEnum.ToString(PackIORegistersIntoIOBs, EPropAssoc.MAP) + "\"");
            if (MaximumCompression)
                cmd.Append(" -c");
            cmd.Append(" -lc \"" + PropEnum.ToString(LUTCombining, EPropAssoc.MAP) + "\"");
            if (MapSliceLogicIntoUnusedBlockRAMs)
                cmd.Append(" -bp");
            cmd.Append(" -power ");
            if (PowerReduction)
                cmd.Append("\"on\"");
            else
                cmd.Append("\"off\"");
            if (PowerActivityFile != null)
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            cmd.Append(" -mt \"" + MultiThreading + "\"");
            if (Overwrite)
                cmd.Append(" -w");
            if (OutputFile != null)
                cmd.Append(" -o \"" + OutputFile + "\"");
            cmd.Append(" \"" + InputFile + "\"");
            if (PRFFile != null)
                cmd.Append(" " + PRFFile);

            return proj.AddToolToBatch(batch, proj.ProjectPath, "map", cmd.ToString());
        }
        /// <summary>
        /// Synthesizes the design.
        /// </summary>
        /// <param name="destPath">target path which will contain the generated files</param>
        /// <param name="designName">name of the design</param>
        /// <param name="info">ISE information</param>
        /// <param name="twinProject">optional twin project</param>
        /// <param name="step">what stages of the overall flow to execute</param>
        /// <returns>the generated ISE project</returns>
        public XilinxProject Synthesize(string destPath, string designName, ISEInfo info,
            IProject twinProject = null, EFlowStep step = EFlowStep.HDLGenAndIPCores)
        {
            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(destPath, designName)
            {
                TwinProject = twinProject
            };

            project.ISEVersion = info.VersionTag;
            if (info.Path == null)
                project.SkipIPCoreSynthesis = true;
            else
                project.ISEBinPath = info.Path;

            project.PutProperty(EXilinxProjectProperties.DeviceFamily, Device.GetFamily());
            project.PutProperty(EXilinxProjectProperties.Device, Device);
            project.PutProperty(EXilinxProjectProperties.Package, Package);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, SpeedGrade);
            project.SetVHDLProfile();
            if (!step.HasFlag(EFlowStep.IPCores))
                project.SkipIPCoreSynthesis = true;
            project.TopLevelComponent = TopLevelComponent.Descriptor;
            CreateUCF(project);

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(GetComponentSet(), codeGen);
            project.Save();
            if (step.HasFlag(EFlowStep.XST) ||
                step.HasFlag(EFlowStep.NGDBuild) ||
                step.HasFlag(EFlowStep.Map) ||
                step.HasFlag(EFlowStep.PAR) ||
                step.HasFlag(EFlowStep.TRCE))
            {
                var flow = project.ConfigureFlow(TopLevelComponent);
                flow.Start(step);
            }
            return project;
        }
示例#27
0
 public ProcessPool.Tool SaveToXSTScriptAndAddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch, string scriptPath, string logPath)
 {
     SaveToXSTScript(scriptPath);
     return(AddToBatch(proj, batch, scriptPath, logPath));
 }
示例#28
0
            public static void Run()
            {
                SimpleCounterTestbench tb = new SimpleCounterTestbench();
                DesignContext.Instance.Elaborate();

                ///remember start time
                Start = System.DateTime.Now.Ticks;

                DesignContext.Instance.Simulate(Cycles * SimpleCounterTestbench.ClockPeriod);

#if RUNANALYSIS
                // Now convert the design to VHDL and embed it into a Xilinx ISE project
                XilinxProject project = new XilinxProject(@".\hdl_output", "SimpleCounter");
                project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                VHDLGenerator codeGen = new VHDLGenerator();
                SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
                project.Save();
#endif
            }
示例#29
0
        public ProcessPool.ToolBatch Execute(XilinxProject proj, string xcoPath, string projPath)
        {
            if (proj.SkipIPCoreSynthesis)
                return null;

            //see: http://www.xilinx.com/itp/xilinx6/books/docs/cgn/cgn.pdf
            projPath = Path.GetFullPath(projPath);
            xcoPath = Path.GetFullPath(xcoPath);
            string dir = Path.GetDirectoryName(projPath);
            bool madeSubst = false;
            char drivel = default(char);
            string drive = null;
            try
            {
                var batch = ProcessPool.Instance.CreateBatch();
                if (projPath.Length >= 160)
                {
                    drivel = SubstManager.Instance.AllocateDrive();
                    drive = drivel + ":";
                    batch.Add("subst ", drive + " " + dir);
                    dir = drive + "\\";
                    projPath = dir + Path.GetFileName(projPath);
                    madeSubst = true;
                }
                string arguments = "-b \"" + xcoPath + "\" -p \"" + projPath + "\"";
                proj.AddToolToBatch(batch, dir, "coregen", arguments);
                if (madeSubst)
                {
                    batch.Add("subst", drive + " /D");
                }
                batch.Start();
                return batch;
            }
            finally
            {
                if (drivel != default(char))
                    SubstManager.Instance.ReleaseDrive(drivel);
            }
        }
示例#30
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();
            cmd.Append("-ol \"" + PropEnum.ToString(OverallEffortLevel, EPropAssoc.PAR) + "\"");
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -pl \"" + PropEnum.ToString(PlacerEffortLevel, EPropAssoc.PAR) + "\"");
            cmd.Append(" -rl \"" + PropEnum.ToString(RouterEffortLevel, EPropAssoc.PAR) + "\"");
#endif
            if (ExtraEffortLevel != EExtraEffortLevel.None)
                cmd.Append(" -xl \"" + PropEnum.ToString(ExtraEffortLevel, EPropAssoc.PAR) + "\"");
            if (MultiThreading > 1)
                cmd.Append(" -mt \"" + MultiThreading + "\"");
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -t \"" + PlacerCostTableEntry + "\"");
#endif
            if (KeepCurrentPlacement)
                cmd.Append(" -p");
            if (ReentrantRoute)
                cmd.Append(" -k");
            if (DontRunRouter)
                cmd.Append(" -r");
            if (Overwrite)
                cmd.Append(" -w");
            if (SmartGuideFile != null)
                cmd.Append(" -smartguide \"" + SmartGuideFile + "\"");
            if (IgnoreUserTimingConstraintsAutoGen)
                cmd.Append(" -x");
            if (NoPadReport)
                cmd.Append(" -nopad");
            cmd.Append(" -power \"" + PropEnum.ToString(PowerReduction, EPropAssoc.PAR) + "\"");
            if (PowerActivityFile != null)
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            if (FilterFile != null)
                cmd.Append(" -filter \"" + FilterFile + "\"");
            if (IgnoreUserTimingConstraintsNoGen)
                cmd.Append(" -ntd");
            cmd.Append(" -intstyle silent");
            if (ISERepositoryFile != null)
                cmd.Append(" -ise \"" + ISERepositoryFile + "\"");
            if (FilterFile != null)
                cmd.Append(" -filter \"" + FilterFile + "\"");
            cmd.Append(" \"" + InputFile + "\"");
            cmd.Append(" \"" + OutputFile + "\"");
            if (PhysicalConstraintsFile != null)
                cmd.Append(" \"" + PhysicalConstraintsFile + "\"");

            return proj.AddToolToBatch(batch, proj.ProjectPath, "par", cmd.ToString());
            batch.Add(proj.ISEBinPath, proj.ProjectPath, "par", cmd.ToString());
        }
示例#31
0
            static void Main(string[] args)
            {
                Tesbernch_Multiplier tb = new Tesbernch_Multiplier();
                DesignContext.Instance.Elaborate();
                DesignContext.Instance.Simulate(100 * Tesbernch_Multiplier.ClockPeriod);
                //DesignContext.Instance.Simulate(10 * (testbench_XilinxMultiplier_.DataWidth + 3) * testbench_XilinxMultiplier_.ClockPeriod);

                // Now convert the design to VHDL and embed it into a Xilinx ISE project
                XilinxProject project = new XilinxProject(@".\hdl_output", "XilinxMultiplier");
                project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
                project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
                project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
                project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
                project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

                VHDLGenerator codeGen = new VHDLGenerator();
                SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
                project.Save();
            }
示例#32
0
 private void CopyEDKFiles(string ipRoot, string libName, XilinxProject xproj)
 {
     string libRoot = Path.Combine(ipRoot, libName, "hdl", "vhdl");
     string[] files = Directory.GetFiles(libRoot, "*.vhd");
     foreach (string filePath in files)
     {
         string file = Path.GetFileName(filePath);
         CopyEDKFile(libRoot, file, libName, xproj);
     }
 }
示例#33
0
            static void Main(string[] args)
            {
                ///default values
                int cycles = 100;

                ///elaborate
                SimpleCounterTestbench tb = new SimpleCounterTestbench();
                DesignContext.Instance.Elaborate();

                ///print out config
                Console.WriteLine("#cycles: " + cycles);

                ///simulate
                DesignContext.Instance.Simulate(cycles * SimpleCounterTestbench.ClockPeriod);

                ///notify completion
                Console.WriteLine("Done.  [ #cycles = " + cycles + " ]");


#if RUNANALYSIS
            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_output", "SimpleCounter");
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(codeGen);
            project.Save();

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project_SC = new XilinxProject(@".\SystemC_output", "SimpleCounter");
            project_SC.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Spartan3);
            project_SC.PutProperty(EXilinxProjectProperties.Device, EDevice.xc3s1500l);
            project_SC.PutProperty(EXilinxProjectProperties.Package, EPackage.fg676);
            project_SC.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._4);
            project_SC.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);

            SystemCGenerator codeGen_SC = new SystemCGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project_SC).Synthesize(codeGen_SC);
            project_SC.Save();
#endif
            }
示例#34
0
        public static void RunTest()
        {
            DesignContext.Reset();

            TestHLS_FPU_Testbench tb = new TestHLS_FPU_Testbench();

            DesignContext.Instance.Elaborate();
            DesignContext.Instance.Simulate(new Time(3.0, ETimeUnit.us));
            DesignContext.Stop();
            XilinxIntegration.RegisterIPCores(DesignContext.Instance.Descriptor);
            DesignContext.Instance.CompleteAnalysis();

            // Now convert the design to VHDL and embed it into a Xilinx ISE project
            XilinxProject project = new XilinxProject(@".\hdl_out_TestHLS_FPU", "TestHLS_FPU");
            project.PutProperty(EXilinxProjectProperties.DeviceFamily, EDeviceFamily.Virtex6);
            project.PutProperty(EXilinxProjectProperties.Device, EDevice.xc6vlx240t);
            project.PutProperty(EXilinxProjectProperties.Package, EPackage.ff1156);
            project.PutProperty(EXilinxProjectProperties.SpeedGrade, ESpeedGrade._2);
            project.PutProperty(EXilinxProjectProperties.PreferredLanguage, EHDL.VHDL);
            project.SetVHDLProfile();

            VHDLGenerator codeGen = new VHDLGenerator();
            SynthesisEngine.Create(DesignContext.Instance, project).Synthesize(tb, codeGen);
            project.Save();
            var eng = SynthesisEngine.Create(
                DesignContext.Instance, new DocumentationProject(@".\hdl_out_TestHLS_FPU\doc"));
        }
示例#35
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            if (PartName != null)
            {
                cmd.Append(" -p " + PartName);
            }
            foreach (var dir in SearchDirs)
            {
                cmd.Append(" -sd " + dir);
            }
            foreach (var lib in Libraries)
            {
                cmd.Append(" -l " + lib);
            }
            if (RulesFile != null)
            {
                cmd.Append(" -ur " + RulesFile);
            }
            if (IntermediateDir != null)
            {
                cmd.Append(" -dd " + IntermediateDir);
            }
            cmd.Append(" -nt ");
            switch (NGOGeneration)
            {
            case ENGOGeneration.Off:
                cmd.Append(" off");
                break;

            case ENGOGeneration.On:
                cmd.Append(" on");
                break;

            case ENGOGeneration.Timestamp:
                cmd.Append(" timestamp");
                break;
            }
            if (UserConstraintsFile != null)
            {
                cmd.Append(" -uc " + UserConstraintsFile);
            }
            if (IgnoreLocationConstraints)
            {
                cmd.Append(" -r");
            }
            if (AllowUnmatchedLOCConstraints)
            {
                cmd.Append(" -aul");
            }
            if (AllowUnmatchedTimingGroupConstraints)
            {
                cmd.Append(" -aut");
            }
            if (InferPadComponents)
            {
                cmd.Append(" -a");
            }
            if (IgnoreDefaultUCF)
            {
                cmd.Append(" -i");
            }
            if (AllowUnexpandedBlocks)
            {
                cmd.Append(" -u");
            }
            if (InsertKeepHierarchy)
            {
                cmd.Append(" -insert_keep_hierarchy");
            }
            if (BMMFile != null)
            {
                cmd.Append(" -bm " + BMMFile);
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter " + FilterFile);
            }
            cmd.Append(" -intstyle silent");
            if (Quiet)
            {
                cmd.Append(" -quiet");
            }
            if (Verbose)
            {
                cmd.Append(" -verbose");
            }
            cmd.Append(" " + DesignName);
            if (NGDFile != null)
            {
                cmd.Append(" " + NGDFile);
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "ngdbuild", cmd.ToString()));
        }