Moore is a compiler for hardware description languages that outputs llhd assembly, with a focus on usability, clear error reporting, and completeness. Its goal is to act as a frontend for hardware design tools such as synthesizers, linters, or logical equivalence checkers.
You need a working Rust installation. Use cargo to install moore:
cargo install moore
Assume the following input file:
// foo.sv
module hello_world;
endmodule
To compile foo.sv and emit the corresponding LLHD assembly to standard output call moore with the file name and the module to elaborate (-e option):
moore foo.sv -e hello_world
You can use llhd-sim to simulate the compiled module:
moore foo.sv -e hello_world > foo.llhd
llhd-sim foo.llhd
Moore is developed in this repository, but is separated into the following crates:
moore: Top-level umbrella crate tying everything togethermoore-common: Common infrastructure used by SystemVerilog and VHDLmoore-derive: Procedural macrosmoore-svlog: SystemVerilog implementationmoore-svlog-syntax: SystemVerilog parser and AST implementationmoore-vhdl: VHDL implementationmoore-vhdl-syntax: VHDL parser and AST implementation
Some useful commands when working on moore:
cargo check
cargo test --all
cargo run -- foo.sv -e foo
scripts/test.py --debug -v
scripts/test.py --debug -v <path-to-test-case>
To create a new release, the individual sub-crates of the project have to be released in the reverse order outlined above. Follow this checklist:
- Use
scripts/release_status.shto see an overview of moore/llhd crate versions used throughout the project - Update the version in all
Cargo.tomlfiles - Use
scripts/release_check.shto ensure that all crates have the same version as the root - Ensure cargo is happy:
cargo check - Update the
CHANGELOG.mdfile - Commit:
git commit -am "Bump version to X.Y.Z - Tag:
git tag vX.Y.Z - Publish all crates using
cargo publishin reverse order