diff --git a/README.md b/README.md index 8b13789..58b0af2 100644 --- a/README.md +++ b/README.md @@ -1 +1,129 @@ +# SweRV RISC-V CoreTM from Western Digital +This repository contains the SweRV CoreTM design RTL + +## License + +By contributing to this project, you agree that your contribution is governed by [Apache-2.0](LICENSE). +Files under the [tools](tools/) directory may be available under a different license. Please review individual file for details. + +## Directory Structure + + ├── configs # Configurations Dir + │   └── snapshots # Where generated configuration files are created + ├── design # Design root dir + │   ├── dbg # Debugger + │   ├── dec # Decode, Registers and Exceptions + │   ├── dmi # DMI block + │   ├── exu # EXU (ALU/MUL/DIV) + │   ├── ifu # Fetch & Branch Prediction + │   ├── include + │   ├── lib + │   └── lsu # Load/Store + ├── docs + ├── tools # Scripts/Makefiles + └── testbench # (Very) simple testbench +    ├── asm # Example assembly files +    └── hex # Canned demo hex files + +## Dependencies + +- Verilator **(3.926 or later)** must be installed on the system +- If adding/removing instructions, espresso must be installed (used by *tools/coredecode*) + +## Quickstart guide +1. Clone the repository +1. Setup RV_ROOT to point to the path in your local filesystem +1. Determine your configuration {optional} +1. Run make with tools/Makefile + +### Configurations + +SweRV can be configured by running the `$RV_ROOT/configs/swerv.config` script: + +`% $RV_ROOT/configs/swerv.config -h` for detailed help options + +For example to build with a DCCM of size 64 : + +`% $RV_ROOT/configs/swerv.config -dccm_size=64` + +This will update the **default** snapshot in $RV_ROOT/configs/snapshots/default/ with parameters for a 64K DCCM. + +Add `-snapshot=dccm64`, for example, if you wish to name your build snapshot *dccm64* and refer to it during the build. + +This script derives the following consistent set of include files : + + $RV_ROOT/configs/snapshots/default + ├── common_defines.vh # `defines for testbench or design + ├── defines.h # #defines for C/assembly headers + ├── pd_defines.vh # `defines for physical design + ├── perl_configs.pl # Perl %configs hash for scripting + ├── pic_ctrl_verilator_unroll.sv # Unrolled verilog based on PIC size + ├── pic_map_auto.h # PIC memory map based on configure size + └── whisper.json # JSON file for swerv-iss + + + +### Building a model +1. Set the RV_ROOT environment variable to the root of the SweRV directory structure + + `RV_ROOT = /path/to/swerv` + `export RV_ROOT` + +1. Create your configuration + + *(Skip if default is sufficient)* + *(Name your snapshot to distinguish it from the default. Without an explicit name, it will update/override the **default** snapshot)* + `$RV_ROOT/configs/swerv.config [configuration options..] -snapshot=mybuild` + + Snapshots are placed in `$RV_ROOT/configs/snapshots//` directory + +1. Build with **verilator**: + + `make -f $RV_ROOT/tools/Makefile verilator [snapshot=name]` + +This will create and populate the verilator *obj_dir/* in the current work dir. + +**Other targets supported**: + + vcs (Synopsys) + irun (Cadence) + +### Running a simple Hello World program (verilator) + + RV_ROOT = /path/to/swerv + export RV_ROOT + + make -f $RV_ROOT/tools/Makefile verilator-run + +This will build a verilator model of SweRV with AHB-lite bus, and execute a short sequence of instructions that writes out "HELLO +WORLD" to the bus. + +You can re-execute using + + ./obj_dir/Vtb_top + + Start of sim + + ------------------------------ + Hello World from SweRV @WDC !! + ------------------------------ + + Finished : minstret = 389, mcycle = 1658 + + End of sim + +A vcd file `sim.vcd` is created which can be browsed by gtkwave or similar waveform viewers. `trace_port.csv` contains a log of +the trace port. + +The Makefile allows you to specify different assembly files from command line + + make -f $RV_ROOT/tools/Makefile verilator-run ASM_TEST=my_hellow_world.s ASM_TEST_DIR=/path/to/dir + +If you change only the assembly files, you do not need to rebuild verilator, just specify the target as `program.hex` : + + make -f $RV_ROOT/tools/Makefile program.hex ASM_TEST=my_hello_world.s ASM_TEST_DIR=/path/to/dir + ./obj_dir/Vtb_top + +---- +Western Digital, the Western Digital logo, G-Technology, SanDisk, Tegile, Upthere, WD, SweRV Core, SweRV ISS, and OmniXtend are registered trademarks or trademarks of Western Digital Corporation or its affiliates in the US and/or other countries. All other marks are the property of their respective owners.