Welcome!
This guide helps you to get started with OpenTitan.
The OpenTitan Repository must be checked out locally. If you wish to contribute to OpenTitan you will need to make a fork on GitHub, otherwise you can just locally clone the main repository. There is a set of [notes for using GitHub]({{< relref “github_notes.md” >}}) which explains how to work with your own fork.
Throughout the documentation $REPO_TOP
refers to the path where the OpenTitan repository is checked out
You can either follow the [install instructions]({{< relref “install_instructions” >}}) from start to end to install all software required to simulate the design with Verilator and build a bitstream for an FPGA with Xilinx Vivado or check the corresponding [design description]({{< relref “getting_started.md#choose-a-design-to-build” >}}) for install requirements.
The code base contains multiple top-level designs, which can be synthesized or compiled for different targets. A target can be a specific FPGA board, an ASIC technology, or a simulation tool. The hardware you need to obtain and the tools you need to install depend on the chosen top-level design and the target.
In order to continue, choose a system from the [List of Systems]({{< relref “/doc/ug/system_list.md” >}}). Read the design documentation for the requirements on the specific design/target combination, and then follow the appropriate steps below.
This section discusses the general software operating flow.
Under the sw directory, there are numerous sub-directories each containing code for different purposes. In general however, software execution can be divided into two execution stages - ROM and embedded memory (currently emulated embedded flash).
The ROM stage software, built from sw/device/boot_rom
is always run first on all platforms (DV / Verilator / FPGA). In DV / Verilator, both the ROM and embedded memory contents are backdoor loaded into their respective storage, thus the ROM code simply checks for the presence of code and jumps to it. ROM at the moment does not perform validation of the backdoor loaded code.
On FPGA, we do not backdoor load the embedded memory. Instead, the ROM code proceeds through a code download process where a [host]({{< relref “/sw/host/spiflash/README.md” >}}) feeds an image frame by frame. The ROM code then integrity checks each received image and programs it into the embedded memory. At the conclusion of this process, the ROM then jumps to the newly downloaded executable code. Again, just like the DV / Verilator case, there is currently no additional validation of the downloaded code. That feature is expected to be added later.