Folder Structure
The SDK is organized into the following main folders:
chimera-sdk
├─ cmake # CMake configuration and utility files
├─ devices # Device-specific code with potential external dependencies such as runtime libraries
│ ├─ snitch_cluster
│ │ ├─ runtime # Runtime library for the Snitch cluster
│ │ ├─ third_party # External dependencies such as snitch-sdk
│ │ ├─ trampoline_snitchCluster.c # Trampoline code to offload functions to the cluster
│ │ └─ snitch_runtime (external repo) # External runtime library for the Snitch cluster
│ └─ <more devices>
├─ host # Host code with drivers, HAL, runtime and external dependencies
│ ├─ drivers # Drivers for peripherals and devices such as clusters and accelerators
│ │ ├─ cluster
│ │ ├─ uart_abb
│ │ └─ <more drivers>
│ ├─ hal # Hardware Abstraction Layer (HAL)
│ ├─ runtime # Runtime library for the host
│ ├─ third_party # External dependencies such as opentitan drivers
├─ scripts # Utility scripts
├─ targets # Target definitions such as memory map, register definitions and build configurations
│ ├─ chimera-open
│ └─ <more targets>
├─ tests # Test applications for each target
| ├─ chimera-open
| └─ <more targets>
└─ CMakelists.txt # Top level CMakeLists.txt
Note
The drivers are selected by the DRIVER_MAPPINGS variable
in the build system. This allows to easily include or exclude drivers as needed.
Tests
Each target has a corresponding folder in the `tests` directory. The tests are organized by category, such as host or snitchCluster. Each category contains multiple tests. The tests are separated into host and cluster code.
tests
├─ chimera-open # Test applications for the chimera-open target
| ├─ <category> # Test categories (what part of the system is tested, e.g host, snitchCluster)
| │ ├─ test_1
| │ │ ├─ host # Host code
| │ │ └─ snitchCluster # Snitch sluster code
| │ └─ <more tests>
| └─ <more categories>
└─ <more targets>