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 IP components.
  • sw: Hardware independent software, libraries, runtimes etc.
  • target: Contains the testbench setup, cluster configuration specific hardware and software, libraries, runtimes etc.
  • util: Utility and helper scripts.

Hardware hw Directory

The hw directory contains various HW IPs which are instantiated in the Snitch Cluster design e.g., they are not stand-alone. Some of the IPs have stand-alone test benches. All IPs inside the hw directory are structured as follows:

  • <ip_name>: each directory contains one IP that is instantiated in the cluster design, e.g., they are not stand-alone.
  • doc: documentation if existing
  • src: RTL sources
  • test: Standalone testbenches if existing
  • util: Helper scripts to run standalone test benches if existing

Software sw Directory

This subdirectory contains the various bits and pieces of software for the Snitch ecosystem.

Libraries

  • applications: Contains applications and kernels, mostly NN-related with SW testbenches for performance profiling.
  • cmake: Bits and pieces for integration with the CMake build system.
  • snRuntime: The fundamental, bare-metal runtime for Snitch systems. Exposes a minimal API to manage execution of code across the available cores and clusters, query information about a thread's context, and to coordinate and exchange data with other threads. Hardware configuration dependent implementations of the snRuntime can be found, e.g., under target/snitch_cluster/sw/snRuntime.
  • snBLAS: A minimal reference implementation of the basic linear algebra subprograms that demonstrates the use of Snitch and its extensions.

Tests

  • benchmark: Benchmarking executables that evaluate the performance characteristics of a system.
  • test: Unit tests for various aspects of a system, including the instruction set extensions. These complement the library-specific unit tests that live within the library directories proper.

Third-Party

The deps directory contains third-party tools that we inline into this repository for ease of use.

  • deps/riscv-opcodes: Utilities to manage instruction encodings and generate functions and data structurse for parsing and representation in various languages.
  • deps/printf: A printf / sprintf implementation for embedded systems.

Target target Directory

This subdirectory contains the supported systems and their simulation environment including testbenches and bootrom.

  • shared: contains the shared fesvr related testbench components.
  • snitch_cluster
    • cfg: containing the configuration files *.hsjon.
    • generated: contains the generated bootdata.cc and RTL wrapper for the snitch cluster snitch_cluster_wrapper.sv.
    • src: contains the Banshee configuration for the snitch cluster.
    • sw: contains all shared
    • apps: contains applications for the snitch cluster.
    • runtime: contains the HW specific runtime implementation for the snitch cluster.
      • rtl: RTL-related startup implmentations.
      • banshee: Banshee-related startup SW implmentations.
    • tests: lists of tests that can run on the snitch cluster.
    • test: contains testharness and bootrom of the snitch cluster