CN111221759B - 一种基于dma的数据处理系统及方法 - Google Patents
一种基于dma的数据处理系统及方法 Download PDFInfo
- Publication number
- CN111221759B CN111221759B CN202010051355.9A CN202010051355A CN111221759B CN 111221759 B CN111221759 B CN 111221759B CN 202010051355 A CN202010051355 A CN 202010051355A CN 111221759 B CN111221759 B CN 111221759B
- Authority
- CN
- China
- Prior art keywords
- message
- descriptor
- information
- dma
- cpu
- 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
Links
Images
Classifications
-
- 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/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Abstract
本发明提供了一种基于DMA的数据处理系统,所述系统包括FPGA,以及与所述FPGA进行报文交互的CPU,所述FPGA与所述CPU之间通过基于PCIE协议的DMA处理子系统进行报文交互;所述FPGA用于对报文进行预处理,并通过PCIE接口将预处理后的报文通过DMA子系统存储于CPU的存储单元;所述FPGA还用于通过DMA子系统读取存储单元中的报文;所述CPU用于根据不同线程处理对应不同的报文。基于上述系统,本发明还公开了一种基于DMA的数据处理方法。本发明通过以上设计提高FPGA与CPU之间的数据交互速率,支持灵活可配置的报文处理流程。
Description
技术领域
本发明属于计算机应用技术领域,尤其涉及一种基于DMA的数据处理系统及方法。
背景技术
随着技术的发展,在通信技术领域,高速网络的要求越来越高,PCIE接口具有较大的数据传送带宽,同时使用广泛。在现有的DMA报文处理机制中,需要采用轮询处理的方式,提高了功耗,也对数据传输性能有所影响。
在本发明中,主要介绍FPGA与CPU之间,基于PCIE协议的DMA数据处理方法,采用描述符加指针管理的方式,有效提高FPGA与CPU之间的数据传输。同时,由于CPU都是多线程工作,从而引入了队列的概念,使得CPU一个线程可以独立处理一个队列的报文。并且本发明考虑到在采用指针形式判别队列的空满状态时,如果指针相等,即可表示满状态也可表示空状态,在判别是需要额外耗费逻辑资源,因此,本发明将队列预留一个位置,简化了判别条件,也不会影响性能。
发明内容
针对现有技术中的上述不足,本发明提供的一种基于DMA的数据处理系统及方法,提高了FPGA与CPU之间的数据交互速率,实现了支持灵活可配置的报文处理流程。
为了达到以上目的,本发明采用的技术方案为:
本方案提供一种基于DMA的数据处理系统,所述系统包括FPGA,以及与所述FPGA进行报文交互的CPU,所述FPGA与所述CPU之间通过基于PCIE协议的DMA处理子系统进行报文交互;
所述FPGA用于对报文进行预处理,并通过PCIE接口将预处理后的报文通过DMA处理子系统存储于CPU的存储单元;所述FPGA还用于通过DMA子系统读取存储单元中的报文;
所述CPU用于根据不同线程处理对应不同的报文。
进一步地,所述对报文进行预处理,其具体为:
对报文进行hash计算,得到报文的hash值,并根据所述hash值去查表,获取报文需写入的队列信息,其中,所述报文的队列信息与CPU的线程号以及DMA的队列号相对应。
再进一步地,所述CPU的存储单元包括:
RX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过RX描述符信息写入对应的报文;
TX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过TX描述符信息读取对应的报文;
报文存储区,用于存储完整报文。
再进一步地,所述RX描述符存储区和TX描述符存储区均采用连续地址的方式对描述符进行读取;
所述RX描述符存储区和TX描述符存储区中均包括报文的长度pkt_len、报文是否为有效信号val以及对应的报文块开始地址array_addr。
再进一步地,所述DMA处理子系统包括:
队列选择模块,用于利用CPU自由配置队列使能,并将预处理后报文得到的队列写信息写入至配置后对应的队列中,并将报文需要写入的队列信息发送至接收描述符读取模块;
接收指针管理模块,用于分别通过对RX读、写指针和TX读、写指针的管理指示当前描述符是否可用,并获取对应描述符的位置,并将其描述符的信息发送至接收描述符读取模块;
所述接收描述符读取模块,用于根据描述符的位置信息及队列编号信息DMA的方式读取RX描述符,根据CPU返回的RX描述符信息,提取出报文块的开始地址信息,将开始地址信息发送给报文发送及接收描述符回写模块;
所述报文发送及接收描述符回写模块,用于根据报文块的开始地址信息,并以DMA的方式把报文写入对应的位置,同时利用回写描述符将对应的val置为1,写入报文的长度信息以及指示出对应报文块内是否有数据,并由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,其中,pkt_len表示报文长度,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
发送指针管理模块,用于管理发送队列TX读指针,并根据所述TX读写指针确定是否能获取发送描述符模块内的描述符信息;
发送描述符读取模块,用于启动DMA读取TX描述符信息,并将获取到的报文块开始地址以及报文长度信息传递至报文读取及发送描述符回写模块;
报文读取及发送描述符回写模块,用于读取发送描述符读取模块发送的报文,并回写描述符val=0,指示出对应的报文块的空闲状态,并通过TX读指针将状态信息传递至发送指针管理模块;
DMA发送调度模块,用于将对应的DMA读、写操作进行合并,并通过PCIE接口传递至CPU;
DMA接收分发模块,用于通过PCIE接口获取CPU的读取信息,并将所述读取信息分发至上述各模块中。
基于上述系统,本发明还公开了一种基于DMA的数据处理方法,所述数据处理方法包括FPGA→CPU方向的数据处理方法以及CPU→FPGA方向的数据处理方法;
所述FPGA→CPU方向的数据处理方法,包括以下步骤:
A1、对报文进行预处理,得到报文的hash值;
A2、利用所述报文的hash值去查表,获取报文的队列编号;
A3、通过读写指针的信息,判断报文是否能通过DMA写入至CPU的存储单元中,若是,则将报文存储至CPU的存储单元中,完成FPGA→CPU方向的数据处理,否则,进入步骤A4;
A4、根据描述符的位置信息以及报文的队列编号,读取描述符的信息,得到报文块的开始地址信息;
A5、根据所述报文块的开始地址信息,并通过DMA处理子系统把报文写入对应的位置,同时利用回写描述符将对应的val置为1,其中,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
A6、通过DMA处理子系统更新报文的描述符,由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,完成FPGA→CPU方向的数据处理,其中,pkt_len表示报文长度,val表示报文是否为有效信号;
所述CPU→FPGA方向的数据处理方法包括以下步骤:
B1、利用CPU自由配置队列使能,并根据队列使能情况查看该队列的指针情况;
B2、判断队列使能情况与指针是否相等,若是,则停止DMA操作,结束流程,否则,进入步骤B3;
B3、读取描述符的信息,并根据所述描述符的信息获取报文块的地址以及长度信息;
B4、根据所述报文块的地址以及长度信息,通过DMA处理子系统读取报文块的报文数据,并将所述报文数据发送至FPGA,同时利用回写描述符将对应的val置为0,完成CPU→FPGA方向的数据处理。
进一步地,所述步骤A1中对报文进行预处理,其具体为:
对报文进行hash计算,得到报文的hash值,并将所述hash值去查表获取报文需写入的队列信息,其中,所述报文的队列信息与CPU的线程号以及DMA的队列号相对应。
本发明的有益效果:
(1)本发明采用FPGA进行数据报文的预处理,并将报文的处理结果传递给CPU,从而减少了CPU的处理时间,由于FPGA与CPU之间有大量的数据报文进行交互,本发明中采用了常见的PCIE接口进行报文的传递,设计基于PCIE协议的DMA机制,使得报文高效地写入CPU外围存储设备中;
(2)本发明利用指针加描述符一块配合的方式,提高了DMA的效率。通过指针是否相等,判断队列的空满状态,决定是否需启动DMA操作,避免采用轮询方式,减少了DMA次数,从而提高报文的传输效率。同时,简化指针的管理,每个队列空闲一个描述符块,使得FPGA与CPU都减少了指针的判别条件,只需简单判断是否相等,便可判断出队列的空满状态。支持多种DMA处理操作,可根据报文内容指定队列,也可采用队列轮询方式,将报文分发到各个队列中;
(3)本发明中首先对报文进行预处理,CPU在处理时,可根据不同线程处理对应不同的报文,大大节省了CPU对报文的处理时间;
(4)本发明中引入了队列的概念,CPU的一个线程可以对应处理一个队列的报文,减少了数据的交叉处理;
(5)本发明中,通过FPGA内部指针与CPU指针的巧妙配合方式,避免使用了轮询机制,降低了DMA的次数,提升数据传输的效;
(6)本发明考虑到在采用指针形式判别队列的空满状态时,如果指针相等,即可表示满状态也可表示空状态,在判别是需要额外耗费逻辑资源,因此,本发明将队列预留一个位置,简化了判别条件,也不会影响性能。
附图说明
图1为本发明的结构示意图。
图2为本发明中存储单元的结构示意图。
图3为本发明中描述符格式示意图。
图4为本发明中DMA处理框图。
图5为本发明中接收指针管理示意图。
图6为本发明中发送指针管理示意图。
图7为本发明中FPGA→CPU方向的数据处理流程图。
图8为本发明中CPU→FPGA方向的数据处理流程图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
实施例
如图1所示,本发明提供了一种基于DMA的数据处理系统,所述系统包括FPGA,以及与所述FPGA进行报文交互的CPU,所述FPGA与所述CPU之间通过基于PCIE协议的DMA处理子系统进行报文交互;所述FPGA用于对报文进行预处理,并通过PCIE接口将预处理后的报文通过DMA处理子系统存储于CPU的存储单元;所述FPGA还用于通过DMA子系统读取存储单元中的报文;所述CPU用于根据不同线程处理对应不同的报文。所述对报文进行预处理,其具体为:对报文进行hash计算,得到报文的hash值,并根据所述hash值去查表,获取报文需写入的队列信息,其中,所述报文的队列信息与CPU的线程号以及DMA的队列号相对应。
本实施例中,利用FPGA进行报文的收发,使得接口更灵活。FPGA接收到报文后,首先对报文进行预处理,计算出hash值,hash值与CPU的线程号、DMA的队列号对应。FPGA已预先将报文写入到对应的队列中,这样CPU在处理时,可根据不同线程处理对应不同的报文,大大节省了CPU对报文的处理时间。本实施例中,FPGA与CPU之间的数据交互采用的是基于PCIE协议的DMA处理。FPGA通过PCIE接口,直接将报文DMA至外挂于CPU的存储单元里。FPGA也可通过DMA的方式,将存储单元里的报文读取出来。
如图2所示,所述CPU的存储单元包括:RX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过RX描述符信息写入对应的报文;TX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过TX描述符信息读取对应的报文;报文存储区,用于存储完整报文。
本实施例中,将存储单元划分成3个空间,分别为:RX描述符存储区、TX描述符存储区及数据存储区。采用描述符+报文的形式,实现高效的报文传递,通过对读、写指针的管理,决定是否读取描述符,通过描述符信息,去写入/获取对应的报文。
所述RX描述符存储区和TX描述符存储区均采用连续地址的方式对描述符进行读取;所述RX描述符存储区和TX描述符存储区中均包括报文的长度pkt_len、报文是否为有效信号val以及对应的报文块开始地址array_addr。
本实施例中,可根据CPU需求,决定划分多少个RX、TX队列。RX与TX的描述符块,采用的是连续地址的方式,方便进行描述符的读取。描述符的格式,如图3所示,图3中,Rsv为预留字段,Pkt_array_addr为存储报文内容的开始地址,Val为报文有效信号,Pkt_len为报文长度信息。描述符中需要包含报文的长度pkt_len、报文是否有效信号为val以及对应的报文块开始地址array_addr。由于描述符中,会指示对应的报文块开始地址,所以RX、TX的报文存储区间可以使用同一个区域,只需要明确开始地址和报文长度就能写入或读取到对应的报文。
如图4所示,所述DMA处理子系统包括:队列选择模块,用于利用CPU自由配置队列使能,并将预处理后报文得到的队列写信息写入至配置后对应的队列中,并将报文需要写入的队列信息发送至接收描述符读取模块;
接收指针管理模块,用于分别通过对RX读、写指针和TX读、写指针的管理指示当前描述符是否可用,并获取对应描述符的位置,并将其描述符的信息发送至接收描述符读取模块;
所述接收描述符读取模块,用于根据描述符的位置信息及队列编号信息DMA的方式读取RX描述符,根据CPU返回的RX描述符信息,提取出报文块的开始地址信息,将开始地址信息发送给报文发送及接收描述符回写模块;
所述报文发送及接收描述符回写模块,用于根据报文块的开始地址信息,并以DMA的方式把报文写入对应的位置,同时利用回写描述符将对应的val置为1,写入报文的长度信息以及指示出对应报文块内是否有数据,并由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,其中,pkt_len表示报文长度,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
发送指针管理模块,用于管理发送队列TX读指针,并根据所述TX读写指针确定是否能获取发送描述符模块内的描述符信息;
发送描述符读取模块,用于启动DMA读取TX描述符信息,并将获取到的报文块开始地址以及报文长度信息传递至报文读取及发送描述符回写模块;
报文读取及发送描述符回写模块,用于读取发送描述符读取模块发送的报文,并回写描述符val=0,指示出对应的报文块的空闲状态,并通过TX读指针将状态信息传递至发送指针管理模块;
DMA发送调度模块,用于将对应的DMA读、写操作进行合并,并通过PCIE接口传递至CPU;
DMA接收分发模块,用于通过PCIE接口获取CPU的读取信息,并将所述读取信息分发至上述各模块中。
如图4所示,本实施例中,本发明中引入了队列的概念,CPU的一个线程可以对应处理一个队列的报文,减少了数据的交叉处理,例如,CPU有16个线程,可以划分16个队列。在FPGA内部,会提前根据报文特征,决定报文进入哪个队列,DMA处理报文时,也会根据队列编号,将报文写入到对应的位置中,方便CPU的读取。
本实施例中,队列选择模块是为了最终确认报文需要写入到哪个队列里,CPU可自由配置哪个队列使能,同时也可配置队列是否需要采用轮询机制,增大了队列的灵活性,方便适用于更多的场景。本实施例中,前级进行报文预处理时,得到的hash处理结果hash_num,在根据hash_num去查表,得到hash模式下的队列编号hash_array_num。该表支持CPU配置,使得更灵活。如果使能了队列轮询模式,则会按照队列使能的情况,轮询地分发报文,使得报文均匀进入使能的队列中。每来一个报文polling_array_num+1(轮询模式下的队列编号),如果下一个队列不使能,则polling_array_num+2,依次类推,使得每个使能的队列得到的报文个数一致。最终根据轮询模式使能标记polling_en是否有效,来决定队列号array_num取的值为hash模式下的队列编号hash_array_num,还是轮询模式下的队列编号polling_array_num,体现了很大的灵活性。
如图4所示,报文写入控制中包含了:接收指针管理模块、接收描述符读取模块和报文发送及接收描述符回写模块。
本实施例中,接收指针管理模块:用于指示当前描述符是否可用,管理描述符的位置。具体实现方法如图5所示。根据描述符格式可知,每个描述符都会有val用于指示当前描述符对应的报文块是否有数据,指针与描述符块一一对应。在接收指针管理模块中,Rx写指针由FPGA控制,表示下一个可以写入的报文块位置;Rx读指针由CPU控制,表示当前读走的报文块位置。FPGA根据指针判别是否有空余的报文块可以写入数据。为了使得判别简单,会有一个报文块是空闲的,只要读写指针不相等,就说明报文块还有空间,能够写入报文。图5中,以某个队列中有512个为例,在初始化后,对应的报文块都是无报文,所以val=0,Rx写指针为0,Rx读指针为511,当有2个报文需要写入描述符块,Rx写指针更新为2。CPU读走一个报文后,Rx读指针更新为0,此时,如果一直有报文写入队列,且CPU没有再读走数据,等到队列写满后,Rx写指针回到了0,支持因为Rx读指针也为0,就不能继续写入报文了,由此可看出空了一个描述符对应的报文块,但指针的判别较简单,只需判别是否相等即可。若果把所有描述符都用完,那这样满的时候Rx读指针也与Rx写指针相等,这个时候就不太好判别是空是满,同时也需要耗费较多的逻辑去处理,如果空闲出一个描述符,判别就变得很简单也并不影响报文写入的效率。
本实施例中,接收描述符读取模块:主要用于读取接收队列的描述符信息,获取到报文块的开始地址,用于写入报文。前面已经判别了RX方向队列编号rxarray_num信息,同时接收指针管理模块也判别出是否能够去读取描述符,并传递对应的描述符位置,接收描述符读取模块只需要按照PCIe协议中的TLP报文格式,组装TLP报文,进行DMA的描述符读取即可。执行描述符读取求后,会回送描述符信息,提取出pkt_array_addr信息,发送给报文发送及接收描述符回写模块。
本实施例中,报文发送及接收描述符回写模块:需要根据pkt_array_addr信息,将通过DMA方式把报文写入对应的位置,同时,还需要回写描述符将对应的val置1并写入报文的长度信息,指示对应报文块有数据,CPU可根据val位去读取报文,并根据pkt_len信息获取完整报文。
在以上的操作中可知,并不需要采用轮询描述符val位是否有效的方式来判断描述符是否可用,只需要根据指针来判别是否需要DMA读取描述符信息即可,虽然,会空出一个报文块,但却大大提升了DMA的效率。同时,如果一次只读取一个描述符信息,当有大量报文到来时,报文写入效率并没有得到很大的提升,此时,可以根据Rx写指针及Rx读指针的差值,来决定一次读取多少个描述符信息。描述符存放的空间,是连续的,为此可通过DMA的方式,一次多读几个描述符信息,CPU可设置最大读取的描述符个数。例如,最大可读取16个描述符,在空闲描述符大于16时,就可一次获取16个描述符信息,存放在FPGA内部,下次有报文到来,可直接通过地址信息,把报文写入对应的描述符块中,减少了描述符读取的次数,使得报文写入效率有所提升。
本实施例中,如图4所示,报文写入控制中包含了:发送指针管理模块、发送描述符读取模块和报文读取及发送描述符回写模块。FPGA从CPU中获取报文信息,一样通过指针加描述符的方式,去找到对应的报文块位置及报文长度,便可把报文通过DMA的方式读取出来。
本实施例中,发送指针管理模块:管理发送队列指针,决定是否可去获取发送描述符信息。如图6所示,图6中,指示了发送指针的管理方式,Tx读指针有FPGA控制,指示当前需要读取的描述符位置;Tx写指针由CPU控制指示下一个描述符的位置。当Tx读指针与Tx写指针不相等时,便会触发发送描述符读取模块去读取描述符,在图6里,初始化后,Tx读写指针都为0,此时说明所有的发送报文块都无数据,当CPU写入一个报文时,Tx写指针更新为1,此时就说明FPGA可以启动描述符的读取。FPGA读走一个描述符且对应的报文后,Tx读指针更新为1,此时又说明发送队列是空的。当CPU继续写入,写满队列时,Tx写指针会停止为0的位置,此时会空闲出一个描述符,但并不影响整体效率,反而还使得指针模块的判别变得简单,只需要判断是否相等即可。
本实施例中,发送描述符读取模块:启动DMA读操作,读取描述符信息。将获取到的报文块开始地址,及报文长度信息传递给报文读取及发送描述符回写模块。
本实施例中,报文读取及发送描述符回写模块:读取完成报文,并回写描述符val=0,用于指示对应的数据块已空闲。
在以上的操作中,同样可以根据Tx读写指针的差值来控制一次多读取几个描述符信息,便可多次获取到报文,从而提升了效率。CPU也可以设置一次读取描述符个数的上限,假设最大读取描述符个数为16,Tx读指针=0,Tx写指针=18,第一次读取描述符个数为16,读完报文后Tx读指针=16。第二次读取描述符的个数为2(18-16=2),因为不够16个有效的报文,所以多少个就读多少,通过减少发送描述符读取的次数,来提升报文读取的效率。由上述可知,完成一次报文的写入或读取,需要进行多次DMA的读、写操作配置。
基于上述系统,本发明还提供了一种基于DMA的数据处理方法,所述数据处理方法包括FPGA→CPU方向的数据处理方法以及CPU→FPGA方向的数据处理方法;
如图7所示,所述FPGA→CPU方向的数据处理方法,包括以下步骤:
A1、对报文进行预处理,得到报文的hash值;
A2、利用所述报文的hash值去查表,获取报文的队列编号;
A3、通过读写指针的信息,判断报文是否能通过DMA写入至CPU的存储单元中,若是,则将报文存储至CPU的存储单元中,完成FPGA→CPU方向的数据处理,否则,进入步骤A4;
A4、根据描述符的位置信息以及报文的队列编号,读取描述符的信息,得到报文块的开始地址信息;
A5、根据所述报文块的开始地址信息,并通过DMA处理子系统把报文写入对应的位置,同时利用回写描述符将对应的val置为1,其中,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
A6、通过DMA处理子系统更新报文的描述符,由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,完成FPGA→CPU方向的数据处理,其中,pkt_len表示报文长度,val表示报文是否为有效信号;
如图8所示,所述CPU→FPGA方向的数据处理方法包括以下步骤:
B1、利用CPU自由配置队列使能,并根据队列使能情况查看该队列的指针情况;
B2、判断队列使能情况与指针是否相等,若是,则停止DMA操作,结束流程,否则,进入步骤B3;
B3、读取描述符的信息,并根据所述描述符的信息获取报文块的地址以及长度信息;
B4、根据所述报文块的地址以及长度信息,通过DMA处理子系统读取报文块的报文数据,并将所述报文数据发送至FPGA,同时利用回写描述符将对应的val置为0,完成CPU→FPGA方向的数据处理。
本实施例中,如图4所示,基于PCIE协议的DMA处理子系统:RX方向(FPGA→CPU)中,在FPGA内部,根据协商好的处理规则,对报文进行预处理后,会得到一个hash_num值。DMA中,会再次进行队列的选择,最终确认队列编号,再通过指针信息,决定报文是否能够通过DMA写入内存中。如果指针不相等,说明队列为空,则需DMA先读取描述符信息,得到对应报文块的开始地址,再通DMA将报文写入报文块里。最后再次通过DMA更新报文的描述符,告知CPU该报文块有效,以及对应的报文信息。
TX方向(CPU→FPGA)中,DMA通过队列使能情况(txarray_en)决定是否需要对该队列的指针进行查看。如果队列使能同时指针不相等,说明TX队列中有报文,则可启动报文的读取。先通过DMA读取报文描述符,获取报文块的地址及报文长度信息,再通过DMA读取报文块里的报文数据,最终往外发送。
本发明通过以上设计,提高了FPGA与CPU之间的数据交互速率,实现了支持灵活可配置的报文处理流程。
Claims (6)
1.一种基于DMA的数据处理系统,其特征在于,所述系统包括FPGA,以及与所述FPGA进行报文交互的CPU,所述FPGA与所述CPU之间通过基于PCIE协议的DMA处理子系统进行报文交互;
所述FPGA用于对报文进行预处理,并通过PCIE接口将预处理后的报文通过DMA处理子系统存储于CPU的存储单元;所述FPGA还用于通过DMA子系统读取存储单元中的报文;
所述CPU用于根据不同线程处理对应不同的报文;
所述DMA处理子系统包括:
队列选择模块,用于利用CPU自由配置队列使能,并将预处理后报文得到的队列写信息写入至配置后对应的队列中,并将报文需要写入的队列信息发送至接收描述符读取模块;
接收指针管理模块,用于分别通过对RX读、写指针和TX读、写指针的管理指示当前描述符是否可用,并获取对应描述符的位置,并将其描述符的信息发送至接收描述符读取模块;
所述接收描述符读取模块,用于根据描述符的位置信息及队列编号信息DMA的方式读取RX描述符,根据CPU返回的RX描述符信息,提取出报文块的开始地址信息,将开始地址信息发送给报文发送及接收描述符回写模块;
所述报文发送及接收描述符回写模块,用于根据报文块的开始地址信息,并以DMA的方式把报文写入对应的位置,同时利用回写描述符将对应的val置为1,写入报文的长度信息以及指示出对应报文块内是否有数据,并由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,其中,pkt_len表示报文长度,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
发送指针管理模块,用于管理发送队列TX读指针,并根据所述TX读写指针确定是否能获取发送描述符模块内的描述符信息;
发送描述符读取模块,用于启动DMA读取TX描述符信息,并将获取到的报文块开始地址以及报文长度信息传递至报文读取及发送描述符回写模块;
报文读取及发送描述符回写模块,用于读取发送描述符读取模块发送的报文,并回写描述符val=0,指示出对应的报文块的空闲状态,并通过TX读指针将状态信息传递至发送指针管理模块;
DMA发送调度模块,用于将对应的DMA读、写操作进行合并,并通过PCIE接口传递至CPU;
DMA接收分发模块,用于通过PCIE接口获取CPU的读取信息,并将所述读取信息分发至上述各模块中。
2.根据权利要求1所述的基于DMA的数据处理系统,其特征在于,所述对报文进行预处理,其具体为:
对报文进行hash计算,得到报文的hash值,并根据所述hash值去查表,获取报文需写入的队列信息,其中,所述报文的队列信息与CPU的线程号以及DMA的队列号相对应。
3.根据权利要求1所述的基于DMA的数据处理系统,其特征在于,所述CPU的存储单元包括:
RX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过RX描述符信息写入对应的报文;
TX描述符存储区,用于根据对读、写指针的管理,决定是否读取描述符,并通过TX描述符信息读取对应的报文;
报文存储区,用于存储完整报文。
4.根据权利要求3所述的基于DMA的数据处理系统,其特征在于,所述RX描述符存储区和TX描述符存储区均采用连续地址的方式对描述符进行读取;
所述RX描述符存储区和TX描述符存储区中均包括报文的长度pkt_len、报文是否为有效信号val以及对应的报文块开始地址array_addr。
5.一种基于DMA的数据处理方法,其特征在于,所述数据处理方法包括FPGA→CPU方向的数据处理方法以及CPU→FPGA方向的数据处理方法;
所述FPGA→CPU方向的数据处理方法,包括以下步骤:
A1、对报文进行预处理,得到报文的hash值;
A2、利用所述报文的hash值去查表,获取报文的队列编号;
A3、通过读写指针的信息,判断报文是否能通过DMA写入至CPU的存储单元中,若是,则将报文存储至CPU的存储单元中,完成FPGA→CPU方向的数据处理,否则,进入步骤A4;
A4、根据描述符的位置信息以及报文的队列编号,读取描述符的信息,得到报文块的开始地址信息;
A5、根据所述报文块的开始地址信息,并通过DMA处理子系统把报文写入对应的位置,同时利用回写描述符将对应的val置为1,其中,val表示报文是否为有效信号,当val为1时表示对应的报文块内写有数据,当val为0时表示对应的报文块的空闲状态;
A6、通过DMA处理子系统更新报文的描述符,由CPU根据val位去读取报文,以及根据pkt_len信息获取完整报文,完成FPGA→CPU方向的数据处理,其中,pkt_len表示报文长度,val表示报文是否为有效信号;
所述CPU→FPGA方向的数据处理方法包括以下步骤:
B1、利用CPU自由配置队列使能,并根据队列使能情况查看该队列的指针情况;
B2、判断队列使能情况与指针是否相等,若是,则停止DMA操作,结束流程,否则,进入步骤B3;
B3、读取描述符的信息,并根据所述描述符的信息获取报文块的地址以及长度信息;
B4、根据所述报文块的地址以及长度信息,通过DMA处理子系统读取报文块的报文数据,并将所述报文数据发送至FPGA,同时利用回写描述符将对应的val置为0,完成CPU→FPGA方向的数据处理。
6.根据权利要求5所述的基于DMA的数据处理方法,其特征在于,所述步骤A1中对报文进行预处理,其具体为:
对报文进行hash计算,得到报文的hash值,并将所述hash值去查表获取报文需写入的队列信息,其中,所述报文的队列信息与CPU的线程号以及DMA的队列号相对应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010051355.9A CN111221759B (zh) | 2020-01-17 | 2020-01-17 | 一种基于dma的数据处理系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010051355.9A CN111221759B (zh) | 2020-01-17 | 2020-01-17 | 一种基于dma的数据处理系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111221759A CN111221759A (zh) | 2020-06-02 |
CN111221759B true CN111221759B (zh) | 2021-05-28 |
Family
ID=70829632
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010051355.9A Active CN111221759B (zh) | 2020-01-17 | 2020-01-17 | 一种基于dma的数据处理系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111221759B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347030A (zh) * | 2020-09-24 | 2021-02-09 | 深圳市紫光同创电子有限公司 | 基于fpga的数据处理方法及系统 |
CN113660351B (zh) * | 2021-10-18 | 2022-01-04 | 湖南兴天电子科技有限公司 | 数据通信方法、装置、通信终端及计算机可读存储介质 |
CN114490467B (zh) * | 2022-01-26 | 2024-03-19 | 中国电子科技集团公司第五十四研究所 | 一种多核网络处理器的报文处理dma系统及方法 |
CN114610661B (zh) * | 2022-03-10 | 2024-06-11 | 北京百度网讯科技有限公司 | 数据处理装置、方法和电子设备 |
CN114745325B (zh) * | 2022-03-28 | 2024-07-23 | 合肥边缘智芯科技有限公司 | 一种基于PCIe总线的MAC层数据交换方法及系统 |
CN115422101A (zh) * | 2022-11-04 | 2022-12-02 | 山东云海国创云计算装备产业创新中心有限公司 | 一种dma驱动系统、方法、设备及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108055202A (zh) * | 2017-12-07 | 2018-05-18 | 锐捷网络股份有限公司 | 一种报文处理设备和方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020135585A1 (en) * | 2000-02-01 | 2002-09-26 | Dye Thomas A. | Video controller system with screen caching |
US9658977B2 (en) * | 2013-03-15 | 2017-05-23 | Micron Technology, Inc. | High speed, parallel configuration of multiple field programmable gate arrays |
CN105511954B (zh) * | 2014-09-23 | 2020-07-07 | 华为技术有限公司 | 一种报文处理方法及装置 |
US9582342B2 (en) * | 2015-04-23 | 2017-02-28 | National Instruments Corporation | API constraint language for a communication device |
CN106681949B (zh) * | 2016-12-29 | 2019-12-10 | 北京四方继保自动化股份有限公司 | 基于一致性加速接口的直接内存操作实现方法 |
-
2020
- 2020-01-17 CN CN202010051355.9A patent/CN111221759B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108055202A (zh) * | 2017-12-07 | 2018-05-18 | 锐捷网络股份有限公司 | 一种报文处理设备和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111221759A (zh) | 2020-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111221759B (zh) | 一种基于dma的数据处理系统及方法 | |
CN108228492B (zh) | 一种多通道ddr交织控制方法及装置 | |
CN109981431B (zh) | 一种can总线控制器数据存储电路及数据存储方法 | |
JP2002204253A (ja) | 非同期転送モードにおけるホスト・プロセッサおよびディジタル信号プロセッサ間転送用インターフェース・ユニット、およびこれを用いたデータ処理システム | |
CN101877666B (zh) | 基于零拷贝方式的多应用程序报文接收方法和装置 | |
CN110858188A (zh) | 具有分布式信箱结构的多处理器系统及其沟通方法 | |
CN106959929B (zh) | 一种多端口访问的存储器及其工作方法 | |
CN115905086A (zh) | 基于axi同步读写单口sram的控制方法及控制器 | |
CN111538694B (zh) | 一种用于网络接口支持多链接和重传的数据缓存方法 | |
JP4022442B2 (ja) | フィールドバスインタフェースボードの制御方法 | |
CN116893991B (zh) | 一种axi协议下的存储模块转换接口及其转换方法 | |
CN109062857B (zh) | 一种能高速实现多处理器间通信的新型消息控制器及其通信方法 | |
CN113672172A (zh) | 应用于led显示控制系统的数据交互方法以及接收卡 | |
WO2022095439A1 (zh) | 一种用于数据处理的硬件加速系统及芯片 | |
CN116166581A (zh) | 用于pcie总线的队列式dma控制器电路及数据传输方法 | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储系统及存储介质 | |
CN111694777B (zh) | 基于PCIe接口的DMA传输方法 | |
CN114328311B (zh) | 一种存储控制器架构、数据处理电路及数据处理方法 | |
CN117348932B (zh) | 支持axi深度乱序传输的从机装置及工作方法 | |
CN117149680B (zh) | 用于贴片机子模块日志上传的主控板及上传方法 | |
CN117149070A (zh) | 一种数据传输方法及固态硬盘系统 | |
US20230106923A1 (en) | Storage system | |
KR100298287B1 (ko) | 시스템 버스에서 메시지 처리 장치 및 방법 | |
CN117407336A (zh) | Dma传输方法、装置、soc及电子设备 | |
CN118227047A (zh) | 基于fpga的ddr控制器的读写系统、方法及存储介质 |
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 |