How does it Work?

This section is an overview of how our service works. To take a more in-depth look you can work through our tutorials, starting here: Tutorial 1 – Learning the workflow.

System architectureYou can upload your Go code from anywhere to simulate, build and deploy to remote FPGAs using our cloud management system. FPGAs are provided by AWS EC2 F1 instances, which gives access to powerful 16 nm Xilinx UltraScale Plus FPGAs in the cloud.

ToolingAccess the service with our tool – reco. Use reco to upload and test your code, manage builds and deploy to a remote FPGA.reco is a simple tool with several intuitive commands, we’ll look at some of these in the relevant sections below – commands are described in bullet points. For a full list see, Tool Usage Reference.Within reco you can enter reco help at any time to see a list of commands. Further information about each command can be viewed using reco help <command>.

Programs and programs have a simple structure: a kernel (FPGA) and a command (host CPU). Both are coded in Go:When using reco to simulate, build and deploy your programs you will work within a project. You can view builds and deployments per project, which is really useful when working on several work-streams at the same time with several builds and deployments for each.NoteYou must create at least one project but beyond this you can structure your work however you wish. When running testbuild or run, if you do not specify a project, the results will be associated with the currently active project.create-project is used to create a new projectprojects displays a list of all active projects for your accountset-project allows you to set a project to associate with future builds

WorkflowLet’s take a look at the workflow, from coding to deployment:CodeAll the code you write will be in Go. You can create Go files in your workspace, following our program structure, and edit with your chosen editor. We use a streamlined subset of the Go language which is constantly being added to – any new additions will be flagged up in our Release Notes.CheckOnce you have written some code you can perform a local quick-check to make sure it’s compatible with our compiler. If there are any syntax errors they will be flagged up here, followed by Error: error(s) found while checking <filename.go>. If everything is fine you will see no output.reco check locally type checks your kernel code.SimulateIt’s a good idea to test your code using our hardware simulator. Any errors will be highlighted and it’s considerably quicker than creating a build so will save you time during the development process.reco test run <my_cmd> tests your code on our hardware simulator.GraphOur compiler takes your Go code through several stages to get it into a format suitable for flashing an FPGA. First, it’s translated into a language called Teak , then, using the Teak output we can generate dataflow graphs. Using the graph command you can generate a dataflow graph for your program at any time, allowing you to analyze and optimize its performance.NoteThe ability to generate graphs is a temporary feature during our alpha development stage. Due to the complexity of the output we suggest you share your graphs with us in the ‘early access’ section of our forum, where our engineers can assist you to optimize your code. We’re looking forward to see how you get on!reco graph gen generates a dataflow graph from the program in your current directory.reco graph list lists all your graphs along with their unique IDs.reco graph open <graph_ID> lets you view any graph in your default default PDF viewer.BuildWhen your program is complete and tested it needs to be built. Our compiler will check compatibility and convert it into a bit-stream format suitable for deploying to an FPGA.Build TimesBuild times are currently in the region of 4 hours. This is longer than we would like and is partly due to underlying silicon vender tools, which we are currently working to address. Although the build time is relatively long, it is not something you will have to do very often during your program development – you will mostly use our hardware simulator, which takes minutes rather than hours.reco build run uploads the code from your current directory to the service. Building will automatically start once the upload has completed. Your Go code will be compiled and optimized to run on an FPGA.reco build list lists all builds for the current project along with their statuses. Each build is date-stamped and given a unique ID so you can always make sure you’re using the correct build when working on large and complex projects.DeployOnce your build is complete you can deploy it to an FPGA and run your command on the host CPU.reco deployment run <build_ID> <cmd> will deploy your build to the FPGA and run your chosen command on the host CPU. Each program consists of two main.go files, one for the FPGA and the other to run on the host CPU. The host code, located in the program’s cmddirectory, works together with the FPGA to carry out the required tasks.

Leave a comment

Your email address will not be published. Required fields are marked *