verillog格式化 verible使用
linux直接使用二进制文件
官网网址

选择对应的linux压缩包,下载到本地解压,把文件夹路径添加到PATH变量中,可以在终端输入ver以后tab看看是否会有verible-verilog-format等可执行文件。
对单个文件使用时用verible-verilog-format filename,这时只会显示格式化后的内容在终端,不会修改文件,加--inplace选项修改文件。
对多个文件使用时,简单的可以像打开多个vim文件一样,verible-verilog-format --inplace *.sv
如果结合find使用
//思路1,用vim
vim `find . -name *.sv`
//在vim命令行中
:argdo Neoformat
//使用起来会有些卡顿,修改多个文件需要:set hidden与:set nomore
//思路2,用命令行
verible-verilog-format --inplace `find . -name *.sv`
如果用filelist,可以参考网址[https://github.com/wherelse/verilog-formatter/blob/master/format_verilog.py]
import os
import argparse
# if you want to modify the format parameter, you can change it below.
# the details of parameter reference: https://chipsalliance.github.io/verible/verilog_format.html
format_parameter = '--column_limit=200 --indentation_spaces=2'
parser = argparse.ArgumentParser(description='format verilog by verible')
parser.add_argument('--input', '-i', help='input filelist(.f) file', required=True)
args = parser.parse_args()
with open(args.input, mode="r") as filelist:
filepaths = filelist.readlines()
for filepath in filepaths:
if(filepath):
# print("verible-verilog-format --inplace {0} {1}".format(format_parameter,filepath))
os.popen("verible-verilog-format --inplace {0} {1}".format(format_parameter,filepath))
filelist.close()
print("format verilog done")
使用时终端输入python3 test.py -i list.f
可以使用find命令制作filelist,例如find . -name "*.sv" > list.f找出文件夹下所有sv文件放入list.f。
相关参数设置
参考网页[https://vlieo.com/post/verible-verilog-format-use-guide/]与[https://chipsalliance.github.io/verible/verilog_format.html]
常用设置参考--column_limit=300 --indentation_spaces=4 --assignment_statement_alignment=align --named_port_alignment=align --port_declarations_alignment=align --module_net_variable_alignment=align
vim借助neoformat使用verible-verilog-format
首先下载安装neoformat,这里不再赘述。
verilog_systemverilog.vim
neoformat/autoload/neoformat/formatters目录下,新建或修改文件verilog_systemverilog.vim
这里的文件名与vim中显示的文件类型相统一,如果不同的话,需要修改名称。安装了airline的话,默认情况下右下角有显示。

其中内容如下:
function! neoformat#formatters#verilog_systemverilog#enabled() abort
return ['verible_format']
endfunction
function! neoformat#formatters#verilog_systemverilog#verible_format() abort
return {
\ 'exe': '/path/to/verible_verilog_format',
\ 'args': ['--column_limit=200','--indentation_space=4','-']
\ 'stderr': 1,
\ 'stdin': 1,
\ }
endfunction
在vim中输入指令:set verbose=1可以查看报错信息。
其中stderr必须为1,结合报错信息与neoformat/autoload/neoformat.vim可以看到,

如果stderr为0,输出的命令将为verible_verilog_format --.. 2> /tmp/neoformat/stderr.log,这个2将被视为verible_verilog_format要修改的文件,
而不是表示重定向。(非常奇怪,不知道是这个可执行文件不支持重定向还是系统问题)
该情况是将缓冲区作为输入,前面的参数是正常参数,参数'-'是表示将缓冲区作为输入,输出内容再进行返回。
内容2.0
function! neoformat#formatters#verilog_systemverilog#enabled() abort
return ['verible_format']
endfunction
function! neoformat#formatters#verilog_systemverilog#verible_format() abort
return {
\ 'exe': '/path/to/verible_verilog_format',
\ 'args': ['--column_limit=200','--indentation_space=4']
\ 'stderr': 1,
\ }
endfunction
该情况是将文件拷贝到一个tmp文件中作为输入,输出拷贝到当前文件。
内容3.0
function! neoformat#formatters#verilog_systemverilog#enabled() abort
return ['verible_format']
endfunction
function! neoformat#formatters#verilog_systemverilog#verible_format() abort
return {
\ 'exe': '/path/to/verible_verilog_format',
\ 'args': ['--inplace','--column_limit=200','--indentation_space=4']
\ 'stderr': 1,
\ 'replace': 1,
\ }
endfunction
该情况是将文件拷贝到一个tmp文件中,使用inplace选项修改了该tmp文件,再将tmp文件拷贝到当前文件。
使用
上面三种配置任意选一种就可以进行使用,在vim命令行输入:Neoformat就可以使用。也可以对这个指令进行重映射。
vscode使用插件
windows系统
vscode下载插件

官网下载二进制文件
选择对应的win64压缩包,下载到本地解压。
把二进制文件所在目录添加到环境变量(用户或系统都可以)
vscode设置界面配置

上行可以添加一个自定义设置,例如--column_limit=300 --indentation_spaces=4 --assignment_statement_alignment=align --named_port_alignment=align --port_declarations_alignment=align --module_net_variable_alignment=align
下行选择win64系统,不可以选择none
注:vscode修改完设置不重启可能无法生效。
linux系统
同官网下载二进制文件
选择对应的linux压缩包,下载到linux系统下。
把二进制文件所在目录添加到环境变量。
最简单方法:在.bashrc中添加一行export PATH=$PATH:/home/...
验证方法:命令行可以直接执行二进制文件名,例如linux指令包括verible-verilog-format
注:下载的二进制文件可能没有可执行权限,导致指令找不到,通过chmod -R +x .../bin给整个文件夹添加权限。
vscode设置界面配置

上行设置同windows,下行不能选none,这里随便尝试了一个Centos就成功了。(linux系统是red hat)
vscode ssh连接配置
直接在ssh连接窗口远程下载插件。

点击蓝色按钮
这里systemverilog and verilog formatter已经远程下载了,所以没有蓝色按钮。
进行配置的步骤与本地类似,可以发现设置时可以本地与远程ssh连接分别设置,设置时同上,二进制文件同样需要下载到服务器本地,添加到路径,参考上面内容。

注意
- 当v文件存在错误时,格式化是不起作用的。
- 遇到报错
test.sv: Formatted output is lexically different from the input. Please file a bug. Details:
Error lexing text: "NOVIF",{"virtual interface must be set for:",get_full_name(),".vif"}
subtoken: (#722: "\357")
Lexical error.
Lexical error from left input text.
是原文件有问题,我遇到的是"NOVIF"后面的,是中文逗号。
3. neoformat报错可以set verbose=1查看具体错误信息。

浙公网安备 33010602011771号