一种高扩展性的基于FPGA的PCIE事务层传输方法与流程

文档序号:23418258发布日期:2020-12-25 11:38阅读:107来源:国知局
一种高扩展性的基于FPGA的PCIE事务层传输方法与流程

本发明涉及雷达及通信中的数据传输领域。



背景技术:

随着计算机外设性能的不断提升,外设与处理器之间交互的数据量大幅增加,例如目前的高性能显卡、网卡等设备均具有产生快速大数据量的能力,迫使处理器和外设之间的传输总线必须具有高速可靠传输的能力。与此同时,机器学习、大数据等新兴技术对实时数据传输性能也具有很严苛的要求。近年来,在雷达领域,随着相控阵雷达、软件化雷达等新型体质雷达的出现及发展,雷达通道数量骤增、前端数据实时软件化处理等将成为常态,大量的数据汇流到后端,对后端的传输能力提出极高的要求,此时,具有更高传输速率的计算机传输总线显得十分重要。因此pcie(pci-express)总线应运而生,作为最新的总线和接口标准,其超高的传输速率以及高效的服务质量解决了大数据量实时可靠传输的问题。

在雷达系统中,前后端设备之间往往需要交互多种用途数据,比如前端向后端需要发送回波数据、采样数据、故检信息、回读数据等,后端需要发送各种类型的控制命令、bit文件、校准参数等,而这些数据在时间、数据量上完全独立,使用报文加入标志字的方法会增加后端的处理负担,因此采用可扩展多通道的方法,每种通道传输一种任务数据,逻辑清晰简单,同时也适合后期拓展。但是存在以下问题:其一是需要最大化的提高收发传输带宽利用率,其二是读通道存在乱序到达的问题,若采用等待当前读存储器事务的请求数据返回之后再进行下一次读写将会极大地浪费带宽,若采用对tag进行实时管理的方法将会需要很大的ram对数据进行缓存,资源消耗量大,并且逻辑复杂,不适合fpga处理。



技术实现要素:

本发明提供一种高扩展性的基于fpga的pcie事务层传输方法,目的在于提高目前工程中pcie传输模块的扩展性以及收发带宽的利用率,并有效解决完成包乱序的问题。

为了达到以上目的,本发明提供了一种高扩展性的基于fpga的pcie事务层传输方法,包括存储器写过程和存储器读过程;其中所述存储器写过程按处理过程依次包括写通道模块、优先级管理模块以及写通道汇流模块;其中:所述写通道模块按照存储器写事务对待发送数据进行封装,将封装的数据发送到写通道汇流模块,同时对各自通道内单位时间数据量进行统计供优先级控制模块使用;所述优先级控制模块根据模式选择以及统计的数据量进行确定优先级的工作;所述写通道汇流模块在优先级管理模块的控制下将写通道输出的存储器写事物事务按照优先级顺序发送到pcie总线;所述存储器读过程按处理过程依次包括读请求通道模块、tag管理模块、读通道分发汇流模块、接收子通道模块、读完成通道模块;其中,所述读请求通道模块负责存储器读事务的组包工作,组包结果发送到读通道分发汇流模块;组包过程中使用的tag号从tag管理模块获取;tag管理模块对tag资源进行已使用和未使用的统计和标记,并对tag资源进行锁定和释放,每个通道对应的tag管理模块所能作用的tag区间预先进行设定,设定的准则是通道单位时间内接收的数据量越大,预设的tag区间越大;读通道分发汇流模块负责将存储器读请求事务按照通道号依次进行发送到pcie总线;同时对读完成事务进行拆包,并按照tag号将数据送入对应的接收子通道中;接收子通道模块负责对该子通道的数据进行缓存及计数,并在tag管理模块的控制下将数据送往读完成通道;读完成通道负责对属于本通道的所有子通道的数据进行接收。

进一步的,所述存储器写过程的优先级控制模块包括:接收写通道模块传来的统计结果,并根据结果确定各写通道的优先级;优先级控制模块具有三种优先级控制模式,第一种是将统计结果较大的通道作为优先级最高的通道,第二种是将任意通道的优先级进行自定义,第三种是将统计结果较大的通道作为优先级最低的通道;三种控制模式可以通过设置参数实现选择;在第一种模式下,各通道的优先级依次是通道1>通道2>通道3>......>通道n;在第二种模式下,可将通道1、2、3的优先级直接进行定义;在第三种模式下,各通道的优先级依次是通道1<通道2<通道3<......<通道n,优先级产生模块的更新周期就是统计周期;写通道汇流模块将按优先级的先后顺序依次封装当前数据并输出。

进一步的,所述存储器读过程的tag管理模块包括:tag管理模块针对每一个tag值都有一个used标志位、一个rd标志位、一个enable标志位;used标志位表示所指示tag是否正在使用;当该tag值已被存储器读请求事务使用且对应请求地址的数据未完全返回到fifo中时,则该标志位为1,否则为0;rd标志位表示所指示tag对应的通道缓存中的数据是否可读;如果当前tag处于未使用状态且在该tag管理模块中比该tag值小的tag资源都处于未使用状态中,则该标志位为1,否则为0;enable标志位表示所指示tag是否能用,当对应tag处于未使用状态,并且对应子通道缓存中的数据已经被读完,该标志位为1,否则为0;在没有发送读存储器请求之前,所有通道的used标志位均为0,rd标志位均为0,enable标志位均为1;当从读请求模块处获得需要发送读请求的任务时,tag管理模块根据读通道号从对应的tag管理模块获取可以使用的tag字段封装存储器读事务;如果tag管理模块中所有的enable字段都为0,表示没有可使用的tag字段,则暂停发送存储器读请求,直至有可用的tag字段为止;如果读请求通道使用了某个tag号,则将相应tag的used标志置1,enable标志置0,rd标志保持不变;当对应tag接收的数据达到请求的数据量之后,将相应tag的used标志位置0,并判断比当前tag值小的tag资源的used标志位是否都为0,如果都是0则将该tag的rd标志位置1,通知相应的读完成通道读取tag指示的子通道数据,否则不执行任何操作;当读取完该子通道中fifo数据后,将enable标志位置高,释放该tag资源。

本发明提供的一种高扩展性的基于fpga的pcie事务层传输方法,该发明相比已有方法有以下优点:其一,该传输方法扩展性很强,一套固有的程序很难适应工程中的各种需求,该方法可以随意扩展读通道、写通道以及接收子通道,在fpga平台上扩展方法简单。其二,在存储器写过程中优先级管理模块可以有效降低链路的堵塞程度,提高链路的利用率。其三,通过增加tag管理模块并且为每个接收子通道分配独有tag的方法,在保证较高接收带宽利用率的前提下解决了完成包乱序到达的问题。

附图说明

图1是基于fpga的pcie事务层的高扩展性传输方法框图。

图2是tag管理模块中标志位的初始化状态。

图3是使用tag1发送时的标志位状态。

图4是继续使用tag2发送时的标志位状态。

图5是tag2先于tag1返回包接收结束时的标志位状态。

图6是tag1返回包接收结束时的标志位状态。

图7是子通道1和子通道2缓存数据被读取结束时的标志位状态。

具体实施方式

本发明涉及一种高扩展性的基于fpga的pcie事务层传输方法,该传输方法主要包括存储器写过程和存储器读过程两部分。如图1所示为基于fpga的pcie事务层的高扩展性传输方法框图。存储器写通道和读通道均使用多通道进行传输,每个通道传输一种用途的数据,如果需要增加新用途数据,只需要多例化写通道模块即可,读和写通道理论上可以达到256通道。每个写通道的数据分别写到不同的dmawrbuffer中,每个读通道分别从不同的dmardbuffer中读取数据。下面将对读和写两个过程的具体方法实现进行阐述。

存储器写过程是将待发送的数据按照存储器写事务进行组包,并以本发明设计的方法将数据发送到pcie的ip核的过程。写过程包括以下步骤:

s1:待发送数据分别进入预先定义的写通道,在写通道模块中按照mwr事务进行封装,其中写通道1的基地址为dmawrbuffer1的pci域基地址,写通道2的基地址为dmawrbuffer2的pci域基地址,以此类推,写通道n的基地址为dmawrbuffern的pci域基地址。

s2:与此同时,在每个写通道中完成对固定时间内的数据量的统计,并将统计结果传输到优先级控制模块。

s3:优先级控制模块具有三种优先级控制模式,第一种是将统计结果较大的通道作为优先级最高的通道,第二种是将任意通道的优先级进行自定义,第三种是将统计结果较大的通道作为优先级最低的通道。三种控制模式可以通过设置参数实现选择。比如,在第一种模式下,通道1的统计结果为a,通道2的统计结果为b,通道3的统计结果为c,并且a>c>b,则在下次统计结果出来之前通道1、通道2、通道3的优先级为通道1>通道3>通道2。在第二种模式下,可将通道1、2、3的优先级直接定义为通道3>通道2>通道1。优先级产生模块的更新周期就是统计周期。写通道汇流模块将按优先级的先后顺序依次封装当前数据并输出。

s4:在写通道汇流模块中,各个通道在优先级管理模块的控制下,将mwr事务按优先级顺序进行发送。即在同一时刻,如果写通道1中有需要发送的数据,则优先发送写通道1的数据。只有当通道1中没有待发送的mwr事务时,才会发送写通道2中的数据。

存储器读过程主要完成从dmardbuffer读取数据到fpga端的功能。整个读过程首先需要由端点发送存储器读请求(mrd)到计算机,随后计算机会产生相应的带数据完成包(cpld)到fpga。

发送存储器读请求(mrd)的具体方法是,首先获取需要使用的读通道号,并从对应的tag管理模块获取可以使用的tag字段封装存储器读事务,如果tag管理模块告知没有可使用的tag字段,则暂停发送存储器读请求,直至有可用的tag字段为止。各个通道在读通道分发汇流模块中按照通道1到通道n优先级依次降低的方法将发送的存储器读请求汇流成一路并发送。tag管理模块主要对tag资源进行已使用和未使用的统计和标记,并对tag资源进行锁定和释放。每个通道对应的tag管理模块所能作用的tag区间是预先设定好的,设定的准则是通道单位时间内接收的数据量越大,预设的tag区间越大。如图2所示,在本实施例中,通道1由于需要传输高速回波信号(周期性数据量大),因此预定义tag区间为1~4,通道2由于需要传输故检信息(周期性但数据量不大),预设的tag区间为5~6,通道3由于需要传输校正系数(非周期,传输次数有限),预设的tag值区间为7。tag管理模块针对每一个tag值都有一个used标志位、一个rd标志位、一个enable标志位。used标志位表示所指示tag是否正在使用。当该tag值已被存储器读请求事务使用且对应请求地址的数据未完全返回到fifo中时,则该标志位为1,否则为0;rd标志位表示所指示tag对应的通道缓存中的数据是否可读。如果当前tag处于未使用状态中且在该tag管理模块中比该tag值小的tag资源都处于未使用状态中,则该标志位为1,否则为0;enable标志位表示所指示tag是否能用,当对应tag处于未使用状态,并且对应子通道缓存中的数据已经被读完,该标志位为1,否则为0;

mrd发送步骤:

s1:如图2所示,在没有发送读存储器请求之前,所有通道的used标志位均为0,rd标志位均为0,enable标志位均为1。

s2:如图3所示。当通道1需要发送mrd时,tag管理模块首先从tag1~tag4依次检索enable标志为1的tag,由于tag1的该标志为1,因此,mrd使用tag=1进行封装发送mrd。同时,将tag1的used标志置1,此时enable标志为0,rd标志为0。

s3:如图4所示。当通道1仍需要发送mrd时,遵从s2的步骤依次检索,此时检索到tag2的enable标志位为1,因此,mrd使用tag=2进行封装发送mrd。同时,将tag2的used标志置1,此时,enable标志为0,rd标志为0。如果通道1仍然需要发送mrd,则遵循s2和s3的步骤依次进行。

s4:当通道1中的所有tag的enable标志位为0时,此时暂停发送mrd,直到有tag字段的所有enable标志均变为1为止。

s5:与s2同步,当通道2和通道3需要发送mrd时,其方法和s2~s4一致,不同处仅在于可用的tag区间不同。

s6:各个通道在读通道分发汇流模块中按照通道1到通道n优先级依次降低的方法将发送的存储器读请求汇流成一路并发送。

当端点发送完存储器读请求之后,会在一定延时之后收到相应的cpld数据包,cpld数据包在读通道分发汇流模块中进行拆包,并解析出该cpld完成包的tag字段,根据tag字段将cpld完成包解析出来的数据传送到相应的接收子通道模块中进行缓存处理。接收子通道模块主要完成对该子通道的数据进行缓存及计数,并在tag管理模块的控制下将数据送往读完成通道。一个通道对应的子通道数量可以根据需求扩展,在fpga中只需要配置参数即可实现多子通道例化,扩展性强。当对应tag数据达到请求的数据量之后,将相应tag的used标志位置0,并判断比当前tag值小的tag资源的used标志位是否都为0,如果都是0则将该tag的rd标志位置1,通知相应的读完成通道读取tag指示的子通道数据,否则不执行任何操作。当读取完该子通道数据之后,将enable标志位置高,释放该tag资源。

cpld接收步骤:

s1:在端点发送mrd之后,端点会接收到读取的cpld,在对cpld解包的过程中,会通过获取的tag字段,将解析出的数据传送到相应的接收子通道模块,接收子通道模块会将接收的数据做缓存处理并进行计数。

s2:如图5所示。返回的cpld并不会按照发送的先后顺序返回,假设当tag2字段的mrd事务请求的数据量与返回的数据量相同时,将tag2对应的used标志位清0,表示此tag已经不在使用中。同时,由于tag1字段的rd标志位为0且enable标志位为0,因此tag2字段的rd标志位仍然为0。

s3:如图6所示。当tag1字段的mrd事务请求的数据完全返回之后,将tag1对应的used标志位清0,表示此tag已经不在使用中。同时,由于tag1的used标志位为0,因此,将tag1的rd标志位置1,又由于tag2的used标志位为0且enable标志位为0,因此,将tag2的rd标志位置1。后续收到cpld都将类似于s2~s3的方法执行。

s4:读完成通道会根据各自子通道的rd标志位依次触发读取子通道数据。首先,当tag1的rd标志位为1时,读完成通道1读取接收子通道模块1中缓存的数据,并将对应的rd标志位清零,当读取结束之后,将对应的enable标志位清零。当接收子通道模块1读取结束之后会以接收子通道模块2的rd标志进行触发,以此类推,并且单向循环。如图7所示。

s5:通道2和通道3接收到cpld时的处理方法和s2~s4类似。区别仅在于tag区间不同。

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