基于现场可编程逻辑阵列的读写缓存单元的方法及装置的制作方法

文档序号:6558003阅读:124来源:国知局
专利名称:基于现场可编程逻辑阵列的读写缓存单元的方法及装置的制作方法
技术领域
本发明涉及现场可编程逻辑阵列(FPGA,Field Programmable Gate Array)技术领域,特别是指基于FPGA的读写缓存单元的方法及装置。
背景技术
FPGA在处理报文时,通常对某一段时间内超过系统处理能力的报文暂存在缓存中,这样能够提高系统对突发流量的处理能力。
FPGA对分组报文按包为单位进行处理,因此在写入和读出缓存数据时需要将各个报文的数据区分开来。图1是现有的FPGA处理流程示意图。FPGA将接收到的来自上游芯片的大量数据报文先放入缓存中,之后,再从缓存中读取一个数据报文,处理完毕发送给下游芯片后,再读取下一个报文。图1中的缓存可为FPGA内部的缓存,也可以是外部的缓存单元。
一般来说,缓存接口总线位宽总是8bit或者9bit的整数倍,如果是8bit的整数倍则该缓存没有实现错误校正码(ECC,Error Correction Code)功能,如果是9bit的整数倍则该缓存实现了ECC功能。
图2所示为现有实现方式一的FPGA处理流程示意图。本实现方案中,使用FPGA内部的缓存进行读写操作。由于FPGA的内部缓存是带有ECC功能的,因此此处假设总线位宽为144bit,即9×16。又因为存储报文数据只用到其中的128bit,因此多余的16bit就可以用来区分一个报文的开始和结束即传送报文描述信息,从而使系统实现按报文进行处理。基于上述设定,FPGA的内部缓存的数据结构如表1所示。

表1FPGA写模块将待处理报文写入缓存单元的处理过程如下
写模块接收到写信号后,在写入一个报文最初的128bit数据时将“报文开始标识”置为有效;在写入一个报文最后的128bit数据后,将“报文结束标识”置为有效;重复上述步骤,继续写入下一个报文。
FPGA读模块从缓存中读取数据报文的过程如下读模块接收到读信号后开始读取缓存单元中的数据,读到“报文开始标识”有效时认为开始读取一个报文;读到“报文结束标识”时认为当前报文已经全部被读出;对读出的报文进行处理,处理完之后继续读取下一个报文。
现有实现方式一存在以下缺陷FPGA器件内部的缓存单元一般都很小,只能够存储几十个报文,因此这种设计不但过多地消耗了FPGA的内部缓存资源,而且本身实现的存储能力也非常有限,不适合于高速通信系统中的应用。
图3所示为现有实现方式二的FPGA处理流程示意图。本实现方案中,应用FPGA内部的缓存和外部的缓存单元共同实现。现在市场上的缓存单元通常为双沿数据速率采样的随机访问存储器DDRRAM(DDR,Double Data Rate;RAM,Random Access Memory),且一般的DDRRAM均不支持ECC功能,只能实现128bit(即假设为8×16)的总线位宽,这样不能够直接在此总线上实现报文描述信息的传输。本方案的实现思想是将报文数据放入DDRRAM,同时将每个报文的描述信息放入FPGA的内部缓存,FPGA根据这些描述信息对每个报文进行定界。具体实现为将DDRRAM内部划分为若干块,每块的空间大小固定,且一般要大于最大帧长16KBytes。每块空间用于存储一个完整的数据报文,DDRRAM的存储结构如图4所示。
FPGA的内部缓存的数据结构入表2所示。

表2FPGA写模块将待处理报文写入缓存单元的处理过程如下
写模块接收到写信号后,将当前报文数据直接写入DDRRAM;提取当前报文的描述信息,如长度和地址信息,写入FPGA的内部缓存;继续按上述过程进行下一个报文的写入。
FPGA读模块从缓存中读取数据报文的过程如下读模块接收到读信号后首先读取FPGA内部缓存中的长度和地址信息;按照长度和地址信息读取DDRRAM块中的报文数据;读完当前报文之后进行处理,处理完之后继续读取下一个报文。
现有实现方式二存在以下缺陷由于每个分组报文都被分成描述信息和数据两部分,且分别存储在FPGA内的缓存中和外部的缓存单元中,因此,受FPGA本身缓存大小的限制,FPGA的内部缓存只能够存储N个报文的描述信息,这样外部DDRRAM就只能被划分为N块,以保证每块对应一个报文的数据。但是实际上每个报文数据的存储是不需要如此大的块空间的,这样使得DDRRAM的很多空间被白白的浪费掉。同时使用这种方法对FPGA内部缓存资源的占用也比较多。

发明内容
有鉴于此,本发明的一个目的在于提供基于FPGA的读写缓存单元的方法,本发明的另一目的在于提供基于FPGA的读写缓存单元的装置,以摆脱FPGA内部缓存资源的限制,并充分利用外部缓存单元的存储空间。
为达到上述目的,本发明的技术方案是这样实现的一种基于FPGA的向缓存中写入数据的方法,在FPGA外部设置缓存单元,并将所述缓存单元划分为若干缓存块;该方法还包括以下步骤a、FPGA中的写模块接收到写信号后,提取待写入报文的描述信息,将该描述信息写入缓存块地址写指针当前所指的缓存块内,所述写指针地址加1;b、向当前指针所指缓存块写入报文数据,每写完一缓存块,所述写指针地址加1;c、根据描述信息判断待写入报文是否写入完毕,若是,则进入空闲状态,等到下一次接到写信号后重复执行步骤a,否则,返回步骤b。
较佳地,所述写入描述信息的缓存块与所述写入报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
较佳地,所述待写入报文的描述信息至少包括该报文长度信息。
较佳地,当所述写入描述信息的缓存块与所述写入报文数据的缓存块位于不同的缓存单元内时,所述待写入报文的描述信息还可以进一步包括地址信息。
较佳地,所述待写入报文的描述信息进一步包括序列号。
较佳地,所述步骤c是根据当前所写入报文长度信息是否等于描述信息中的报文长度信息来判断待写入报文是否写入完毕。
较佳地,所述缓存单元包括但不限于DDRRAM。
一种基于FPGA的从缓存中读出数据的方法,在FPGA外部设置缓存单元,并将所述缓存单元划分为若干缓存块;该方法还包括以下步骤A、FPGA中的读模块接收到读信号后,从缓存块地址读指针当前所指的缓存块中读取报文的描述信息,所述读读指针地址加1;B、从当前缓存块内读取报文数据,每读完一缓存块所述读指针地址加1;C、根据描述信息判断是否读取完毕,若是,则进入空闲状态,等到下一次接到读信号后重复执行步骤A,否则,返回步骤B。
较佳地,所述读出描述信息的缓存块与所述读出报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
较佳地,所述报文的描述信息至少包括报文长度信息。
较佳地,当所述读出描述信息的缓存块与所述读出报文数据的缓存块位于不同的缓存单元内时,所述报文的描述信息进一步包括地址信息。
较佳地,所述待写入报文的描述信息进一步包括序列号。
较佳地,所述从缓存块中读取描述信息后,进一步包括判断该描述信息中的序列号与前一描述信息中的序列号是否连续,若是,再执行后续步骤,否则,上报错误信息,结束本流程。
较佳地,所述步骤C是根据当前所读出报文长度信息是否等于描述信息中的报文长度信息来判断待报文数据是否读出完毕。
较佳地,所述缓存单元包括但不限于DDRRAM。
一种基于现场可编程逻辑阵列的读写缓存单元的装置,包括FPGA以及设置在FPGA外部的被划分为若干缓存块的缓存单元;
所述FPGA,用于提取待写入报文的描述信息和报文数据,并控制写指针;或者,用于提取待读入报文的描述信息和报文数据,并控制读指针;其中,在写入数据报文时,当所述的当前的缓存块写满以后,所述FPGA控制所述写指针地址加1,指向下一块待写的缓存块,直到写完一个数据报文为止;在读取数据报文时,当所述的当前的缓存块读取完毕以后,所述FPGA控制所述读指针地址加1,指向下一块待读取的缓存块,直到读取出一个完整的报文为止;所述缓存单元的缓存块用于存放描述信息和报文数据。
较佳地,所述用于存储描述信息的缓存块与用于存储报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
较佳地,所述报文的描述信息至少包括报文长度信息。
本发明的关键是,设置外部的缓存单元,将所述缓存单元划分为若干小缓存块,并将报文的描述信息和报文数据全部写入到所述缓存单元中,使得一个报文对应若干缓存块。当FPGA读取信息时,先读取报文描述信息所在缓存块,再根据得到的报文描述信息读取报文数据所在缓存块。应用本发明,由于无需使用FPGA的内部缓存单元存储报文描述信息和报文数据,因而摆脱了FPGA内部缓存资源的限制,且节省了FPGA的内部缓存,使得有限的FPGA内部缓存可以用来做其他处理。又因为将缓存单元分为较小的缓存块,因而充分利用了DDRRAM的缓存空间,提高了外部缓存单元的利用率。
再有,由于本发明采用了序列号机制检测系统异常,通过上报中断进行错误恢复,因而有较好的异常恢复能力,能够保证整个系统的可靠性。


图1是现有的FPGA处理流程示意图;图2是现有实现方式一的FPGA处理流程示意图;图3是现有实现方式二的FPGA处理流程示意图;图4是基于现有实现方式二的DDRRAM的存储结构示意图;图5是应用本发明一实施例的FPGA处理流程示意图;图6是基于图5所示实施例的DDRRAM的存储结构示意图;图7是基于图5所示实施例的向缓存单元中写入报文的流程示意图;
图8是基于图5所示实施例的从缓存单元中读出报文的流程示意图;图9是基于图5所示实施例的另一DDRRAM的存储结构示意图;图10是应用本发明另一实施例的FPGA处理流程示意图。
具体实施例方式
下面结合附图,对本发明再做进一步地详细说明。
本发明的思路是完全使用外部的缓存单元来存储报文的描述信息和报文数据,而不再占用FPGA的内部缓存来存储上述信息。
图5所示为应用本发明一实施例的FPGA处理流程示意图。本例中,只使用一个外部的缓存单元,如DDRRAM。
将所述DDRRAM划分为若干个相同大小的缓存块,每个缓存块的大小设置需要兼顾考虑缓存空间利用率和读写带宽如果每个缓存块设置太大,则缓存的空间利用率就比较低,但是读写带宽会比较大;如果每个缓存块设置太小,则缓存的空间利用率会很高,但是读写带宽会比较低。参见图6,每个报文在DDRRAM中都占用一缓存块空间用于存储报文描述信息,再占用若干缓存块空间用于存储报文数据。由于每个报文长度大小不一样,因此每个报文实际所占用缓存块的个数也不一样。
FPGA写模块将待处理报文写入缓存单元的处理过程如图7所示写模块维护一个缓存块地址写指针,系统初始化后该写指针指向第一缓存块所在的地址。
步骤701,FPGA中的写模块处于空闲状态,判断是否接收到写信号,若是,则执行步骤702,否则,重复执行步骤701。
步骤702,提取待写入报文的描述信息,将该描述信息写入指针当前所指的缓存块中;缓存块地址写指针加1。上述描述信息中包含报文长度信息。
步骤703,将报文数据写入缓存块地址指针当前所指的缓存块中,每写完一缓存块,缓存块地址写指针加1。
步骤704,判断已写入报文长度信息是否已等于从描述信息中得到的报文长度信息即实际的报文长度,也就是说判断报文是否写入完毕,若是,则进入空闲状态后,执行步骤701,否则,重复执行步骤703。
经过上述处理,可将一个报文的描述信息和报文数据全部写入到一个外部的缓存单元中。由于报文的描述信息和数据混合存储在一个缓存单元中,因此FPGA的读模块必须能够知道哪块是描述信息、哪块是实际的报文数据;这是通过FPGA读模块内部维护的缓存块地址读指针维护的,具体为系统初始化后所述读指针指向第一缓存块地址,并默认当前缓存块存储的是报文描述信息;每读出一个缓存块后所述读指针都会加1,这样当读完一个报文的描述信息和数据时所述读指针就指向了下一个报文的描述信息块所在地址,从而实现对报文进行定界。
FPGA读模块将待处理报文读出缓存单元的处理过程如图8所示读模块维护一个缓存块地址读指针,系统初始化后该读指针指向第一缓存块所在的地址。
步骤801,FPGA中的读模块处于空闲状态,判断是否接收到读信号,若是,则执行步骤802,否则,重复执行步骤801。
步骤802,从当前缓存块中读取数据,并认为该数据是描述信息,即从当前缓存块中读取报文信息,之后,缓存块地址读指针加1。该描述信息中至少包含数据报文的长度信息。
步骤803,从当前缓存块地址读指针所指的缓存块内读取数据,并认为该数据是报文的数据,即读取报文数据,每读完一缓存块,缓存块地址读指针加1。
步骤804,根据当前所读出报文长度信息是否等于描述信息中的报文长度信息判断报文数据是否读取完毕,若是,则进入空闲状态后,执行步骤801,否则,返回步骤803。
经过上述处理,实现了从外部的缓存单元读出报文。
另外,由于FPGA的读模块是需要根据描述信息块中的报文长度信息来判断是否要继续读报文数据的,因此,报文长度信息一旦出错,则FPGA读模块中维护的读指针就会出错,这样就不能够知道下一个报文的开始地址在哪里,从而造成系统发生不可恢复的错误。而在写入或者读出报文描述信息时,如果系统受到强干扰(如雷击),则很难保证报文描述信息中报文长度信息的正确性。
为了避免由于报文长度信息的错误而导致问题,可做如下处理在报文描述信息中进一步增加一序列号,此时报文描述信息包括报文长度信息和序列号两部分,参见图9。这样,FPGA的写模块在写入描述信息时,需写入报文长度信息和该报文的序列号,且两个相邻报文之间的序列号是连续的,如,后一报文可以为前一报文的序列号加一或减一等。
FPGA的读模块读取到报文描述信息后,首先判断读出的当前报文序列号和前一报文的序列号之间是否连续,若不连续,则说明读指针的位置已发生错;此时FPGA向CPU上报中断,申请对FPGA进行复位,从而使系统能够从错误中恢复出来;若连续,再继续后面的读报文数据的操作。
当然,在一块DDRRAM不够用的情况下,还可以再串另一块DDRRAM,,也就是说,从理论上讲,上述外挂的DDRRAM可以是无限大的。
图10是应用本发明另一实施例的FPGA处理流程示意图。其与图5所示实施例的区别是将两块DDRRAM并为一块缓存单元进行使用。这样,如果两块DDRRAM可以提供64bits的总线宽度,而实际存储报文数据只使用其中的32bit,那么剩下的32bit可用来存储报文的描述信息,此时该描述信息中可以仅包含报文长度信息,还可以进一步包含地址信息,所述地址信息为开始地址和结束地址,而且,该描述信息中还可以进一步包含序列号。
本发明同时还提供了一种基于现场可编程逻辑阵列的读写缓存单元的装置,该装置包括FPGA以及设置在FPGA外部的被划分为若干缓存块的缓存单元;与现有技术不同的是,该FPGA装置并不利用自身的内部缓存存储报文的描述信息和报文数据,因此,该FPGA具有的内部缓存可以很小,但是依然可以存储较多的报文,同时也不会浪费外部缓存单元的空间,利用本发明,一个具有500K左右的内部缓存的FPGA装置和一个256M的外部DDRRAM配合使用,可以最多存储多达10万个报文。
在读/写入数据时,该FPGA,用于提取待读/写入报文的描述信息,将该描述信息读/写入缓存块地址读/写指针当前所指的缓存块内,控制所述读/写指针地址加1;该FPGA,还用于向当前指针所指缓存块读/写入报文数据,每读/写完一缓存块,控制所述读/写指针地址加1;该FPGA还会根据描述信息判断待读/写入报文是否写入完毕,若读/写入完毕,进入空闲状态,等到接到下一个读/写入信号再执行写操作,若未读/写入完毕,则向下一缓存块读/写入报文数据,直到读/写完一个数据报文为止;该外部缓存单元被划分成多个缓存块,每一个缓存块的大小设置需要兼顾考虑缓存空间的利用率和读写带宽,如果块设置太大,则缓存空间的利用率会比较低,但是读写的带宽会比较大,如果块设置太小,则缓存空间的利用率会比较高,但是读写的带宽会比较低,所以,可以根据实际情况需要灵活均衡设置。同时,每个报文在外部缓存单元中都会占有一块缓存块用来存储从该FPGA接收的报文描述信息,另外需要占用若干缓存块存储报文数据,由于每个报文长度可能大小不一致,所以,每个报文所拥有的缓存块个数也可能不一致。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种基于FPGA的向缓存中写入数据的方法,其特征在于,在FPGA外部设置缓存单元,并将所述缓存单元划分为若干缓存块;该方法还包括以下步骤a、FPGA中的写模块接收到写信号后,提取待写入报文的描述信息,将该描述信息写入缓存块地址写指针当前所指的缓存块内,所述写指针地址加1;b、向当前指针所指缓存块写入报文数据,每写完一缓存块,所述写指针地址加1;c、根据描述信息判断待写入报文是否写入完毕,若是,则进入空闲状态,等到下一次接到写信号后重复执行步骤a,否则,返回步骤b。
2.根据权利要求1所述的方法,其特征在于,所述写入描述信息的缓存块与所述写入报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
3.根据权利要求2所述的方法,其特征在于,所述待写入报文的描述信息至少包括该报文长度信息。
4.根据权利要求3所述的方法,其特征在于,当所述写入描述信息的缓存块与所述写入报文数据的缓存块位于不同的缓存单元内时,所述待写入报文的描述信息还可以进一步包括地址信息。
5.根据权利要求3或4所述的方法,其特征在于,所述待写入报文的描述信息进一步包括序列号。
6.根据权利要求3或5所述的方法,其特征在于,所述步骤c是根据当前所写入报文长度信息是否等于描述信息中的报文长度信息来判断待写入报文是否写入完毕。
7.根据权利要求1或2所述的方法,其特征在于,所述缓存单元包括但不限于DDRRAM。
8.一种基于FPGA的从缓存中读出数据的方法,其特征在于,在FPGA外部设置缓存单元,并将所述缓存单元划分为若干缓存块;该方法还包括以下步骤A、FPGA中的读模块接收到读信号后,从缓存块地址读指针当前所指的缓存块中读取报文的描述信息,所述读读指针地址加1;B、从当前缓存块内读取报文数据,每读完一缓存块所述读指针地址加1;C、根据描述信息判断是否读取完毕,若是,则进入空闲状态,等到下一次接到读信号后重复执行步骤A,否则,返回步骤B。
9.根据权利要求8所述的方法,其特征在于,所述读出描述信息的缓存块与所述读出报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
10.根据权利要求9所述的方法,其特征在于,所述报文的描述信息至少包括报文长度信息。
11.根据权利要求10所述的方法,其特征在于,当所述读出描述信息的缓存块与所述读出报文数据的缓存块位于不同的缓存单元内时,所述报文的描述信息进一步包括地址信息。
12.根据权利要求10或11所述的方法,其特征在于,所述待写入报文的描述信息进一步包括序列号。
13.根据权利要求12所述的方法,其特征在于,所述从缓存块中读取描述信息后,进一步包括判断该描述信息中的序列号与前一描述信息中的序列号是否连续,若是,再执行后续步骤,否则,上报错误信息,结束本流程。
14.根据权利要求10或12所述的方法,其特征在于,所述步骤C是根据当前所读出报文长度信息是否等于描述信息中的报文长度信息来判断待报文数据是否读出完毕。
15.根据权利要求8、或9所述的方法,其特征在于,所述缓存单元包括但不限于DDRRAM。
16.一种基于现场可编程逻辑阵列的读写缓存单元的装置,其特征在于,该装置包括FPGA以及设置在FPGA外部的被划分为若干缓存块的缓存单元;所述FPGA,用于提取待写入报文的描述信息和报文数据,并控制写指针;或者,用于提取待读入报文的描述信息和报文数据,并控制读指针;其中,在写入数据报文时,当所述的当前的缓存块写满以后,所述FPGA控制所述写指针地址加1,指向下一块待写的缓存块,直到写完一个数据报文为止;在读取数据报文时,当所述的当前的缓存块读取完毕以后,所述FPGA控制所述读指针地址加1,指向下一块待读取的缓存块,直到读取出一个完整的报文为止;所述缓存单元的缓存块用于存放描述信息和报文数据。
17.根据权利要求16所述的装置,其特征在于,所述用于存储描述信息的缓存块与用于存储报文数据的缓存块位于同一缓存单元内,或不同的缓存单元内。
18.根据权利要求17所述的装置,其特征在于,所述报文的描述信息至少包括报文长度信息。
全文摘要
本发明公开了基于FPGA的读写缓存单元的方法及装置,其关键是,设置外部的缓存单元,将所述缓存单元划分为若干小缓存块,并将报文的描述信息和报文数据全部写入到所述缓存单元中,使得一个报文对应若干缓存块。当FPGA读取信息时,先读取报文描述信息所在缓存块,再根据得到的报文描述信息读取报文数据所在缓存块。应用本发明,由于无需使用FPGA的内部缓存单元存储报文描述信息和报文数据,因而摆脱了FPGA内部缓存资源的限制,且节省了FPGA的内部缓存,使得有限的FPGA内部缓存可以用来做其他处理。又因为将缓存单元分为较小的缓存块,因而充分利用了DDRRAM的缓存空间,提高了外部缓存单元的利用率。
文档编号G06F12/08GK1870593SQ20061007319
公开日2006年11月29日 申请日期2006年4月12日 优先权日2006年4月12日
发明者解叶军, 刘强 申请人:杭州华为三康技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1