Skip to content

Directory Structure

The project is organized as a monolithic repository. Both hardware and software are co-located. The top-level ist structured as follows:

  • docs: Documentation of the generator and software. Contains additional user guides.
  • hw: All hardware components.
  • sw: Hardware independent software, libraries, runtimes etc.
  • util: Utility and helper scripts.


  • ip: Blocks which are instantiated in the design e.g., they are not stand-alone.
    • src: RTL sources
    • test: Test-benches
  • vendor: "Third-party" components which are updated using the vendor script. They are not (primarily) developed as part of this repository.
  • system: Specific systems built around Snitch components.
  • snitch-cluster: Single cluster with a minimal environment to run meaningful applications.


  • vendor: Software components which come with their own license requirements from third parties.

Vendored Source Directories

This repo is organized in a monolithic fashion, i.e., all resources are checked in, we do not use git submodules or other ways of obtaining (HW) source files. But not all IPs are developed with this repository. We rely on the vendor tool to copy data from other repositories into the tree. We keep separate patches if changes are necessary. Ideally, patches should be upstreamed to the originating repository once things stabilize.

Creating Patches

If you need to make changes to one of the IPs in the hw/vendor subdirectory you need to obtain a set of patches which should be applied. CI will check whether there are any changes without patches. Upon obtaining the sources the vendor tool can automatically apply the patches for you.

To create patches you first need to commit the changes. Then, in the current directory create a set of patches (it will create a file for each commit) for the commit (range) you are interested:

git format-patch --relative -o <path/to/patch/folder> HEAD^1

In the vendor file specify the path to the patches:

patch_dir: "<path/to/patch/folder>"

Updating Sources

The vendor tool supports updating the sources. If you are in a clean directory with no changes (you can git stash to achieve this), the vendor tool can automatically commit the updates (--commit). For the common_cells for example:

./util/ hw/vendor/pulp_platform_common_cells.vendor.hjson --update --commit