1 个不稳定版本
| 0.14.0 | 2022年2月8日 |
|---|
在 硬件支持 中排名 1302
每月下载 38 次
在 2 个软件包 中使用
70KB
1.5K SLoC
moore
Moore 是一个硬件描述语言的编译器,输出 llhd 汇编代码,注重可用性、清晰的错误报告和完整性。其目标是作为硬件设计工具(如综合器、linters 或逻辑等价性检查器)的前端。
用法
安装
您需要一个正常工作的 Rust 安装 来构建 Moore。项目还依赖于 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 在此仓库中开发,但已分成以下软件包
moore:将一切联系在一起的最高级伞形软件包moore-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 "Bump version to X.Y.Z - 标记:
git tag vX.Y.Z - 使用
cargo publish按相反的顺序发布所有crate
依赖
~0.4–2.5MB
~48K SLoC