做数字系统实验时,在 VSCode 终端里固定 top、源码列表、Tcl 和输出目录,再打开 Vivado GUI 看波形。
Vivado GUI 很适合看工程结构、调波形和检查综合结果,但它不适合当成唯一的实验记忆。
数字系统实验做完后,之后最容易忘的是当时用了哪些源码、哪个 testbench 当顶层、Tcl 导出了哪些信号,以及最后哪张图进了报告。
所以更稳妥的做法是先把仿真写成 VSCode 终端里的固定流程,再打开 GUI 做观察。
先确定四个入口
一次能回看的仿真,至少要先说清楚四件事:
top module -> 这次仿真的 testbench 顶层是谁sources -> 编译哪些设计文件和激励文件tcl batch -> 运行时执行什么脚本,导出哪些结果out dir -> 日志、波形和图片放到哪里这四个入口不清楚时,仿真即使跑通了,也很难复查。
比如实验三可能重点看触发器、同步复位、异步复位和计数器;实验四可能重点看流水灯状态机。两者都可以用 xsim,但顶层、源码列表、观察信号和报告图片都不一样,不能混在一个“能跑的工程”里。
GUI 之前先跑通批处理
终端流程至少要覆盖三步:
- 编译 Verilog 源码。
- elaboration 生成仿真快照。
- 运行 xsim,并执行 Tcl 脚本导出结果。
这样做主要是为了以后能直接重跑,不用靠回忆还原 GUI 里的操作。
比较稳的命令形态是:
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 负责产生时钟、复位、输入激励和结束条件。
可以先用一个很普通的搜索确认模块名:
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 主要用来看和调,最后能反复跑出来的流程还是放在终端脚本里。
排序流程
整理数字系统实验时,可以按这个顺序做:
- 找到设计模块和 testbench。
- 确认仿真 top 是 testbench,不是设计模块。
- 写清源码列表、输出目录和 Tcl。
- 在终端跑通编译、elaboration 和仿真。
- 先看日志,再看波形。
- 用 GUI 调整观察范围。
- 把最后信号选择写回 Tcl。
- 导出报告能直接使用的 PNG。
这个流程比直接打开 GUI 多了一点前置工作,但后面会少很多返工。
当报告需要改图、复查结果或解释某个信号时,不需要回忆当时怎么点的按钮,只需要重新跑同一条流程。
终端流程先固定
数字系统实验里,不应只靠 Vivado GUI 记流程。
把仿真入口、源码列表、Tcl 脚本和输出目录固定下来后,后面改图、复查结果、补报告都会省事很多。
继续读