verilog/vhdl 在 vscode 中需扩展、正确语言模式和编辑器配置三者协同才能实现自动补全与语法高亮;缺一不可。安装官方扩展(verilog-hdl/systemverilog 和 vhdl),手动关联 .v/.vhdl 文件类型,启用 editor.quicksuggestions.other,配置 lsp 路径(如 verilator/ghdl),并完全重启 vscode。

Verilog/VHDL 在 VSCode 中默认没有自动补全和语法高亮,必须靠扩展 + 正确语言模式识别 + 基础编辑器配置三者协同才能生效;缺一不可。
安装对应语言扩展并确认语言模式正确
VSCode 不认识 .v 或 .vhdl 文件,即使装了扩展,右下角显示 “Plain Text” 就说明语言服务器根本没加载,补全和高亮必然失效。
- 搜索并安装
Verilog-HDL/SystemVerilog(作者 mshr-h),不是 “Verilog HDL” 或其他同名变体 - 搜索并安装
VHDL(作者 vijayv500),注意不是 “VHDL Language Support” 等非官方版本 - 新建一个
top.v文件,**立刻看右下角**:如果显示 “Verilog HDL”,说明识别成功;若为 “Plain Text”,点击它 → 选择 “Configure File Association for '.v'” → 设为 “Verilog HDL” - 同理对
.vhdl文件手动设为 “VHDL” 语言模式
开启 editor.quickSuggestions 并检查作用域
补全不弹出,90% 是因为 editor.quickSuggestions 在当前语言上下文中被关掉了——这不是插件问题,是 VSCode 默认策略。
- 打开
settings.json(Cmd+Shift+P →Preferences: Open Settings (JSON)) - 确保有如下配置(不要只改 UI 设置,它可能只作用于当前工作区):
{ "editor.quickSuggestions": { "other": true, "comments": false, "strings": false } } - 这个配置中
"other": true是关键,它控制普通代码区域(如模块实例化、信号赋值左侧)是否触发补全;comments和strings关掉是合理默认,避免在注释里误弹 - 如果补全仍不出现,用 Cmd+Shift+P →
Developer: Inspect Editor Tokens,把光标放在变量名前,确认 token scope 是source.verilog或source.vhdl,否则语言模式还是错的
补全弱或跳转失败?检查 LSP 是否就位
基础高亮和简单关键字补全是扩展自带的,但信号名、模块端口、define 宏的补全,依赖语言服务器(LSP)。没有 LSP,Ctrl+Click 跳转定义、悬停看接口都会失败。
- Verilog 推荐配
Verilog Linter扩展 +verilator(需提前brew install verilator或从源码编译) - VHDL 推荐配
VHDL Language Server扩展 +ghdl(brew install ghdl) - 在
settings.json中补上路径配置:"verilog.linting.verilatorPath"或"vhdl.languageServer.path",值必须是可执行文件的绝对路径(如/opt/homebrew/bin/verilator) - 重启 VSCode 后,打开一个已例化的模块,把光标停在模块名上,等 2 秒看有没有悬停提示;没有,说明 LSP 没连上,优先检查路径和
verilator --version是否能运行
常见失效场景与绕过方式
有些补全行为看似“随机失效”,其实有明确触发条件,容易被忽略。
-
assign或always块内输入信号名不提示?确认你没写在字符串或注释里——editor.quickSuggestions.strings默认是false,这是故意的 - 宏定义(
`define)不参与补全?原生 Verilog 扩展不解析预处理,verilator也不做宏展开,这类补全基本不可靠,别强求 - 刚装完扩展没反应?别只点“重载窗口”,要**完全退出 VSCode 进程再启动**,macOS 尤其要注意 Dock 图标右键“退出”,而非关窗
- 多个
.v文件在不同目录,补全只在当前文件有效?这是正常现象——LSP 默认不跨文件索引,除非你用verilator -f filelist.f方式传入完整文件列表并配置扩展支持











