整理 Verilog 数字系统实验时,源码、Vivado 工程、仿真脚本、波形图和报告应放在一起,便于日后复查。
数字系统实验很容易做成一次性作业:代码能跑,报告能交,PDF 导出来就结束。
但只留一份 PDF 有个问题:几周后再回头看,很难知道当时的波形是怎么生成的,哪份源码对应哪张图,上板现象和仿真结果是不是来自同一个版本。
所以我后来会把报告、源码和波形放在同一个仓库里,避免下次翻查时只剩一份 PDF。
报告之外要留下什么
我希望一个数字系统实验仓库至少保留五类东西:
- Verilog 源码。
- Vivado 工程入口和约束文件。
- testbench 与 xsim 仿真脚本。
- 报告中使用的波形 PNG 和实验图片。
- Markdown 报告和源码附录。
这样整理后,报告里的每个结论都能回到某个文件:电路行为来自源码,波形来自仿真脚本,硬件现象来自上板记录。
别把缓存当成果
Vivado 工程会生成大量中间目录,比如综合、实现、仿真缓存和临时数据库。这些东西很占空间,也很容易让仓库变得不可维护。
更稳的范围是:
保留:源码、约束、工程入口、脚本、报告、报告图片丢弃:runs/cache/hw/xsim 临时目录、wdb/vcd/dcp/bit 等可再生成文件这件事除了节省空间,也能让仓库表达“哪些内容以后还要维护”。缓存可以重新生成,源码和验证记录才是以后还会用到的东西。
仿真要能批处理
如果每次都靠 Vivado GUI 点按钮,实验可以完成,但复查成本很高。
我更喜欢把仿真流程压成固定步骤:
- 收集设计文件和 testbench。
- 编译 Verilog。
- elaboration 生成仿真快照。
- 运行 xsim。
- 检查日志里是否有
ERROR和正常结束标记。 - 导出 WDB、VCD 或报告用 PNG。
这个流程别求完全自动化到无人参与,但至少应该让“怎么重跑波形”变成可复制的命令,而不是只存在于记忆里。
报告图片也要有来源
实验报告里最常见的断点是图片。
一张波形图贴进报告后,如果原始仿真输出、脚本和对应源码没有保留,后面很难判断它是否还能代表当前代码。
比较好的做法是把报告图片放在固定目录,并在报告里只引用这些相对稳定的图片。需要重新生成时,脚本输出到临时目录,确认无误后再替换报告用图片。
这样图片就不再像随手截的图,后面还能追到当时是怎么跑出来的。
综合工程要解释选择关系
多个实验共用一块 FPGA 开发板时,顶层集成很容易乱。
比如把组合逻辑、流水灯、抢答器、交通灯、秒表、VGA、呼吸灯等实验接到同一套外设上,就必须明确写出选择信号和外设复用关系。否则,报告读者只能看到一堆模块例化,看不出当前到底是哪一路在驱动 LED、数码管或 VGA。
我更喜欢在 README 和报告里写清楚:
- 哪些实验放进综合顶层。
- 哪些实验保留为独立工程或纯仿真。
- 选择信号如何映射到实验。
- 同一时间是否只允许一个实验有效。
这类说明看起来像文档细节,实际上能减少很多上板误判。
学到的事
做数字系统实验时,代码正确只是第一层。后面还会训练这些事:
- 组合逻辑和时序逻辑的行为差别。
- 同步复位和异步复位的波形差别。
- 状态机编码、分频节拍和输出译码的关系。
- VGA 时序对参数范围的敏感性。
- PWM 占空比如何变成人眼看到的亮度变化。
- 顶层集成时如何避免多个模块同时驱动同一外设。
这些经验如果只留在 PDF 里,会很快变成静态结论;如果连同源码、脚本和波形一起保留,就能变成之后复习和复用的材料。
报告最好能重跑
实验报告如果整理得好,后面还能当作回看工程的入口。
对 Verilog 这类课程来说,比较理想的形态是:源码说明电路,testbench 说明验证,脚本说明重跑方法,波形说明结果,报告说明你从结果里学到了什么。
PDF 好看当然可以,但我更想留下的是下次还能重跑、还能看懂的东西。
继续读