practice_templates/deep_03/eda_spyglass_lint/README.md

深度实践 EDA 3-1: SpyGlass Lint 代码质量检查

📚 知识点

知识点 说明
Lint 检查 静态代码分析,发现潜在问题
SpyGlass Synopsys 的 RTL 分析工具
常见 Lint 规则 锁存器、未连接信号、位宽不匹配等
Lint Waiver 对已知安全违规的豁免处理
编码规范 可综合、可维护的 RTL 编码标准

🎯 任务目标

任务 1: Lint 规则学习 (20 分)

阅读 docs/lint_rules.md 并回答:
- [ ] W_ 类规则是什么含义?
- [ ] E_
类规则是什么含义?
- [ ] 列出 5 个最重要的 Lint 规则并解释

任务 2: 修复 Lint 违规 (40 分)

rtl/lint_exercise.sv 中包含 10 个常见 Lint 违规:

编号 违规类型 说明
1 锁存器推断 不完整的 case/if 语句
2 未使用信号 声明了但未使用的信号
3 未驱动信号 声明了但未赋值的信号
4 位宽不匹配 赋值两端位宽不一致
5 多驱动 同一信号在多处赋值
6 always 敏感列表 敏感列表不完整
7 阻塞/非阻塞混用 时序逻辑中用了阻塞赋值
8 异步复位锁存 复位分支不完整
9 组合环路 组合逻辑形成回路
10 未初始化变量 for 循环的 initial 值

任务 3: SpyGlass 运行实践 (20 分)

  • [ ] 编写 SpyGlass 项目配置文件
  • [ ] 运行 Lint 检查
  • [ ] 分析 Lint 报告
  • [ ] 编写 Waiver 文件

任务 4: 编码规范总结 (20 分)

  • [ ] 总结 10 条 RTL 编码最佳实践
  • [ ] 为每条规则提供正确和错误的代码示例

📁 文件结构

├── rtl/
│   └── lint_exercise.sv          ← ⭐ 包含 10 个 Lint 违规
├── docs/
│   └── lint_rules.md             ← Lint 规则说明
├── spyglass/
│   ├── spy_project.prj           ← ⭐ TODO: SpyGlass 项目文件
│   └── waiver.swl                ← ⭐ TODO: Waiver 文件
├── reports/
│   └── lint_fix_report.md        ← ⭐ TODO: 修复报告
├── Makefile
└── README.md

📝 考核方式

考核项 分值 评估方法
Lint 规则理解 20 分 回答问题
修复 10 个 Lint 违规 40 分 代码修复正确
SpyGlass 运行 20 分 配置文件+运行+报告
编码规范总结 20 分 总结文档质量
合计 100 分

通过标准:≥ 60 分