The section provides more detailed information on how to deploy hardware with Sabana
Build, Deploy, Run
The sabana platform allow developers to quickly package and ship hardware code to FPGAs. There are three majors steps involved:
Building images from hardware source code (Verilog/C++)
Deploying instances from these images
Running programs on top of deployed instances
You probably saw this pattern in the Quickstart; this was intentional. In the following sections we will go in more depth on each of these three processes for different languages and flows.
We are eager to support multiple hardware languages and flows. If your favorite language/flow is not here yet, please let us know in our Discord community
Overall the process of creating a new image can be summarized as follows:
Create a new project
Choose the interfaces required by the project
Integrate your code into the new project
You can also think of this step as connecting your hardware to the image shell
Push the project to Sabana for it to be built into an image
Images in Sabana are identified using a triple of user, image name, and a tag.
This triple will typically look like this:
This triple allows you to:
Share your image with others
Use images created by others
Use or keep different versions of a given image
Once an instance has been deployed the platform will return a URL. This URL will effectively be the handler that can be used to interact with the instance. There are two ways to deploy instances in Sabana.
This is useful when one wants to keep an instance running, however a downside of this approach is that one has to remember to terminate the instance, otherwise you may run out of deploy minutes from your allowance.
The most convenient way to deploy images is to use the Sabana Python SDK
Every instance is comprised by two elements:
The hardware module is in essence your hardware, the one described by the image. This hardware is connected to the instance host, for the purposes of controlling and communicating with the hardware.
The Python SDK is a collection of classes that allow you to interact with Sabana in a programmatic way, specially for the purpose of deploying instances and running programs.