Getting Started
We first discuss the Carfield's project structure, its dependencies, and how to build it.
Repository structure
The project is structured as follows:
Directory | Description | Documentation |
---|---|---|
doc |
Documentation | Home |
hw |
Hardware sources as SystemVerilog RTL | Architecture |
sw |
Software stack, build setup, and tests | Software Stack |
target |
Simulation, FPGA, and ASIC target setups | Targets |
utils |
Utility scripts | |
scripts |
Some helper scripts for env setup |
Dependencies
To build Carfield, you will need:
- GNU Make
>= 3.82
- Python
>= 3.6
- Bender
>= 0.27.1
- RISCV GCC
>= 11.2.0
- Python packages in
requirements.txt
We use Bender for hardware IP and dependency management; for more information on using Bender, please see its documentation. You can install Bender directly through the Rust package manager Cargo:
cargo install bender
Depending on your desired target, additional dependencies may be needed.
Building Carfield
To build different parts of Carfield, the carfield.mk
run make
followed by these targets:
car-hw-init
: generated hardware, including IPs and boot ROMcar-sim-init
(†): scripts and external models for simulationcar-sw-build
(‡): bare-metal software running on the hardware
† car-sim-init
will download externally provided peripheral simulation models, some proprietary
and with non-free license terms, from their publically accessible sources. By running
car-sim-init
, you accept this.
‡ car-sw-build
requires RV64 and RV32 toolchains. See the Software Stack for more
details.
To run all build targets above (†)(‡):
make car-init-all
Running car-init-all
is required at least once to correctly configure IPs we depend on. On
reconfiguring any generated hardware or changing IP versions, car-init-all
should be rerun.
The following additional targets are not invoked by the above, but also available:
chs-bootrom-all
- rebuilds Cheshire's boot ROM. This is not done by default as reproducible builds (as checked by CI) can only be guaranteed for fixed compiler versions.car-nonfree-init
- clones our internal repository with nonfree resources we cannot release, including our internal CI or technology-specific standard cells, scripts and tools. This is not necessary to use Carfield.
Note
Carfield uses Cheshire
as main dependency. Compared
to the other dependencies, Cheshire provides most of the HW/SW infrastructure used by Carfield. All
Cheshire's make
targets, described in the dedicated documentation, are available in Carfield
through the inclusion of the makefrag cheshire.mk
in carfield.mk
.
Targets
A target is an end use for Carfield. Each target requires different steps from here; read the page for your desired target in the following Targets chapter.