FPGA实战(41):SPI协议深度解析与Verilog主机发送模块设计
2026/7/8 10:33:12 网站建设 项目流程

SPI(Serial Peripheral Interface)是嵌入式系统中应用最广泛的板级同步串行通信协议之一。在FPGA设计中,实现一个稳定、易用的SPI主机模块,不仅要求波形时序正确,还需考虑数据流控与参数化配置。本文将先简要剖析SPI协议的核心时序,随后深入讲解一种参数化数据位宽、单计数器统一生成全部SPI时序、并具备发送就绪握手信号的Verilog主机发送模块。文章将围绕协议理解、设计要点、关键代码实现展开,帮助读者构建可复用的SPI发送单元。


1. SPI协议时序精要

SPI采用主从架构,标准四线信号为:

  • SCLK:串行时钟,由主机产生。
  • MOSI:主机输出、从机输入数据线。
  • MISO:主机输入、从机输出数据线(本文模块仅发送,不实现)。
  • CSN/SS:片选信号,低电平有效,用于使能目标从机。

SPI定义了四种工作模式,由时钟极性(CPOL)和时钟相位(CPHA)决定:

  • CPOL=0:空闲时SCLK为低电平。
  • CPOL=1:空闲时SCLK为高电平。
  • CPHA=0:在SCLK第一个跳变沿采样(CPOL=0时上升沿采样)。
  • CPHA=1:在SCLK第二个跳变沿采样(CPOL=0时下降沿采样)。

最常用的模式为CPOL=0, CPHA=0(模式0),即SCLK空闲低,数据在SCLK上升沿被从机采样,在下降沿由主机改变MOSI。本设计即基于模式0实现:空闲时SCLK保持0,在发送过程中产生对称方波,数据在SCLK低电平期间更新,在上升沿稳定。

一次SPI传输始于主机拉低CSN,随后产生SCLK,将数据按位在MOSI上移出。传输完成后,CSN拉高,结束帧。本设计严格遵循这一流程。


2. 模块设计目标与功能点

master_spi模块作为SPI主机发送器,聚焦于以下功能:

  1. 参数化数据宽度:通过parameter data_width可配置每次发送的有效数据位宽,适应多种外设。
  2. 标准SPI波形输出:自动生成片选spi_csn、时钟spi_clk、数据spi_mosi
  3. 发送就绪流控:输出信号din_rfd指示模块是否可接收新数据。外部逻辑仅在din_rfd为高时方可写入,避免发送过程中数据被覆盖。
  4. 帧间隔可调:计数器阈值392不仅覆盖8个SCLK周期,还包含额外的空闲时长,确保片选保持时间满足从机要求。
  5. 纯发送结构:不含miso输入,简化实现,适用于只需单向推送的场景。

3. 创新点解析

相比于常见的SPI主机设计,本模块在以下方面做了优化与创新:

3.1 单计数器驱动全局时序

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询