# OpenTitan

## Introduction to OpenTitan

[OpenTitan](https://opentitan.org) is an open source silicon Root of Trust (RoT) project.
OpenTitan will make the silicon RoT design and implementation more transparent, trustworthy, and secure for enterprises, platform providers, and chip manufacturers.
OpenTitan is administered by lowRISC CIC as a collaborative [project](./project_governance/README.md) to produce high quality, open IP for instantiation as a full-featured product.
This repository exists to enable collaboration across partners participating in the OpenTitan project.

## Getting Started

To get started with OpenTitan, see the [Getting Started](./guides/getting_started/src/README.md) page.
For additional resources when working with OpenTitan, see the [list of user guides](https://docs.opentitan.org/doc/guides/getting_started/).
For details on coding styles or how to use our project-specific tooling, see the [reference manuals](../util/README.md).
Lastly, the [Hardware Dashboard page](../hw/README.md) contains technical documentation on the SoC, the Ibex processor core, and the individual IP blocks.
For questions about how the project is organized, see the [project](./project_governance/README.md) landing spot for more information.

## Understanding OpenTitan

* [Use Cases](./use_cases/README.md)
* [Threat Model](./security/threat_model/README.md)
* [Security](./security/README.md)

## Datasheets

* [OpenTitan Earl Grey Chip Datasheet](../hw/top_earlgrey/doc/specification.md)

## Documentation

* [Hardware](../hw/README.md)
* [Software](../sw/README.md)

## Development

* [Getting Started](./guides/getting_started/src/README.md)
* [User Guides](https://docs.opentitan.org/doc/guides/getting_started/)
* [Reference Manuals](../util/README.md)
* [Style Guides](./contributing/style_guides/README.md)

## Repository Structure

The underlying
[repo](http://www.github.com/lowrisc/opentitan)
is set up as a monolithic repository to contain RTL, helper scripts, technical documentation, and other software necessary to produce our hardware designs.

Unless otherwise noted, everything in the repository is covered by the Apache License, Version 2.0. See the [LICENSE](https://github.com/lowRISC/opentitan/blob/master/LICENSE) file and [repository README](https://github.com/lowRISC/opentitan/blob/master/README.md) for more information on licensing and see the user guides below for more information on development methodology.
