🌟 前言
欢迎使用 verilog-hdl-format 插件!这款强大的 VSCode 插件旨在帮助你提高 Verilog HDL 代码的编写效率和代码质量。它提供了代码格式化、文件树浏览、一键例化等一系列实用功能,让你的 Verilog 开发更加高效便捷。
📢 您的反馈至关重要! 如果你有任何建议或在使用过程中遇到问题,请随时通过以下方式与我联系:
- QQ: 1391074994
- QQ 群: 819816965
💖 如果你觉得这个插件对你有帮助,请不要吝啬你的好评,非常感谢!
⚠️ 注意:下面的视频链接暂时未更新!!最新功能请查看本页面下面的简介文档!!!
🎬 操作范例
- Bilibili 视频演示: 点击观看 讲解版本:0.0.9.20240308[如果不是最新版本可能会存在差异]
📚 演示文档-注意:
💾 仓库地址
⚙️ VSCode 版本要求
🚀 主要功能概览
- 代码格式化: 自动对齐 Verilog 代码的变量、逗号和括号,使代码更易读。
- 文件树显示: 以树状结构清晰地展示 Verilog/VHDL/SystemVerilog 文件的层次关系,方便代码导航。
- 一键例化: 快速生成 Verilog 模块例化代码,并自动复制到剪贴板,告别繁琐的手动编写。
- 语法高亮: 支持 ucf, xdc, do, tcl, Verilog, SystemVerilog, VHDL 和高云 .cst 语法高亮显示,提升代码可读性。
- 语法跳转: 快速跳转到模块定义、引脚定义和变量定义,提高代码阅读和调试效率 (集成 CTAGS)。
- 代码补全: 提供智能的 Verilog 代码补全建议,减少代码输入量。
- 定义悬停: 鼠标悬停在变量或模块名上即可查看其定义信息 (集成 CTAGS)。
- 语法检查: 支持
xvlog、modelsim/QuestaSim、iverilog、verilator、slang 五种 linter,及早发现并修复潜在问题。
- 返回跳转: 在
module 声明上方以 CodeLens 显示"谁实例化了我",一键跳转到实例化该模块的文件。
- VIVADO 联合仿真: 简化在 VSCode 中进行 VIVADO 联合仿真的流程 (Modelsim/QuestaSim)。
- 仿真命令树: 侧边栏
VERILOG SIM CMD 视图,一键启动 Vivado 仿真、生成 tb.do 脚本、快速联合仿真。
- 寄存器文档生成: 从
parameter/localparam 自动生成 Markdown 与 Excel 格式的寄存器列表文档。
- VIVADO 程序备份和自动下载: 备份 VIVADO 工程的 bit 文件,并提供自动下载脚本,保障项目安全。
- Vivado 仿真文件快速转换: 合并转换 Modelsim/QuestaSim 的
do 仿真脚本文件,方便不同工具之间的切换。
- 动态文件头生成: 输入
module/tb 自动生成带公司名、作者名、时间戳的文件头注释与模块框架。
- FTP 功能: 方便地将 bit 文件上传到 FTP 服务器,实现远程部署。
- UCF 转 XDC 文件: 将 UCF 文件转换为 XDC 文件,方便进行约束文件的迁移。
- 数字递增/递减: 快速递增或递减选中的数字,提高编辑效率。
- 颜色主题: 提供多款自定义的 Verilog 颜色主题 ("jiang percy verilog themes"),个性化你的开发环境。
- 例化端口方向显示: 在模块例化代码中自动显示端口方向箭头(
← 输入 / → 输出 / ↔ 双向),直观展示信号流向。
[toc]
🛠 功能详解
🎨 代码格式化
- 功能简述: 使用
formatSelection 命令格式化 Verilog 代码 (变量对齐、逗号对齐、括号对齐)。
- 命令:
- 🔵 【代码格式化】 命令:
formatSelection 快捷键: CTRL + L
- 🔵 【ALWAYS 块格式化】 命令:
formatAlwaysBlock 快捷键: CTRL + U
- 🔵 【对齐格式化】 命令:
formatAlignment 快捷键: 无
- 设置:
注意点1. 配置下面的格式化num值之后如果不生效清重启VSCODE!!!!!!!!!!
注意点2. 配置的num值不是空格数绝对值,而是包含了关键字的长度,如果存在少的关键字的行则空格数可能比你设置的更长,此为正常现象,具体请看下面的【格式化简要说明】需要满足最长的格式化设置!!!!!!!!!!
注意点3. windows可以使用内部集成的ctags,或者选择外部自己的ctags。linux系统必须使用外部ctags,安装之后选择路径,具体指令查看本页最后的说明
格式化功能识别的主要逻辑:
-
- 端口写法:
/^\s*(input|output|inout)(?=\s|\[)\s*(?:(reg|wire|logic)(?=\s|\[|$))?\s*(?:(signed)(?=\s|\[|$))?\s*(\[.*\])?\s*([^;=,]+)\s*(?:(=[^;,]*?)\s*)?(,|;|\)\s*;)?\s*(?:=\s*([^;,]*?)\s*)?(?:\/\/.*)?$/
-
- 定义变量写法 :
/^\s*(reg|wire|integer|logic)(?=\s|\[)\s*(?:(signed)(?=\s|\[|$))?\s*(\[[^\]]*\])?\s*([^;=,]+)\s*(.*)$/
-
- localparam|parameter :
/^\s*(localparam|parameter)\s*(\[.*\])?\s*(\w+)\s*=\s*([^,;]+)\s*(,|;)?/
-
- assign :
/^\s*assign\s*(.*?)\s*=\s*(.*?);\s*.?$/
🔵 Simple Align: Num1 到 Simple Align: Num21: 分别对应代码格式化时不同部分的空格数量(包含前级关键字,不是绝对空格数)。
例如,对于以下代码:
/*[num1]*/ output reg signed /*[num2]*/ [ 15:0] /*[num3]*/ dac1_ch2_q /*[num4]*/ = /*[num20]*/10'h20 ;
/*[num5]*/ reg signed /*[num6]*/ [ 15:0] /*[num3]*/ reg_rf_ct9 /*[num8]*/ = /*[num21]*/16'h1234;
/*[num9]*/ parameter /*[num10]*/ RF_ADC3_MIN /*[num11]*/ = 16'h8233 /*[num18]*/ ;
/*[num12]*/ assign /*[num13]*/ uart_bus_clk /*[num14]*/ = clk /*[num19]*/ ;
uart_top_232 u0_uart_top_232(
/*[num15]*/ .uart_bus_clk /*[num16]*/ (uart_bus_clk /*[num17]*/ ),
/*[num15]*/ .uart_bus_rst /*[num16]*/ (~rst_n /*[num17]*/ ),
/*[num15]*/ .uart_tx /*[num16]*/ (rx_232_0 /*[num17]*/ )
);
各编号对应的位置说明:
| 配置 |
对应位置 |
适用语句 |
num1 |
缩进(到 input/output/inout 前) |
端口声明 |
num2 |
signed 后到第一位宽 [ 前 |
端口声明 |
num3 |
位宽 ] 后到变量名前 |
端口/变量声明 |
num4 |
变量名后到 ;(或 =,带初值时) 前 |
端口声明 |
num5 |
缩进(到 reg/wire/logic 前) |
变量声明 |
num6 |
signed 后到第一位宽 [ 前 |
变量声明 |
num8 |
变量名后到 ;(或 =,带初值时) 前 |
变量声明 |
num9 |
缩进(到 parameter 前) |
参数声明 |
num10 |
参数名前的空格 |
参数声明 |
num11 |
参数名后到 = 前 |
参数声明 |
num12 |
缩进(到 assign 前) |
assign 语句 |
num13 |
左值信号名前 |
assign 语句 |
num14 |
左值信号名后到 = 前 |
assign 语句 |
num15 |
例化端口名 .xxx 前的空格 |
模块例化 |
num16 |
端口名后到 ( 前 |
模块例化 |
num17 |
连接信号名后到 ) 前 |
模块例化 |
num18 |
参数初值后到 ; 前 |
参数声明 |
num19 |
assign 表达式后到 ; 前 |
assign 语句 |
num20 |
等号后到初值前 |
端口声明带初值时 |
num21 |
等号后到初值前 |
变量声明带初值时 |
🔵 Num20 / Num21 补充说明:
用于变量/端口声明带初值(name = 初值;)的写法,控制等号后到初值之间的空格数。
带初值时 num4(端口) / num8(变量) 控制的是变量名后到 = 前的宽度,num20/num21 接在等号之后。
同组内各行的 = 与 ; 会自动纵向对齐(初值区按组内最长初值补齐)。
语句中不存在初值时,Num20/Num21 不生效,格式化效果与原来完全一致。
🔵 simpleAlign.upbound 和 simpleAlign.lowbound 为位宽 [] 内的空格数。
🔵 Simple Align: Width_always: always 代码行的缩进量。
always 块的格式化适配两种格式:(不支持begin和end在同一行的情况)
- 第一种:
always/if/else/else if 后面有 begin/end (C 风格写法)
- 第二种:
always/if/else/else if/begin/end 单独成行的情况
格式化简要说明:
"simpleAlign.num1": {"description": "output/input/inout等端口声明关键字前面的缩进空格数(绝对空格数)。例如:/[num1]/output,其中num1表示关键字output前面有num1个空格。默认为4。"},
"simpleAlign.num2": {"description": "端口声明中signed关键字后的附加空格数。例如:output reg signed/[num2]/[15:0],{当output 开头的行后面的reg不存在的时候,自动补6个0,当signed不存在的时候,自动补7个0,自动补0的部能缩减},其中num2表示signed关键字后面额外添加num2个空格。默认为1。"},
"simpleAlign.num3": {"description": "位宽声明[]的固定总宽度(包含[ : ]符号本身){既'['到后面的变量的空格数} 【注意:设置num3和Upbound以及Lowbound存在联动部分,应满足:num3 >= Lowbound+Upbound+3】。用于确保后面的变在同一列对齐。例如:设置num3=20,则'[LB_ADDRESS_WIDTH-1:0]'和'[7:0]'都会格式化为20个字符宽度,不足部分用空格填充。默认为15。"},
"simpleAlign.num4": {"description": "端口声明中变量名的最小宽度(变量名+后面的空格总宽度)。例如:dac1_ch2_q/[num4]/;,其中num4=27表示从变量名字符d开始到分号前的总宽度为27。默认为27。"},
"simpleAlign.num5": {"description": "reg/wire/integer/logic等类型声明关键字前面的缩进空格数(绝对空格数)。例如:/[num5]/reg signed [15:0],其中num5表示关键字reg前面有num5个空格。默认为4。"},
"simpleAlign.num6": {"description": "reg/wire/integer/logic声明中signed关键字后的附加空格数。例如:reg signed/[num6]/[15:0],{当reg/wire/integer/logic开头的行后面的signed不存在的时候,自动补7个0,自动补0的部分不减},其中num6表示signed关键字后面额外添加num6个空格。默认为6。"},
"simpleAlign.num7": {"description": "保留配置(未使用)。"},
"simpleAlign.num8": {"description": "reg/wire/integer/logic声明中变量名的最小宽度(变量名+后面的空格总宽度)。例如:reg_rf_ct9/[num8]/;,其中num8=24表示从变量名开始到分号前的总宽度为24。默认为24。。"},
"simpleAlign.num9": {"description": "localparam/parameter声明关键字前面的缩进空格数(绝对空格数)。例如:/[num9]/parameter RF_ADC3_MIN = 16'h8233;,其中num9表示关键字parameter前面有num9个空格。默认为4。"},
"simpleAlign.num10": {"description": "localparam/parameter关键字后的附加宽度(关键字+后面的空格)。例如:parameter/[num10]/RF_ADC3_MIN =,其中num10=25表示parameter关键字后到参数名开始的总宽度。默认为25。"},
"simpleAlign.num11": {"description": "localparam/parameter声明中参数名的最小宽度(参数名+后面的空格)。例如:RF_ADC3_MIN/[num11]/=,其中num11=27表示从参数名开始到等号前的总宽度。默认为27。"},
"simpleAlign.num12": {"description": "assign赋值语句前面的缩进空格数(绝对空格数)。例如:/[num12]/assign uart_bus_clk = clk;,其中num12表示关键字assign前面有num12个空格。默认为4。"},
"simpleAlign.num13": {"description": "assign关键字后的附加宽度(assign+后面的空格,用于等号对齐)。例如:assign/[num13]/uart_bus_clk =,其中num13=29表示assign关键字后到目标信号名前的总宽度。默认为29。"},
"simpleAlign.num14": {"description": "assign赋值语句中目标信号名的最小宽度(信号名+后面的空格)。例如:uart_bus_clk/[num14]/=,其中num14=27表示从信号名开始到等号前的总宽度。默认为27。"},
"simpleAlign.num15": {"description": "模块实例化端口连接前面的缩进空格数(绝对空格数)。例如:/[num15]/.uart_bus_clk(uart_bus_clk),其中num15表示点号前面有num15个空格。默认为4。"},
"simpleAlign.num16": {"description": "模块实例化中端口名的最小宽度(端口名+后面的空格)。例如:.uart_bus_clk/[num16]/(uart_bus_clk),其中num16=34表示从点号后端口名开始到左括号前的总宽度。默认为34。"},
"simpleAlign.num17": {"description": "模块实例化中连接信号名的最小宽度(信号名+后面的空格)。例如:.uart_bus_clk(uart_bus_clk/[num17]/),其中num17=25表示从信号名开始到右括号前的总宽度。默认为25。"},
"simpleAlign.num18": {"description": "localparam/parameter赋值表达式的最小宽度(表达式+后面的空格,用于分号对齐)。例如:= 16'h8233/[num18]/;,其中num18=20表示从等号后到分号前的总宽度。默认为20。"},
"simpleAlign.num19": {"description": "assign赋值语句中赋值表达式的最小宽度(表达式+后面的空格,用于分号对齐)。例如:= clk/[num19]/;,其中num19=20表示从等号后到分号前的总宽度。默认为20。"},
"simpleAlign.upbound": {"description": "位宽上界冒号前数字的最小宽度,默认为4。"},
"simpleAlign.lowbound": {"description": "位宽下界数字的最小宽度,默认为2。"},
"simpleAlign.width_always": {"description": "always块语句前面的缩进空格数,默认为4。格式化的时候bagin 和end 不能写在一行 否则代码会被吃掉!"},
gif/图片 演示:

🌳 文件树显示
功能简述: 支持 Verilog/VHDL/SystemVerilog 代码层次结构的文件树显示,支持 Xilinx IP 与原语识别。
命令:
- 🔵 【文件树显示】 命令:
Refresh the verilog file tree display 快捷键: 无
- 🔵 【设为文件树顶层】 命令:
设为文件树顶层 (Set as FPGA Tree Top) 快捷键: 无(文件树节点右键)
- 在侧边栏编辑器打开
- 在主界面新的编辑器打开
- 在 Windows 文件资源管理器显示
- 在 VSCode 文件资源管理器显示
- 设置 FPGA 顶层/仿真顶层
功能说明:
- 🔵 Xilinx IP 识别: 自动识别工程中的
.xci 文件。IP 识别只按文件名匹配,不读取文件内容,因此不受排除文件夹影响——ip/core/bd 等目录里的 IP 也能正常显示,并使用专用图标标注。
- 🔵 Xilinx 原语识别: 无 HDL 源文件、也不是 IP 的子模块(如
IBUFDS、BUFG、MMCME2_ADV 等),会按原语前缀自动识别并使用专用图标。
- 🔵 顶层模块判定: 未被任何模块实例化的模块自动判定为顶层,显示在树的最外层。
- 🔵 子树模式: 设置了顶层后,树只显示该顶层往下的层级。
- 🔵 支持 VHDL 和 Verilog/SystemVerilog 的混合文件树显示。
设置:
- 🔵
Verilog Module Finder: Exclude Folders: Verilog 文件树的排除文件夹名称,可以自定义增加、删除需要匹配的文件夹名称。
- [排除 IP 或备份文件,使文件树的 TOP 层显示更干净,默认排除
ip 和 core 文件夹]
- [注:该配置只影响 HDL 源文件的解析,不影响
.xci IP 的识别]
- 🔵
Verilog Module Finder: Auto Scan: 打开文件夹时是否自动扫描构建文件树。
- [默认
false,即不自动扫描,打开文件夹后需手动点击视图右上角刷新按钮才扫描,避免大工程一打开就卡顿]
- [设为
true 则恢复"打开文件夹即自动扫描"的行为]
- 🔵
Verilog Module Finder: Max File Size Kb: 超过此大小(KB)的 HDL 文件跳过解析。
- [默认
8192 (8MB),避免综合/仿真生成的大文件拖慢扫描。设为 0 表示不限制]
- 🔵
verilogModuleFinder.treeIndent: 文件树节点的缩进量。
- 🔵 触发和刷新 (容器右上角有刷新按钮/主编辑器区域鼠标右键也有命令)。
- 🔵 顶层信息保存在工作区的
.vscode/config.json(FPGA_Tree_TOP 字段)。
gif/图片 演示:
⚡ 一键例化
- 功能简述: 一键生成例化/TB 代码,自动复制到剪贴板。
- 命令:
- 🔵 【一键例化】 命令:
Convert_instance 快捷键: 无
- 🔵 【一键 TB】 命令:
Convert_testbench 快捷键: 无
- 设置: 无
- gif/图片 演示:
🧭 语法跳转
- 功能简述: 语法跳转功能,支持 Verilog/SystemVerilog 语法跳转,插件已集成 CTAGS,无需额外配置。
- 命令:
- 🔵 【语法跳转 - 模块跳转】 命令:
skip To Definition Module 快捷键: 鼠标右键【转到例化模块】
- 🔵 【语法跳转 - PIN 跳转】 命令:
skip To Definition Pin 快捷键: 鼠标右键【转到例化 PIN 角】
- 🔵 【语法跳转 - 定义跳转】 命令:
sgotoDefinitionreg 快捷键: 鼠标右键【转到定义】
- 设置: 无
↩️ 返回跳转(逆向例化跳转)
功能简述: 与【语法跳转】方向相反——语法跳转是"从例化处跳到模块定义",返回跳转是"从模块定义跳到谁例化了我"。插件会扫描整个工作区,在 module 声明行的上方以 CodeLens 形式列出所有实例化了该模块的文件,点击即可跳转。
命令: 无(直接点击 CodeLens 文字)
效果演示:
// 在 my_module.v 的模块声明上方会自动显示:
// ⬆ top.v ⬆ tb_top.v
module my_module (
input clk,
output dout
);
点击 ⬆ top.v 即跳转到 top.v 中实例化 my_module 的位置。
说明:
- 🔵 索引在打开文件夹后自动构建(延迟 500ms),构建期间右下角有进度提示。
- 🔵 保存文件会增量更新索引;新建/删除/重命名文件会防抖 1s 后全量更新。
- 🔵 索引的 key 是文件完整路径,因此不同目录下的同名文件(如多个
top.v)互不干扰。
设置:
- 🔵
Verilog Module Finder: Exclude Folders: 与文件树共用同一份排除配置,被排除的文件夹不参与索引。
🔍 语法检查
功能简述: 语法错误检查功能,支持 Verilog/SystemVerilog 语法错误检查,推荐使用 xvlog,也可使用 modelsim/QuestaSim、iverilog。
命令: 无
设置:
方式一: 使用 xvlog (推荐)
- 🔵 配置
xvlog 环境变量。
- 🔵
xvlog 配置成功后,在 cmd 中执行 xvlog -version 查看是否配置成功。
- 🔵 在设置界面配置
FPGA_verilog › Linting: Linter 选择 xvlog。
方式二: 使用 modelsim / QuestaSim
- 🔵 在设置界面配置
FPGA_verilog › Linting: Linter 选择 modelsim。
- 🔵 配置
FPGA_verilog › Linting: Path 填入 vlog 所在的目录,例如 C:/questasim64_10.6c/win64/。
- 🔵 配置
FPGA_verilog › Linting › Modelsim: Work 填入编译库名,一般填 work。
- 🔵 (可选)
FPGA_verilog › Linting › Modelsim: Arguments,填入额外的 vlog 参数,例如 -sv。
- 🔵 (可选)
FPGA_verilog › Linting › Modelsim: Run At File Location,设为 true 则在当前文件所在目录执行,默认为 false(在工作区根目录执行)。
方式三: 使用 iverilog (Icarus Verilog)
- 🔵 安装 Icarus Verilog,安装后在
cmd 中执行 iverilog -v 验证。
- 🔵 在设置界面配置
FPGA_verilog › Linting: Linter 选择 iverilog。
- 🔵 配置
FPGA_verilog › Linting: Path 填入 iverilog.exe 所在的目录,例如 C:/iverilog/bin。
- 🔵 (可选) 若代码中使用了
`include 引用其他目录的文件,在 FPGA_verilog › Linting › Iverilog: Include Path 中添加这些目录。
⚠️ 注意点:
- (modelsim)
Modelsim: Work 填的是逻辑库名(一般填 work),不是路径。
Path 填的是目录而不是可执行文件 (vlog.exe/iverilog.exe) 的完整路径,末尾的路径分隔符可加可不加。
- 这些配置的 scope 是
window,是全局设置,不随单个工程切换。
- 修改设置后,需执行
Developer: Reload Window 重新加载窗口才会生效。
- 打开
.v/.sv 文件或保存文件时会自动触发检查;也可在命令面板执行 FPGA_verilog.lint 手动触发。
- 若看不到错误提示,可在【输出】面板查看实际执行的命令,以及 linter 的报错信息。
- 设置值填
iverilog(小写),不是 icarus。
🌈 语法高亮
- 功能简述: 插件自带以下语言的语法高亮定义:
Verilog (.v / .vh)
SystemVerilog (.sv / .svh)
VHDL (.vhd / .vhdl)
XDC (.xdc) — Xilinx 约束文件
UCF (.ucf) — ISE 约束文件
TCL (.tcl)
DO (.do) — Modelsim/QuestaSim 脚本
CST (.cst) — 高云约束文件
LTX (.ltx) — Vivado 调试探针文件
TXT (.txt)
- 命令: 无
- 设置: 无
💡 代码片段
功能简述: 支持 Verilog/SystemVerilog 常用代码片段,输入前缀后按 Tab 或回车即可补全。
命令(补全前缀): module, tb, geli, separate, adder, subtractor, shangshenyan, zhuangtaiji, always, dapai, assign, alclk, alwaysposclk, alnegclk, alwaysnegclk, begin, end, initial, case, reg, regarray, regmemory, memory, input, output, wire, wirearray, array, parameter, localparam, integer, signed, prefix, include, def, define, ifdef, ifndef, elsif, endif, undef, default_nettype, ternary, if, ifelse, for, while, forever, function, generate, genvar。
动态文件头 (module / tb):
- 🔵 输入
module 或 tb 触发的片段是动态生成的,会自动填入你在设置中配置的 Extension: Company Name 与 Extension: User Name,以及当前日期时间、文件名、文件路径、插件版本号。
- 🔵
module 片段会生成一个带文件头注释的 module ... endmodule 框架。
- 🔵
tb 片段会生成一个带同样文件头的 testbench 框架。
示例(文件头部分):
`timescale 1ns / 1ps
//****************************************VSCODE PLUG-IN**********************************//
// IDE : VSCODE
// VSCODE plug-in version: Verilog-Hdl-Format-0.4.8
// VSCODE plug-in author : Jiang Percy
//****************************************Copyright (c)***********************************//
// Copyright(C) 你的公司名
// Created by: 你的用户名
// Created date: 2026/08/28 22:30:00
// TEXT NAME: $TM_FILENAME
// PATH: $TM_FILEPATH
//****************************************************************************************//
设置: 无
🔎 定义悬停
- 功能简述: 支持 Verilog/SystemVerilog 定义悬停,插件已集成 CTAGS,无需额外配置。
- 命令: 无
- 设置:
Hover: Switch 可以配置悬停显示开关。
- gif/图片 演示:
🔢 数字递增/递减
- 功能简述: 快速递增或递减选中的数字。
- 命令:
- 🔵 [数字递增] 命令:
Increment Selection 快捷键: CTRL + ALT + I
- 🔵 [数字递减] 命令:
Decrement Selection 快捷键: CTRL + ALT + U
- 🔵 [反向选择] 命令:
Reverse Selection 快捷键: 无
- 设置:
Increment.num: 配置数字递增递减的步长。
🚀 VIVADO 联合仿真
- 功能简述: 可以在 VSCode 中快速进行仿真。
- 命令:
- Vivado_Questsim_Modelsim` 快捷键: 无
- 使用说明:点击使用下图命令1和3
- 下图命令2的作用:创建tb.do的快速仿真编译脚本;使用方法:点击后生成tb.do,在modelsim/questasim中输入do.tb.do,就可以进行再次编译仿真。
- 下图命令1的作用:适用于已经运行过成功命令1或者在vivado里面已经运行成功命令2的情况下,之后并且没有添加IP或者FPGA代码的情况下,点击命令2可以快速启动modelsim/questasim软件进行仿真操作。
- 设置:
- 🔵
Vivado › Bat: Path: 设置你的 VIVADO 的安装路径,默认值: C:/Xilinx/Vivado/2018.3/bin/vivado.bat
- 🔵
Vivado Library: Path: 设置你的 VIVADO 联合仿真库路径,默认值: C:/Xilinx/vivado_2018_3_lib
- 🔵
Vivado Sim: Type: 设置你的 VIVADO 联合仿真软件,可选 'modelsim' 或 'questasim',默认值: questasim
- 🔵
Vivado Sim Path: Path: 设置你的联合仿真软件安装路径,默认值: C:/questasim64_10.6c/win64
- gif/图片 演示:
-
🎮 仿真命令树 (VERILOG SIM CMD)
功能简述: 在侧边栏 Verilog-Hdl-Format:TreeView 容器中的 VERILOG SIM CMD 视图,提供 3 个仿真快捷入口,无需打开命令面板。
命令: 直接点击树节点即可执行,对应命令 id 如下:
| 树节点显示 |
命令 id |
说明 |
| 启动 Vivado 仿真 |
verilog.startVivadoSim |
调用 Vivado 生成仿真脚本并启动 Modelsim/QuestaSim |
| 创建 tb.do 仿真脚本文件 |
verilog.runDoFile |
仅生成合并后的 tb.do,不启动仿真软件 |
| 启动快速联合仿真 |
verilog.sim_quick_start |
跳过 Vivado 编译步骤,直接启动已生成的仿真 |
设置: 与【VIVADO 联合仿真】共用同一套配置(Vivado › Bat: Path 等)。
📄 寄存器文档生成
- 功能简述: 扫描当前文件中的
parameter / localparam 声明及其注释,自动生成 Markdown 和 Excel 两种格式的寄存器列表文档,输出在当前工作区根目录。
- 命令: 🔵 【寄存器文档生成】 命令:
doc_reg_produce 快捷键: 无
- 匹配规则:
^\s*(localparam|parameter)\s+(\S+)\s*=\s*([^;]+),并提取该行 // 后的注释内容。
- 输出文件: Markdown 文件 +
.xlsx Excel 文件(自动计算列宽)。
- 设置: 无
🔀 Modelsim do 文件合并
- 功能简述: 合并/转换 Modelsim、QuestaSim 的
do 仿真脚本文件,方便在不同工具之间切换或生成可直接运行的单文件脚本。
- 命令: 🔵 【do 文件合并】 命令:
Conver Modelsim do 快捷键: 无
- 设置: 🔵
Extract Data: Custom Options: modelsim 一键 do 文件合并之后,定义需要追加的指令。
📦 VIVADO 快速例化 IP
- 功能简述: 可以在 VSCode 中快速例化 VIVADO 的 IP。
- 命令:
- 🔵
Vivado_FindIP: 例化最新的 VIVADO 里面新建的 IP 文件 快捷键: 无
- 🔵
Vivado_FindIP_hand: 手动选择例化 VIVADO 里面的 IP 文件 快捷键: 无
- gif/图片 演示:
💾 VIVADO bit 程序备份(WEB 界面)
- 功能简述: bit 程序备份。
- 命令:
Vivado_Bitbackup 快捷键: 无
- 设置:
- 🔵 通过
Vivado_WebShowLog 查看备份界面。
- 🔵 WEB 界面还可以进行 FTP 文件上传。
- 🔵 WEB 还可以自动生成下载 bit 程序和刷新 ILA 脚本,点击按钮后直接在 VIVADO 的 tcl 栏目黏贴既可运行备份的版本程序。
- gif/图片 演示:
🔄 文件转换
- 功能简述:
ucf 转 xdc 文件。
- 命令:
Convert UCF to XDC SORT ORDER 快捷键: 无
- 设置: 无
- gif/图片 演示:
🌐 FTP 功能(WEB 界面)
- 功能简述: FTP 功能,支持 VIVADO 的 BIT 文件上传到 FTP 服务器。
- 命令:
- 🔵 【FTP 配置】 命令:
getFtpConfig 快捷键: 无
- 🔵 【FTP 上传】 命令:
Upload File via FTP 快捷键: 无
- 🔵 【FTP 下载】 命令:
Download File via FTP 快捷键: 无
- 设置: 请查阅相关文档配置 FTP 服务器信息。
➡️ 例化端口方向显示
- 功能简述: 在模块例化代码中自动显示端口方向箭头,直观展示信号流向。无需任何手动操作,打开文件即可看到。
- 效果演示:
← 蓝色箭头:表示 input 端口,信号从外部流入被例化模块。
→ 橙色箭头:表示 output 端口,信号从被例化模块流出。
↔ 绿色箭头:表示 inout 端口,双向信号。
- 示例代码:
// 模块定义
module counter (
input wire clk,
input wire rst_n,
input wire tick,
output reg [3:0] count
);
...
endmodule
// 例化代码(自动显示方向箭头)
counter u_counter (
.clk(←clk), // input → 蓝色箭头
.rst_n(←rst_n), // input → 蓝色箭头
.tick(←button), // input → 蓝色箭头
.count(→smp_cnt) // output → 橙色箭头
);
- 原理: 插件使用纯正则解析(不依赖 CTAGS 等任何外部工具)。流程为:剔除注释与条件编译指令 → 识别模块例化语句 → 拆解
.port(signal) 连接 → 查找被例化模块的端口声明(优先查当前文件,其次工作区搜索) → 提取每个端口的 input/output/inout 方向 → 用 VSCode 装饰器在信号名前面渲染方向箭头。
- 支持的端口声明风格:
- ANSI 风格:
module foo (input clk, output reg [3:0] data);
- 传统风格:
module foo (clk, data); input clk; output [3:0] data; endmodule
- 说明:
- 🔵 箭头是装饰器渲染的虚拟文本,不会修改你的任何代码。
- 🔵 找不到源文件的模块(如 Xilinx 原语、IP 核)不会显示箭头,属正常现象。
- 设置: 无需任何配置,打开 Verilog/SystemVerilog 文件即可自动生效。
🎨 颜色主题
- 功能简述: 常用颜色主题。
- 命令: 在 VSCode 中选择主题。
- 设置: 主题名称: 【jiang percy verilog themes】。
🌍 WEB 界面

⚙️ 设置界面配置介绍
配置位置:设置 → 扩展设置 → verilog-hdl-format插件设置
Extension: Company Name: 输入你的公司或组织名称,设置好之后在使用 TB, module 代码片段的时候会自动填入公司或组织名称。
Extension: User Name: 输入你的作者名称,设置好之后在使用 TB, module 代码片段的时候会自动填入作者名称。
Extract Data: Custom Options: modelsim 软件一键 do 文件合并之后定义需要加的指令。
FPGA_verilog 开头的都是 Verilog-HDL/SystemVerilog/Bluespec SystemVerilog 的 linter (verilog 语法检测) 功能设置。如果需要进行语法检测,常见的设置 (也可以选择使用其他语法检测) 是设置 FPGA_verilog › Linting: Linter:设置为 xvlog,系统环境变量设置 vivado 的 xvlog 路径。
【FPGA_verilog_ctags.path】/【【FPGA_verilog_ctags.choose】:默认为内部集成 ctags, 需要使用可以在设置里面进行切换内部/外部。可以实现语法定义跳转(支持跨文件)。linux环境下需要安装推荐apt命令: sudo apt install universal-ctags . 查询 ctags 路径:which ctags . 查询 ctags 版本:ctags --version
路径信息查询和填入配置:
【文件树相关配置】(详见【🌳 文件树显示】章节):
Verilog Module Finder: Exclude Folders — 排除文件夹,默认 ["ip","core","sim_scripts","bd","sdk"]
Verilog Module Finder: Auto Scan — 打开文件夹是否自动扫描,默认 false
Verilog Module Finder: Max File Size Kb — 超过此大小的文件跳过解析,默认 8192 (8MB),设 0 不限制
verilogModuleFinder.treeIndent — 文件树节点缩进量
⚠️ 注意:Exclude Folders 只影响 HDL 源文件的解析,不影响 .xci IP 的识别——IP 识别只按文件名匹配、不读内容,因此 ip/core 等目录里的 IP 依然会被识别出来。
🙏 感谢
感谢网友的友情赞助(排名不分先后)
| |