blob: fa198bd52af899cef965cf442a995f9b95f1fd15 [file] [log] [blame] [view]
# Matcha
## About the project
Matcha is an open-source reference hardware implementation for Project Open Se Cura,
a low-power, secure embedded platform for ambient ML applications.
## About this repository
This repository contains hardware (RTL), software, and utilities written as part of
the Matcha project.
## Documentation
The project contains comprehensive documentation of the SOC, all IPs, and tools.
<!-- TODO: Add link to documents -->.
## How to contribute
Have a look at our [GettingStarted Guide](https://opensecura.googlesource.com/docs/+/refs/heads/master/GettingStarted.md)
for guidelines on how to contribute code to this repository.
## Licensing
Unless otherwise noted, everything in this repository is covered by the Apache
License, Version 2.0 (see [LICENSE](./LICENSE) for full text).
## Prerequisites
Development for matcha requires that the necessary tools and prerequisites be
installed. See [GettingStarted Guide](https://opensecura.googlesource.com/docs/+/refs/heads/master/GettingStarted.md)
To setup the build system, run following steps at root of repo:
```bash
source build/setup.sh
```
Install the prerequisites:
```bash
m prereqs
```
Install the tools used for development:
```bash
m tools
```
## Code/Repo Structure
```bash
<root_dir>/hw/matcha/
hw/top_matcha/
BUILD
cdc/
data/
dv/
formal/
ip/
ip_autogen/
lint/
rdc/
rtl/
sw/
syn/
util/
hw/
BUILD
Makefile
sw/
BUILD
device/
util/
BUILD
dvsim_matcha/
make_new_dif/
openocd/
topgen_util/
topgen_matcha.py
<root_dir>/hw/opentitan_upstream/
<root_dir>/build/
<root_dir>/Manifest/
<root_dir>/Makefile
<root_dir>/GettingStarted.md
<toot_dir>/...
```
## Quick start guide and cheat sheet
For following steps, make sure the above "Prerequisites" steps have been run if
the repo is been checked out at the first time.
Build RTL top Level and generate registers, interrupt and address map:
```bash
m matcha_hw_generate_all
```
Build verilator simulation target:
```bash
m matcha_hw_verilator_sim
```
Run matcha verilator test suite
```bash
m matcha_hw_verilator_tests
```
Run FPGA compilation flow for Nexus FPGA board:
```bash
m matcha_hw_fpga_nexus
```
## Bazel debug
Run matcha single test with messages to stdout
```bazel
bazel test --test_output=streamed //sw/device/tests:verilator_mailbox_test
```
Run matcha test suites
```bazel
bazel test --test_output=streamed //sw/device/tests:verilator_test_suite
```
Run FPGA compilation flow for Nexus FPGA board with debug commands:
```bazel
bazel build -s //hw/bitstream/vivado:fpga_nexus
```
## Simulation logs
Enable tracing on a single test
```bazel
bazel test --test_output=streamed --test_timeout=1000000 --test_arg=--trace //sw/device/tests:verilator_cam_ctrl_test
```
*Note: `--test_timeout=1000000` sets timeout in seconds. This helps prevent timeout issues then using trace.*
Waveform dump and peripheral logs for a test located in:
```bash
<root_dir>/hw/matcha/bazel-testlogs/sw/device/tests/<test_name>/test.outputs/output.zip
sim.fst (if tracing is enabled)
uart0.log
smc_uart.log
spi0.log
usb0.log
```
*Note: The trace_core_#.log files available in output.zip is currently a TODO
item.*
## The FPGA compiled bitstream and reports (resource utilization, pin assignment, etc) can be found in following directory:
<matcha_root_dir>/bazel-bin/hw/bitstream/vivado/build.fpga_nexus/synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/chip_matcha_nexus.bit
<matcha_root_dir>/bazel-bin/hw/bitstream/vivado/build.fpga_nexus/synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/impl_1/*.rpt
<matcha_root_dir>/bazel-bin/hw/bitstream/vivado/build.fpga_nexus/synth-vivado/google_systems_chip_matcha_nexus_0.1.runs/synth_1/*.rpt
## DV flow
[Setup DV flow](./doc/getting_started/setup_dv.md)