自动补全
559 字约 2 分钟
2025-01-08
什么是自动补全
自动补全在当前位置给出可以插入的候选项,并根据上下文筛选:在表达式里给出当前作用域可见的信号和参数,在实例的参数列表里只给出目标模块的参数,在端口连接里只给出目标模块的端口。输入工程中某个模块或厂商原语的名称,还可以直接插入完整的例化模板,包括参数列表和全部端口连接。
候选会随输入自动出现,也可以按 Ctrl+Space 手动打开,用 Tab 或 Enter 接受。
演示
补全类型
| 类型 | 触发位置 | 候选 |
|---|---|---|
| 符号补全 | 表达式中输入名称 | 当前作用域可见的信号、参数等 |
| 例化补全 | 输入模块名或厂商原语名 | 含参数列表和端口连接的例化模板 |
| 参数补全 | 实例 #(...) 内输入 . | 目标模块的参数 |
| 端口补全 | 实例端口连接内输入 . | 目标模块的端口及方向 |
| 系统任务 | 输入 $ | 系统任务和函数 |
| 预处理 | 输入反引号 ` | 预处理指令和可见的宏 |
| 路径 | include 字符串中 | 可找到的文件和目录 |
例化模板只是起点,插入后要逐项核对参数、端口、位宽和连接的信号。原语候选来自后端提供的厂商器件库,出现 IBUF 等候选不代表设计可以在任意器件上使用。
其他例化入口
除了输入模块名,还可以使用 TOOL Options → Instantiate Module,或命令 Generate instance template from selected module(Alt+I),选择目标模块后在光标处插入实例。
自定义代码片段
扩展自带 HDL 代码片段,带占位符的片段按 Tab 跳到下一项。自定义片段通过 VS Code 的 Configure User Snippets 创建,放在对应语言的用户片段或工作区的 .code-snippets 文件中:
{
"Clocked register": {
"prefix": "dide_reg",
"body": ["always_ff @(posedge ${1:clk}) begin", " ${2:q} <= ${3:d};", "end"],
"description": "Clocked register"
}
}保存为 SystemVerilog 用户片段后,在 .sv 文件中输入 dide_reg 即可使用。片段配置不写入 property.json。