Verilog and SystemVerilog support including linting from popular tools, completions, formatting, and project level analysis.
Install it from the VS Code Marketplace or OpenVSX
slang
(recommended) || iverilog
(Icarus) || verilator
|| modelsim
|| xvlog
(Xilinx/Vivado) || xrun
(Cadence/Xcelium)The extension leverages the "-y" flag found on most tools, pointing it to a symlink index of the repo. This makes for almost zero per-project config when modules match each file name. A command titled Verilog: Fix filenames...
is offered to help with refactoring these to match.
Note for windows users: "Developer Mode" needs to be turned on in order to create symlinks.
Multiple linters are able to run in parallel:
Snappy Hover/Goto Definition on nearly every symbol, including in other files. Optional inlay hints for ports.
Completions- Modules, Params/Ports, Macros, Package references, SV builtins, etc.
Set top level, which shows the hierarchy, different modules used, project level linting, and soon to be waveform integration.
verible-verilog-ls
|| veridian
|| svls
verible-verilog-format
(recommended) || verilog-format
|| istyle
Verible supports both SystemVerilog and Verilog, while the others are only verilog. verilog.formatDirs
lets you specify directories that you want to be formatted.
This is used for definition support, hover support, and most of the analysis features. Use 6.1 or later for port/param definition support
brew install universal-ctags
This is the recommended linter because it's the fastest and most compliant language frontend, and it has so many more useful warnings than other tools.
// these get passed to linters and other tools with -I, or the correct format for that tool
"verilog.includes": [
"hdl/lib",
"hdl/includes"
],
"verilog.ctags.path": "/usr/local/bin/ctags-universal",
"verilog.lint.slang.enabled": true,
// includes and '-y .sv_cache/files' are already passed to linters
"verilog.lint.slang.args": "--error-limit 200",
"verilog.lint.slang.path": "/usr/local/bin/slang",
// multiple linters can run concurrently
// you can specify if some can only run at the project level
"verilog.lint.verilator.projectEnabled": true,
// tools will use the default name on the path if not given
"verilog.svFormat.formatter": "verible-verilog-format",
"verilog.svFormat.verible.args": "--flagfile=myflags.txt",
"verilog.svFormat.verible.path": "/usr/local/bin/verible-verilog-format",
// select directories to format on save
"verilog.formatDirs": [
"hdl/my/project/with/formatting"
],
For debugging your config, you can see the logs in Output tab > select 'verilog' in the dropdown