CN112035399A - 一种基于fpga的spi从机模块实现方法 - Google Patents

一种基于fpga的spi从机模块实现方法 Download PDF

Info

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
Application number
CN202010870664.9A
Other languages
English (en)
Inventor
刘炳山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Jinhang Computing Technology Research Institute
Original Assignee
Tianjin Jinhang Computing Technology Research Institute
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianjin Jinhang Computing Technology Research Institute filed Critical Tianjin Jinhang Computing Technology Research Institute
Priority to CN202010870664.9A priority Critical patent/CN112035399A/zh
Publication of CN112035399A publication Critical patent/CN112035399A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System 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/781On-chip cache; Off-chip memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1689Synchronisation and timing concerns
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System 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/7817Specially adapted for signal processing, e.g. Harvard architectures

Abstract

本发明涉及一种基于FPGA的SPI从机模块实现方法,属于接口通信技术领域。本发明以FPGA为硬件平台,实现SPI从机模块通信数据的自动接收和发送,涉及I/O接口模块、时钟检测模块、SPI接收模块和SPI发送模块的实现方法。可实现对通信数据的自动接收和发送,本方法在不增加硬件资源情况下,直接通过FPGA扩展SPI接口,不依赖于厂家提供的IP核,具有很强的灵活性,其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。

Description

一种基于FPGA的SPI从机模块实现方法
技术领域
本发明属于接口通信技术领域,具体涉及一种基于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发送模块。
CN202010870664.9A 2020-08-26 2020-08-26 一种基于fpga的spi从机模块实现方法 Pending CN112035399A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112882881A (zh) * 2021-02-22 2021-06-01 上海共进信息技术有限公司 5G毫米波gNB系统的SPI总线时序检测方法

Citations (5)

* Cited by examiner, † Cited by third party
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设备中的实现方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
杨承富等: "SPI总线接口的FPGA设计与实现", 《军事通信技术》 *
王永利: "基于FPGA的带寄存器寻址SPI接口设计", 《物联网技术》 *

Cited By (1)

* Cited by examiner, † Cited by third party
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