35 / 37 · 概念
编译、lint 与综合:诊断能证明什么
固定源码列表、top 和语言模式,区分语法、位宽、锁存器诊断与功能验证。
课时内容可免费阅读,选课后可保存学习进度。
明确要求工具检查什么
结果必须绑定源码列表、top、参数、语言模式和工具版本。编译 DUT 及依赖,把测试平台作为独立仿真 top;不要综合时钟发生器或把未实例化模块当作被测设计。课程采用实用的可综合 SystemVerilog 子集。通用仿真器与产品引擎可能支持不同范围,不能仅凭 .sv 扩展名假定支持所有特性。
编译检查结构,仿真检查已运行行为
编译可拒绝语法、缺少模块及无效引用,不证明算术与复位优先级。PASS 仅支持该源码、工具和场景下的比较。参数实验:
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvp记录两条命令的退出状态。编译失败后运行旧 sim.vvp 会误报 PASS。每个配置生成新输出,编译失败就停止。
按原因处理诊断
| 诊断 | 要回答的问题 |
|---|---|
| 缺少模块 | 文件在列表中吗,名字正确吗 |
| 位宽截断 | 丢弃哪些高位,进位或符号是否需要 |
| 推断锁存器 | 哪条组合路径没赋值 |
| 多驱动 | 谁拥有此信号 |
| 未用信号 | 有意不用还是连接遗漏 |
| 组合环 | 无寄存器地返回自身输入吗 |
不要隐藏全部警告。修复原因,或记录经过测试的狭窄有意例外。分类与严重程度随版本不同。Verilator 的官方警告文档解释 WIDTH、LATCH 等;安装后可增加 lint:
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.sv这是额外建议,不声称已执行 Verilator。区分实际命令与建议命令。
综合是另一个边界
可用 Yosys 做通用结构检查:
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'它检查前端和通用电路,不提供目标 FPGA 资源、布局布线、时序收敛或制造验收。技术映射与约束流程是额外工作。
练习:失败副本与交付 DUT 分开
做三个一次性副本:拼错子模块名,将九位和截到八位,漏掉组合分支赋值。记录哪种工具发现、哪种需要功能测试。位宽警告可能有意,锁存器也可能编译成功;要比较需求与行为。保留恢复的正常源码和一份相关故意失败日志。无法解释的诊断记为待解决,不称结果干净。
✓ 已学习