1个不稳定版本
0.14.0 | 2022年2月8日 |
---|
#1277 在 硬件支持
在 3 个crate中使用 (通过 moore-circt)
9KB
183 行
moore
Moore是一个硬件描述语言的编译器,输出llhd汇编代码,重点在于可用性、清晰的错误报告和完整性。其目标是作为硬件设计工具(如综合器、linter或逻辑等价性检查器)的前端。
用法
安装
构建Moore需要有效的Rust安装。该项目还依赖于CIRCT项目,以及MLIR和LLVM。要获得可工作的二进制文件,通常需要确保已经检出circt
和circt/llvm
子模块。
git submodule update --init --recursive
然后按照以下步骤进行
构建LLVM和MLIR
mkdir -p circt/llvm/build
pushd circt/llvm/build
cmake ../llvm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS=mlir \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_TARGETS_TO_BUILD="host"
cmake --build .
popd
构建CIRCT
mkdir -p circt/build
pushd circt/build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \
-DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \
-DLLVM_ENABLE_ASSERTIONS=ON
cmake --build .
popd
构建Moore
设置以下环境变量以指示您的LLVM和CIRCT构建位置
export CIRCT_SYS_CIRCT_DIR=$PWD/circt
export CIRCT_SYS_CIRCT_BUILD_DIR=$PWD/circt/build
export CIRCT_SYS_LLVM_DIR=$PWD/circt/llvm
export CIRCT_SYS_LLVM_BUILD_DIR=$PWD/circt/llvm/build
使用cargo安装Moore
cargo install moore
注意,在Linux系统上,您可能需要7或更高版本的libstdc++才能使此功能正常工作。
开发
对于积极开发,您将希望使用常规的check
、build
、run
和test
子命令。
您也可能发现将*_BUILD_DIR
环境变量指向实际的构建目录(通常为circt/llvm/build
和circt/build
)很有用,这样您就不需要在CIRCT或LLVM的每次更改后重新安装。
示例
假设以下输入文件
// foo.sv
module hello_world;
endmodule
要编译foo.sv
并将相应的LLHD汇编代码输出到标准输出,请使用moore调用文件名和要展开的模块(-e
选项)
moore foo.sv -e hello_world
您可以使用llhd-sim来模拟编译后的模块
moore foo.sv -e hello_world > foo.llhd
llhd-sim foo.llhd
开发
Moore在这个仓库中开发,但已分割到以下crate
moore
:将一切联系在一起的高级umbrella cratemoore-common
:由SystemVerilog和VHDL使用的通用基础设施moore-derive
:过程宏moore-svlog
:SystemVerilog实现moore-svlog-syntax
:SystemVerilog解析器和AST实现moore-vhdl
:VHDL实现moore-vhdl-syntax
:VHDL解析器和AST实现moore-circt
:CIRCT API的Rust封装moore-circt-sys
:CIRCT的底层语言绑定
在moore工作时的某些有用命令
git submodule init
git submodule update
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>
lit test -v
创建新版本
要创建新版本,必须按照上述相反的顺序发布项目的各个子crate。遵循以下清单
- 使用
scripts/release_status.sh
查看整个项目中使用的moore/llhd crate版本概述 - 更新所有
Cargo.toml
文件中的版本 - 使用
scripts/release_check.sh
确保所有crate的版本与根版本相同 - 确保cargo满意:
cargo check
- 更新
CHANGELOG.md
文件 - 提交:
git commit -am "将版本提升到X.Y.Z
- 标签:
git tag vX.Y.Z
- 使用
cargo publish
按相反顺序发布所有crate
依赖关系
~0–2MB
~38K SLoC