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 日

#111 in 模拟

每月 44 次下载
用于 moore

Apache-2.0 OR MIT

1MB
22K SLoC

moore

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

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

使用方法

安装

您需要一个有效的 Rust 安装 来构建 Moore。项目还依赖于 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 系统上,您可能需要 libstdc++ 7 或更高版本才能使此操作正常工作。

开发

对于积极开发,您可能希望使用常规的 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 "Bump version to X.Y.Z
  7. 标签:git tag vX.Y.Z
  8. 使用 cargo publish 反向顺序发布所有 crate

lib.rs:

此 crate 实现了 moore 编译器的 VHDL。

依赖项

~8–18MB
~233K SLoC