예제 #1
0
        private ProcessPool.ToolBatch CreateBatch(EFlowStep steps)
        {
            var bat = ProcessPool.Instance.CreateBatch();

            if (steps.HasFlag(EFlowStep.XST))
            {
                XST.SaveToXSTScriptAndAddToBatch(Project, bat, XSTScriptPath, XSTLogPath);
            }
            if (steps.HasFlag(EFlowStep.NGDBuild))
            {
                NGDBuild.AddToBatch(Project, bat);
            }
            if (steps.HasFlag(EFlowStep.Map))
            {
                Map.AddToBatch(Project, bat);
            }
            if (steps.HasFlag(EFlowStep.PAR))
            {
                PAR.AddToBatch(Project, bat);
            }
            if (steps.HasFlag(EFlowStep.TRCE))
            {
                TRCE.AddToBatch(Project, bat);
            }
            return(bat);
        }
예제 #2
0
        /// <summary>
        /// Queues the flow in the process pool.
        /// </summary>
        /// <param name="steps">flow items to execute</param>
        /// <returns>the created batch job</returns>
        public ProcessPool.ToolBatch Start(EFlowStep steps)
        {
            var bat = CreateBatch(steps);

            Project.AwaitRunningToolsToFinish();
            bat.Start();
            Project.AddRunningTool(bat);
            return(bat);
        }
예제 #3
0
 public void SetFlowDelivery(bool hasCrossDocking)
 {
     if (hasCrossDocking)
     {
         this.EFlowStep = EFlowStep.CrossDocking;
     }
     else
     {
         this.EFlowStep = EFlowStep.Delivered;
     }
 }
예제 #4
0
        /// <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="iseVersion">ISE version to generate for</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, EISEVersion iseVersion,
                                        IProject twinProject = null, EFlowStep step = EFlowStep.HDLGenAndIPCores)
        {
            ISEInfo info = ISEDetector.LocateISEByVersion(iseVersion);

            if (info == null)
            {
                info = new ISEInfo()
                {
                    VersionTag = iseVersion
                }
            }
            ;
            return(Synthesize(destPath, designName, info, twinProject, step));
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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="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, IProject twinProject = null, EFlowStep step = EFlowStep.IPCores)
        {
            EISEVersion iseVersion = EISEVersion._11_2;
            ISEInfo     info       = ISEDetector.DetectMostRecentISEInstallation();

            if (info != null)
            {
                iseVersion = info.VersionTag;
            }
            return(Synthesize(destPath, designName, iseVersion, twinProject, step));
        }
예제 #7
0
 internal void SetFlowCrossDocking()
 {
     this.EFlowStep = EFlowStep.CrossDocking;
 }
 /// <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="iseVersion">ISE version to generate for</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, EISEVersion iseVersion, 
     IProject twinProject = null, EFlowStep step = EFlowStep.HDLGenAndIPCores)
 {
     ISEInfo info = ISEDetector.LocateISEByVersion(iseVersion);
     if (info == null)
         info = new ISEInfo() { VersionTag = iseVersion };
     return Synthesize(destPath, designName, info, twinProject, step);
 }
예제 #9
0
 public void SetInBox()
 {
     this.EFlowStep = EFlowStep.InBox;
 }
예제 #10
0
 public void SetAvailable()
 {
     this.EFlowStep = EFlowStep.Available;
 }
예제 #11
0
 public void SetFlowExpedition()
 {
     this.EFlowStep = EFlowStep.Expedition;
 }
예제 #12
0
 public void SetFlowDelivered()
 {
     this.EFlowStep = EFlowStep.Delivered;
 }
예제 #13
0
 private FlowStep()
 {
     this.EFlowStep = EFlowStep.Create;
 }
 /// <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="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, IProject twinProject = null, EFlowStep step = EFlowStep.IPCores)
 {
     EISEVersion iseVersion = EISEVersion._11_2;
     ISEInfo info = ISEDetector.DetectMostRecentISEInstallation();
     if (info != null)
         iseVersion = info.VersionTag;
     return Synthesize(destPath, designName, iseVersion, twinProject, step);
 }
예제 #15
0
 private ProcessPool.ToolBatch CreateBatch(EFlowStep steps)
 {
     var bat = ProcessPool.Instance.CreateBatch();
     if (steps.HasFlag(EFlowStep.XST))
         XST.SaveToXSTScriptAndAddToBatch(Project, bat, XSTScriptPath, XSTLogPath);
     if (steps.HasFlag(EFlowStep.NGDBuild))
         NGDBuild.AddToBatch(Project, bat);
     if (steps.HasFlag(EFlowStep.Map))
         Map.AddToBatch(Project, bat);
     if (steps.HasFlag(EFlowStep.PAR))
         PAR.AddToBatch(Project, bat);
     if (steps.HasFlag(EFlowStep.TRCE))
         TRCE.AddToBatch(Project, bat);
     return bat;
 }
예제 #16
0
 public void SetInStock()
 {
     this.EFlowStep = EFlowStep.InStock;
 }
예제 #17
0
 /// <summary>
 /// Queues the flow in the process pool.
 /// </summary>
 /// <param name="steps">flow items to execute</param>
 /// <returns>the created batch job</returns>
 public ProcessPool.ToolBatch Start(EFlowStep steps)
 {
     var bat = CreateBatch(steps);
     Project.AwaitRunningToolsToFinish();
     bat.Start();
     Project.AddRunningTool(bat);
     return bat;
 }
        /// <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;
        }