15个版本 (重大更新)

0.14.0 2022年2月8日
0.13.2 2021年11月11日
0.12.1 2021年8月18日
0.12.0 2021年1月9日
0.1.0 2018年2月27日

#240编程语言


3 个crate中使用 (直接使用2个)

Apache-2.0 OR MIT

455KB
11K SLoC

moore

Build Status Released API docs Crates.io Crates.io dependency status

Moore是一个输出llhd汇编的硬件描述语言编译器,注重易用性、清晰的错误报告和完整性。它的目标是作为硬件设计工具(如综合器、linter或逻辑等价性检查器)的前端。

用法

安装

为了构建Moore,您需要一个可工作的Rust安装。项目还依赖于CIRCT项目,间接依赖于MLIR和LLVM。要获取可用的二进制文件,您通常需要确保已经检出circtcirct/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++版本才能使此功能正常工作。

开发

对于积极开发,您可能希望使用常用的checkbuildruntest子命令。

您也可能发现将*_BUILD_DIR环境变量指向实际的构建目录(通常为circt/llvm/buildcirct/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:将所有内容联系在一起的最高级伞形crate
  • 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必须按照上述顺序反向发布。遵循以下清单

  1. 使用scripts/release_status.sh查看整个项目中使用的moore/llhd crate版本概述
  2. 更新所有Cargo.toml文件中的版本
  3. 使用scripts/release_check.sh确保所有crate的版本与根版本相同
  4. 确保cargo满意:cargo check
  5. 更新CHANGELOG.md文件
  6. 提交:git commit -am "将版本提升到X.Y.Z
  7. 标签:git tag vX.Y.Z
  8. 使用cargo publish反向顺序发布所有crate

lib.rs:

这个crate实现了将SystemVerilog源文件解析为抽象语法树并解析遇到的名称。

依赖项

~4.5–6.5MB
~127K SLoC