网络信息交换中多端口收发包数统计方法 技术领域:
本发明涉及一种在网络信息交换中对多端口的收发包数进行统计计数的方法,尤其涉及在网络处理器与接口芯片对接时需要现场可编程门阵列电路FPGA(Field Programmable Gate Array)进行总线转换时对多端口的收发包数进行统计计数的方法。
背景技术:
目前大多数的网络处理器的总线接口并没有形成统一的规范,这样在与接口芯片对接的时候免不了要进行总线转换。例如INTEL公司的网络处理器IXP1200有自己的总线规范IXBUS,而下一代处理器IXP2400的总线接口又改为POSPHY总线接口。而10/100M以太网接口芯片虽然有一些芯片支持上述总线,如IXF400支持IXBUS。但是由于芯片本身的设计,在对接端口数目超过八个以上时,一些指标并不能很好的满足要求,如错包过多。
图1给出现有技术中网络处理器与十六路以太网对接的技术方案。其中网络处理器101用于进行包处理,可编程逻辑器件FPGA102用于总线转换,以太网控制器MAC103用于将物理帧进行缓存并上传,以太网物理层芯片PHY104用于完成从物理层信号将物理帧提取出来的功能。
PHY将十六路以太网信号接入进来,通过RMII总线接口或MII总线接口与MAC对接。MAC汇聚16路以太网到一路总线接口与FPGA对接,IXFF440是IXBUS总线接口。FPGA内部将这一路总线接口转换成网络处理器适用的总线。在FPGA处,可以进行一定数量的包缓存,以补充MAC层缓冲能力不足的缺点。
在FPGA处需要对十六个端口进行包数统计,包括包个数计数,包长度的分类计数以及错误包分类计数。例如,针对错误类型进行计数,错误类型分为四种a、b、c、d,传统计数模式如图2所示。计数模块201、202、203和204分别是a类,b类,c类,d类错误地计数单元。译码器205根据输入的计数类型信号译出四个计数器的允许计数信号。每一个包处理完毕,均会发出允许计数信号和计数类型信号,此时由译码器进行统一译码或分别译码,产生出各自类型的允许计数信号,每个计数器均根据允许计数信号进行计数。
图3给出了一个三十二位计数器的基本模型。标号301是加法器,标号302是触发器,Cnt[31:0]和计数允许位相加,在每个时钟CLK的上升沿,输出一次更新Cnt[31:0]。在这个三十二位计数器的模型中,使用了三十二个D触发器资源。如果一个FPGA设计中需要对于十六个通道的四种错误类型进行统计,每种错误类型有八种错误,那么需要16×4×8×32=16384个触发器的资源。这些资源是进行总线转换而消耗的资源,这就必须选择价格更高的FPGA,增加了成本。由于是针对数据包进行的统计,包与包之间有一定间隙,也就是说计数并不是连续加1,而是几个时钟才加1。现有技术中空操作太多,资源浪费大;FPGA内部的资源主要是LUT(查找表),触发器,RAM三种资源。而RAM资源,特别是RAM块资源在一般的设计中,均不会被全部用掉。在现有技术的总线转换应用中未使用的RAM块被无谓浪费掉。
发明内容:
本发明的目的是为了克服现有技术中统计消耗和闲置资源过多,造成统计成本过高的不足之处,提出一种增强硬件资源利用,提高工作效率、降低成本的方法。在综合考虑FPGA资源情况后,给出了一种可以有效节约触发器资源的方法。
本发明的基本设想就是用RAM资源代替触发器资源保存计数器的计数值,从而达到减少统计消耗触发器过多的问题。最终,可以达到用几个RAM块资源来代替大量消耗的触发器资源,达到只用价格较低的FPGA器件即可以完成设计的目的,从而降低成本。
本发明的目的可以采用以下措施来达到:
设计、采用一种网络信息交换中多端口收发包数统计方法,使用现场可编程门阵列电路FPGA在总线转换过程中进行包缓存与分类计数;在所述FPGA内部设置随机存储器RAM;其特征在于:采用FPGA中的RAM存放分类计数的结果。
按照本发明的设计进行比较,用XILING公司的XC2V2000FF896-4芯片作为硬件,并且用与之配套的ISE4.2软件进行编译。原有设计需要16384个触发器占76%的触发器资源。现在的设计只用不到200个触发器和2个RAM块,分别占用0.93%的触发器资源和3.5%的RAM块资源。通过比较,发现采用本专利方法可以大大节省资源。最后选用XLINIX公司的XC2V1000FF896-4就完成了原先的设计任务,FPGA的成本节省了一半。当端口过多的时候,使用本方法可以有效的节省内部的触发器资源。
附图说明:
图1是网络处理器与以太网对接的方案示意图;
图2是传统收发包计数方案示意图;
图3是32位计数器的基本组成方式示意图;
图4是本发明网络信息交换中多端口收发包计数器方案示意图;
图5是核心状态机的流程图;
图6是基于本发明的一种十六端口计数器的结构示意图。
具体实施方式:以下结合附图详述本发明的实施例。
一种网络信息交换中多端口收发包数统计方法,使用现场可编程门阵列电路FPGA在总线转换过程中进行包缓存与分类计数;在所述FPGA内部设置随机存储器RAM;其特征在于:采用FPGA中的RAM存放分类计数的结果。
所采用的FPGA中的RAM既可以是集中式随机存储器(Block RAM),也可以是分布式随机存储器(Distributed RAM)。
将总线转换过程中产生的计数允许信号和计数类型信号翻译为RAM地址码,并将该允许信号进行锁存;
所述RAM的地址码指向当前需要计数的类型的状态缓冲区。
设置CPU接口读取所述统计值;
所述CPU接口对统计值的读取与所述计数操作同时进行;
所述CPU接口的读信号与所述地址信号被分别锁存,且所述地址信号被转换为RAM所需要的地址。CPU接口中读取计数结果的地址段与计数结果存放地(RAM)的地址段一一对应,CPU读取时进行地址转换。
本方法设置选择状态机,分别接收译码器的计数允许信息和CPU接口的读允许信息;
所述选择状态机又分别控制计数器,锁存器和所述FPGA中的RAM。
所述统计方法设置的选择状态机具有以下工作步骤:
S1、复位并将所述RAM清零;
S2、判断CPU接口是否进行读取;若未读取,转执行步骤S4;
S3、读取RAM中的数据并锁存;清除CPU的读取标志,然后执行S2;
S4、转换过程中产生的计数允许信号判断是否需要计数,若不需要计数,则转执行步骤S2;
S5、从RAM中读取数据,即原计数结果;
S6、将上述读出的数据加1后再存回RAM中;
清除本次计数标志,转执行步骤S2。
以下对技术方案进行描述:
本发明所述基于RAM的计数器的结构如图4所示。其中:
译码器401根据计数允许信号,将当前需要计数的类型翻译成RAM地址。
核心状态机402统一调配当前操作是完成CPU读数还是进行计数。
一个RAM 403用于保留计数状态,可以存放计数值。
CPU接口404用于通过CPU接口读取统计值。
锁存器器405根据状态机402提供的信号锁存RAM送出来的数据,以便CPU接口读取。
计数器406根据状态机402提供的信号将RAM送出来的数据加1后再送入RAM中。
本发明所述的基于RAM的计数器的操作流程如下:
首先,从总线转换过来的计数允许信号和计数类型信号被翻译成RAM的地址,而且将允许信号进行锁存。RAM的地址指向当前需要进行计数的类型的状态缓冲区。例如根据a、b、c、d四种类型应该译出四个地址。
因为计数状态值肯定是要被读取出来,所以必须考虑CPU接口读取数据与计数同时进行的问题。这里CPU接口过来的读信号与地址信号分别被锁存下来,地址信号要被转换成RAM所需要的地址。
以上是预处理过程,现结合图5,从状态机402的角度继续介绍流程。
1).上电复位完毕之后,首先需要将RAM的值清零。
2).然后判断CPU接口是否进行读取,如果读取,继续。没有读取,跳到第4)步。
3).从RAM中读取数据。
锁存当前数据,供给CPU接口完成读取操作。清除CPU读取标志,返回到第2)步。
4).判断是否进行计数,如果计数,继续。没有计数,返回到第2)步。
5).从RAM中读取数据。
6).将数据加1;
将计算后的数据存入RAM中。清除这次计数标志,返回到第2)步。
其中RAM可以根据要求选择使用FPGA内部的Block Ram或DistributedRam。
下面结合图6详细说明如何对十六个端口的以太网帧进行两种类型的计数,每种类型有细分为八种类型。由于以太网帧要求间距是96bit时间,所以完全符合将并行计数转换到串行计数的原则。可编程器件选用XILINX公司的VirtexII系列的XC2V2000。RAM块使用内部的Block Ram,设置为512×32方式,双口RAM,两套数据线。
十六路的译码器601和602完成对于十六个端口送过来的计数允许和计数类型进行译码,转换成RAM地址。
CPU接口603用于读取计数状态值。
状态机604,其内部分别对两种类型进行调度。每一种计数类型下,各个端口和CPU接口相互轮循,由状态机选择当前是谁可以进行读写操作。而且每次读写操作均只能用两个时钟周期。
双口RAM605共有两套地址总线和两套数据总线。
计数器606和607分别对a端口和b端口的数据进行计数。
锁存器608用以锁存数据给CPU接口完成读写操作。
状态机的调度同图5所述相似,只不过轮循端口增多。