notepad++需通过nppexec插件调用外部工具链实现vhdl仿真:modelsim用vcom/vsim、ghdl用ghdl三步命令、vivado仅支持语法检查;关键在正确配置路径、库依赖及编译顺序。

Notepad++ 本身不能直接运行 VHDL 逻辑仿真,必须通过插件调用外部工具链(如 ModelSim、GHDL 或 Vivado 的 vcom/vsim)完成编译、仿真和波形查看。关键不是“运行”,而是“触发外部工具执行完整流程”。
怎么让 Notepad++ 调用 ModelSim 做 VHDL 仿真?
ModelSim 是最常用于 VHDL 行为级仿真的商业工具,vcom 编译、vsim 运行、gtkwave 查波形是标准链路。Notepad++ 需借助 NppExec 插件串联这些命令。
- 确保 ModelSim 安装路径已加入系统
PATH,或在命令中写全路径(例如:C:\modeltech64_2023.1\win64\vcom.exe) - 按
F6打开NppExec控制台,输入以下脚本(适配单文件 testbench 场景):cmd /k cd "$(CURRENT_DIRECTORY)" & vcom -2008 "$(FULL_CURRENT_PATH)" && vsim -c -do "run -all; quit" work.testbench && ECHO SUCCESS & EXIT || ECHO ERROR & EXIT
- 注意:
testbench是你的顶层实体名,需与 VHDL 文件中entity名一致;-2008指定语法标准,若用 VHDL-93 则换为-93 - 如果报
vsim: command not found,说明vsim未被识别——检查 ModelSim 是否安装了命令行支持(部分精简版不带),或改用完整路径调用
用 GHDL 替代 ModelSim 可以吗?
可以,且更轻量。GHDL 是开源 VHDL 编译器,支持 ghdl -a(分析)、ghdl -e(生成可执行)、ghdl -r(运行)三步,但默认不输出 VCD 波形,需额外加 --vcd=wave.vcd 参数。
- 推荐脚本(含波形导出):
cmd /k cd "$(CURRENT_DIRECTORY)" & ghdl -a --std=08 "$(FULL_CURRENT_PATH)" && ghdl -e --std=08 testbench && ghdl -r --std=08 testbench --vcd=wave.vcd && gtkwave wave.vcd & EXIT || ECHO ERROR & EXIT
-
--std=08对应 VHDL-2008;若代码用 VHDL-93,统一改为--std=93 - GHDL 不依赖 license,适合学习和快速验证,但不支持所有 VHDL-2008 高级特性(如 protected types),综合前务必确认目标工具链兼容性
- 首次运行可能提示
ghdl: cannot find runtime library——这是环境变量GHDLLIB未设,需指向 GHDL 安装目录下的lib/ghdl子目录
Vivado 自带的 VHDL 工具能集成进 Notepad++ 吗?
可以,但仅限语法检查和简单编译,**不推荐用于逻辑仿真**。Vivado 的 vhpcomp 和 xvhdl 命令行工具支持 VHDL 分析,但缺乏独立仿真能力,必须走 Vivado GUI 流程才能启动仿真器(vsim 实为 ModelSim Questa 内核)。
- 若只想做语法校验,可用:
cmd /k cd "$(CURRENT_DIRECTORY)" & "C:\Xilinx\Vivado\2023.1\bin\vhpcomp" -2008 "$(FULL_CURRENT_PATH)"
- 注意:路径中的
2023.1需按你实际安装版本调整;vhpcomp输出错误格式较原始,NppExec捕获后不易跳转到出错行(不像vcom那样带行号) - 真正要做时序仿真或后综合仿真,仍得回到 Vivado IDE —— Notepad++ 在这里只承担“写代码+初检”角色,不是仿真主入口
为什么仿真总卡在“找不到 testbench”?
这不是 Notepad++ 的问题,而是 VHDL 工具链对设计单元(design unit)组织方式的严格要求。VHDL 不像 Verilog 那样靠文件名隐式关联,它依赖显式 library/use 和编译顺序。
- 确保所有相关文件(
entity、architecture、testbench)都在同一目录下,且已全部用vcom或ghdl -a编译过(不能只编译 testbench) - 检查 testbench 中是否正确
use了被测模块的库,例如:use work.my_design.all;—— 如果被测模块没先编译进work库,vsim就会报“cannot find design unit” - ModelSim 默认工作库是
work,但 GHDL 默认是work+ 当前目录名;若用ghdl -r报错,尝试加--ieee=synopsys或显式指定库:ghdl -r testbench --workdir=. - 一个可靠做法:把整个工程打包成一个
.do脚本,在 ModelSim 里do run.do;Notepad++ 只负责编辑和触发该脚本,避免命令行拼接遗漏
真正麻烦的从来不是配置那几行命令,而是 VHDL 的编译依赖关系和库管理——它不像 Verilog 那样“扔进去就能跑”。每次换工具链,都要重新捋一遍 library、use、analyze 顺序。别省这一步,否则花半天调路径,不如花十分钟理清依赖。











