一种现场可编程门阵列fpga及数据存储方法

文档序号:9399131阅读:269来源:国知局
一种现场可编程门阵列fpga及数据存储方法
【技术领域】
[0001]本发明涉及通信技术领域,特别涉及一种FPGA及数据存储方法。
【背景技术】
[0002]流级统计是流量分析里的重要部分,用于监测网络上的数据报文的数目、错包数、抖动、延迟、速率等一系列特征。数据报文发起以后,经路由器进行转发,以太网测试仪表对路由器转发的数据报文进行分析,以达到测试路由转发性能的目的,如图1所示。
[0003]目前,以太网端口已具备10Gbps甚至400Gbps的小字节(64Bytes)线速的处理能力,通用CPU (Central Processing Unit,中央处理单元)硬件无法匹配如此高的端口速率,也无法满足测试要求,因此,业界一般采用专用硬件FPGA (Field — Programmable GateArray,现场可编程门阵)实现高速、高精确度、高实时性的统计。
[0004]现有技术中,通常采用FPGA内部的BLOCK RAM或者REGISTER资源实现数据报文的流级统计,如果需统计的流级用户数较多,通常在FPGA外部连接存储器,如(SRAM (StaticRandom Access Memory,静态随机存取存储器)、DRAM (Dynamic Random Access Memory,动态随机存取存储器)等,采用“寻址+累加+存储”的方式进行统计,但其支持的流级统计速率和流级用户数之间无法平衡,如支持的流级统计速率高但流级用户数较少,或支持的流级用户数多但流级统计速率低。

【发明内容】

[0005]本发明实施例提供一种FPGA及数据存储方法,用以解决现有技术中存在的流级统计过程中支持的流级用户数和流级速率之间无法平衡的缺陷,即若支持的流级用户数较大时,流级统计速率较低;若支持的流级统计速率较高时,流级用户数较少。
[0006]第一方面,提供一种现场可编程门阵列FPGA,包括:
[0007]第一流级统计模块,用于在属于一级缓存的第一缓存中查找接收到的数据报文所属数据流的第一当前流级统计值,并根据所述第一当前流级统计值计算所述数据流的第一更新流级统计值;
[0008]溢出判断模块,用于判断将所述第一更新流级统计值存储到所述第一缓存中时是否溢出,并在判断结果为否时,将所述第一更新流级统计值替换所述第一缓存中存储的第一当前流级统计值;
[0009]第二流级统计模块,用于在所述溢出判断模块的判断结果为是时,根据所述第一更新流级统计值计算第二更新流级统计值,并将所述第二更新流级统计值存储至属于二级缓存的第二缓存中;
[0010]所述第一缓存的位宽小于所述第二缓存的位宽。
[0011]结合第一方面,在第一种可能的实现方式中,所述第一流级统计模块根据所述第一当前流级统计值计算所述数据流的第一更新流级统计值时,具体用于:
[0012]将所述第一当前流级统计值加I之和,作为所述第一更新流级统计值;或
[0013]确定属于所述数据流的未统计的数据报文的数量,将所述第一当前流级统计值与所述未统计的数据报文的数量之和,作为所述第一更新流级统计值。
[0014]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一流级统计模块还用于:
[0015]确定与接收到的数据报文所属的数据流所对应的缓存标识ID ;
[0016]将与所述缓存ID对应的缓存作为所述第一缓存。
[0017]结合第一方面,或者第一方面的第一种至第二种可能的实现方式,在第三种可能的实现方式中,所述第二流级统计模块,具体用于:
[0018]确定存在与所述数据流所对应的第二缓存,将所述第二缓存当前存储的数值作为第二当前流级统计值;
[0019]将所述第二当前流级统计值和所述第一更新流级统计值之和,作为所述第二更新流级统计值;
[0020]将所述第二更新流级统计值替换所述第二缓存中存储的第二当前流级统计值。
[0021]结合第一方面,或者第一方面的第一种至第二种可能的实现方式,在第四种可能的实现方式中,所述第二流级统计模块,具体用于:
[0022]在确定不存在与所述数据流所对应的第二缓存时,将所述第一更新流级统计值作为所述第二更新流级统计值;并添加与所述数据流对应的第二缓存,将所述第二更新流级统计值存储到所述第二缓存中。
[0023]结合第一方面,或者第一方面的第一种至第四种可能的实现方式,在第五种可能的实现方式中,还包括:
[0024]控制器,用于在确定满足预设条件时,针对所述数据流,将所述第一缓存和所述第二缓存中针对所述数据流的所有流级统计值之和,作为针对所述数据流的流级总统计值;
[0025]刷新模块,用于根据所述流级总统计值对动态随机存取存储器RAM中存储的针对所述数据流的流级统计值进行更新。
[0026]结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述刷新模块,具体用于:
[0027]确定所述动态RAM中针对所述数据流的第三当前流级统计值;
[0028]计算所述流级总统计值和所述第三当前流级统计值之和;
[0029]将所述动态RAM中存储的针对所述数据流的所述第三当前流级统计值用所述流级总统计值和所述第三当前流级统计值之和替换。
[0030]结合第一方面的第五种或者第六种可能的实现方式,在第七种可能的实现方式中,所述控制器,还用于在得到流级总统计值之后,将所述第一缓存和所述第二缓存的数值设置为O。
[0031]结合第一方面,或者第一方面的第一种至第四种可能的实现方式,在第八种可能的实现方式中,还包括:
[0032]随机存储存储器RAM读写调度模块,用于在确定满足预设条件时,从动态RAM中连续读取针对至少两个数据流分别对应的当前流级统计值;
[0033]流水线累加模块,用于针对所述至少两个当前流级统计值中的任意一当前流级统计值,确定包括所述第一缓存的一级缓存中与所述任意一当前流级统计值对应相同数据流的第一流级统计值,及包括所述第二缓存的二级缓存中与所述任意一当前流级统计值对应相同数据流的第二流级统计值,基于所述任意一当前流级统计值、所述第一流级统计值和所述第二流级次数之和,对所述任意一当前流级统计值进行更新;
[0034]所述RAM读写调度模块还用于,将所有更新后的流级统计值连续写入所述动态RAM0
[0035]结合第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述RAM读写调度模块,还用于在将所有更新后的流级统计值连续写入所述动态RAM之后,将所述一级缓存中存储与所述任意一当前流级统计值对应相同数据流的第一流级统计值的缓存,及所述二级缓存中存储与所述任意一当前流级统计值对应相同数据流的第二流级统计值的缓存的数值均设置为O。
[0036]结合第一方面的第五种至第九种可能的实现方式,在第十种可能的实现方式中,所述预设条件包括下述条件中的至少一个:
[0037]到达更新周期时间点、与所述第二流级统计模块对应的任意一缓存的位宽达到预设门限值、与所述与第一流级统计模块对应的所有缓存的数量达到预设门限值。
[0038]第二方面,提供一种数据存储方法,包括:
[0039]第一流级统计模块在属于一级缓存的第一缓存中查找接收到的数据报文所属数据流的第一当前流级统计值,并根据所述第一当前流级统计值计算所述数据流的第一更新流级统计值;
[0040]溢出判断模块判断将所述第一更新流级统计值存储到所述第一缓存中时是否溢出,并在判断结果为否时,将所述第一更新流级统计值替换所述第一缓存中存储的第一当前流级统计值;
[0041]第二流级统计模块在所述溢出判断模块的判断结果为是时,根据所述第一更新流级统计值计算第二更新流级统计值,并将所述第二更新流级统计值存储至属于二级缓存的第二缓存中;
[0042]所述第一缓存的位宽小于所述第二缓存的位宽。
[0043]结合第二方面,在第一种可能的实现方式中,所述第一流级统计模块根据所述第一当前流级统计值计算所述数据流的第一更新流级统计值时,具体为:
[0044]将所述第一当前流级统计值加I之和,作为所述第一更新流级统计值;或
[0045]确定属于所述数据流的未统计的数据报文的数量,将所述第一当前流级统计值与所述未统计的数据报文的数量之和,作为所述第一更新流级统计值。
[0046]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述第一流级统计模块在属于一级缓存的第一缓存中查找接收到的数据报文所属数据流的第一当前流级统计值之前,还执行如下操作:
[0047]确定与接收到的数据报文所属的数据流所对应的缓存标识ID ;
[0048]将与所述缓存ID对应的缓存作为所述第一缓存。
[0049]结合第二方面,或者第二方面的第一种至第二种可能的实现方式,在第三种可能的实现方式中,所述第二流级统计模块根据所述第一更新流级统计值计算第二更新流级统计值时,具体为:
[0050]确定存在与所述数据流所对应的第二缓存,将所述第二缓存当前存储的数值作为第二
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1