| --- | |
| title: "Directory Structure" | |
| --- | |
| This document provides an overview of the opentitan repository directory structure. | |
| The hierarchy underneath the root is fairly self explanatory, containing the following: | |
| * `doc`: High level documentation, user guides and reference manuals | |
| * `util`: Helper scripts and generator tools | |
| * `hw`: Design and DV sources | |
| * `sw`: All software sources used in the project | |
| We will focus on the directory structure underneath `hw` and `sw` below. | |
| ## Directory structure underneath `hw` | |
| ``` | |
| hw | |
| ├──dv => Common / shared resources for SV/UVM as well as | |
| │ Verilator based testbenches | |
| │ | |
| ├──formal => Scripts to build and run formal property verification | |
| │ (FPV) for all applicable IPs to ensure protocol | |
| │ compliance | |
| │ | |
| ├──ip => Standalone or generic / parameterized implementations | |
| │ of comportable IPs designed towards building SoCs | |
| │ | |
| ├──lint => Scripts to run the `lint` tool on all RTL sources | |
| │ | |
| ├──top_earlgrey => An implementation of OpenTitan SoC built using above | |
| │ IPs as well as third-party 'vendored' IPs | |
| │ | |
| ├──vendor => Vendored-in open source IPs from external repositories | |
| ``` | |
| ### `hw/ip` | |
| ``` | |
| ip | |
| ├──uart => UART IP root dir | |
| │ │ | |
| │ ├──data => Configuration data sources for design, DV and project | |
| │ │ status tracking | |
| │ │ | |
| │ ├──doc => All documentation sources including design specification | |
| │ │ and DV document | |
| │ │ | |
| │ ├──dv => SV/UVM testbench sources | |
| │ │ | |
| │ ├──fpv => Testbench sources used in FPV (if applicable) | |
| │ │ | |
| │ ├──model => Reference 'model' implementation in C (if applicable) | |
| │ │ | |
| │ ├──pre_dv => This is a work area for experimental DV work that is worthy of | |
| │ │ maintaining, but not intended to apply towards code coverage. | |
| │ │ | |
| │ ├──rtl => RTL design sources | |
| │ │ | |
| │ ├──util => IP-specfic automation scripts (if applicable) | |
| │ │ | |
| │ ├──... => Additional sub-directories could exist for specific IPs | |
| │ based on need | |
| │ | |
| ├──... => More such Comportable IPs... | |
| ``` | |
| ### `hw/top_earlgrey` | |
| ``` | |
| top_earlgrey => Chip root dir | |
| │ | |
| ├──data => Configuration data sources for design, DV and | |
| │ project status tracking | |
| │ | |
| ├──doc => All documentation sources including chip | |
| │ specification and DV document | |
| │ | |
| ├──dv => Chip level SV/UVM testbench sources | |
| │ └──autogen => auto-generated chip DV sources | |
| │ | |
| ├──ip => IPs tailor-made for top_earlgrey | |
| │ │ | |
| │ ├──xbar => XBAR implementation for top_earlgrey | |
| │ │ ├──dv => DV sources | |
| │ │ │ └──autogen => auto-generated XBAR DV sources | |
| │ │ └──rtl => RTL sources | |
| │ │ └──autogen => Auto-generated XBAR RTL sources | |
| │ │ | |
| │ ├──... => More such IPs tailored for top_earlgrey... | |
| │ | |
| ├──rtl => Chip level RTL sources | |
| │ └──autogen => auto-generated chip RTL sources | |
| │ | |
| ├──sw => Auto-generated chip-specific headers for SW | |
| │ | |
| └──util => Chip-specfic automation scripts | |
| ``` | |
| ### Auto-generated sources: checked-in | |
| In cases where we rely on automatic generation of RTL, DV, or software sources we currently check those files in to the repository. | |
| This is primarily motivated by a desire to make it easy for engineers to rapidly test spot-fixes. | |
| This is a decision that might be revisited in the future. | |
| #### Mitigating issues | |
| Auto-generated sources can get out-of-sync if the underlying tools or templates are updated. | |
| Also, users may accidentally make modifications to those files by hand, which will cease to exist the next time the tools are run. | |
| We employ the following methods to mitigate these risks: | |
| * Add a CI check when a pull request is made to merge new changes to ensure that the checked-in file and the generator output are equivalent and not out-of-sync | |
| * Put auto-generated sources under a dedicated `autogen/` directory | |
| * Add a warning message banner as a comment clearly indicating that the file has been auto-generated with the complete command | |
| ## Directory structure underneath `sw` | |
| ``` | |
| sw | |
| ├──device => Sources compiled for the OpenTitan chip, | |
| │ │ including tests run on FPGA and simulations | |
| │ │ | |
| │ ├──benchmarks => Standard benchmarks and instructions for running | |
| │ │ └──coremark them | |
| │ │ | |
| │ ├──examples => Example programs to demonstrate basic | |
| │ │ ├──hello_world functionality | |
| │ │ ├──... | |
| │ │ | |
| │ ├──exts => Sources that are specific to the intended target | |
| │ │ │ (FPGA, Verilator, DV, firmware) | |
| │ │ └──common => Common sources for all SW tests including the CRT | |
| │ │ source and the linker script | |
| │ │ | |
| │ ├──lib => SW libraries, including device interface functions | |
| │ │ (DIFs), testutils, test boot ROM (test_rom), the | |
| │ │ OTTF, and other base APIs for controlling the | |
| │ │ hardware | |
| │ │ | |
| │ └──tests => SW tests implemented on FPGA/Verilator/DV targets | |
| │ ├──flash_ctrl | |
| │ ├──... | |
| │ | |
| ├──host => Sources compiled for the host communicating with | |
| │ our OpenTitan chip | |
| │ | |
| └──vendor => Vendored-in open source software sources from | |
| │ external repositories | |
| └── cryptoc | |
| ``` |