1338 字
7 分钟
- 次浏览
Vivado 仿真的终端化流程:先跑脚本再看 GUI
读前导览

做数字系统实验时,在 VSCode 终端里固定 top、源码列表、Tcl 和输出目录,再打开 Vivado GUI 看波形。

正文
1338 字
阅读
7 分钟
结构
9 节
来源线索
GitLaughs/Verilogexp
verilogexp:vscode-vivado-guide verilogexp:sim-scripts verilogexp:report-waveform

Vivado GUI 很适合看工程结构、调波形和检查综合结果,但它不适合当成唯一的实验记忆。

数字系统实验做完后,之后最容易忘的是当时用了哪些源码、哪个 testbench 当顶层、Tcl 导出了哪些信号,以及最后哪张图进了报告。

所以更稳妥的做法是先把仿真写成 VSCode 终端里的固定流程,再打开 GUI 做观察。

先确定四个入口#

一次能回看的仿真,至少要先说清楚四件事:

top module -> 这次仿真的 testbench 顶层是谁
sources -> 编译哪些设计文件和激励文件
tcl batch -> 运行时执行什么脚本,导出哪些结果
out dir -> 日志、波形和图片放到哪里

这四个入口不清楚时,仿真即使跑通了,也很难复查。

比如实验三可能重点看触发器、同步复位、异步复位和计数器;实验四可能重点看流水灯状态机。两者都可以用 xsim,但顶层、源码列表、观察信号和报告图片都不一样,不能混在一个“能跑的工程”里。

GUI 之前先跑通批处理#

终端流程至少要覆盖三步:

  1. 编译 Verilog 源码。
  2. elaboration 生成仿真快照。
  3. 运行 xsim,并执行 Tcl 脚本导出结果。

这样做主要是为了以后能直接重跑,不用靠回忆还原 GUI 里的操作。

比较稳的命令形态是:

Terminal window
pwsh -ExecutionPolicy Bypass -File .\vivado-sim-runner\scripts\run_xsim.ps1 `
-Top tb_example `
-OutDir sim_outputs\example `
-Sources src\a.v,src\b.v,sim\tb_example.v `
-TclBatch sim_scripts\example_vcd.tcl

别只盯着这段命令本身。它把几个重要选择都摆出来了:以后要换实验、换 testbench、换输出目录,不需要重新猜 GUI 状态。

top module 不靠猜测#

初学 Vivado 仿真时,很容易把设计模块当成仿真顶层。

但多数课程实验里,仿真顶层应该是 testbench。设计模块被 testbench 实例化,testbench 负责产生时钟、复位、输入激励和结束条件。

可以先用一个很普通的搜索确认模块名:

Terminal window
rg -n "module\s+" -g "*.v"

然后明确区分:

设计模块:这次要验证的电路
testbench:仿真顶层,负责喂输入和结束仿真

这个习惯能避免很多“工具运行了,但不是我想测的东西”的问题。

日志要先于截图#

波形截图很直观,但它应该排在日志之后。

如果编译日志里有错误、elaboration 没成功、仿真没有正常结束,那么截图再漂亮也不能当报告证据。终端流程的第一层验收应该是日志:

xvlog.log -> 是否有编译错误
xelab.log -> 是否成功生成快照
xsim.log -> 是否运行到预期结束点

确认日志干净后再看波形,报告里的图片才知道是从哪一次运行里来的。

Tcl 负责固定观察范围#

GUI 里手动添加信号很方便,但如果每次都靠手点,波形很快就不能复现。

更好的方式是把“要看哪些信号”沉到 Tcl 里:时钟、复位、输入、状态、输出,按实验问题组织。需要重新生成时,脚本会把相同信号拉出来,而不是依赖上一次窗口布局。

这样做还有一个好处:报告图片会更克制。

波形不是越多越好。实验报告只需要能证明结论的关键信号。如果截图里塞满所有内部线,读者反而看不出重点。

输出目录按实验分开#

多次实验共用同一个输出目录,是后期整理最容易出错的地方。

推荐按实验或功能拆开:

sim_outputs/
exp3/
xvlog.log
xelab.log
xsim.log
waveform.png
exp4/
xvlog.log
xelab.log
xsim.log
waveform.png

报告里引用的图片再从这里挑选并固定到 images/ 之类的报告资源目录。临时输出和报告资产分开,能减少误覆盖。

GUI 仍然有用#

把流程写进终端,不代表不打开 Vivado。

GUI 仍然适合做三件事:

  • 查看层次结构,确认模块连接是否符合预期。
  • 缩放波形,找关键时间点。
  • 交互式检查信号,再把最后选择写回 Tcl。

区别在于,GUI 主要用来看和调,最后能反复跑出来的流程还是放在终端脚本里。

排序流程#

整理数字系统实验时,可以按这个顺序做:

  1. 找到设计模块和 testbench。
  2. 确认仿真 top 是 testbench,不是设计模块。
  3. 写清源码列表、输出目录和 Tcl。
  4. 在终端跑通编译、elaboration 和仿真。
  5. 先看日志,再看波形。
  6. 用 GUI 调整观察范围。
  7. 把最后信号选择写回 Tcl。
  8. 导出报告能直接使用的 PNG。

这个流程比直接打开 GUI 多了一点前置工作,但后面会少很多返工。

当报告需要改图、复查结果或解释某个信号时,不需要回忆当时怎么点的按钮,只需要重新跑同一条流程。

终端流程先固定#

数字系统实验里,不应只靠 Vivado GUI 记流程。

把仿真入口、源码列表、Tcl 脚本和输出目录固定下来后,后面改图、复查结果、补报告都会省事很多。

Vivado 仿真的终端化流程:先跑脚本再看 GUI
https://blog.sunmmyapi.xyz/posts/vivado-vscode-simulation-before-gui/
作者
Sun
发布于
2026-05-29
许可协议
CC BY-NC-SA 4.0

继续读

相关内容