数据有效位统一配置的流控式FIFO缓存结构及方法与流程

文档序号:18552215发布日期:2019-08-30 22:09阅读:337来源:国知局
数据有效位统一配置的流控式FIFO缓存结构及方法与流程

本发明涉及串行通信控制领域,具体涉及一种数据有效位统一配置的流控式fifo缓存结构及方法。



背景技术:

在串行通信控制领域,fifo是普遍存在的用来缓存与主机交互的并行数据的一种基本结构。针对实际应用情况,目前的fifo位宽主要有两种形式:(1)fifo存储宽度为标准的八位数据字节。在这种结构下,主机每进行一次并行数据传输时,只有其中一个字节的数据有效,因此其数据传输效率较低。例如,当主机并行数据位宽为32位时,每次传输只有其中8位数据与fifo关联,而其它的24位数据都被浪费掉,即便主机要发送一个32位的数据,它也需要进行四次传输。(2)fifo存储宽度等于主机数据位宽。在这种结构下,主机的一个并行数据只通过一次传输操作就可完成与fifo的关联,但它可能需要额外的软件拼凑开销。例如,当串行通信应用只需对并行数据字中的一部分字节进行传输时,那么在开始传输前,就需要通过软件手段把这些分散在各个并行数据字中的数据字节整合在一起,然后再装入到fifo中进行发送。

另外,针对fifo的空满状态与控制,现有技术也主要是通过软件查询或者中断方式来实现的,由于软件处理速度慢、系统中断优先级抢占等情况的出现,经常导致fifo数据传输不及时,从而引起fifo溢出的现象数见不鲜。

总体而言,现有的fifo设计结构存在着数据传输效率低、需要软件交互开销大,以及容易引发溢出错误等多方面的缺点。经检索相关文献,目前尚没有一种很好的解决办法。



技术实现要素:

本发明的目的在于提供一种数据有效位统一配置的流控式fifo缓存结构及方法,以解决现有fifo结构中存在的问题,本发明能够提高与主机接口的数据传输效率,减少通过软件进行数据整合的开销,并且设计硬件管理的流控模式从而避免fifo的溢出现象。

为达到上述目的,本发明采用如下技术方案:

数据有效位统一配置的流控式fifo缓存结构,包括第一fifo(1)和第二fifo(2),第一fifo(1)和第二fifo(2)共同连接至用于选择全双工模式或半双工模式的全双工模式配置寄存器;

第一fifo(1)上连接有用于产生数据字节有效位的第一流控配置电路及用于接收第一fifo(1)填充状态信息的第一流控逻辑电路,第一流控配置电路包括第一fifo对齐模式配置寄存器、第一突发传输大小配置寄存器和第一串行传输字节计数器,第一fifo对齐模式配置寄存器和第一突发传输大小配置寄存器的输出端均连接至第一流控逻辑电路,第一串行传输字节计数器和第一流控逻辑电路双向交互;

第二fifo(2)上连接有用于产生数据字节有效位的第二流控配置电路及用于接收第二fifo(2)填充状态信息的第二流控逻辑电路,第二流控配置电路包括第二fifo对齐模式配置寄存器、第二突发传输大小配置寄存器和第二串行传输字节计数器,第二fifo对齐模式配置寄存器和第二突发传输大小配置寄存器的输出端均连接至第二流控逻辑电路,第二串行传输字节计数器和第二流控逻辑电路双向交互;

第一流控逻辑电路和第二流控逻辑电路均连接至用于选择dma或cpu响应数据传输请求的dma使能配置寄存器,所述数据传输请求包括突发数据传输请求、最后一次突发数据传输请求、单字数据传输请求和最后一次单字数据传输请求。

进一步地,第一fifo(1)和第二fifo(2)均通过主机接口连接至dma或cpu。

进一步地,第一fifo(1)和第二fifo(2)的数据位宽与主机接口的数据位宽相等。

进一步地,第一fifo(1)和第二fifo(2)均通过串行外设接口连接至外界通信总线。

数据有效位统一配置的流控式fifo缓存方法,包括以下步骤:

步骤一:用户配置全双工模式配置寄存器,当选择全双工模式时,第一fifo(1)用于数据的发送,第二fifo(2)同时用于数据的接收;当选择半双工模式时,第一fifo(1)用于数据的发送或接收,并进行时分复用,第二fifo(2)不使用;

步骤二:当在全双工模式下,用户配置第一fifo对齐模式配置寄存器、第一突发传输大小配置寄存器、第一串行传输字节计数器、第二fifo对齐模式配置寄存器、第二突发传输大小配置寄存器、第二串行传输字节计数器和dma使能配置寄存器;然后第一流控逻辑电路和第二流控逻辑电路自动产生数据传输请求并发送至dma或cpu进行处理。

进一步地,第一流控逻辑电路和第二流控逻辑电路自动产生数据传输请求并发送至dma或cpu进行处理具体为:

第一流控逻辑电路根据第一fifo对齐模式配置寄存器的值、第一突发传输大小配置寄存器的值、第一串行传输字节计数器的值以及第一fifo(1)填充状态信息自动判断当前是进行突发数据传输、最后一次突发数据传输、单字数据传输,还是最后一次单字数据传输,并发出相应的发送数据传输请求;

同时第二流控逻辑电路根据第二fifo对齐模式配置寄存器的值、第二突发传输大小配置寄存器的值、第二串行传输字节计数器的值以及第二fifo(2)填充状态信息自动判断当前是进行突发数据传输、最后一次突发数据传输、单字数据传输,还是最后一次单字数据传输,并发出相应的接收数据传输请求;

根据dma使能配置寄存器的值选择dma或cpu响应上述两个数据传输请求,当数据传输请求被cpu或dma处理后,第一流控逻辑电路从第一串行传输字节计数器的值中减去当前传输的数据字节数以作为下次需要进行的数据传输总量,并将其更新到第一串行传输字节计数器中,如此继续,直到第一串行传输字节计数器的值为0;同时第二流控逻辑电路从第二串行传输字节计数器的值中减去当前传输的数据字节数以作为下次需要进行的数据传输总量,并将其更新到第二串行传输字节计数器中,如此继续,直到第二串行传输字节计数器的值为0;至此,全双工模式的数据发送和接收完成。

当在半双工模式下,用户配置第一fifo对齐模式配置寄存器、第一突发传输大小配置寄存器、第一串行传输字节计数器和dma使能配置寄存器;然后第一流控逻辑电路自动产生数据传输请求并发送至dma或cpu进行处理。

进一步地,第一流控逻辑电路自动产生数据传输请求并发送至dma或cpu进行处理具体为:

第一流控逻辑电路根据第一fifo对齐模式配置寄存器的值、第一突发传输大小配置寄存器的值、第一串行传输字节计数器的值以及第一fifo(1)填充状态信息自动判断当前是进行突发数据传输、最后一次突发数据传输、单字数据传输,还是最后一次单字数据传输,并发出相应的发送或接收数据传输请求;

根据dma使能配置寄存器的值选择dma或cpu响应上述发送或接收数据传输请求,当数据传输请求被cpu或dma处理后,第一流控逻辑电路从第一串行传输字节计数器的值中减去当前传输的数据字节数以作为下次需要进行的数据传输总量,并将其更新到第一串行传输字节计数器中,如此继续,直到第一串行传输字节计数器的值为0,至此,半双工模式的数据发送或接收完成。

与现有技术相比,本发明具有以下有益的技术效果:

(1)降低了软件的辅助操作开销。目前fifo中存储的都是有效数据,如果实际应用中待传输的源或目标数据是散落在各个不同地址空间上的非连续字节或半字,那么就需要主机接口的软件对这些数据进行加工处理。例如发送操作,需要先将这些分散的数据拼凑在一起再写入fifo中;对于接收操作,需要将这些从fifo中读出的数据按照对应字节或半字的格式分散存储到不同的地址空间上去。本发明通过对齐模式所指定的字节有效位,可以免去软件层面的辅助操作,因为fifo中即便装载了整个并行数据,利用字节有效位的指示,流控逻辑并不会传输并行数据中的无效字节或半字。

(2)支持全双工和半双工模式的串行通信应用。本发明的fifo结构可根据应用情况进行工作模式的选择,在全双工模式下,启用两套fifo装置,分别用于发送和接收操作;在半双工模式下,只启用一套fifo装置,用于发送或接收操作,另一套fifo不使能,处于低功耗休眠状态。

(3)避免了fifo发生溢出错误的现象。本发明的fifo设计了基于硬件的流控模式,它自动计算当前需要进行哪种数据传输,传输的数据量是多大,并发出相应的传输请求,该传输请求既可以由dma方式响应完成,也可以由cpu中断方式处理。dma或cpu主机根据传输请求的大小进行数据传输,从而保证fifo不会发生溢出现象。

(4)提高了数据传输效率,本发明的fifo存储位宽等于主机接口(cpu或dma控制器)的并行数据宽度,并且设计对齐模式,使得fifo每个存储表项中的数据字节都有独立的有效位控制。因此,无论是进行整个并行数据、还是该并行数据中某部分数据字节的交互,它与主机接口的数据传输都可以在一个周期内完成,不会让主机接口产生任何等待。

本发明方法具有以下有益的技术效果:

(1)能够普遍适用于各种串行通信领域。无论是全双工通信还是半双工通信,本发明方法只需软件配置全双工模式配置寄存器为1或者0,就可以选择对应的工作模式,操作灵活、简单。

(2)能够适用于带有dma数据处理功能以及不带dma数据处理功能的处理系统。本发明方法根据处理系统中是否集成有dma主机,只需软件配置dma使能配置寄存器为1或0,就可以选择由dma主机还是默认的cpu主机来完成数据的收发操作,对处理系统并无特殊要求,适用性更强。

(3)消除了传统方法经常发生的fifo溢出现象。本发明方法通过设置流控逻辑的硬件电路,自动识别fifo的填充状态并计算待传输的数据量,产生的数据发送(或接收)请求大小不会超过fifo的空闲(或有效)存储表项,因此从根本上避免了fifo发生溢出错误的可能性。

(4)降低了特殊应用下软件进行数据预处理的操作开销。本发明方法通过定义fifo对齐模式配置寄存器,可以实现对fifo数据有效位的统一配置,包括了按字节、半字和字三种有效位对齐模式。因此,当特殊应用下只需要发送数据字中的某些字节时,无需通过软件预处理将分散的字节拼凑在一起再写入fifo,可以直接将整个字写入fifo,fifo会按照对齐模式只将对应有效的字节发送出去,于是减少了软件的辅助处理开销。

附图说明

图1为本发明设计的数据有效位统一配置的流控式fifo缓存结构的总体框架;

图2为进行发送操作时fifo数据有效位的配置情况;

图3为进行接收操作时fifo数据有效位的配置情况;

图4为fifo流控模式下数据传输示意图。

具体实施方式

下面对本发明作进一步详细描述:

参见图1、图2和图3,本发明的fifo结构能够提高与主机接口的数据传输效率,减少通过软件进行数据整合的开销,并且设计硬件管理的流控模式从而避免fifo的溢出现象,其所使用的技术手段主要包括如下方面:

(1)设置两套fifo缓存硬件装置,并可根据串行通信应用模式进行配置选择。在全双工应用模式下,一套fifo装置用于发送操作,另一套fifo则同时用于接收操作;在半双工应用模式下,只启用一套fifo装置,发送操作和接收操作共享该套fifo,并进行分时复用。

(2)将发送fifo和接收fifo的存储宽度都设置为主机接口的数据位宽。当主机进行发送操作时,来自于主机接口的并行数据一个周期就可以全部装入到发送fifo中;当主机进行接收操作时,从fifo中读取的数据一个周期就可以全部输出到主机接口的并行数据总线上。这样可以保证主机接口与fifo之间进行数据传输的最大交互带宽。

(3)针对fifo存储宽度中的每个数据字节都设置独立的有效位。即便fifo提供了与主机接口交互的最大数据带宽,但考虑到实际应用中可能只需要传输该最大数据带宽中的某些字节,因此对fifo中所有字节数据都设置相应的有效位指示,这通过配置fifo对齐模式来实现。当fifo配置为按字节对齐时,从主机接口装入或读出的fifo存储表项中所有字节数据都有效,将依次通过外设接口发送到串行总线上(发送操作);或者从外设接口接收到的串行数据将按各个字节依次保存到fifo的存储表项中(接收操作)。当fifo配置为按半字对齐时,从主机接口装入或读出的fifo存储表项中的各个半字都只有一个字节有效,这些有效字节将依次通过外设接口发送到串行总线上(发送操作);或者从外设接口接收到的串行数据将按各个半字的有效字节位置依次保存到fifo的存储表项中(接收操作)。当fifo配置为按字对齐时,从主机接口装入或读出的fifo存储表项中的每个字都只有一个字节有效,该字节将通过外设接口发送到串行总线上(发送操作);或者从外设接口接收到的串行数据将按照一个数据字的有效字节位置保存到fifo的存储表项中(接收操作)。

(4)针对发送和接收fifo设置基于硬件的流控功能。本发明将数据发送和接收操作都分成四种传输类型:突发传输、最后一次突发传输、单字传输、最后一次单字传输。突发传输的大小由用户进行配置,包含若干个位宽为主机接口宽度(即fifo存储宽度)的并行数据;单字传输则只包含一个位宽为主机接口宽度的并行数据;最后一次突发传输和最后一次单字传输表明完成该次传输后就达到了所需传输的字节总数。流控逻辑根据所要进行串行传输的字节计数、突发传输的大小、fifo对齐模式、fifo填充状态等信息来计算当前是进行突发传输、最后一次突发传输、单字传输,还是最后一次单字传输,并发出相应的传输请求。当本次传输结束后,流控逻辑根据剩下所要传输的字节计数再进行类似的计算,以决定下一次的传输类型,其基本原则就是优先考虑进行多个并行数据的突发传输或最后一次突发传输,如不满足则进行一个并行数据的单字传输或最后一次单字传输,如此继续,直到所需的串行传输的数据字节都传输完毕。

(5)所有的fifo数据传输请求都可配置选择采用cpu或dma方式来处理。本发明针对数据发送和接收操作的四种传输请求,都设置了cpu中断接口和dma接口处理逻辑,当系统中有dma控制器并且也使能了dma功能时,fifo的四种数据传输请求操作将由dma来实现,否则将由cpu中断方式来实现。

下面结合附图及实施例对本发明做进一步详细说明:

图1给出了本发明设计的数据有效位统一配置的流控式fifo缓存结构的总体框架。首先,用户根据实际的串行通信应用选择是否需要配置全双工模式,如果配置了全双工模式,则fifo1用于发送操作,fifo2同时用于接收操作;否则,fifo1用于发送或接收操作,并进行时分复用,fifo2则不被使用。这两套fifo装置的数据存储位宽都与主机接口并行数据宽度一致。其次,用户通过配置fifo对齐模式,可以控制fifo存储表项中哪部分数据字节是有效的。流控逻辑根据fifo对齐模式、突发传输的大小、串行传输的数据字节计数,以及fifo实时填充状态信息来自动判断当前是进行突发传输、最后一次突发传输、单字传输,还是最后一次单字传输,并发出相应的传输请求。用户可根据系统中有无dma控制器的情况选择配置dma使能,从而可以控制该数据传输请求是采用dma方式处理,还是采用cpu中断方式处理。当传输请求被主机接口(cpu或dma)处理后,流控逻辑从串行传输的数据字节计数中减去当前传输的数据字节数,以作为下次需要进行的数据传输总量,并将其更新到串行传输字节计数器中。如此继续,直到整个串行传输过程所需的数据字节都已传输完。

图2给出了进行发送操作时fifo数据有效位的配置情况。这里假设主机接口的数据位宽是32位,因此fifo的存储宽度也是32位的。来自主机接口的并行数据先写到发送寄存器(txd_i)中,该寄存器直接将发送数据装入到发送fifo最尾端的存储表项中,随后,fifo中的数据整体从尾部向头部移动,其每个表项中的数据有效位则依据用户配置的对齐模式来确定。当fifo配置为按字节对齐时,fifo中每个存储表项的32位数据都是有效的(用v进行标识),其四个字节分四次从fifo最头部表项中读取出来,并放入到临时的发送寄存器(txd_o)的低八位中,四次计数分别是dc_cnt=0、1、2、3,该发送寄存器直接将各个字节装入到串行外设接口的移位寄存器中,然后进行串行移位输出。当fifo配置为按半字对齐时,fifo中32位存储数据的每个16位半字都只有其中一个字节有效,因此共分两次从fifo最头部表项中读取出来,两次计数分别是dc_cnt=0、1。当fifo配置为按字对齐时,fifo中32位存储数据只有其中一个字节有效,因此只需一次从fifo最头部表项中读取出来,计数标识是dc_cnt=0。可以看到,通过配置对齐模式,可以控制各个数据字节的有效性,并保证只有有效的数据字节才发送到串行外设接口上,无效的数据字节是不被允许发送出去的。

图3给出了进行接收操作时fifo数据有效位的配置情况。从串行外设接口接收的串行数据经过移位寄存器后得到的八位数据字节被写入到临时的接收寄存器(rxd_i)中。当fifo配置为按字节对齐时,该临时接收寄存器只使用低八位字节,并分四次将接收的数据字节装入到fifo中,计数标识依次为dc_cnt=0、1、2、3,此时fifo存储表项中四个字节都是有效的。当fifo配置为按半字对齐时,该临时接收寄存器只使用低16位半字,并分两次将接收的数据字节装入fifo中,计数标识依次为dc_cnt=0、1,此时fifo存储表项中只有两个字节是有效的,无效字节用零填充。当fifo配置为按字对齐时,该临时接收寄存器使用整个32位数据,只需一次将接收的数据字节装入fifo中,计数标识为dc_cnt=0,此时fifo存储表项中只有一个字节是有效的,无效字节用零填充。随后,fifo中的数据整体从尾部向头部移动,而其最头部的存储数据直接写入到接收数据寄存器(rxd_o)中,主机接口也直接通过该寄存器进行接收数据的读取。

针对图2和图3所述的对齐模式,以下列举几种实际应用情况进行说明:

当配置为按字节对齐时,假设需要发送8个字节的数据,那么主机接口需要写两个32位的并行数据,例如为0x12345678和0x87654321,这时发送的8个字节分别是0x78、0x56、0x34、0x12、0x21、0x43、0x65、0x87,对应接收的数据也是0x12345678和0x87654321。

当配置为按半字对齐时,假设需要发送4个字节的数据,那么主机接口需要写两个32位的并行数据,例如为0x12345678和0x87654321,这时发送的4个字节分别是0x78、0x34、0x21、0x65,对应接收的数据是0x00340078和0x00650021。

当配置为按字对齐时,假设需要发送2个字节的数据,那么主机接口需要写两个32位的并行数据,例如为0x12345678和0x87654321,这时发送的2个字节分别是0x78、0x21,对应接收的数据是0x00000078和0x00000021。

图4给出了在fifo流控模式下各种数据传输过程的示意。当串行传输字节总数为12、fifo按字节对齐、突发传输大小为2时的流控传输顺序依次是产生1个突发传输和1个最后一次单字传输。当串行传输字节总数为12、fifo按半字对齐、突发传输大小为2时的流控传输顺序依次是产生2个突发传输和1个最后一次突发传输。当串行传输字节总数为10、fifo按字对齐、突发传输大小为4时的流控传输顺序依次是产生2个突发传输、1个单字传输和1个最后一次单字传输。

实施例

将本发明应用于多款soc芯片的i2c串行总线控制器设计中,这些soc采用了32位sparcv8处理器的主机控制接口,因此i2c总线控制器中的fifo存储位宽也为32位。通过使用该发明内容,明显提高了该i2c模块与主机sparcv8处理器之间的数据传输效率,并且不会发生i2cfifo溢出错误,提高了应用的可靠性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1