Skip to content

CircuitCoder/mill

Repository files navigation

Mill

[verb] (transitive) To grind or otherwise process in a mill or other machine.

What's in the box?

  • A test framework, which test the CPU against:
    • riscv/riscv-tests
  • A educational 5-stage(?) RV32I implementation with SystemVerilog
  • Documentation (in zh-CN), including
    • The usage of the test framework
    • The design of the CPU implementation
    • The timeline of the development

CPU interface

See rtl/top.sv

Run unit test

To run the unit test included in this repository, you will need to install the following dependencies first:

  • verilator, tested on 5.006
  • GCC (g++) 10, tested on 12.2.0. clang won't work (for now) because of its lacking the standard concept library.
  • rust (rustc, cargo), tested on 1.74.0-nightly
  • cxxbridge, tested on 1.0.107. This binary is provided in the cxxbridge-cmd rust crate.
  • cmake, tested on 3.25.1. You may want to change the minimal version specified in the bridge/CMakeLists.txt to match your cmake version.
  • ninja or makefile, tested on ninja 1.11.1. Ninja is recommended for better build dependency handling.

Then, just simple invoke cargo run -- -h and you will get the help for the test runner.

A full run-through on a freshly installed ArchLinux:

pacman -Syy
pacman -S base-devel verilator rustup ninja cmake git
rustup install nightly
cargo install cxxbridge-cmd

git clone https://github.com/CircuitCoder/mill.git
cd mill
cargo run -- -h

License

All source code and related materials in this repository is distributed under the MIT license. You may get a copy of the license text in the LICENSE file located in the root of this repository.