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

Verible 项目的主要使命是解析 SystemVerilog(IEEE 1800-2017 标准) (如 SV-LRM 中所规定),以支持包括开发工具在内的各类应用。
该项目源于对解析未预处理源文件的需求,这适用于代码风格检查和格式化等单文件应用场景。在此基础上,它也可适配解析预处理后的源文件,以满足实际编译器和工具链的要求。
本项目的核心理念是:任何人都无需为自己的应用单独开发 SystemVerilog 解析器,因为鉴于该语言的语法复杂性,开发一个符合标准的解析器是一项艰巨的任务。Verible 的解析器会定期通过不断扩充的(工具无关的)语言合规性测试套件进行验证,该测试套件位于 https://symbiflow.github.io/sv-tests/。
另一个次要(但同样重要)的目标是,Verible 中与语言无关的组件可用于快速开发其他语言的支持工具。
安装
为方便安装,我们会定期提供适用于 Linux 和 Windows 的 [二进制发行版],包括适用于 x86 和 Arm 架构的静态链接二进制文件,可在几乎所有 Linux 发行版上运行。
部分发行版也已包含 Verible:
如果您希望在本地自行构建和安装二进制文件,请参见下文 开发者 部分的详细说明。
SystemVerilog 开发工具
解析器
我们提供了一个独立的 verible-verilog-syntax 工具,用于帮助可视化词法分析器和解析器所理解的语法结构。这对于故障排除以及理解其他工具所使用的内部表示非常有用。
该工具能够以 JSON 格式导出具体语法树,便于在外部工具中使用。此外,还有一个Python 包装器模块和一些示例脚本。
风格检查器
verible-verilog-lint 可识别代码中根据风格指南被视为不合需要的结构或模式。其主要目标是减轻人工检查代码风格合规性的负担。许多检查规则使用语法树模式匹配来发现风格违规。
功能:
- 诊断信息中包含风格指南引用
- 规则集可配置性
- 豁免机制:文件内豁免、外部豁免文件
- Github SystemVerilog 检查器动作可用。

文档:
格式化器
verible-verilog-format 格式化器根据特定风格管理空白字符。其主要目标是减轻人工手动管理空白、换行和缩进的负担,并提供一个可集成到任何编辑器中的工具,以实现编辑器无关的一致性。
功能(不同程度的开发中):
- 修正缩进
- 修正令牌间间距,并具备语法上下文感知能力
- 按列宽限制进行行换行
- 支持增量格式化,仅处理已更改的行
- 交互式格式化:接受或拒绝格式化更改
- 表格对齐
- Github SystemVerilog 格式化器动作可用。
语言服务器
verible-verilog-ls 是一款语言服务器,它能将 Verible 命令行工具所具备的功能直接集成到您的编辑器中。
它实现了标准化的 language server protocol,该协议受到众多编辑器和 IDE 的支持。
此语言服务器提供格式化和代码检查功能。在可能的情况下,它还能提供快速修复建议。

词法差异比较
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 团队有意探索如何帮助其他工具开发者提供 SystemVerilog 前端,例如,生成抽象语法树(AST),或者甚至可能提供更高级的 UHDM 格式。如果您有兴趣合作,请联系我们。
项目介绍
Verible 是一套 SystemVerilog 开发者工具集,其中包含解析器、风格检查器、格式化工具以及语言服务器。【此简介由AI生成】