myFPGA.com.cnFPGA 技术与产业观察
← 返回栏目

FPGA SPI 接口入门:CPOL、CPHA、片选与时序

myfpga.com.cn 编辑部 · 2026-10-05

在 FPGA 中实现 SPI,可以先把一次传输拆成三个问题:谁产生时钟,在哪个边沿采样,片选何时有效。下面讨论常见的四线 SPI;三线、双线或四线数据等变体需另查外设协议。

主从角色与信号方向

主设备(controller/master)产生 SCLK,并通过 CS 选择从设备(target/slave)。MOSI 从主设备到从设备,MISO 方向相反;FPGA 既可设计为主设备,也可作为外部主机的从设备。四线连接允许双向同时移位,但一次事务中哪些位有效,要按外设命令格式判断。SPI 名称本身并不约定寄存器地址、字长或位序。信号与模式概念可参阅 Analog Devices 的 SPI 介绍。

实现前先做一张接口表,记录角色、引脚、有效电平、位序、字长、命令格式和时序限值,避免用“SPI 通用模块”的默认值替代外设要求。

CPOL 与 CPHA:先看空闲,再数边沿

CPOL 决定 SCLK 空闲电平;CPHA 决定在离开空闲电平后的第一个还是第二个边沿采样。两端应使用相符的模式。

模式 CPOL CPHA 空闲电平 采样边沿
0 0 0 低 上升沿
1 0 1 低 下降沿
2 1 0 高 下降沿
3 1 1 高 上升沿

CPHA=0 时,首个采样边沿前就要准备好首位;CPHA=1 时,首个边沿用于推出首位,第二个边沿采样。后续位在相对的更新与采样边沿之间传递。不要只凭“上升沿采样”确定模式,还要检查空闲电平和第一位的准备过程。模式表与边沿定义见上述 SPI 介绍;具体传输要求以外设数据手册为准。

片选也是事务时序的一部分

CS 常见为低有效,但应核对外设定义。它可能划定一条命令,也可能需要跨多个字保持有效。片选提前释放、字间出现额外脉冲或末位后过早结束,都可能改变外设对事务的解释。

检查 CS 到首个时钟、末个时钟到 CS 释放、事务间间隔及 MISO 使能/释放时间。AN-1248 提供了一种具体 SPI 接口的时序定义,可帮助学习如何读图,其数值不能直接用于其他器件。多个外设共享 MISO 时,还要确认未选中器件的输出行为,避免总线驱动冲突。

FPGA 内部逻辑与外部电气条件

内部可划分为事务状态机、发送/接收移位寄存器、位计数器及上层握手。作为主设备时,可考虑用系统时钟和时钟使能调度 SCLK 与移位操作;如引入独立时钟域,应明确时钟资源、约束及跨域传递方案。

作为从设备时,SCLK 来自外部。可按目标器件条件选择以 SCLK 为采样时钟,或用更快系统时钟识别边沿;后一种方式要预算同步与检测延迟,不能只凭“系统时钟更快”认定时序满足。

RTL 正确并不证明引脚可以直接连接。上板前核对 I/O bank 电压、I/O 标准、输入容限和原理图;需要电平转换或隔离时,将外部器件的传播延迟纳入时序预算。SPI 控制器逻辑不等同于板外电气收发器,也不自动保证可用速率。

第一次调通怎么做

  1. 仿真检查四种模式的首位、末位、连续字和复位中断,确认片选边界。
  2. 根据外设建立/保持时间、输出延迟和 PCB 路径添加约束;不要把所有外部输入都标为不需要分析。
  3. 按外设允许的较低速率验证一条已知事务,用外部波形对照 CS、SCLK、MOSI、MISO;片上探针用于看状态和计数。
  4. 逐步改变速率或事务长度,记录观察结果;乱码时先核对模式、位序与片选,再定位逻辑或电气问题。

延伸阅读

信息来源