This page describes the concept of Sabana Shells
Sabana shells are the point of entry for your hardware into a Sabana project.
They have two main purposes:
  • They provide interfaces used to connect the hardware modules
  • They implement the communication protocols necessary to transmit information between hardware modules and their instance hosts
There are different types of shells in Sabana to give you the interfaces that best adapt to your hardware.
Some shells have configurable interfaces, this allows you to customize them to the requirements of your hardware
These are the main types of shells available today in Sabana:
  • Verilog
    • Ez: A collection of shells with easy interfaces
    • AXI4-Lite: Provides an AXI4-Lite slave interface
  • C++
The Ez shells are our favorite ones. They expose interfaces with simple protocols useful for the majority of cases.
Shells expose a given bus interface but also contain resources, i.e. RAMs, for them to be used by your hardware

Controlling Ez and C++ shells

Ez and C++ shells in Sabana expose a control register that allows the user to control and manage the underlying hardware processor.
This control register is located in offset 0x0 of the MMIO memory space of these shells.
With the control register you can:
  • Signal that all inputs have been provided and that processing should start. You do this by writing 1.
  • Check that processing has finished and that results and outputs are stable to be read out. You do this by waiting for the value 0xE to be read from the register.
This control interface is not implemented in the AXI4 shells