Verilog and SystemVerilog support including linting from popular tools, completions, formatting, and project level analysis.
Install it from the VS Code Marketplace or OpenVSX
Linters
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:
Language Server
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.
See a detailed feature list and roadmap in FEATURES.md
Verible supports both SystemVerilog and Verilog, while the others are only verilog. verilog.formatDirs
lets you specify directories that you want to be formatted.
Recommended Configuration
This is used for definition support, hover support, and most of the analysis features. Use 6.1 or later for port/param definition support
- Windows - Release are here
- Linux - Releases are here
- macOS - Install through Homebrew:
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.
Example Configuration
// 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"
],
See all config options in CONFIG.md
For debugging your config, you can see the logs in Output tab > select 'verilog' in the dropdown
Contributions are welcome, see DEVELOPING.md