verible:基于 SystemVerilog 的开发工具项目

Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, formatter and language server

分支4Tags1091
当前项目代码仓暂无内容

Verible

许可证 持续集成 代码覆盖率

Verible 项目的主要使命是解析 SystemVerilog(IEEE 1800-2017 标准) (如 SV-LRM 中所规定),以支持包括开发工具在内的各类应用。

该项目源于对解析未预处理源文件的需求,这适用于代码风格检查和格式化等单文件应用场景。在此基础上,它也可适配解析预处理后的源文件,以满足实际编译器和工具链的要求。

本项目的核心理念是:任何人都无需为自己的应用单独开发 SystemVerilog 解析器,因为鉴于该语言的语法复杂性,开发一个符合标准的解析器是一项艰巨的任务。Verible 的解析器会定期通过不断扩充的(工具无关的)语言合规性测试套件进行验证,该测试套件位于 https://symbiflow.github.io/sv-tests/。

另一个次要(但同样重要)的目标是,Verible 中与语言无关的组件可用于快速开发其他语言的支持工具。

安装

为方便安装,我们会定期提供适用于 Linux 和 Windows 的 [二进制发行版],包括适用于 x86 和 Arm 架构的静态链接二进制文件,可在几乎所有 Linux 发行版上运行。

部分发行版也已包含 Verible:

  • Nix 提供适用于 Linux x86 和 Arm 的二进制文件。
    • MacOS 系统可通过 homebrew 软件包安装。

如果您希望在本地自行构建和安装二进制文件,请参见下文 开发者 部分的详细说明。

SystemVerilog 开发工具

解析器

在此了解有关解析器实现的更多信息

我们提供了一个独立的 verible-verilog-syntax 工具,用于帮助可视化词法分析器和解析器所理解的语法结构。这对于故障排除以及理解其他工具所使用的内部表示非常有用。

该工具能够以 JSON 格式导出具体语法树,便于在外部工具中使用。此外,还有一个Python 包装器模块和一些示例脚本

风格检查器

verible-verilog-lint 可识别代码中根据风格指南被视为不合需要的结构或模式。其主要目标是减轻人工检查代码风格合规性的负担。许多检查规则使用语法树模式匹配来发现风格违规。

功能:

在 Github 中集成 Verible 检查器的截图

文档:

格式化器

verible-verilog-format 格式化器根据特定风格管理空白字符。其主要目标是减轻人工手动管理空白、换行和缩进的负担,并提供一个可集成到任何编辑器中的工具,以实现编辑器无关的一致性。

功能(不同程度的开发中):

  • 修正缩进
  • 修正令牌间间距,并具备语法上下文感知能力
  • 按列宽限制进行行换行
  • 支持增量格式化,仅处理已更改的行
  • 交互式格式化:接受或拒绝格式化更改
  • 表格对齐
  • Github SystemVerilog 格式化器动作可用。

语言服务器

verible-verilog-ls 是一款语言服务器,它能将 Verible 命令行工具所具备的功能直接集成到您的编辑器中。

它实现了标准化的 language server protocol,该协议受到众多编辑器和 IDE 的支持。

此语言服务器提供格式化和代码检查功能。在可能的情况下,它还能提供快速修复建议。

在 vscode 中显示带有快速修复的代码检查消息截图

词法差异比较

verible-verilog-diff 用于比较两个输入文件的等效性。

Verible 项目工具

verible-verilog-project 是一款多用途工具,可对整个 Verilog 项目进行操作,项目包含文件列表及相关配置。它可用作诊断工具,用于分析(并可能转换)项目级别的源代码。

代码混淆器

verible-verilog-obfuscate 对 Verilog 代码进行转换,将标识符替换为等长的混淆名称,同时保留所有其他文本,包括空格。输出结果将写入标准输出。生成的文件大小与原始文件相同。这对于向工具供应商提供可能涉及敏感信息的测试用例非常有用。

预处理器

verible-verilog-preprocessor 是一组类预处理器工具(但目前尚未包含功能完备的 Verilog 预处理器)。

源代码索引器

verible-verilog-kythe-extractor 使用 Kythe 模式从 SV 源代码中提取索引信息,这些信息可增强 IDE 的功能,提供链接式交叉引用,方便源代码导航。

欢迎开发者

对于源代码浏览,我们建议使用位于 https://cs.opensource.google/verible/verible 的全索引可搜索镜像。

如果您希望贡献代码,请查阅 贡献指南开发资源

构建

Verible 的代码库采用 C++ 编写。

要进行构建,您需要 bazel 构建系统(最低版本 7)和兼容 C++20 标准的编译器。

使用您的包管理器安装依赖项;在装有 nix 包管理器的系统上,只需运行 nix-shell 即可获取构建环境。

# Build all tools and libraries
bazel build -c opt //...

您可以在 bazel-bin/ 目录下获取生成的产物。例如,语法检查器位于 bazel-bin/verible/verilog/tools/syntax/verible-verilog-syntax(对应目标名称 //verible/verilog/tools/syntax:verible-verilog-syntax)。

此外,如果您需要不依赖共享库的静态链接可执行文件,可以使用自定义配置 create_static_linked_executables(使用此设置时,将使用 bfd 链接器,而非默认的 gold 链接器)。

# Generate statically linked executables.
# Uses bfd linker and needs static system libs available.
bazel build -c opt --config=create_static_linked_executables //...

可选使用本地 flex/bison 进行构建

解析器生成所需的 Flex 和 Bison 会作为构建过程的一部分进行编译。但如果由于某些原因您希望或需要使用本地工具(例如,当您遇到与它们相关的编译问题时 - 请务必提交错误报告),可以通过在 bazel 命令行中添加 --//bazel:use_local_flex_bison 来选择使用本地工具:

# Also append the option '--//bazel:use_local_flex_bison' to test/install commands
bazel build -c opt  --//bazel:use_local_flex_bison //...

在 Windows 上构建

除了 Bazel 和 Visual Studio 外,在 Windows 上构建还需要安装 WinFlexBison 3 和 Git-bash。使用包管理器 chocolatey,可以通过以下方式完成安装

choco install git winflexbison3

在 PowerShell 上,Bazel 可能还需要环境变量才能使用 git-bash。

$env:BAZEL_SH="C:\Program Files\Git\git-bash.exe"

安装

为方便安装,我们提供了常规的binary releases

如果您更倾向于在本地自行构建和安装二进制文件:

bazel build -c opt :install-binaries

# Install in your home directory
.github/bin/simple-install.sh ~/bin

# For a system directory that requires root-access, call scfript with sudo.
sudo .github/bin/simple-install.sh /usr/local/bin

(这需要一个兼容的 install 工具,否则只需将二进制文件从 bazel-bin/ 复制到您想要的位置)

测试

我们强烈建议使用 bazel 运行测试套件:

# Run all tests
bazel test -c opt //...

在文件(例如 foo.cc)中添加新功能时,务必同时更新(或添加)对应的 foo_test.cc。编写测试后,可使用 .github/bin/generate-coverage-html.sh 来仔细检查测试是否覆盖了所有代码路径;将覆盖范围缩小到你的测试,以确保覆盖率不会意外地来自其他恰好使用该库的无关测试。

MODE=coverage .github/bin/build-and-test.sh //foo/bar:foo_test
.github/bin/generate-coverage-html.sh

邮件列表

加入 Verible 社区!

  • 开发者:verible-dev@googlegroups.com (加入
  • 用户:verible-users@googlegroups.com (加入

未来展望

Verible 团队有意探索如何帮助其他工具开发者提供 SystemVerilog 前端,例如,生成抽象语法树(AST),或者甚至可能提供更高级的 UHDM 格式。如果您有兴趣合作,请联系我们。

项目介绍

Verible 是一套 SystemVerilog 开发者工具集,其中包含解析器、风格检查器、格式化工具以及语言服务器。【此简介由AI生成】

定制我的领域
471.92 K302访问 GitHub