practice_templates/deep_02/debug_rtl_fsm/README.md

深度实践 Debug 2-2: FSM 状态机 Bug 猎人 🐛

📚 背景

本练习包含一个 SPI Master 控制器的状态机实现,其中隐藏了 6 个 Bug
SPI 是四线同步串行通信协议:SCLK、MOSI、MISO、CS_N。

🎯 任务目标

rtl/spi_master_buggy.sv 包含 6 个 Bug

Bug 编号 难度 类型 提示
Bug #1 CS_N 极性错误 CS_N 是低有效
Bug #2 ⭐⭐ SCLK 相位错误 CPOL/CPHA 配置
Bug #3 ⭐⭐ 数据移位方向 MSB first
Bug #4 ⭐⭐ MISO 采样时机 在 SCLK 哪个沿采样?
Bug #5 ⭐⭐⭐ 状态机死锁 某些条件下无法退出
Bug #6 ⭐⭐⭐ CS_N 释放时序 最后一个 SCLK 后 CS 释放过早

📁 文件结构

├── rtl/
│   ├── spi_master_buggy.sv    ← ⭐ 包含 6 个 Bug
│   └── spi_master_golden.sv   ← 参考正确实现
├── tb/
│   └── tb_spi_master.sv       ← 自动化测试平台
├── Makefile
└── README.md

🏃 操作步骤

  1. 学习 SPI 协议: CPOL=0, CPHA=0 模式的时序
  2. 阅读 buggy 代码: 分析状态机转移和数据路径
  3. 编译运行: make run 查看错误
  4. 用波形调试: 重点关注 SCLK/MOSI/MISO/CS 的时序关系
  5. 逐个修复: 每修复一个 Bug 重新仿真

📝 考核方式

考核项 分值 说明
找到 Bug 1-2 20 分 简单/中等 Bug
找到 Bug 3-4 30 分 中等 Bug
找到 Bug 5-6 30 分 困难 Bug
修复说明文档 20 分 Bug 原因分析 + 修复方法
合计 100 分

通过标准:≥ 60 分