高速单板传输报文的方法、现场可编程门阵列及高速单板
技术领域
本发明涉及数据传输技术领域,具体涉及一种高速单板传输报文的方法、一种高速单板上的现场可编程门阵列(FPGA,Field Programmable GateArray)及一种高速单板。
背景技术
对于外设部件互连(PCI,Peripheral Component Interconnect)Express即:PCIe总线技术或者是传统的PCI总线,数据的传输通常是基于直接内存访问(DMA,Direct Memory Access)机制。这种操作的主要优点是缓解处理器的工作量,通常使用DMA控制器发起直接内存访问,从而在不使用处理器的情况下完成数据的搬移,一般的片***(SOC,System on Chip)处理器都会为用户提供多个DMA控制器。
图1给出了基于PCIe总线技术的路由器上各单板之间的数据传输示意图,如图1所示,各单板包括:主控板、线路板上的中央处理单元(CPU,Central Processing Unit)首先初始化DMA控制器,在各单板的内存中建立收、发缓存描述符(BD,Buffer Descriptor)链,每条BD链都相当于一个先入先出(FIFO,First Input First Output)队列,发BD用于缓存待发数据,收BD用于缓存接收到的数据。每个BD链包括BD头和BD缓冲区两部分,BD头指示该BD的各种信息,如:BD状态、长度及缓冲区的地址等,BD缓冲区存有需要传送或已接收的数据。
DMA机制中最重要的就是收、发BD链的管理,各单板的CPU要将本单板的收BD地址通知所有潜在的源单板,还要将收BD的空满状况及时上报所有潜在的源单板,以防止由于收BD满而导致溢出丢包的现象。
如图1所示,当线路板1要向线路板m传输报文时,线路板1的CPU首先将报文放入发BD中,随后判断线路板m是否有足够的收BD来接收报文,若没有,则等待,若有,则启动DMA控制器,由DMA控制器完成报文传输,并通过中断或消息的方式通知线路板m:报文已传输完毕。
单板之间主要传输两类报文:一类是控制报文,包括流控报文和通知数据传输完毕的消息报文;另一类是数据报文。
基于处理器性能,可将线路板划分为两种:低速线路板和高速线路板。低速线路板主要以单核处理器为主,该类处理器含有PCIe控制器,处理器之间可以直接通过交换芯片互联通讯。高速线路板主要以高性能的多核处理器或者网络处理器为主,该类处理器不支持PCIe接口,通用高带宽接口为SPI4.2,为实现基于PCIe的高速业务板,需要完成PCIe到SPI4.2的转换,目前通过FPGA实现PCIe到SPI4.2的转换。
图2给出了同时具有低速线路板和高速线路板的路由器的示意图,如图2所示,线路板之间的互通主要有三种方式:
方式一、低速线路板间通信。互通方式和图1中的DMA机制一致。
方式二、高速线路板间通信。FPGA不参与任何DMA处理,只实现PCIe数据包和SPI4.2数据报文的转换,BD初始化和管理依然由高速线路板上的高性能CPU通过自带的DMA控制器来实现。FPGA既不需要参与DMA管理也不需要了解传输的报文内容是控制报文还是数据报文,直接将收到的SPI4.2数据包的载荷(payload)部分剥离,并按照载荷中的地址将数据报文发出。
方式三、高、低速线路板间互相通信。该方式为方式一和方式二的结合。
从图2所示技术方案可以看出:高速线路板的CPU需要进行DMA管理,这样会将增加CPU的工作负担、降低整板效率。
发明内容
本发明实施例提供一种高速单板传输报文的方法、一种高速单板上的FPGA以及一种高速单板,以降低高速单板的CPU的工作负担。
本发明实施例的技术方案是这样实现的:
一种高速单板上的FPGA,包括:DMA控制器,该DMA控制器维护DMA所需的BD,FPGA根据该BD与其它单板交互报文。
所述DMA控制器包括:DMA接收模块、BD管理模块和DMA发送模块,其中:
DMA接收模块,从收BD中取出其它单板通过FPGA的外设部件互连PCIe总线发来的报文,若该报文为BD管理报文,则将报文直接发送给BD管理模块;若该报文为数据报文,则将报文发送给中央处理单元CPU;
BD管理模块,在本高速单板上创建并维护收、发BD,接收DMA接收模块发来的BD管理报文,根据该报文管理本高速单板上的收BD;
DMA发送模块,接收CPU发来的报文,将该报文放入发BD中发送给其它单板。
所述BD管理单元进一步包括:根据预先设定的收BD更新条件,向其它单板发送携带本单板为该其它单板维护的收BD链空满状况信息的报文。
所述FPGA进一步包括:接收数据缓存模块、SPI4.2发送控制模块和SPI4.2流控模块,
且,所述DMA控制器接收到其它单板发来的数据报文后,将报文的载荷部分中的数据缓存到接收数据缓存模块,并向SPI4.2发送控制模块发送已有新待发数据通知,其中:
接收数据缓存模块,用于缓存DMA控制器发来的数据;
SIP4.2发送控制模块,接收所述已有新待发数据通知,向SPI4.2流控模块查询是否流控,若未流控,从接收数据缓存模块取出缓存的数据,将数据封装上SPI4.2控制头后发送给CPU;
SPI4.2流控模块,用于对本FPGA的SPI4.2通道进行流控。
所述FPGA进一步包括:SPI4.2接收控制模块、发送数据缓存模块,其中:
SPI4.2接收控制模块,接收CPU通过SPI4.2通道发来的数据报文,将该数据报文的载荷部分剥离,将得到的数据缓存到发送数据缓存模块,并向DMA控制器发送已有新待发数据通知;
发送数据缓存模块,缓存SPI4.2接收控制模块发来的数据;
且,所述DMA控制器收到所述已有新待发数据通知,从发送数据缓存模块取出缓存的数据。
一种高速单板,包括:FPGA和CPU,FPGA中包括:DMA控制器,该DMA控制器维护DMA所需的BD,FPGA根据该BD与其它单板交互报文。
所述DMA控制器包括:DMA接收模块、BD管理模块和DMA发送模块,其中:
DMA接收模块,从收BD中取出其它单板通过FPGA的PCIe总线发来的报文,若该报文为BD管理报文,则将报文直接发送给BD管理模块;若该报文为数据报文,则将报文发送给CPU;
BD管理模块,在本高速单板上创建并维护收、发BD,接收DMA接收模块发来的BD管理报文,根据该报文管理本高速单板上的BD;
DMA发送模块,接收CPU发来的报文,将该报文放入发BD中发送给其它单板。
一种高速单板传输报文的方法,该方法包括:
高速单板上的FPGA维护DMA所需的BD,FPGA根据该BD与其它单板交互报文。
所述高速单板的FPGA维护DMA所需的BD包括:
FPGA为本高速单板的每个源单板分别创建并维护一个收BD链,并在本单板初始化时,将为每个源单板维护的收BD链信息发送给该源单板。
所述FPGA根据BD与其它单板交互报文包括:
FPGA接收到本单板的源单板发来的报文传输完毕指示,从自身为该源单板维护的收BD中取出报文,若报文为BD管理报文,则根据该报文管理BD;若报文为数据报文,则将报文发送给CPU。
所述FPGA将报文发送给CPU包括:
判断FPGA与CPU之间的SPI4.2通道是否被流控,若否,将报文发送给CPU;否则,等待至SPI4.2通道未被流控时,将报文发送给CPU。
所述FPGA从自身为该源单板维护的收BD中取出报文进一步包括:FPGA将自身为该源单板维护的收BD链的空满状况信息发送给该源单板。
所述FPGA为本高速单板的每个源单板分别创建并维护一个收BD链进一步包括:FPGA创建并维护一个发BD链。
所述FPGA根据BD与其它单板交互报文包括:
FPGA接收到本高速单板的CPU发来的数据报文,将该报文放入发BD中,根据报文中的目标单板标识,判断自身为该目标单板维护的收BD链中是否存在空闲收BD,若存在,将空闲收BD地址放入发BD中,启动DMA传送过程。
FPGA为本高速单板的每个源单板预先设定收BD链更新条件,在满足该条件时,FPGA将本单板为该源单板维护的收BD链的空满状况信息发送给该源单板。
与现有技术相比,本发明实施例通过在高速单板的FPGA中增加DMA控制器,该DMA控制器维护DMA所需的BD,FPGA根据该BD与其它单板交互报文,释放了高速单板的CPU的DMA管理工作,降低了CPU的工作负担,提高了高速单板的整板效率。
附图说明
图1为现有的基于PCIe总线技术的路由器各单板之间的数据传输示意图;
图2为现有的同时具有低速线路板和高速线路板的路由器的示意图;
图3为本发明实施例提供的同时具有低速线路板和高速线路板的路由器的示意图;
图4为本发明实施例提供的高速单板上的FPGA的组成示意图;
图5为本发明实施例提供的发、收BD的示意图;
图6为本发明实施例提供的高速单板接收报文的处理流程图;
图7为本发明实施例提供的高速单板发送报文的处理流程图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明实施例中,将高速主控板和高速线路板统称为高速单板。
图3为本发明实施例提供的同时具有低速线路板和高速线路板的路由器的示意图,如图3所示,其主要包括:主控板、PCIe交换机、低速线路板和高速线路板。其中,PCIe交换机、低速线路板的结构和功能可以与现有技术相同,且,若主控板为低速单板,则主控板的结构和功能可与现有技术相同。
如图3所示,高速线路板的FPGA中包含DMA控制器,CPU中则不包含DMA控制器。同时,若主控板为高速单板,则主控板的FPGA的结构与图3所示的高速线路板中的FPGA的结构相同:包含DMA控制器,且主控板的CPU中不包含DMA控制器。
图4给出了本发明实施例提供的高速单板上的FPGA的组成示意图,如图4所示,FPGA主要包括:DMA接收模块411、接收数据缓存模块412、SPI4.2发送控制模块413、SPI4.2流控模块414、SPI4.2接收控制模块415、发送数据缓存模块416、DMA发送模块417、BD管理模块418,各模块的主要功能如下:
DMA接收模块411:接收本单板的源单板发来的指示报文已传输完毕的中断或消息,从本单板为该源单板维护的收BD链中取出报文,若该报文为收BD链更新报文,则将报文直接发送给BD管理模块418;若该报文为数据报文,则将数据报文的载荷部分中的数据缓存到接收数据缓存模块412,同时向SPI4.2发送控制模块413发送已有新待发数据通知。
接收数据缓存模块412:缓存DMA接收模块411发来的数据。
SPI4.2发送控制模块413:接收到DMA接收模块411发来的已有新待发数据通知,向SPI4.2流控模块414发送流控查询,若收到SPI4.2流控模块414返回的未流控指示,从接收数据缓存模块412获取缓存的数据,将该数据封装上SPI4.2控制头后通过SPI4.2通道发送给CPU;若收到SPI4.2流控模块414返回的流控指示,则通过BD管理模块418、DMA发送模块417向本单板的源单板发送本单板的SPI4.2通道已阻塞的通知,并继续向SPI4.2流控模块414发送流控查询,直至SPI4.2流控模块414返回未流控指示。
SPI4.2流控模块414:若接收到CPU发来的流控通知,则开始流控;若接收到CPU发来的取消流控通知,则停止流控;接收SPI4.2发送控制模块413发来的流控查询,根据当前的流控情况,向SPI4.2发送控制模块413返回流控指示或未流控指示。接收BD管理模块418发来的携带源单板标识的停止发送数据通知,将该停止发送数据通知发送给CPU;接收BD管理模块418发来的携带源单板标识的开始发送数据通知,将该开始发送数据通知发送给CPU。
SPI4.2接收控制模块415:接收CPU通过本FPGA的SPI4.2通道发来的数据报文,将数据报文的载荷部分中的数据缓存到发送数据缓存模块416,同时向DMA发送模块417发送已有新待发数据通知。
发送数据缓存模块416:缓存SPI4.2接收控制模块415发来的数据。
DMA发送模块417:接收SPI4.2接收控制模块415发来的已有新待发数据通知,从发送数据缓存模块416获取携带有目标单板标识的数据,为数据封装上PCIe控制头,将得到的数据报文放入发BD中,并向BD管理模块418发送携带目标单板标识的收BD查询,若收到BD管理模块418返回的空闲收BD地址,将该空闲收BD地址放入发BD中的数据报文中,启动DMA发送过程;若接收到BD管理模块418返回的满指示,则重复向BD管理模块418发送携带目标单板标识的收BD查询,直至收到BD管理模块418返回的空闲收BD地址。
BD管理模块418:为本单板创建并维护一个发BD链,并为本单板的每个潜在源单板分别创建并维护一个收BD链。在本单板初始化时,将为每个源单板维护的收BD链中的所有收BD的地址携带在收BD链初始化报文中发送给该源单板;并在满足预先设定的收BD链更新条件时,将为每个源单板维护的收BD链的空满状况信息携带在收BD链更新报文中通过DMA发送模块417通知该源单板。若检测到本单板为某个源单板维护的收BD链已满,则向SPI4.2流控模块414发送携带该源单板标识的停止发送数据通知,并在检测到本单板为该源单板维护的收BD链空闲时,向SPI4.2流控模块414发送携带该源单板标识的开始发送数据通知。接收其它单板发来的收BD链初始化报文,保存该报文中携带的源单板标识与源单板为本单板维护的收BD链中的收BD地址信息的对应关系;接收DMA接收模块411发来的收BD链更新报文,保存该报文中携带的源单板标识和该源单板为本单板维护的收BD链空满状况信息。
收BD链初始化报文、收BD链更新报文都为BD管理报文。
图5给出了本发明实施例提供的高速单板上的发、收BD链的示意图,如图5所示,A_Tx为本高速单板建立的发BD链,缓存中的内容为待发数据,B_Rx为目标单板在本单板中复制的收BD链,在确认目标单板为B后,本高速单板会将为B维护的B_Rx中的空闲收BD地址填充到A_Tx的发送BD中,然后启动DAM传送过程。
图6为本发明实施例提供的高速单板接收报文的处理流程图,如图6所示,其具体步骤如下:
步骤600:BD管理单元418为本单板创建并维护一个发BD链,并为本单板的每个潜在源单板分别创建并维护一个收BD链;在本单板初始化时,将为每个源单板维护的收BD链中的所有收BD的地址通过收BD链初始化报文发送给该源单板;接收其它单板发来的收BD链初始化报文,记录该报文携带的源单板标识与收BD链中的收BD地址信息的对应关系。
步骤601:DMA接收模块411接收到源单板通过FPGA的PCIe总线发来的指示报文传输完毕的中断或消息,从本单板为该源单板维护的收BD链对应的收BD中取出报文。
本步骤中,DMA接收模块411在从收BD中取出报文后,可以将报文中的源单板标识发送给BD管理单元418,BD管理单元418收到该源单板标识后,更新本单板为该源单板维护的收BD链,并将本单板标识和本单板为该源单板维护的收BD链的空满状况信息携带在收BD链更新报文中发送给该源单板。
另外,本发明实施例中,本单板也可以为每个源单板预先设定一个收BD链更新周期,在源单板的每个收BD链更新周期到来时,本单板上的BD管理单元418将本单板为该源单板维护的收BD链的空满状况信息通过收BD链更新报文发送给该源单板。
步骤602:DMA接收模块411判断该报文为收BD链更新报文还是数据报文,若是收BD链更新报文,执行步骤603;若是数据报文,执行步骤605。
步骤603:DMA接收模块411将收BD链更新报文直接发送给BD管理模块418。
步骤604:BD管理模块418收到收BD链更新报文,保存该报文中携带的源单板标识和该源单板为本单板维护的收BD链空满状况信息,本流程结束。
例如:本步骤中,设定本单板为高速线路板a,收BD链更新报文为单板b发来的,则报文中携带单板b标识以及单板b为高速线路板a维护的收BD链空满状况信息。这里,收BD链空满状况具体可为:全空、全满、收BD链中所有空闲BD地址、收BD链中所有非空闲BD地址中的一种。
步骤605:DMA接收模块411将数据报文中的载荷部分剥离出来,将载荷中的数据缓存到接收数据缓存模块412,同时向SPI4.2发送控制模块413发送已有新待发数据通知。
步骤606:SPI4.2发送控制模块413接收DMA接收模块411发来的已有新待发数据通知。
步骤607:SPI4.2发送控制模块413向SPI4.2流控模块414查询是否流控,若是,执行步骤608;否则,执行步骤609。
若CPU的处理负荷已超过可容忍处理负荷,则CPU会向SPI4.2流控模块414发送流控通知,SPI4.2流控模块414收到该流控通知后,开始进行流控;CPU在处理负荷低于可容忍处理负荷时,会向SPI4.2流控模块414发送取消流控通知,SPI4.2流控模块414收到该取消流控通知后,停止流控。
步骤608:SPI4.2发送控制模块413通过BD管理模块418、DMA发送模块417向源单板发送本单板的SPI4.2通道已阻塞的通知,转至步骤607。
本步骤中,若FPGA和CPU之间只包含一条SPI4.2通道,则SPI4.2发送控制模块41 3需要向所有潜在源单板发送本单板的SPI4.2通道已阻塞的通知;若FPGA和CPU之间包含多于一条SPI4.2通道,且所有潜在源单板的流量分别分布在各条SPI4.2通道上,此时,SPI4.2发送控制模块413只需要向已阻塞的SPI4.2通道对应的源单板发送本单板的SPI4.2通道已阻塞的通知。
步骤609:SPI4.2发送控制模块413从接收数据缓存模块412获取缓存的数据,将该数据封装上SPI4.2控制头后通过SPI4.2通道发送给CPU。
图7为本发明实施例提供的高速单板发送数据报文的流程图,如图7所示,其具体步骤如下:
步骤701:SPI4.2接收控制模块415接收CPU通过本FPGA的SPI4.2通道发来的携带目标单板标识的数据报文。
步骤702:SPI4.2接收控制模块415将数据报文的载荷部分剥离出来,将载荷中的数据缓存到发送数据缓存模块416,同时向DMA发送模块417发送已有新待发数据通知。
步骤703:DMA发送模块417接收SPI4.2接收控制模块415发来的已有新待发数据通知,从发送数据缓存模块416获取数据。
步骤704:DMA发送模块417给数据添加PCIe控制头,将得到的数据报文放入发BD中。
步骤705:DMA发送模块417从BD管理单元418获取目标单板为本单板维护的收BD链的空满状况信息。
步骤706:DMA发送模块417判断收BD链中是否存在空闲收BD,若是,执行步骤707;否则,返回执行步骤705。
步骤707:DMA发送模块417将空闲收BD地址放入数据报文中,启动DMA传送过程,通过本FPGA的PCIe总线将数据报文发送到目标单板。
从图3~4、6~7所示实施例可以看出,本发明实施例通过以FPGA取代CPU实现DMA管理,不但减轻了CPU的工作量,同时还由于CPU不需要构造PCIe报文,省去了PCIe包头的开销,从而弥补了SPI4.2总线带宽的损失。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。