Altifigence Academy

35 / 37 · 概念

编译、lint 与综合:诊断能证明什么

固定源码列表、top 和语言模式,区分语法、位宽、锁存器诊断与功能验证。

明确要求工具检查什么

结果必须绑定源码列表、top、参数、语言模式和工具版本。编译 DUT 及依赖,把测试平台作为独立仿真 top;不要综合时钟发生器或把未实例化模块当作被测设计。课程采用实用的可综合 SystemVerilog 子集。通用仿真器与产品引擎可能支持不同范围,不能仅凭 .sv 扩展名假定支持所有特性。

编译检查结构,仿真检查已运行行为

编译可拒绝语法、缺少模块及无效引用,不证明算术与复位优先级。PASS 仅支持该源码、工具和场景下的比较。参数实验:

text
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvp

记录两条命令的退出状态。编译失败后运行旧 sim.vvp 会误报 PASS。每个配置生成新输出,编译失败就停止。

按原因处理诊断

诊断要回答的问题
缺少模块文件在列表中吗,名字正确吗
位宽截断丢弃哪些高位,进位或符号是否需要
推断锁存器哪条组合路径没赋值
多驱动谁拥有此信号
未用信号有意不用还是连接遗漏
组合环无寄存器地返回自身输入吗

不要隐藏全部警告。修复原因,或记录经过测试的狭窄有意例外。分类与严重程度随版本不同。Verilator 的官方警告文档解释 WIDTH、LATCH 等;安装后可增加 lint:

text
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.sv

这是额外建议,不声称已执行 Verilator。区分实际命令与建议命令。

综合是另一个边界

可用 Yosys 做通用结构检查:

text
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'

它检查前端和通用电路,不提供目标 FPGA 资源、布局布线、时序收敛或制造验收。技术映射与约束流程是额外工作。

练习:失败副本与交付 DUT 分开

做三个一次性副本:拼错子模块名,将九位和截到八位,漏掉组合分支赋值。记录哪种工具发现、哪种需要功能测试。位宽警告可能有意,锁存器也可能编译成功;要比较需求与行为。保留恢复的正常源码和一份相关故意失败日志。无法解释的诊断记为待解决,不称结果干净。

你的选择适用于此浏览器,可随时在页脚更改。