FPGA设计应用实例——SPI主从端数据通信实现

本文详细介绍了SPI数据通信协议,包括其全双工特性、4种通信模式以及SPI主、从端的数据传输逻辑。通过VerilogHDL代码示例,阐述了SPI从端和主端模块的建模与仿真过程,验证了数据通信的正确性。同时,提到了基于Qsys的NiosII系统中SPI模块的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关注、星标公众,直达精彩内容

SPI数据通信是常用的一种中低速芯片级的数据通信。SPI数据通信协议简单,连线不多,而且是全双工通信,因此广泛用于实现数据转换和数据存储等功能。本章简要介绍SPI数据通信的协议及主端与从端的VerilogHDL建模与仿真。

SPI数据通信协议


SPI是英文Serial Peripheral Interface的首字母缩写,中文可以翻译为串行外围设备接口。SPI 是Motorola公司首先推出的一种同步串行接口。它用于CPU或者FPGA与各种外围器件进行全双工、同步串行数据通信。SPI 通信接口简单,只需要4根线:clk同步时钟信号、mosi主端输出/从端输人数据信号、miso主端输人/从端输出数据信号、cs从端片选信号(如果有多个从端,则需要有多个cs从端片选信号与之相对应)。SPI数据通信的同步串行传输顺序是高位先传、低位后传。

四种SPI通信模式


SPI数据通信有4种模式,分别称为模式1至模式4。不同的模式是由开始数据采样的边沿及时钟的空闲状态决定的。

时钟的空闲状态有2种,即高电平与低电平,分别对应CPOL=1与CPOL=0,如图18-1所示。

e45258a3c2db68f7efdf395cef17cded.png

发送与接收数据的时钟边沿的情况也有2种:数据开始采样发生在时钟的第一个边沿(也可理解为奇数边沿进行数据采样)与数据开始发送发生在时钟的第二个边沿(也可理解为偶数边沿进行数据发送),分别对应 CPHA=0与CPHA=1,如图18-2与图18-3所示。

84befc67ecc6fdddecee98c6d0ec5869.png

f64906fb70fb4384c388b6863d7de0fe.png

根据CPOL与CPHA的值,SPI的传输就可分为4种模式:模式0是CPOL=0,CPHA=0;模式1是CPOL= 1,CPHA=0;模式2是CPOL=0,CPHA=1;模式3是CPOL=1,CPHA=1。本章以模式0为例进行介绍。

对应图18-2,分析在片选信号下降沿有效时开始发送最高位数据,其余的数据在时钟信号的下降沿发送,最后一个时钟下降沿不发送数据。而数据采样发生在时钟信号的上升沿。

SPI从端数据通信模块


SPI从端数据通信模块建模

SPI数据通信分主端与从端,从端被动地进行数据通信的接收与发送。从端被动的数据通信是根据时钟信号与片选信号的边沿进行判断的。当片选信号的下降沿有效时发送最高位数据,当时钟信号上升沿有效时进行数据采样接收数据。根据以上分析设计Verilog HDL代码如【代码18-1】所列。

【代码18-1】

5e590d74764e2c6312626c7a9a68b659.png

94efad873333d76d2492788ce4ad627c.png

d68b583a3dd6c21981751cc711ef9280.png

4b99fb0cd586ca5ce6b93f29d954a741.png

65e5d1c1e7e48bfcc7e9ea7c8b72c129.png

e72b7fc70e04539a72cc88096b62f18a.png

【代码18-1】编译无误后,设计【代码18-1】的测试平台,通过观察分析波形来确定spi_slave模块是否满足SPI从端数据通信的逻辑功能。设计spi_slave模块的测试平台如【代码18-2】所列。

【代码18-2】

9772f572ad2344596cc506d7cb6f78de.png

042ab25810a7823377860fe016918c28.png

88dca2a8b579cc023e2e45140303bb35.png

8bd58792b84c66f3dbda049490eaea33.png

a4fed357ca785e1561b417420d69ed53.png

在ModelSim软件中对【代码18-1】进行波形仿真,如图18-4所示。

17686144dfb7a1b4a98ed19788bcb2fa.png

波形仿真报告分析

在图18-4上,先确定SPI主端发送的数据是00001001,SPI从端发送的数据是10000001。在373 ns时刻捕获到SPI片选信号r_spi_cs的下沿,此时主、从端开始发送最高位数据0与1,在接下来的时钟下降沿发送其余的数据,同时在时钟的上升沿接收数据。最后,从端接收到的数据w_ srx_data为00001001,该数据与主端发送的数据00001001一致,说明SPI从端实现了数据通信。

SPI主端数据通佶模块


SPI主端数据通信模块建模

在数据通信模式上,SPI主端与SPI从端一样,也分为4种模式,而且数据发送与接收的时序也基本一致。本节也是以模式0为例。与SPI从端不同的是,SPI主端多了产生片选信号与时钟的逻辑,因为在SPI数据通信中,片选信号与时钟信号是由SPI主端产生的。因此,只要根据模式0的时序关系产生相应的片选信号与时钟信号,再实例化SPI从端模块即可设计成SPI主端模块。根据以上分析设计Verilog HDL代码如【代码18-3】所列。

【代码18-3】

7285368708c66980e7340f15342f6aa1.png

f9f6d016849ef092cd685290a963f39c.png

19726ae20f69fb0d55f873567f95814d.png

14ea1d8db1d395c5f6d47725bc08f62c.png

17649464fce31f581d136d06731d8ae8.png

0603e02e411c3b0c46e81696a8fa448e.png

8223b8d5c36f013304888878def3b7ef.png

aa055b17558ac5845a4ff2746384219c.png

0a7cc5987ea024708b4e49e4d754b4ef.png

675f0b5e429f0fdfefe0867fbeec3651.png

【代码18-3】编译无误后,设计【代码18-3】的测试平台,通过观察分析波形来确定spi_master模块是否满足SPI主端数据通信的逻辑功能。设计spi_master模块的测试平台如【代码18-4】所列。

【代码18-4】

7cd1952dbf586f08fdbd0d1f51acfc47.png

d006ae93e362e308ff1cd1587e617dee.png

1057b757f5586cd6bab577704f45025a.png

b5f7ac625822cbb7296721e4102ea75a.png

933dbb4db62f385b8b020b7fb6357063.png

abe2a5c4ff4d765142e86cf21f80a302.png

在ModelSim软件中对【代码18-3】进行波形仿真,如图18-5所示。

d86f42ada96161536f63603c56435710.png

波形仿真报告分析

在图18-5上,先确定SPI主端发送的数据r_mtx_data是00001101,SPI从端发送的数据r_stx_data是00001101。经过8个SPI时钟周期之后,主、从端都接收到数据00001101,说明SPI主、从端实现了数据通信。

本篇知识点主要介绍有关SPI主、从端数据通信建模方面的内容,包括什么是SPI数据通信,四种SPI通信模式,以及SPI主、从端通信模块建模的具体方法。另外,我们还讲到如何基于Qsys的最小Nios II系统的搭建,基于其自带的IP模块的使用,包括了PIO模块、UART模块、定时器模块以及SPI模块等,基于Qsys的自定义外设、自定义指令的应用实例。

‧  END  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值