推荐答案
测试一下
题目
8 SPI ................................ ................................ ................................ ..............…
参考答案与知识点
参考答案
设计一个可配置的 SPI Master 模块,遵循常用 4 线接口(SCK、MOSI、MISO、SS_n)。关键设计包括:
1. 参数化:支持多模式(CPOL/CPHA)、时钟分频系数、数据位宽(通常 8 位)。
2. 时钟生成:内部计数器分频产生 SCK,并根据 CPOL 设定空闲电平(CPOL=0 空闲低,CPOL=1 空闲高)。
3. 数据采样与移位:状态机包含 IDLE、ASSERT_SS、SHIFT、DEASSERT_SS。根据 CPHA:CPHA=0 在 SCK 第一个边沿采样(数据在第一个边沿前就绪),CPHA=1 在 SCK 第二个边沿采样。对应地,数据在另一个边沿改变。
4. 片选控制:SS_n 在传输开始前拉低,传输结束后拉高(可配置高脉冲宽度)。
5. 跨时钟域处理:若系统时钟与 SCK 不同域,使用双级同步或握手。
6. 易错点:
- 忽略 CPHA 对数据时序的影响,导致接收错位。
- 片选释放过早,被误认为新传输开始。
- 分频计数器未对齐,产生窄脉冲 SCK。
- 多字节传输时需在每字节间释放 SS_n(取决于协议)。
7. 结构:内部 8 位移位寄存器(对 MOSI/MISO),状态机与计数器配合,输出 SCK 使能信号。
实现 Verilog 代码时,采用三段式状态机,非阻塞赋值更新寄存器,组合逻辑输出。
涉及知识点
- SPI 协议与四种模式
- 有限状态机设计
- 时钟分频与边沿对齐
- 数据串并转换与移位
- 跨时钟域同步处理
- Verilog 三段式状态机