开源 IC 工具/库 —— verible

Posted on 2025-05-29 01:17 in Tools

Verible

verible 是一个由 Chips Alliance 开发的 SystemVerilog 开发者工具套件,包括解析器、风格检查器、格式化工具和语言服务器。Verible 的主要任务是解析 SystemVerilog(IEEE 1800-2017),适用于多种应用场景,如开发者工具。它支持解析未经预处理的源文件,适用于单文件应用,如风格检查和格式化。此外,Verible 还可以适应解析预处理的源文件,这是真实编译器和工具链所需要的。

Installation

从源码编译要安装一大堆工具,最省事的方法是从 github 上下载最新 release 的二进制文件,下载后把路径添加到 $PATH 变量即可。

export PATH=$HOME/.local/verible/bin:$PATH

命令行能自动补全则说明安装成功。

Formatter

可以通过 --helpfull 选项查看 formatter 支持的选项,大部分都顾名思义,其中有个别选项含义有点模糊,记录如下。

--column_limit 看名字似乎是 format 自动 wrap 代码到最大列,实际上并不是。这个 flag 设置了 formatter 生效的最大列宽,当代码列宽超过这个值时就会停止 format,不再对后续 line 做 format。所以还是需要我们自己手动 wrap 或者依靠编辑器自动换行。

虽然不能自动插入换行,但是 formatter 可以自动删除冗余的换行,把多行合并成一行(所谓的换行是冗余的,就是删除多行之间的换行后合并成的一行仍然没有超过 column_limit)。如果多行合并后超出了 column_limit,则完全不进行合并。比如一个 assign 语句分成了 3 行写,每行的列宽分别为 70,5,10,且设置的 column_limit 为 80,那么因为 70+5+10 > 80,即使 70+5 < 80,也并不会合并前两行。

--line_break_penalty

--over_column_limit_penalty

--wrap_spaces

--named_parameter_alignment:子模块例化时 parameter 传参括号的对齐位置。

--named_parameter_indentation:子模块例化时 port 括号的对齐位置。

--port_declarations_right_align_packed_dimensions:packed array port 向右对齐,即最低维度对齐。(很有用)

--port_declarations_right_align_unpacked_dimensions:unpacked array port 向右对齐,即最低维度对齐。(很有用)

--try_wrap_long_lines

和其他工具的集成:

  • vs code:插件 SystemVerilog and Verilog Formatter
  • vim:neoformat