news 2026/9/15 14:28:10

149.FPGA SPI 从机超全实战:协议解析、RTL 实现、仿真上板与时序约束

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
149.FPGA SPI 从机超全实战:协议解析、RTL 实现、仿真上板与时序约束

摘要

本文以一个实际工程中的SPI从机接口设计为例,完整演示FPGA接口设计全流程。内容涵盖接口协议分析、引脚约束编写、Verilog RTL实现、Testbench仿真验证以及上板调试方法。所有代码均经过仿真验证,可直接复制使用。文章遵循工程化设计思路,从需求分析到最终实现,每一步都给出可操作的技术方案。

应用场景

SPI(Serial Peripheral Interface)接口广泛应用于ADC/DAC配置、传感器数据读取、Flash存储器控制等场景。本文设计的SPI从机接口适用于以下典型场景:

  1. 与MCU通信:MCU作为SPI主机,FPGA作为从机,实现寄存器读写。
  2. 传感器数据采集:FPGA从机接收主机发送的配置命令,返回传感器采样数据。
  3. 板级互联:FPGA与DSP或ARM处理器之间的高速数据交换。

本设计支持Mode 0和Mode 3两种SPI模式(CPOL=0/1,CPHA=0),数据位宽8位,最高工作时钟50MHz,具备完整的读写操作功能。

核心原理

SPI接口四线制原理

SPI总线包含四根信号线:

  • SCLK:串行时钟,由主机产生。
  • MOSI:主机输出从机输入。
  • MISO:主机输入从机输出。
  • CS:片选信号,低电平有效。

数据移位时序

在CPHA=0模式下,数据在SCLK上升沿被采样(从机接收),在SCLK下降沿输出(从机发送)。因此从机设计的关键是:

  • 接收路径:在SCLK上升沿采样MOSI。
  • 发送路径:在SCLK下降沿更新MISO。

状态机设计

从机接口核心是一个字节级状态机,包含四个状态:

  • IDLE:等待片选拉低。
  • OPCODE:接收操作码(读/写)。
  • ADDR:接收寄存器地址。
  • DATA:接收或发送数据。

详细步骤

步骤一:接口信号定义

定义顶层模块端口,包括SPI物理接口和内部寄存器接口。

步骤二:引脚约束编写

根据FPGA芯片型号和开发板原理图,编写XDC或SDC约束文件。关键约束包括:

  • 引脚位置约束。
  • I/O标准约束(如LVCMOS33)。
  • 时钟约束(SCLK作为时钟信号需声明)。

步骤三:RTL代码实现

采用三段式状态机实现SPI从机逻辑。核心设计要点:

  • 使用双沿触发器避免亚稳态。
  • 数据移位寄存器采用右移方式。
  • 写操作在接收完第8位数据后产生写脉冲。

步骤四:仿真验证

编写Testbench模拟SPI主机时序,验证读写功能正确性。

步骤五:上板调试

使用逻辑分析仪或在线逻辑分析仪(ILA)抓取内部信号,验证实际时序。

完整可运行代码

SPI从机顶层模块

module spi_slave_top (
input wire clk_50m, // 系统时钟50MHz
input wire rst_n, // 异步复位,低有效
// SPI物理接口
input wire spi_cs_n, // 片选,低有效
input wire spi_sclk, // SPI时钟
input wire spi_mosi, // 主机输出从机输入
output wire spi_miso, // 主机输入从机输出
// 用户寄存器接口
input wire [7:0] reg_data_in, // 读数据输入
output reg [7:0] reg_data_out, // 写数据输出
output reg reg_wr_en, // 写使能脉冲
output reg reg_rd_en // 读使能脉冲
);

// ============================================================
// 参数定义
// ============================================================
localparam IDLE = 2’d0;
localparam OPCODE = 2’d1;
localparam ADDR = 2’d2;
localparam DATA = 2’d3;

// ============================================================

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 14:28:05

150. 零门槛复现!FPGA 按键消抖 + DDR3 读写可编译工程(附源码约束)

摘要 FPGA接口设计是数字系统设计的核心环节,涵盖电平标准、时序收敛、总线协议三大维度。本文以Xilinx Artix-7系列为平台,从GPIO基础约束出发,逐步深入到DDR3控制器IP的定制与读写验证,完整呈现一个工业级接口设计的全流程。文章提供可直接运行的Verilog代码与XDC约束文…

作者头像 李华
网站建设 2026/9/15 14:27:12

正常关闭虚拟机时,不要点“关机”,而要点“关闭客户机”

文章目录正常关闭虚拟机时,不要点“关机”,而要点“关闭客户机”一、先明确两个概念:虚拟机和客户机不是一回事二、“关闭客户机”是在正常关机三、“关机”不是正常关机,而是强制断电四、为什么正常情况不要点“关机”1. 文件损坏…

作者头像 李华
网站建设 2026/9/15 14:26:03

Rnote 上手指南:开源手写笔记+草图标注,3 步装好用起来

Rnote 上手指南:开源手写笔记草图标注,3 步装好用起来 【免费下载链接】rnote Sketch and take handwritten notes. 项目地址: https://gitcode.com/GitHub_Trending/rn/rnote Rnote 是一款用 Rust 编写的开源手写笔记工具,支持压力感…

作者头像 李华
网站建设 2026/9/15 14:25:12

Cinema 4D R20 渲染与物理模拟深度解析

简介:本资源为Cinema 4D R20完整版安装包及配套破解方案,面向三维建模、动画与渲染初学者及中小型设计团队,解决正版软件获取门槛高、授权成本大的实际问题。压缩包共2000个文件,总大小460.34MB,以str(脚本…

作者头像 李华
网站建设 2026/9/15 14:23:47

SQLFluff 规则配置完全指南:从规则开关到告警降级与布局参数

SQLFluff 规则配置完全指南:从规则开关到告警降级与布局参数 【免费下载链接】sqlfluff A modular SQL linter and auto-formatter with support for multiple dialects and templated code. 项目地址: https://gitcode.com/GitHub_Trending/sq/sqlfluff 导读…

作者头像 李华