CN112035399A - 一种基于fpga的spi从机模块实现方法 - Google Patents
一种基于fpga的spi从机模块实现方法 Download PDFInfo
- Publication number
- CN112035399A CN112035399A CN202010870664.9A CN202010870664A CN112035399A CN 112035399 A CN112035399 A CN 112035399A CN 202010870664 A CN202010870664 A CN 202010870664A CN 112035399 A CN112035399 A CN 112035399A
- Authority
- CN
- China
- Prior art keywords
- sending
- data
- state
- spi
- sck
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1689—Synchronisation and timing concerns
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7817—Specially adapted for signal processing, e.g. Harvard architectures
Abstract
本发明涉及一种基于FPGA的SPI从机模块实现方法,属于接口通信技术领域。本发明以FPGA为硬件平台,实现SPI从机模块通信数据的自动接收和发送,涉及I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块的实现方法。可实现对通信数据的自动接收和发送,本方法在不增加硬件资源情况下,直接通过FPGA扩展SPI接口,不依赖于厂家提供的IP核,具有很强的灵活性,其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。
Description
技术领域
本发明属于接口通信技术领域,具体涉及一种基于FPGA的SPI从机模块实现方法。
背景技术
SPI串行外设接口是一个高速同步的串行输入输出口。通常用于处理器和外部外设以及其它处理器之间进行通信。目前通讯领域产品设计一般采用处理器+FPGA的架构,可通过处理器自带SPI接口实现SPI通讯,这种应用不但限制了处理器的选型,而且增加了处理器的资源和成本,当需要与多个具有SPI接口的外设进行通信时,就要使用主控制器的I/O口通过软件来模拟或者通过FPGA对处理器的SPI接口进行片选复用,不仅增加了处理器的任务量,也增加了FPGA的任务量,在很大程度上限制了SPI接口应用。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何以FPGA为硬件平台,实现SPI从机模块通信数据的自动接收和发送。
(二)技术方案
为了解决上述技术问题,本发明提供了一种基于FPGA的SPI从机模块实现方法,包括以下步骤:
步骤1、首先确定模块的输入输出管脚;
步骤2、基于步骤1确定检测sck跳变沿的方法;
步骤3、基于步骤2实现SPI数据接收;
步骤4、基于步骤2实现SPI数据发送。
优选地,步骤1由I/O接口模块实现,I/O接口模块用于对模块管脚进行定义,包括输入时钟clk、复位信号nrst、片选信号ncs、SPI时钟sck、从机输入mosi、从机输出miso共6个信号的管脚,从而确定了模块的输入输出管脚。
优选地,步骤2通过设计时钟检测模块实现,因此,时钟检测模块用于使用寄存器记录SPI时钟sck状态,由状态判断sck是否出现跳变沿。
优选地,步骤2具体为:首先定义SPI时钟寄存器变量sck_edge、SPI时钟上升沿变量sck_riseedge、SPI时钟下降沿变量sck_falledge,以外部时钟clk为时间基准,在外部时钟clk上升沿检测SPI时钟sck的到来,当连续2次检测到sck上升沿时,确认sck上升沿sck_riseedge到来,当连续2次检测到sck下降沿时,确认sck下降沿sck_falledge到来。
优选地,步骤3通过设计SPI接收模块实现,SPI接收模块使用有限状态机先将从机输入mosi的数据移入移位寄存器后,再将移位寄存器数据保存到接收缓存器,然后清除接收标志,完成数据接收。
优选地,步骤3具体是通过使用有限状态机完成数据接收过程状态控制,在状态1~状态3间进行状态转换:
状态1:等待SCK上升沿,并将MOSI的数据移入移位寄存器byte_received,接收位数寄存器bit_received_cnt记录接收到的数据位数,接收到8位数据后转入状态2;
状态2:保存移位寄存器byte_received数据到接收缓存器rec_data,接收标志位/接收缓存器非空标志位rec_flag置高4个clk时钟周期后转入状态3;
状态3:清除rec_flag并转入状态1;
至此数据接收过程完成。
优选地,步骤4通过设计SPI发送模块实现,PI发送模块使用有限状态机完成数据发送过程状态控制,在发送标志位置高时,发送移位寄存器存储发送数据,miso管脚输出发送数据最高位,置位正在发送标志;在SCK上升沿,主机接收数据,在SCK下降沿,将发送移位寄存器最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位,完成数据发送。
优选地,步骤4中使用有限状态机完成数据发送过程状态控制具体是在状态1~状态4间进行状态转换:
状态1:等待发送触发标志位send_flag置高,一旦标志位send_flag置高,发送移位寄存器byte_sended存储外部触发模块的数据send_data,miso管脚输出发送数据最高位send_data[7],置位正在发送标志位sending_flag,转入状态2;
状态2:等待SCK上升沿,即等待主机接收数据最高位后进入状态3;
状态3:在SCK下降沿,将发送移位寄存器byte_sended最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位sending_flag,进入状态4;
状态4:置低miso管脚,转入状态1;
至此数据发送过程完成。
本发明又提供了一种所述的方法在接口通信技术领域中的应用。
本发明还提供了一种利用所述的方法设计的SPI从机模块,包括I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块。
(三)有益效果
本发明以FPGA为硬件平台,实现SPI从机模块通信数据的自动接收和发送,涉及I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块的实现方法。可实现对通信数据的自动接收和发送,本方法在不增加硬件资源情况下,直接通过FPGA扩展SPI接口,不依赖于厂家提供的IP核,具有很强的灵活性,其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。
附图说明
图1是本发明实现的SPI接收流程图;
图2是本发明实现的SPI发送流程图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
SPI串行外设接口需要4根线即可完成通信工作,这4根通信线分别为NCS(片选信号)、SCK(串行同步时钟)、MOSI(主机输出从机输入,Master Output Slave Input)、MISO(主机输入从机输出)。
SPI通信有四种方式,由CPOL(时钟极性)、CPHA(时钟相位)的4种组合决定的。CPOL决定总线空闲时,SCK是高电平还是低电平(CPOL=0,无数据传输时,SCK=0;CPOL=1,无数据传输时,SCK=1)。CPHA决定在数据开始传输时,SCK第几个跳变沿采集数据(CPHA=0,开始传输时,在第一个跳变沿采集数据,第二个跳变沿改变发送数据(即改变MISO或者MOSI线上电平);CPHA=1,开始传输时,在第一个跳变沿改变发送的数据,在第二个跳变沿采集数据)。如图1所示。
本发明的基于FPGA的SPI从机模块实现方法实现SPI从机模块时以CPOL=0,CPHA=0的传输方式进行说明。使用CPOL=0,CPHA=0的传输模式,主从机都在SCK上升沿对数据进行采集,SCK下降沿改变总线电平;传输时以最先输出最高位,最后输出最低位;FPGA实现的SPI模块作从机,SCK由外部主机提供;通信数据长度为8位。
本发明的基于FPGA的SPI从机模块实现方法中,为了实现SPI从机,将基于FPGA的SPI从机模块分为四个模块:I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块;具体设计方法包括以下步骤:
步骤1、首先要确定模块的输入输出管脚
该部分由I/O接口模块实现,SPI通信脚有4根线,此外还需要时钟引脚和模块复位引脚,因此I/O接口模块用于对模块管脚进行定义,包括输入时钟(clk)、复位信号(nrst)、片选信号(ncs)、SPI时钟(sck)、从机输入(mosi)、从机输出(miso)共6个信号的管脚,从而确定了模块的输入输出管脚;因此模块管脚可以定义为:
module spi(nrst,clk,ncs,mosi,miso,sck);
input clk,nrst;
input ncs,mosi,sck;
output miso;
步骤2、基于步骤1确定检测sck跳变沿的方法
该部分由时钟检测模块实现,因此,时钟检测模块用于使用寄存器记录SPI时钟sck状态,由状态判断sck是否出现跳变沿;具体为:首先定义SPI时钟寄存器变量sck_edge、SPI时钟上升沿变量sck_riseedge、SPI时钟下降沿变量sck_falledge,以外部时钟clk为时基,在外部时钟clk上升沿检测SPI时钟sck的到来,当连续2次检测到sck上升沿时,确认sck上升沿sck_riseedge到来,当连续2次检测到sck下降沿时,确认sck下降沿sck_falledge到来;
步骤3、SPI数据接收
该部分由SPI接收模块实现,SPI接收模块使用有限状态机先将从机输入mosi的数据移入移位寄存器后,再将移位寄存器数据保存到接收缓存器,然后清除接收标志,完成数据接收;具体是通过使用有限状态机完成数据接收过程状态控制,在状态1~状态3间进行状态转换:
状态1:等待SCK上升沿,并将MOSI的数据移入移位寄存器byte_received,接收位数寄存器bit_received_cnt记录接收到的数据位数,接收到8位数据后转入状态2;
状态2:保存移位寄存器byte_received数据到接收缓存器rec_data,接收标志位/接收缓存器非空标志位rec_flag置高4个clk时钟周期后转入状态3;
状态3:清除rec_flag并转入状态1。
至此数据接收过程完成。具体接收流程见图1。
步骤4、SPI数据发送
该部分由SPI发送模块实现,SPI从机一般在解析主机发送的命令后,主动发出主机所需数据,并将数据送往MISO管脚。SPI发送模块用于在接收模块接收主机发送的命令并解析后,主动发出主机所需数据,并将数据送往miso管脚;SPI发送模块使用有限状态机完成数据发送过程状态控制,在状态1~状态4间进行状态转换,在发送标志位置高时,发送移位寄存器存储发送数据,miso管脚输出发送数据最高位,置位正在发送标志;在SCK上升沿,主机接收数据,在SCK下降沿,将发送移位寄存器最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位,完成数据发送。其中,
状态1:等待发送触发标志位send_flag置高,一旦标志位send_flag置高,发送移位寄存器byte_sended存储外部触发模块的数据send_data,miso管脚输出发送数据最高位send_data[7],置位正在发送标志位sending_flag,转入状态2;
状态2:等待SCK上升沿,即等待主机接收数据最高位后进入状态3;
状态3:在SCK下降沿,将发送移位寄存器byte_sended最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位sending_flag,进入状态4;
状态4:置低miso管脚,转入状态1。
至此数据发送过程完成。具体接收流程见图2。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种基于FPGA的SPI从机模块实现方法,其特征在于,包括以下步骤:
步骤1、首先确定模块的输入输出管脚;
步骤2、基于步骤1确定检测sck跳变沿的方法;
步骤3、基于步骤2实现SPI数据接收;
步骤4、基于步骤2实现SPI数据发送。
2.如权利要求1所述的方法,其特征在于,步骤1由I/O接口模块实现,I/O接口模块用于对模块管脚进行定义,包括输入时钟clk、复位信号nrst、片选信号ncs、SPI时钟sck、从机输入mosi、从机输出miso共6个信号的管脚,从而确定了模块的输入输出管脚。
3.如权利要求2所述的方法,其特征在于,步骤2通过设计时钟检测模块实现,因此,时钟检测模块用于使用寄存器记录SPI时钟sck状态,由状态判断sck是否出现跳变沿。
4.如权利要求3所述的方法,其特征在于,步骤2具体为:首先定义SPI时钟寄存器变量sck_edge、SPI时钟上升沿变量sck_riseedge、SPI时钟下降沿变量sck_falledge,以外部时钟clk为时间基准,在外部时钟clk上升沿检测SPI时钟sck的到来,当连续2次检测到sck上升沿时,确认sck上升沿sck_riseedge到来,当连续2次检测到sck下降沿时,确认sck下降沿sck_falledge到来。
5.如权利要求4所述的方法,其特征在于,步骤3通过设计SPI接收模块实现,SPI接收模块使用有限状态机先将从机输入mosi的数据移入移位寄存器后,再将移位寄存器数据保存到接收缓存器,然后清除接收标志,完成数据接收。
6.如权利要求5所述的方法,其特征在于,步骤3具体是通过使用有限状态机完成数据接收过程状态控制,在状态1~状态3间进行状态转换:
状态1:等待SCK上升沿,并将MOSI的数据移入移位寄存器byte_received,接收位数寄存器bit_received_cnt记录接收到的数据位数,接收到8位数据后转入状态2;
状态2:保存移位寄存器byte_received数据到接收缓存器rec_data,接收标志位/接收缓存器非空标志位rec_flag置高4个clk时钟周期后转入状态3;
状态3:清除rec_flag并转入状态1;
至此数据接收过程完成。
7.如权利要求6所述的方法,其特征在于,步骤4通过设计SPI发送模块实现,PI发送模块使用有限状态机完成数据发送过程状态控制,在发送标志位置高时,发送移位寄存器存储发送数据,miso管脚输出发送数据最高位,置位正在发送标志;在SCK上升沿,主机接收数据,在SCK下降沿,将发送移位寄存器最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位,完成数据发送。
8.如权利要求7所述的方法,其特征在于,步骤4中使用有限状态机完成数据发送过程状态控制具体是在状态1~状态4间进行状态转换:
状态1:等待发送触发标志位send_flag置高,一旦标志位send_flag置高,发送移位寄存器byte_sended存储外部触发模块的数据send_data,miso管脚输出发送数据最高位send_data[7],置位正在发送标志位sending_flag,转入状态2;
状态2:等待SCK上升沿,即等待主机接收数据最高位后进入状态3;
状态3:在SCK下降沿,将发送移位寄存器byte_sended最高位移入miso管脚,当发送移位寄存器被移空,清除正在发送标志位sending_flag,进入状态4;
状态4:置低miso管脚,转入状态1;
至此数据发送过程完成。
9.一种如权利要求1至8中任一项所述的方法在接口通信技术领域中的应用。
10.一种利用权利要求1至8中任一项所述的方法设计的SPI从机模块,包括I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010870664.9A CN112035399A (zh) | 2020-08-26 | 2020-08-26 | 一种基于fpga的spi从机模块实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010870664.9A CN112035399A (zh) | 2020-08-26 | 2020-08-26 | 一种基于fpga的spi从机模块实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112035399A true CN112035399A (zh) | 2020-12-04 |
Family
ID=73581555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010870664.9A Pending CN112035399A (zh) | 2020-08-26 | 2020-08-26 | 一种基于fpga的spi从机模块实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112035399A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112882881A (zh) * | 2021-02-22 | 2021-06-01 | 上海共进信息技术有限公司 | 5G毫米波gNB系统的SPI总线时序检测方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101485576A (zh) * | 2008-12-30 | 2009-07-22 | 深圳市蓝韵实业有限公司 | 一种对设备内fpga芯片统一配置和管理的系统 |
CN102231143A (zh) * | 2011-07-04 | 2011-11-02 | 浙江大学 | 一种安全可复用spi外围接口电路 |
CN102567261A (zh) * | 2010-12-31 | 2012-07-11 | 联芯科技有限公司 | 增强型spi控制器、增强型spi的通讯系统及传送数据方法 |
CN202870808U (zh) * | 2012-07-04 | 2013-04-10 | 四川九洲电器集团有限责任公司 | 一种spi串口模块的fpga实现装置 |
CN105824777A (zh) * | 2016-03-18 | 2016-08-03 | 烽火通信科技股份有限公司 | 一种spi总线在ipran设备中的实现方法 |
-
2020
- 2020-08-26 CN CN202010870664.9A patent/CN112035399A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101485576A (zh) * | 2008-12-30 | 2009-07-22 | 深圳市蓝韵实业有限公司 | 一种对设备内fpga芯片统一配置和管理的系统 |
CN102567261A (zh) * | 2010-12-31 | 2012-07-11 | 联芯科技有限公司 | 增强型spi控制器、增强型spi的通讯系统及传送数据方法 |
CN102231143A (zh) * | 2011-07-04 | 2011-11-02 | 浙江大学 | 一种安全可复用spi外围接口电路 |
CN202870808U (zh) * | 2012-07-04 | 2013-04-10 | 四川九洲电器集团有限责任公司 | 一种spi串口模块的fpga实现装置 |
CN105824777A (zh) * | 2016-03-18 | 2016-08-03 | 烽火通信科技股份有限公司 | 一种spi总线在ipran设备中的实现方法 |
Non-Patent Citations (2)
Title |
---|
杨承富等: "SPI总线接口的FPGA设计与实现", 《军事通信技术》 * |
王永利: "基于FPGA的带寄存器寻址SPI接口设计", 《物联网技术》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112882881A (zh) * | 2021-02-22 | 2021-06-01 | 上海共进信息技术有限公司 | 5G毫米波gNB系统的SPI总线时序检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102023956B (zh) | 集成电路芯片中串行外设从器件接口结构及数据读写方法 | |
US7000057B1 (en) | Method and apparatus for adding OTG dual role device capability to a USB peripheral | |
JP3998532B2 (ja) | データ転送装置 | |
CN104915303B (zh) | 基于PXIe总线的高速数字I/O系统 | |
US20210011875A1 (en) | Configuration via high speed serial link | |
CN104881388A (zh) | 基于fpga的usb 3.0接口模块 | |
CN102621974A (zh) | 基于通信总线的工业自动化实时控制装置及控制方法 | |
EP1820110B1 (en) | Multimedia card interface method, computer program product and apparatus | |
CN101183347A (zh) | 一种自适应速率匹配总线的桥接电路 | |
CN111078614A (zh) | 一种基于fpga的功能模块 | |
CN102103564A (zh) | 用于实现总线连接的方法及系统 | |
CN112035399A (zh) | 一种基于fpga的spi从机模块实现方法 | |
US20240111706A1 (en) | Frame alignment recovery for a high-speed signaling interconnect | |
US8510485B2 (en) | Low power digital interface | |
CN107370651B (zh) | 一种spi从机之间的通信方法 | |
CN100462952C (zh) | 接口可配置的通用串行总线控制器 | |
Jusoh et al. | An FPGA implementation of shift converter block technique on FIFO for RS232 to universal serial bus converter | |
CN107168923A (zh) | 一种配置多个fpga的装置及方法 | |
EP0367284A2 (en) | Reconfigurable output port | |
Warrier et al. | FPGA implementation of SPI To I2C bridge | |
CN103226537A (zh) | 一种实现手机硬件接口的可编程逻辑器件 | |
CN110109615B (zh) | 字节流转义字符硬件处理方法 | |
JP2001522501A (ja) | スレーブ群インターフェース装置を介して周辺機器をバスにインターフェースする方法 | |
CN111198829B (zh) | 一种FIFO master接口、具有该接口的FPGA及应用 | |
EP2466477B1 (en) | Interface system, and corresponding integrated circuit and method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201204 |
|
RJ01 | Rejection of invention patent application after publication |