找来找去, 也只有verilator 最适合做语法检查了, verilator不仅提供错误行号, 还列号, 不像svlint 只有错误信息
Msys2 下MINGW64 终端安装 verilator
使用
|
|
可以搜索到包含verilator 关键字的所有包
|
|
即可完成安装
Emacs 端flycheck 的verilator配置
因为flycheck 默认在verilog-mode 下会使用 verilator 来做语法检查, 所以这里不需要对flycheck 配置
由于 verilator 是从 MINGW64 中安装的, 所以Emacs 的Shell 必须设置为Mingw64 下的bash.exe 否则, 运行会有问题
以 Doom Emacs 为例
Msys2 (Mingw64) 使用Windows 环境变量
因为默认情况下Mingw64 用不了Windows 的环境变量, 如果不把Windows 的环境变量包进来的话, 在Emacs 中运行很多Windows 软件会找不到路径
只需要在Windows 中增加一个环境变量, 变量名为 MSYS2_PATH_TYPE , 值为 inherit
然后重启 Mingw64 即可生效
在Mingw64 终端下执行 doom sync 生成doom 的env 环境变量文件
由于使用 mingw64 作为SHELL 可能会导致git 出现 git@gitee.com: Permission denied (publickey) 类似的情况
这时候只需要重新生成key 再在 gitee 或者 github 上重新添加即可
重启Emacs
正常情况下打开sv 或者 verilog 文件就可以看到flycheck 已经在使用verilator 来工作了
flycheck 工作原理
verilog 的flycheck checker
|
|
手动运行命令结果
flycheck 运行机制分析
- 首先flycheck 会调用 checker 中的command
- 根据 checker 中的 error-patterns 来提取错误信息( 包含行号, 列号, 错误信息等)
- 结果展示
所以如果flycheck 的结果不符合预期, 可以手动执行command 中的命令, 然后看看是不是error-patterns 解析不对
emacs verilator 可能会遇到的问题
在 emacs 中打开eshell 输入 verilator –help
/usr/bin/env: command not found
出现这个问题的原因是没有/usr/bin/env 这个解析器, 因此我们需要修改verilator 这个perl 脚本或者显式的用perl 来调用
解决办法1 ( 试了下, 不太行还是看办法2 吧 )
修改verilator 把第一行的 #!/usr/bin/env perl 改成 #!perl
推荐这种办法, 比较灵活通用, 只要在shell 中能找到 perl 即可
很遗憾, 这种办法在Emacs 中无效… 虽然在eshell 里面可以直接运行了, 但是flycheck 还是不认
解决办法2
通过查找 verilator 可以发现, 这其实是一个perl 脚本, 经过实验发现指定使用msys2 的perl 来运行这个脚本就可以了
在verilator 同级目录下如( E:\msys64\mingw64\bin ), 新建一个verilator.bat
|
|