CN111522770B - 基于fpga的参数化配置的spi控制器及使用方法 - Google Patents

基于fpga的参数化配置的spi控制器及使用方法 Download PDF

Info

Publication number
CN111522770B
CN111522770B CN202010343132.XA CN202010343132A CN111522770B CN 111522770 B CN111522770 B CN 111522770B CN 202010343132 A CN202010343132 A CN 202010343132A CN 111522770 B CN111522770 B CN 111522770B
Authority
CN
China
Prior art keywords
spi
data
receiving
sending
submodule
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.)
Active
Application number
CN202010343132.XA
Other languages
English (en)
Other versions
CN111522770A (zh
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.)
Chengdu Huirong Guoke Microsystem Technology Co ltd
Original Assignee
Chengdu Huirong Guoke Microsystem Technology Co ltd
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 Chengdu Huirong Guoke Microsystem Technology Co ltd filed Critical Chengdu Huirong Guoke Microsystem Technology Co ltd
Priority to CN202010343132.XA priority Critical patent/CN111522770B/zh
Publication of CN111522770A publication Critical patent/CN111522770A/zh
Application granted granted Critical
Publication of CN111522770B publication Critical patent/CN111522770B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)

Abstract

本发明提供一种基于FPGA的参数化配置的SPI控制器及使用方法,所述SPI控制器包括:主SPI控制模块、从SPI控制模块,所述主SPI控制模块用于根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令,并配置传输的数据的长度,确定从SPI控制模块的数据传输时机;根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;所述从SPI控制模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输。根据本发明的方案,实现参数化配置主、从SPI,简化了主、从SPI的控制。

Description

基于FPGA的参数化配置的SPI控制器及使用方法
技术领域
本发明涉及FPGA的SPI控制领域,尤其涉及一种基于FPGA的参数化配置的SPI控制器及使用方法。
背景技术
FPGA系统中常使用低速数据的传输方式进行数据的传输,比如串口uart、SPI、I2C等。在传输速率上,uart和I2C的传输速率都比SPI低,但SPI控制线通常都是4根,即mosi、miso、cs、sclk。并且SPI的通信数据收发方式多、且具有主从结构,即主SPI和从SPI,由主SPI和从SPI双方约定传输数据的方式和长度,但是在目前实际使用过程中,主从SPI可能不是同一个人或同一个公司提供,并且在调试或使用过程中,会面临着传输数据长度、收发模式的更改。
在传统的SPI控制中,时钟SCLK信号是随着片选CS信号有效而有效,然后将信号发送给从SPI控制器,但在实际应用中,这种信号发送方式会加大从SPI的控制难度,不便于传输数据。在系统调试过程中,经常会更改需求,例如将片选CS信号拉低,需要重新计算主SPI需要传输多少字节长度,也需要计算从SPI需要传输多少字节长度。又如需要更改主SPI、从SPI的数据收发模式,将主SPI的只发送数据、从SPI的只接收数据修改为主SPI和从SPI同时相互收发数据。当面对需求更改时,需要重新设计代码架构、编写代码、进行仿真,需要花费具大代价。
发明内容
为解决上述技术问题,本发明提出了一种基于FPGA的参数化配置的SPI控制器及使用方法,所述SPI控制器及使用方法,用以解决现有技术中在调试或使用过程中,面临着传输数据长度、收发模式更改、需求变更而需要重新设计代码架构、编写代码、进行仿真的技术问题。
根据本发明的第一方面,提供一种基于FPGA的参数化配置的SPI控制器,包括:
主SPI控制模块、从SPI控制模块,所述主SPI控制模块用于根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令,并配置传输的数据的长度,确定从SPI控制模块的数据传输时机;根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;所述从SPI控制模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述主SPI控制模块包括主SPI控制子模块、主SPI收发子模块,所述主SPI控制子模块用于获取配置的主SPI的工作模式,根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令给主SPI收发子模块;确定从SPI控制模块的数据传输时机;所述主SPI收发子模块用于接收主SPI控制子模块发送的数据传输指令,并配置传输的数据的长度,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述从SPI控制模块包括从SPI收发子模块,所述从SPI收发子模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输。
进一步地,所述主SPI控制模块还包括主SPI数据发送子模块、主SPI数据接收子模块、缓存模块;所述主SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据缓存队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述主SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择miso控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入接收数据缓存队列进行缓存,该队列采用FIFO机制。
进一步地,所述从SPI控制模块还包括从SPI数据发送子模块、从SPI数据接收子模块、缓存模块;所述从SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述从SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择mosi控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入数据接收队列进行缓存,该队列采用FIFO机制。
进一步地,为SPI控制器设置了五种工作模式,用于设置数据的传输方式,分别是先发送后接收、先接收后发送、同时进行数据发送和接收、只发送、只接收。当主SPI控制模块被选择为先发送后接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先接收后发送;当主SPI控制模块被选择为先接收后发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先发送后接收;当主SPI控制模块被选择为同时进行数据发送和接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为同时进行数据发送和接收;当主SPI控制模块被选择为只发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只接收;当主SPI控制模块被选择为只接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只发送;并且,所述主SPI发送和/或接收的字节数分别与从SPI接收和/或发送的字节数相同。
进一步地,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为先接收后发送,则执行以下步骤:
步骤S3A01:向SPI控制器发送指令,配置所述SPI控制器的主SPI控制模块中的主SPI控制子模块的工作模式参数为8’h01,从而使主SPI进入先接收后发送的工作模式;
步骤S3A02:判断是否接收到接收数据指令,若否,继续监听,进入步骤S3A02;若是,进入步骤S3A03;
步骤S3A03:发出接收命令给主SPI收发子模块,使主SPI收发子模块接收数据;
步骤S3A04:判断数据是否接收完毕,若是,进入步骤S3A05;若否,继续接收数据,进入步骤S3A04;
步骤S3A05:发出接收完成信号,标记为flag,并将该完成信号发送给主SPI命令控制子模块,所述主SPI控制子模块进入预发送状态;
步骤S3A06:判断是否有外部用户向所述SPI控制器发出发送指令,若是,进入步骤S3A07;若否,继续监听,进入步骤S3A06;
步骤S3A07:主SPI控制子模块发出数据发送指令给主SPI收发子模块,主SPI收发子模块发送数据;
步骤S3A08:判断所述主SPI收发子模块是否发送完毕,若是,进入步骤S3A09;若否,所述主SPI收发子模块继续发送数据,进入步骤S3A08;
步骤S3A09:发出发送完成信号,标记为flag1,并将该发送完成信号发送给主SPI控制子模块;
步骤S3A10:所述主SPI控制子模块进入空闲状态。
进一步地,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为先发送后接收,则执行以下步骤:
步骤S3B01:先在主SPI控制子模块顶层接口配置工作模式8’h00,表示工作模式为先发送后接收;
步骤S3B02:判断是否接收到发送数据指令,若否,继续监听,进入步骤S3B02继续等待;若是,则进入步骤S3B03;
步骤S3B03:主SPI控制子模块发出发送命令给主SPI收发子模块,控制主SPI收发子模块发送数据,进入步骤S3B04;
步骤S3B04:主SPI收发子模块进行数据发送,判断设定要发送的数据长度的数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块,进入步骤S3B05;否则,进入步骤S3B04;
步骤S3B05:主SPI控制子模块接收到主SPI收发子模块发过来的发送完成flag标志后,判断是否接收到接收指令,如果是,则进入步骤S3B06,否则,等待,并再进入步骤S3B05;
步骤S3B06:主SPI控制子模块发出接收指令给主SPI收发子模块;
步骤S3B07:主SPI收发子模块接收到接收命令后,开始接收数据,直至数据接收完毕,发出接收完成flag给主SPI收发子模块。
进一步地,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为同时进行数据发送和接收,则执行以下步骤:
步骤S3C01:先在主SPI控制子模块顶层接口配置工作模式8’h02,表示工作模式为同时接收和收送;
步骤S3C02:判断是否接收到同时收发数据指令,若否,继续监听,进入步骤S3C02;若是,则进入步骤S3C03;
步骤S3C03:主SPI控制子模块发出同时接收和发送命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收和发送;
步骤S3C04:主SPI收发子模块同时进行数据发送和接收;
步骤S3C05:判断是否把设定长度的要发送和接收的数据收发完毕,若是,则发送收发完成flag标志给主SPI控制子模块;否则,进入步骤S3C04。
进一步地,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为只发送,则执行以下步骤:
步骤S3D01:先在主SPI控制子模块顶层接口配置工作模式8’h03,表示工作模式为只发送数据;
步骤S3D02:判断是否接收到只发送数据指令,若否,继续监听,进入步骤S3D02;若是,则进入步骤S3D03;
步骤S3D03:主SPI控制子模块发出只发送数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据发送;
步骤S3D04:主SPI收发子模块进行数据发送;
步骤S3D05:判断设定要发送长度的发送数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块;若否,进入步骤S3D04。
进一步地,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为只接收,则执行以下步骤:
步骤S3E01:先在主SPI控制子模块顶层接口配置工作模式8’h04,表示工作模式为只接收数据;
步骤S3E02:判断是否接收到只接收数据指令,若否,继续监听,进入步骤S3E02;若是,则进入步骤S3E03;
步骤S3E03:主SPI控制子模块发出只接收数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收;
步骤S3E04:主SPI收发子模块进行数据接收;
步骤S3E05:判断设定的待接收长度的数据是否接收完毕,若是,发送完成flag标志给主SPI控制子模块,否则,进入步骤S3E04。
进一步地,所述主SPI收发子模块执行以下步骤:
步骤S4001:主SPI、从SPI双方协商确定数据接收和发送的字节数,从而得到待发送字节数N1以及待接收字节数N2,并在主SPI收发子模块顶层接口进行配置;
步骤S4002:判断是否接收到所述主SPI控制子模块发送的控制命令;若是,进入步骤S4003;若否,继续监听,进入步骤S4002;
步骤S4003:若所述控制命令为与先接收后发送模式对应的发送指令,进入步骤S4004;若所述控制命令为与同时接收和发送模式对应的接收指令,进入步骤S4009;若所述控制命令为与只发送模式对应的收发指令,进入步骤S4013;
步骤S4004:从发送数据缓存队列中读取待发送数据,将读取到的待发送的数据寄存到移位寄存器send_data中;
步骤S4005:判断是否将待发送的N1个字节数据全部读完,若是,进入步骤S4006;若否,进入步骤S4004;
步骤S4006:向所述从SPI收发子模块发送数据,并赋值为mosi信号;
步骤S4007:判断向所述从SPI收发子模块发送数据是否发送完毕;若是,进入步骤S4008;若否,进入步骤S4006;
步骤S4008:生成结束信号,记为flag1,并将该发送完成信号发送给主SPI控制子模块;方法结束;
步骤S4009:若SPI收发子模块接收到与同时接收和发送模式对应的接收指令,则进入接收数据状态;
步骤S4010:主SPI收发子模块进入数据接收状态,把Miso信号,按照移位依次缓存入移位寄存器Rece_data中;
步骤S4011:判断是否接收完对应字节长度的数据,若是,进入步骤S4012,否则继续将信号依次缓存入移位寄存器Rece_data中;
步骤S4012:发出结束flag标志,转到结束状态,方法结束;
步骤S4013:当主SPI收发模块收到主SPI控制模块发出与只发送模式对应的接收指令时,则进入步骤S4014;
步骤S4014:从发送缓存FIFO队列中读取,并把数据依次缓存入移位寄存器send_data中;
步骤S4015:判断是否读取了设定的要发送对应字节长度的数据,如果是,则进入步骤S4016,否则,进入步骤S4014;
步骤S4016:把要发送的数据从send_data寄存器中按照移位的方式赋值给mosi信号,并同时把要接收的数据信号miso,按照移位的方式移入rece_data寄存器中;
步骤S4017:执行数据收发,判断数据是否接收完毕及发送完毕,若是,进入步骤S4018;否则,进入步骤S4017;
步骤S4018:发出结束flag标志给主SPI控制子模块,方法结束。
根据本发明第二方面,提供一种基于FPGA的参数化配置的SPI控制器的使用方法,其包括如前所述的SPI控制器,使用方法包括:
根据FPGA的使用场景,获取所述FPGA的SPI接口所需的工作模式和所需发送和/或接收的数据的长度,根据所述工作模式及所述所需发送和/或接收的数据的长度,生成配置参数,将所述配置参数发送给所述SPI控制器。
根据本发明的上述方案,对SPI协议进行了进一步封装,解决了对主SPI及从SPI收发方式的更改、以及主SPI及从SPI传输数据的长度存在变化时,需要重新去设计代码架构、编写代码、进行仿真等复杂的流程,可以实现参数化配置,简便了主、从SPI的数据收发控制,便于多种模式调试。还解决了传统SPI控制时,由于时钟SCLK信号随着片选CS信号有效而有效,造成从SPI控制困难,不便于接收和发送数据的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
图1为本发明一个实施方式的基于FPGA的参数化配置的SPI控制器的总体结构图;
图2A为主SPI数据发送子模块、从SPI数据发送子模块的数据发送示意图;
图2B为主SPI数据接收子模块、从SPI数据接收子模块的数据接收示意图;
图3A-E为本发明SPI控制器的主SPI控制模块工作流程图;
图4为本发明一个实施方式的主SPI收发子模块工作流程图;
图5A-E为本发明SPI控制器的从SPI收发子模块工作流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先结合图1说明本发明的实现基于FPGA的参数化配置的SPI控制器,图1示出了根据本发明的一个实施方式的基于FPGA的参数化配置的SPI控制器的总体结构图。如图1所示:
所述基于FPGA的参数化配置的SPI控制器包括主SPI控制模块、从SPI控制模块,所述主SPI控制模块用于根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令,并配置传输的数据的长度,确定从SPI控制模块的数据传输时机;根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;所述从SPI控制模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述主SPI控制模块包括主SPI控制子模块、主SPI收发子模块,所述主SPI控制子模块用于获取配置的主SPI的工作模式,根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令给主SPI收发子模块;确定从SPI控制模块的数据传输时机;所述主SPI收发子模块用于接收主SPI控制子模块发送的数据传输指令,并配置传输的数据的长度,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述从SPI控制模块包括从SPI收发子模块,所述从SPI收发子模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输。
以下结合图2A-B说明本发明的数据输入和数据输出。图2A为主SPI数据发送子模块、从SPI数据发送子模块的数据发送示意图,图2B为主SPI数据接收子模块、从SPI数据接收子模块的数据接收示意图,如图2A-B所示:
进一步地,所述主SPI控制模块还包括主SPI数据发送子模块、主SPI数据接收子模块、缓存模块;所述主SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据缓存队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述主SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择miso控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入接收数据缓存队列进行缓存,该队列采用FIFO机制。
进一步地,所述从SPI控制模块还包括从SPI数据发送子模块、从SPI数据接收子模块、缓存模块;所述从SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述从SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择mosi控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入数据接收队列进行缓存,该队列采用FIFO机制。
本实施例中,为SPI控制器设置了五种工作模式,用于设置数据的传输方式,分别是先发送后接收、先接收后发送、同时进行数据发送和接收、只发送、只接收。当主SPI控制模块被选择为先发送后接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先接收后发送;当主SPI控制模块被选择为先接收后发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先发送后接收;当主SPI控制模块被选择为同时进行数据发送和接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为同时进行数据发送和接收;当主SPI控制模块被选择为只发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只接收;当主SPI控制模块被选择为只接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只发送;并且,所述主SPI发送和/或接收的字节数分别与从SPI接收和/或发送的字节数相同。
以下结合图3A-E说明本发明SPI控制器的主SPI控制模块工作流程图,如图3A-E所示:
首先,对工作模式参数进行说明,8’h01表示工作模式为先接收后发送,8’h00表示工作模式为先发送后接收,8’h02表示工作模式为同时接收和发送,8’h03表示工作模式为只发送,8’h04表示工作模式为只接收。
外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式。主SPI根据配置的工作模式进入相应的工作流程。
若需要配置主SPI的工作模式为先接收后发送,如图3A所示,执行以下步骤:
步骤S3A01:向SPI控制器发送指令,配置所述SPI控制器的主SPI控制模块中的主SPI控制子模块的工作模式参数为8’h01,从而使主SPI进入先接收后发送的工作模式;
步骤S3A02:判断是否接收到接收数据指令,若否,继续监听,进入步骤S3A02;若是,进入步骤S3A03;
步骤S3A03:发出接收命令给主SPI收发子模块,使主SPI收发子模块接收数据;
主SPI控制子模块根据所设定的模式,即先接收后发送模式,然后按照控制时序先产生接收命令给主SPI收发子模块进行接收数据。
步骤S3A04:判断数据是否接收完毕,若是,进入步骤S3A05;若否,继续接收数据,进入步骤S3A04;
步骤S3A05:发出接收完成信号,标记为flag,并将该完成信号发送给主SPI命令控制子模块,所述主SPI控制子模块进入预发送状态;
步骤S3A06:判断是否有外部用户向所述SPI控制器发出发送指令,若是,进入步骤S3A07;若否,继续监听,进入步骤S3A06;
步骤S3A07:主SPI控制子模块发出数据发送指令给主SPI收发子模块,主SPI收发子模块发送数据;
主SPI控制子模块产生并发出发送命令给主SPI收发子模块,使其发送数据。
步骤S3A08:判断所述主SPI收发子模块是否发送完毕,若是,进入步骤S3A09;若否,所述主SPI收发子模块继续发送数据,进入步骤S3A08;
步骤S3A09:发出发送完成信号,标记为flag1,并将该发送完成信号发送给主SPI控制子模块;
步骤S3A10:所述主SPI控制子模块进入空闲状态。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为先发送后接收,如图3B所示,执行以下步骤:
步骤S3B01:先在主SPI控制子模块顶层接口配置工作模式8’h00,表示工作模式为先发送后接收;
步骤S3B02:判断是否接收到发送数据指令,若否,继续监听,进入步骤S3B02继续等待;若是,则进入步骤S3B03;
步骤S3B03:主SPI控制子模块发出发送命令给主SPI收发子模块,控制主SPI收发子模块发送数据,进入步骤S3B04;
步骤S3B04:主SPI收发子模块进行数据发送,判断设定要发送的数据长度的数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块,进入步骤S3B05;否则,进入步骤S3B04;
步骤S3B05:主SPI控制子模块接收到主SPI收发子模块发过来的发送完成flag标志后,判断是否接收到接收指令,如果是,则进入步骤S3B06,否则,等待,并再进入步骤S3B05;
步骤S3B06:主SPI控制子模块发出接收指令给主SPI收发子模块;
步骤S3B07:主SPI收发子模块接收到接收命令后,开始接收数据,直至数据接收完毕,发出接收完成flag给主SPI收发子模块。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为同时进行数据发送和接收,如图3C所示,执行以下步骤:
步骤S3C01:先在主SPI控制子模块顶层接口配置工作模式8’h02,表示工作模式为同时接收和收送;
步骤S3C02:判断是否接收到同时收发数据指令,若否,继续监听,进入步骤S3C02;若是,则进入步骤S3C03;
步骤S3C03:主SPI控制子模块发出同时接收和发送命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收和发送;
步骤S3C04:主SPI收发子模块同时进行数据发送和接收;
步骤S3C05:判断是否把设定长度的要发送和接收的数据收发完毕,若是,则发送收发完成flag标志给主SPI控制子模块;否则,进入步骤S3C04。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为只发送,如图3D所示,执行以下步骤:
步骤S3D01:先在主SPI控制子模块顶层接口配置工作模式8’h03,表示工作模式为只发送数据;
步骤S3D02:判断是否接收到只发送数据指令,若否,继续监听,进入步骤S3D02;若是,则进入步骤S3D03;
步骤S3D03:主SPI控制子模块发出只发送数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据发送;
步骤S3D04:主SPI收发子模块进行数据发送;
步骤S3D05:判断设定要发送长度的发送数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块;若否,进入步骤S3D04。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为只接收,如图3E所示,执行以下步骤:
步骤S3E01:先在主SPI控制子模块顶层接口配置工作模式8’h04,表示工作模式为只接收数据;
步骤S3E02:判断是否接收到只接收数据指令,若否,继续监听,进入步骤S3E02;若是,则进入步骤S3E03;
步骤S3E03:主SPI控制子模块发出只接收数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收;
步骤S3E04:主SPI收发子模块进行数据接收;
步骤S3E05:判断设定的待接收长度的数据是否接收完毕,若是,发送完成flag标志给主SPI控制子模块,否则,进入步骤S3E04。
以下结合图4说明本发明一个实施方式的主SPI收发子模块工作流程图,如图4所示:
步骤S4001:主SPI、从SPI双方协商确定数据接收和发送的字节数,从而得到待发送字节数N1以及待接收字节数N2,并在主SPI收发子模块顶层接口进行配置;
步骤S4002:判断是否接收到所述主SPI控制子模块发送的控制命令;若是,进入步骤S4003;若否,继续监听,进入步骤S4002;
步骤S4003:若所述控制命令为与先接收后发送模式对应的发送指令,进入步骤S4004;若所述控制命令为与同时接收和发送模式对应的接收指令,进入步骤S4009;若所述控制命令为与只发送模式对应的收发指令,进入步骤S4013;
主SPI控制子模块接收外部设定的5种模式,即先发送后接收、先接收后发送、同时收发、只发送、只接收。通过观察这5种模式,发现对数据要么接收,要么发送,要么同时发送和接收。所以本实施例中SPI控制子模块根据设定模式,会产生3种命令,即发送命令、接收命令、同时发送和接收命令。
步骤S4004:从发送数据缓存队列中读取待发送数据,将读取到的待发送的数据寄存到移位寄存器send_data中;
步骤S4005:判断是否将待发送的N1个字节数据全部读完,若是,进入步骤S4006;若否,进入步骤S4004;
步骤S4006:向所述从SPI收发子模块发送数据,并赋值为mosi信号;
步骤S4007:判断向所述从SPI收发子模块发送数据是否发送完毕;若是,进入步骤S4008;若否,进入步骤S4006;
步骤S4008:生成结束信号,记为flag1,并将该发送完成信号发送给主SPI控制子模块;方法结束;
步骤S4009:若SPI收发子模块接收到与同时接收和发送模式对应的接收指令,则进入接收数据状态;
步骤S4010:主SPI收发子模块进入数据接收状态,把Miso信号,按照移位依次缓存入移位寄存器Rece_data中;
步骤S4011:判断是否接收完对应字节长度的数据,若是,进入步骤S4012,否则继续将信号依次缓存入移位寄存器Rece_data中;
步骤S4012:发出结束flag标志,转到结束状态,方法结束;
步骤S4013:当主SPI收发模块收到主SPI控制模块发出与只发送模式对应的接收指令时,则进入步骤S4014;
步骤S4014:从发送缓存FIFO队列中读取,并把数据依次缓存入移位寄存器send_data中;
步骤S4015:判断是否读取了设定的要发送对应字节长度的数据,如果是,则进入步骤S4016,否则,进入步骤S4014;
步骤S4016:把要发送的数据从send_data寄存器中按照移位的方式赋值给mosi信号,并同时把要接收的数据信号miso,按照移位的方式移入rece_data寄存器中;
步骤S4017:执行数据收发,判断数据是否接收完毕及发送完毕,若是,进入步骤S4018;否则,进入步骤S4017;
步骤S4018:发出结束flag标志给主SPI控制子模块,方法结束。
以下结合图5A-E说明本发明SPI控制器的从SPI收发子模块工作流程,如图5A-E所示:
外部用户对FPGA进行调试或使用时,根据配置的主SPI的工作模式配置从SPI的工作模式,根据从SPI的工作模式进入相应的工作流程。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为先接收后发送,相应的,需要将从SPI的工作模式配置为先接收后发送,如图5A所示,执行以下步骤:
步骤S5A01:获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,所述主SPI的工作模式为8’h01,则确定所述从SPI的工作模式为先发送后接收,即8’h00;确定接收及发送的数据的长度,接收的数据的长度与所述主SPI收发子模块发送的数据长度相同,发送的数据的长度与所述主SPI收发子模块接收的数据的长度相同;
步骤S5A02:在到达所述数据传输时机时,所述从SPI进入先发送后接收模式;
所述数据传输时机是由主SPI、从SPI提前协商确定的。
步骤S5A03:从发送数据队列中读出待发送的数据,并将所述数据移位寄存在send_data寄存器中;
步骤S5A04:判断全部数据是否读取完毕;若是,进入步骤S5A05;若否,进入步骤S5A03;
步骤S5A05:判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5A06;如果没有检测到,等待,再进入步骤S5A05;
步骤S5A06:发送数据,并赋值给miso信号,当检测到片选信号CS的上升沿时,则进入步骤S5A07,否则,进入步骤S5A06;
步骤S5A07:此时数据发送结束,并进入步骤S5A08;
步骤S5A08:判断是否检测到片选信号CS的下降沿,若是,进入步骤S5A09;若否,等待,再进入步骤S5A08;
步骤S5A09:执行数据接收,把接收到的数据信号mosi移位缓存在rece_data移位寄存器中;若检测到片选信号CS的上升沿,则数据接收结束,方法结束;否则,进入步骤S5A09。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为先发送后接收,则从SPI的工作模式为先接收后发送,如图5B所示,执行以下步骤:
步骤S5B01:获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,所述主SPI的工作模式为8’h00,则确定所述从SPI的工作模式为先接收后发送;确定接收及发送的数据的长度,接收的数据的长度与所述主SPI收发子模块发送的数据长度相同,发送的数据的长度与所述主SPI收发子模块接收的数据的长度相同;
步骤S5B02:判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5B03;如果没有检测到,则等待,并进入步骤S5B02;
步骤S5B03:接收数据,把mosi信号按位移位到移位寄存器rece_data中,并判断是否检测到片选信号CS的上升沿时,若检测到,则进入步骤S5B04,否则,进入步骤S5B03;
步骤S5B04:此时数据接收结束,并进入步骤S5B05;
步骤S5B05:从发送数据队列中读出待发送的数据,并将所述数据移位寄存在send_data寄存器中,并判断是否读取到设定长度,如果读取到,则进入S5B06;否则进入步骤S5B05;
步骤S5B06:判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5B07;如果没有检测到,则等待,再进入步骤S5B06;
步骤S5B07:发送数据,并赋值给miso信号,当检测到片选信号CS的上升沿时,方法结束;否则,进入步骤S5B07。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为同时进行数据发送和接收,则从SPI的工作模式为同时进行数据发送和接收,如图5C所示,执行以下步骤:
步骤S5C01:获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,所述主SPI的工作模式为8’h02,则确定所述从SPI的工作模式为同时接收和发送;确定接收及发送的数据的长度,接收的数据的长度与所述主SPI收发子模块发送的数据长度相同,发送的数据的长度与所述主SPI收发子模块接收的数据的长度相同;
步骤S5C02:从发送数据队列中读出待发送的数据,并将所述数据移位寄存在send_data寄存器中,并判断是否读取到设定长度,如果读取到,则进入S5C03,否则进入步骤S5C02;
步骤S5C03:判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5C04;如果没有检测到,等待,再进入步骤S5C03;
步骤S5C04:同时进行数据接收和发送,把寄存器send_data的数据按位赋值给miso信号,同时把mosi信号按位移位至移位寄存器rece_data中,若检测到片选信号CS的上升沿时,进入步骤S5C05;若否,进入步骤S5C04;
步骤S5C05:此时收发结束,方法结束。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为只接收,则从SPI的工作模式为只发送,如图5D所示,执行以下步骤:
步骤S5D01:获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,所述主SPI的工作模式为8’h03,则确定所述从SPI的工作模式为只发送;确定发送的数据的长度;
步骤S5D02:从发送数据队列中读出待发送的数据,并将所述数据移位寄存在send_data寄存器中;判断全部数据是否读取完毕;若是,进入步骤S5D03,否则,进入步骤S5D02;
步骤S5D03:进入发送状态,判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5D04;如果没有检测到,则等待,再进入步骤S5D03;
步骤S5D04:发送数据,并赋值给miso信号,当检测到片选信号CS的上升沿时,则进入步骤S5D05;否则,进入步骤S5D04;
步骤S5D05:此时数据发送结束,方法结束。
外部用户对FPGA进行调试或使用时,若需要配置主SPI的工作模式为只发送,则从SPI的工作模式为只接收,如图5E所示,执行以下步骤:
步骤S5E01:获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,所述主SPI的工作模式为只发送,即8’h03,则确定所述从SPI的工作模式为只接收,确定接收的数据的长度;
步骤S5E02:判断是否检测到片选信号CS的下降沿,如果检测到,进入步骤S5E03;如果没有检测到,则等待,再进入步骤S5E03;
步骤S5E03:接收数据,把mosi信号按位移位移位寄存器rece_data中,并判断是否检测到片选信号CS的上升沿时,若检测到,则进入步骤S5E04,否则,进入步骤S5E03;
步骤S5E04:此时数据接收结束,并进入步骤S5E01;只要不改变工作模式,则继续循环。
本发明实施例进一步给出一种基于FPGA的参数化配置的SPI控制器的使用方法,其包括如前所述的SPI控制器,使用方法包括:
根据FPGA的使用场景,获取所述FPGA的SPI接口所需的工作模式和所需发送和/或接收的数据的长度,根据所述工作模式及所述所需发送和/或接收的数据的长度,生成配置参数,将所述配置参数发送给所述SPI控制器。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装Windows或者Windows Server操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (6)

1.一种基于FPGA的参数化配置的SPI控制器,其特征在于,所述SPI控制器包括:
主SPI控制模块、从SPI控制模块,所述主SPI控制模块用于根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令,并配置传输的数据的长度,确定从SPI控制模块的数据传输时机;根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;所述从SPI控制模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述主SPI控制模块包括主SPI控制子模块、主SPI收发子模块,所述主SPI控制子模块用于获取配置的主SPI的工作模式,根据配置的主SPI的工作模式,在该工作模式的控制时序下,发出数据传输指令给主SPI收发子模块;确定从SPI控制模块的数据传输时机;所述主SPI收发子模块用于接收主SPI控制子模块发送的数据传输指令,并配置传输的数据的长度,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
所述从SPI控制模块包括从SPI收发子模块,所述从SPI收发子模块用于获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式,确定传输的数据的长度,在到达所述数据传输时机时,根据所述数据传输指令,对数据的收或发进行控制,对数据进行传输;
为SPI控制器设置了五种工作模式,用于设置数据的传输方式,分别是先发送后接收、先接收后发送、同时进行数据发送和接收、只发送、只接收;当主SPI控制模块被选择为先发送后接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先接收后发送;当主SPI控制模块被选择为先接收后发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为先发送后接收;当主SPI控制模块被选择为同时进行数据发送和接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为同时进行数据发送和接收;当主SPI控制模块被选择为只发送时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只接收;当主SPI控制模块被选择为只接收时,从SPI控制模块获取主SPI的工作模式,并根据主SPI的工作模式配置从SPI的工作模式为只发送;并且,所述主SPI发送和/或接收的字节数分别与从SPI接收和/或发送的字节数相同;
外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为先接收后发送,则执行以下步骤:
步骤S3A01:向SPI控制器发送指令,配置所述SPI控制器的主SPI控制模块中的主SPI控制子模块的工作模式参数为8’h01,从而使主SPI进入先接收后发送的工作模式;
步骤S3A02:判断是否接收到接收数据指令,若否,继续监听,进入步骤S3A02;若是,进入步骤S3A03;
步骤S3A03:发出接收命令给主SPI收发子模块,使主SPI收发子模块接收数据;
步骤S3A04:判断数据是否接收完毕,若是,进入步骤S3A05;若否,继续接收数据,进入步骤S3A04;
步骤S3A05:发出接收完成信号,标记为flag,并将该完成信号发送给主SPI控制子模块,所述主SPI控制子模块进入预发送状态;
步骤S3A06:判断是否有外部用户向所述SPI控制器发出发送指令,若是,进入步骤S3A07;若否,继续监听,进入步骤S3A06;
步骤S3A07:主SPI控制子模块发出数据发送指令给主SPI收发子模块,主SPI收发子模块发送数据;
步骤S3A08:判断所述主SPI收发子模块是否发送完毕,若是,进入步骤S3A09;若否,所述主SPI收发子模块继续发送数据,进入步骤S3A08;
步骤S3A09:发出发送完成信号,标记为flag1,并将该发送完成信号发送给主SPI控制子模块;
步骤S3A10:所述主SPI控制子模块进入空闲状态;
所述主SPI收发子模块执行以下步骤:
步骤S4001:主SPI、从SPI双方协商确定数据接收和发送的字节数,从而得到待发送字节数N1以及待接收字节数N2,并在主SPI收发子模块顶层接口进行配置;
步骤S4002:判断是否接收到所述主SPI控制子模块发送的控制命令;若是,进入步骤S4003;若否,继续监听,进入步骤S4002;
步骤S4003:若所述控制命令为与先接收后发送模式对应的发送指令,进入步骤S4004;若所述控制命令为与同时接收和发送模式对应的接收指令,进入步骤S4009;若所述控制命令为与只发送模式对应的收发指令,进入步骤S4013;
步骤S4004:从发送数据缓存队列中读取待发送数据,将读取到的待发送的数据寄存到移位寄存器send_data中;
步骤S4005:判断是否将待发送的N1个字节数据全部读完,若是,进入步骤S4006;若否,进入步骤S4004;
步骤S4006:向所述从SPI收发子模块发送数据,并赋值为mosi信号;
步骤S4007:判断向所述从SPI收发子模块发送数据是否发送完毕;若是,进入步骤S4008;若否,进入步骤S4006;
步骤S4008:生成结束信号,记为flag1,并将该发送完成信号发送给主SPI控制子模块;方法结束;
步骤S4009:若SPI收发子模块接收到与同时接收和发送模式对应的接收指令,则进入接收数据状态;
步骤S4010:主SPI收发子模块进入数据接收状态,把Miso信号,按照移位依次缓存入移位寄存器Rece_data中;
步骤S4011:判断是否接收完对应字节长度的数据,若是,进入步骤S4012,否则继续将信号依次缓存入移位寄存器Rece_data中;
步骤S4012:发出结束flag标志,转到结束状态,方法结束;
步骤S4013:当主SPI收发子模块收到主SPI控制模块发出与只发送模式对应的发送指令时,则进入步骤S4014;
步骤S4014:先在主SPI控制子模块顶层接口配置工作模式8’h03,表示工作模式为只发送数据;
步骤S4015:判断是否接收到只发送数据指令,若否,继续监听,进入步骤S4015;若是,则进入步骤S4016;
步骤S4016:主SPI控制子模块发出只发送数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据发送;
步骤S4017:主SPI收发子模块进行数据发送;
步骤S4018:判断设定要发送长度的发送数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块;若否,进入步骤S4017。
2.如权利要求1所述的基于FPGA的参数化配置的SPI控制器,其特征在于,所述主SPI控制模块还包括主SPI数据发送子模块、主SPI数据接收子模块、缓存模块;所述主SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据缓存队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述主SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择miso控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入接收数据缓存队列进行缓存,该队列采用FIFO机制。
3.如权利要求1所述的基于FPGA的参数化配置的SPI控制器,其特征在于,所述从SPI控制模块还包括从SPI数据发送子模块、从SPI数据接收子模块、缓存模块;所述从SPI数据发送子模块接收配置的待发送的数据的字节数N,将所述待发送的数据采用8位位宽的方式逐个写入缓存模块,该缓存模块是8位位宽的缓存单元,采用FIFO的发送数据队列对数据进行缓存;在发送数据时,给出N个CLK的读使能给缓存模块,读出N个8位的数据,并将这N个8位的数据按照移位依次移入位宽为8*N的移位寄存器中寄存,该移位寄存器标记为send_data,根据配置选择从高位或低位开始发送所述待发送的数据;
所述从SPI数据接收子模块获取配置的待接收的数据的字节数N,在获取到待接收的数据信号时,选择mosi控制线,把接收到的数据依次移入位宽为N*8位宽的接收移位寄存器中进行寄存,该接收移位寄存器标记为Rece_data;当待接收的数据全部接收完毕时,把该数据按照8位位宽逐个写入数据接收队列进行缓存,该队列采用FIFO机制。
4.如权利要求1所述的基于FPGA的参数化配置的SPI控制器,其特征在于,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为先发送后接收,则执行以下步骤:
步骤S3B01:先在主SPI控制子模块顶层接口配置工作模式8’h00,表示工作模式为先发送后接收;
步骤S3B02:判断是否接收到发送数据指令,若否,继续监听,进入步骤S3B02继续等待;若是,则进入步骤S3B03;
步骤S3B03:主SPI控制子模块发出发送命令给主SPI收发子模块,控制主SPI收发子模块发送数据,进入步骤S3B04;
步骤S3B04:主SPI收发子模块进行数据发送,判断设定要发送的数据长度的数据是否发送完毕,若是,发送完成flag标志给主SPI控制子模块,进入步骤S3B05;否则,进入步骤S3B04;
步骤S3B05:主SPI控制子模块接收到主SPI收发子模块发过来的发送完成flag标志后,判断是否接收到接收指令,如果是,则进入步骤S3B06,否则,等待,并再进入步骤S3B05;
步骤S3B06:主SPI控制子模块发出接收指令给主SPI收发子模块;
步骤S3B07:主SPI收发子模块接收到接收命令后,开始接收数据,直至数据接收完毕,发出接收完成flag给主SPI控制子模块。
5.如权利要求1所述的基于FPGA的参数化配置的SPI控制器,其特征在于,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为同时进行数据发送和接收,则执行以下步骤:
步骤S3C01:先在主SPI控制子模块顶层接口配置工作模式8’h02,表示工作模式为同时接收和发送;
步骤S3C02:判断是否接收到同时收发数据指令,若否,继续监听,进入步骤S3C02;若是,则进入步骤S3C03;
步骤S3C03:主SPI控制子模块发出同时接收和发送命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收和发送;
步骤S3C04:主SPI收发子模块同时进行数据发送和接收;
步骤S3C05:判断是否把设定长度的要发送和接收的数据收发完毕,若是,则发送收发完成flag标志给主SPI控制子模块;否则,进入步骤S3C04。
6.如权利要求1所述的基于FPGA的参数化配置的SPI控制器,其特征在于,外部用户对FPGA进行调试或使用时,根据调度或使用的数据需要,配置主SPI的工作模式,主SPI根据配置的工作模式进入相应的工作流程;
若需要配置主SPI的工作模式为只接收,则执行以下步骤:
步骤S3E01:先在主SPI控制子模块顶层接口配置工作模式8’h04,表示工作模式为只接收数据;
步骤S3E02:判断是否接收到只接收数据指令,若否,继续监听,进入步骤S3E02;若是,则进入步骤S3E03;
步骤S3E03:主SPI控制子模块发出只接收数据命令给主SPI收发子模块,控制主SPI收发子模块进行数据接收;
步骤S3E04:主SPI收发子模块进行数据接收;
步骤S3E05:判断设定的待接收长度的数据是否接收完毕,若是,发送完成flag标志给主SPI控制子模块,否则,进入步骤S3E04。
CN202010343132.XA 2020-04-27 2020-04-27 基于fpga的参数化配置的spi控制器及使用方法 Active CN111522770B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010343132.XA CN111522770B (zh) 2020-04-27 2020-04-27 基于fpga的参数化配置的spi控制器及使用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010343132.XA CN111522770B (zh) 2020-04-27 2020-04-27 基于fpga的参数化配置的spi控制器及使用方法

Publications (2)

Publication Number Publication Date
CN111522770A CN111522770A (zh) 2020-08-11
CN111522770B true CN111522770B (zh) 2022-03-11

Family

ID=71910657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010343132.XA Active CN111522770B (zh) 2020-04-27 2020-04-27 基于fpga的参数化配置的spi控制器及使用方法

Country Status (1)

Country Link
CN (1) CN111522770B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114443524A (zh) * 2022-01-28 2022-05-06 山东云海国创云计算装备产业创新中心有限公司 一种数据传输方法、系统、存储介质及设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7265578B1 (en) * 2005-04-04 2007-09-04 Lattice Semiconductor Corporation In-system programming of non-JTAG device using SPI and JTAG interfaces of FPGA device
CN102567261A (zh) * 2010-12-31 2012-07-11 联芯科技有限公司 增强型spi控制器、增强型spi的通讯系统及传送数据方法
CN202870808U (zh) * 2012-07-04 2013-04-10 四川九洲电器集团有限责任公司 一种spi串口模块的fpga实现装置
CN105136167A (zh) * 2015-08-20 2015-12-09 湖北三江航天红峰控制有限公司 一种光纤陀螺动态分频方法
CN105468563A (zh) * 2015-12-28 2016-04-06 杭州士兰控股有限公司 Spi从设备、spi通信系统及spi通信方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040098519A1 (en) * 2001-03-16 2004-05-20 Hugo Cheung Method and device for providing high data rate for a serial peripheral interface
JP2008177636A (ja) * 2007-01-16 2008-07-31 Smk Corp Rf通信システム
CN102231143A (zh) * 2011-07-04 2011-11-02 浙江大学 一种安全可复用spi外围接口电路

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7265578B1 (en) * 2005-04-04 2007-09-04 Lattice Semiconductor Corporation In-system programming of non-JTAG device using SPI and JTAG interfaces of FPGA device
CN102567261A (zh) * 2010-12-31 2012-07-11 联芯科技有限公司 增强型spi控制器、增强型spi的通讯系统及传送数据方法
CN202870808U (zh) * 2012-07-04 2013-04-10 四川九洲电器集团有限责任公司 一种spi串口模块的fpga实现装置
CN105136167A (zh) * 2015-08-20 2015-12-09 湖北三江航天红峰控制有限公司 一种光纤陀螺动态分频方法
CN105468563A (zh) * 2015-12-28 2016-04-06 杭州士兰控股有限公司 Spi从设备、spi通信系统及spi通信方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"基于FPGA的通用SPI总线IP核设计与实现";柳炳琦等;《核电子学与探测技术》;20140320;第331-335页 *

Also Published As

Publication number Publication date
CN111522770A (zh) 2020-08-11

Similar Documents

Publication Publication Date Title
JP3786120B2 (ja) データ転送制御装置及び電子機器
JP3835459B2 (ja) データ転送制御装置及び電子機器
CN103164314B (zh) 基于异步物理层接口的PCIe接口芯片硬件验证方法
CN111522770B (zh) 基于fpga的参数化配置的spi控制器及使用方法
CN110460653A (zh) 自动驾驶车辆数据传输的方法及装置
CN115033444B (zh) 基于8051core在线调试电路控制装置
US5710939A (en) Bidirectional parallel data port having multiple data transfer rates, master, and slave operation modes, and selective data transfer termination
KR20070086197A (ko) 멀티미디어 카드 인터페이스 방법, 컴퓨터 프로그램 생성물및 장치
CN112131176B (zh) 一种基于pcie的fpga快速局部重构方法
CN115658415A (zh) 一种芯片调试装置和方法
CN115794701A (zh) 一种dma功能虚拟串口的bmc芯片及方法
JP3786121B2 (ja) データ転送制御装置及び電子機器
CN112416837B (zh) 将数据从spi模块转发至uart模块的方法、电路和电子装置
CN100462952C (zh) 接口可配置的通用串行总线控制器
WO2000043896A1 (en) Command reordering for out of order bus transfer
CN113419985A (zh) Spi系统自动读取数据的控制方法及spi系统
KR20170043375A (ko) 타이밍 컨트롤러의 내부 레지스터를 관리하는 방법과 이를 이용한 테스트 장치의 작동 방법
KR100361511B1 (ko) 다기능 직렬 통신 인터페이스 장치
KR100591243B1 (ko) 온-칩 직렬 주변장치 버스 시스템 및 그 운용방법
KR100927130B1 (ko) Pc와 임베디드 시스템 간의 고속 시리얼 통신 변환 장치 및 방법
JP3940843B2 (ja) シリアル通信システム及びシリアル通信用ローカル端末
CN101930394A (zh) 一种基于usb的ahb总线跟踪测试方法与系统
JP5652866B2 (ja) バス調停回路及びバス調停方法
CN116048893A (zh) 光纤总线接口的测试方法及相关设备
KR100778476B1 (ko) 통신 인터페이스 변환장치 및 방법

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
GR01 Patent grant
GR01 Patent grant