Beispiel #1
0
        public static BuildResult BuildProject(string workingDirectory, string projectFilePath, string topModule)
        {
            string fusePath = XilinxHelper.GetXilinxToolPath("fuse.exe");

            if (string.IsNullOrEmpty(fusePath))
            {
                fusePath = XilinxHelper.GetXilinxToolPath("fuse");
                if (string.IsNullOrEmpty(fusePath))
                {
                    throw new Exception("Unable to find the fuse Executable");
                }
            }

            // Create prj file on disk
            string projectExecutablePath = PathHelper.Combine(workingDirectory, "x.exe");

            List <string> arguments = new List <string>();

            arguments.Add(string.Format("--prj \"{0}\"", projectFilePath));
            //arguments.Add(string.Format("-o \"{0}\"", projectExecutablePath));
            arguments.Add(topModule);

            ProcessHelper.ProcessExecutionResult result = XilinxProcess.ExecuteProcess(workingDirectory, fusePath, arguments);

            BuildResult buildResult = new BuildResult();

            buildResult.BuildLog         = result.StandardOutput + "\n\n\n" + result.StandardError;
            buildResult.WorkingDirectory = workingDirectory;
            buildResult.ExecutableFile   = projectExecutablePath;
            buildResult.Built            = true;

            return(buildResult);
        }
        public static MemoryStream GenerateMachineCode(string workingDirectory, string asmFile)
        {
            Logger.Instance.WriteVerbose("Generating Machine code from assembly file using avr-gcc");
            ProcessHelper.ProcessExecutionResult result = ProcessHelper.ExecuteProcess(workingDirectory,
                                                                                       "avr-gcc", "-x assembler-with-cpp \"" + Path.GetFullPath(asmFile) + "\" -nostartfiles -nodefaultlibs");

            if (!File.Exists(PathHelper.Combine(workingDirectory, "a.out")))
            {
                Logger.Instance.WriteError(result.StandardError);
            }

            Logger.Instance.WriteVerbose("Generating binary output from elf");
            ProcessHelper.ExecuteProcess(workingDirectory, "avr-objcopy", "-O binary a.out a.bin");

            Logger.Instance.WriteVerbose("Reading in binary machine code");
            MemoryStream stream = new MemoryStream();

            using (FileStream reader = new FileStream(PathHelper.Combine(workingDirectory, "a.bin"), FileMode.Open, FileAccess.Read))
            {
                int b = 0;
                while ((b = reader.ReadByte()) != -1)
                {
                    stream.WriteByte((byte)b);
                }
            }

            return(stream);
        }
Beispiel #3
0
        public static List <string> LoadFamilyList()
        {
            List <string> families = new List <string>();

            ProcessHelper.ProcessExecutionResult result = XilinxProcess.ExecuteProcess(Environment.CurrentDirectory, "partgen", null);

            bool startedList = false;

            using (StringReader reader = new StringReader(result.StandardOutput))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (!startedList)
                    {
                        if (line.EndsWith("Valid architectures are:", StringComparison.InvariantCultureIgnoreCase))
                        {
                            startedList = true;
                        }
                    }
                    else
                    {
                        // Successive lines are now device families
                        string cleanup = line.Trim();
                        if (!string.IsNullOrEmpty(cleanup))
                        {
                            families.Add(cleanup);
                        }
                    }
                }
            }

            return(families);
        }
Beispiel #4
0
        public static ProcessHelper.ProcessExecutionResult ExecuteProcess(string workingDirectory, string tool, List <string> arguments)
        {
            ProcessHelper.ProcessExecutionResult result = new ProcessHelper.ProcessExecutionResult();
            using (XilinxProcess process = new XilinxProcess(tool, arguments))
            {
                StringProcessListener listener = new StringProcessListener();
                process.Listeners.Add(listener);
                process.WorkingDirectory = workingDirectory;

                process.Start();
                process.WaitForExit();

                result.StandardError  = listener.ErrorOutput;
                result.StandardOutput = listener.Output;
            }
            return(result);
        }
Beispiel #5
0
        public static DeviceFamily LoadFamily(DeviceManufacture manufacture, string familyName)
        {
            DeviceFamily family = null;

            List <string> arguments = new List <string>();

            arguments.Add("-intstyle silent");
            arguments.Add("-arch " + familyName);
            ProcessHelper.ProcessExecutionResult result = XilinxProcess.ExecuteProcess(Environment.CurrentDirectory, "partgen", arguments);

            bool   startedList    = false;
            string realFamilyName = familyName;
            string defaultSpeeds  = null;
            Device currentDevice  = null;

            using (StringReader reader = new StringReader(result.StandardOutput))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (!startedList)
                    {
                        startedList    = true;
                        realFamilyName = line.Trim();                         // Picked up name
                        family         = new DeviceFamily(manufacture, realFamilyName, familyName);
                    }
                    else if (family != null)
                    {
                        // The first line i the part + speeds, lines afterwards are packages
                        string cleanup = line.Trim();
                        if (line.StartsWith("    "))
                        {
                            if (currentDevice != null)
                            {
                                // Device
                                string[] splitUp = cleanup.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
                                if (splitUp.Length >= 1 && !string.IsNullOrEmpty(splitUp[0]))
                                {
                                    // Package specifier
                                    Logger.Instance.WriteDebug("Create/Find Package '{0}'", splitUp[0]);
                                    DevicePackage partPackage = family.CreatePackage(splitUp[0]);
                                    Logger.Instance.WriteDebug("Create/Find part with package '{0}'", partPackage.Name);
                                    DevicePart part = currentDevice.CreatePart(partPackage);

                                    // Can have an exclusive set of speeds
                                    ParseSpeedDetails(family, part, (splitUp.Length > 1) ? splitUp[1] : defaultSpeeds);
                                }
                            }
                        }
                        else
                        {
                            string[] splitUp = cleanup.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
                            if (splitUp.Length >= 3 && !string.IsNullOrEmpty(splitUp[0]))
                            {
                                Logger.Instance.WriteDebug("Create/Find Device '{0}'", splitUp[0]);
                                currentDevice = family.CreateDevice(splitUp[0]);
                                defaultSpeeds = splitUp[2];                                 // Set default speed for devices
                            }
                        }
                    }
                }
            }
            return(family);
        }
Beispiel #6
0
        public static ProcessHelper.ProcessExecutionResult ExecuteProcess(string workingDirectory, string tool, List<string> arguments)
        {
            ProcessHelper.ProcessExecutionResult result = new ProcessHelper.ProcessExecutionResult();
            using (XilinxProcess process = new XilinxProcess(tool, arguments))
            {
                StringProcessListener listener = new StringProcessListener();
                process.Listeners.Add(listener);
                process.WorkingDirectory = workingDirectory;

                process.Start();
                process.WaitForExit();

                result.StandardError = listener.ErrorOutput;
                result.StandardOutput = listener.Output;
            }
            return result;
        }