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 documentatation, user guides and reference manualsutil
: Helper scripts and generator toolshw
: Design and DV sourcessw
: All software sources used in the projectWe will focus on the directory structure underneath hw
and sw
below.
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 plan │ │ │ ├──dv => SV/UVM testbench sources │ │ │ ├──fpv => Testbench sources used in FPV (if applicable) │ │ │ ├──model => Reference 'model' implementation in C (if applicable) │ │ │ ├──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 plan │ ├──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
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.
Auto-generated sources can get out-of-sync if the underlying tools or templates are updated. Also, users may accidently 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:
autogen/
directorysw
sw ├──device => Sources compiled for the OpenTitan chip, │ │ including tests run on FPGA and simulations │ │ │ ├──boot_rom => Sources for generating the primary boot image │ │ loaded into ROM │ │ │ ├──benchmarks => Standard benchmarks and instructions for running │ │ └──coremark them │ │ │ ├──doc => Documentation sources │ │ │ ├──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 library of device interface functions (DIFs) │ │ that provide 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