中兴通讯股份有限公司 (中国广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦, Guangdong 7, 518057, CN)
| 权利要求书 1、 一种数据包的计数方法, 其特征在于, 该方法包括: 当低位计数器为计数状态时, 对包脉冲信号进行计数, 当所述低位计 数器计满时, 发出进位信号; 从发出进位信号的低位计数器对应的 RAM的地址中获取数据,将所述 数据加 1后再写入所述地址。 2、 根据权利要求 1所述的方法, 其特征在于, 所述当低位计数器为计 数状态时, 对包脉冲信号进行计数之前, 该方法还包括: 根据数据包产生包脉冲信号。 3、 根据权利要求 2所述的方法, 其特征在于, 所述根据数据包产生包 脉冲信号为: 数据通道接口接收与其相连的数据仪表发送的数据包, 根据通道号和 数据包的类型产生多种包脉冲信号, 将所述包脉冲信号发送给通道。 4、 根据权利要求 1所述的方法, 其特征在于, 该方法还包括: 当低位计数器为清零状态时, 对低位计数器的数据清零; 计算通道中 所有低位计数器对应的 RAM的地址, 将所述地址中的数据清零。 5、 根据权利要求 4所述的方法, 其特征在于, 所述当低位计数器为清 零状态时, 对低位计数器的数据清零; 计算通道中所有低位计数器对应的 RAM的地址, 将所述地址中的数据清零为: 当低位计数器是清零状态时, 将自身的数据置为 0; 按轮巡方式轮巡到 有低位计数器是清零状态的通道时, 根据通道号和数据包的类型计算通道 内所有低位计数器对应的 RAM的地址, 并发送给状态机; 状态机将所述地 址中的数据置为 0。 6、 根据权利要求 1所述的方法, 其特征在于, 所述从发出进位信号的 低位计数器对应的 RAM的地址中获取数据,将所述数据加 1后再写入所述 地址之前还包括: 按轮巡方式轮巡到发出进位信号的低位计数器所在的通道时, 根据通 道号和数据包的类型计算低位计数器对应的 RAM 的地址, 将计算出的 RAM的地址发送给状态机。 7、 根据权利要求 1所述的方法, 其特征在于, 所述当低位计数器为计 数状态时, 对包脉冲信号进行计数, 当所述低位计数器计满时, 发出进位 信号为: 通道中的每个低位的计数器根据包头识别各自计数的包脉冲信号, 并 对各自的包脉冲信号进行计数, 当低位计数器计满时, 发出用于发出进位 请求的进位信号。 8、 根据权利要求 1至 7任一项所述的方法, 其特征在于, 所述从发出 进位信号的低位计数器对应的 RAM 的地址中获取数据, 将所述数据加 1 后再写入所述地址为: 状态机收到 RAM的地址后,发送给所述 RAM写使能脉冲信号, RAM 在下一个时钟的上升沿来临时, 输出自身所述地址存储的数据给状态机, 状态机将该数据加 1后发送给 RAM进行保存; 状态机完成进位工作后,将 自身的状态置为读写 RAM结束状态。 9、 根据权利要求 1至 7任一项所述的方法, 其特征在于, 所述将所述 数据加 1后再写入所述地址之后, 该方法还包括: 清除所述低位计数器的进位信号。 10、 根据权利要求 9所述的方法, 其特征在于, 所述清除所述低位计 数器的进位信号为: 状态机将自身的状态置为读写 RAM结束状态后,触发进位清除模块开 始工作, 所述进位清除模块根据该通道的通道号和发出进位信号的低位计 数器对应的数据包的类型, 产生进位清除脉冲, 并发送给状态机, 状态机 对产生进位信号的低位计数器的进位信号进行清除。 11、 一种数据包的计数系统, 其特征在于, 该系统包括: 低位计数器、 状态机、 RAM; 其中, 低位计数器, 用于当自身为计数状态时, 对包脉冲信号进行计数, 当 计满时, 发出进位信号; 状态机,用于从发出进位信号的低位计数器对应的 RAM的地址中获取 数据, 将所述数据加 1后再写入所述地址; RAM, 用于为状态机提供自身的数据, 并保存状态机写入的数据。 12、 根据权利要求 11所述的系统, 其特征在于, 该系统进一步包括: 数据通道接口, 用于根据数据包产生包脉冲信号; 和 /或, 轮巡算法模块, 用于对通道进行轮巡, 当轮巡到有低位计数器是清零 状态或发出进位信号的通道时, 触发地址运算模块; 地址运算模块, 用于 当受到轮巡算法模块触发时, 根据通道号和数据包的类型计算低位计数器 对应的 RAM的地址, 并发送给状态机; 和 /或, 进位清除模块, 用于受到状态机的触发时根据通道的通道号和发出进 位信号的低位计数器对应的数据包的类型, 产生进位清除脉冲, 并发送给 状态机。 13、 根据权利要求 11或 12所述的系统, 其特征在于, 所述低位计数器还用于, 当自身为清零状态时, 对自身的数据清零; 所述状态机还用于, 将地址运算模块发送的 RAM 的地址中的数据清 |
本发明涉及网络系统领域中的网络信息管理技 术, 尤其涉及一种数据 包的计数方法及系统。 背景技术
在多通道的网络系统中, 为了排除其中某个通道的故障, 或者进行网 络系统中数据流的计费, 都需要对数据包进行分类, 并在此基础上分别统 计网络系统的通道中各种类型的数据包的发送 和接收的数量。
现有技术中, 通常釆用两种方法计算网络系统中数据包的数 量。 第一 种方法是利用寄存器实现的, 例如, 网络系统中有 n个通道, 每个通道有 m种数据包, 每种数据包都需要一个 k位的计数器, 因为一个 k位的寄存 器可以实现一个 k位的二进制计数器, 因此至少需要占用 n*m*k个寄存器 才能实现数据包的计数; 此外, 每个计数器都要具备清零功能, 因为每一 个带清零功能的计数器都需要一个查找表(LUT , Look-Up-Table ), 所以 就还需要 n*m*k个 LUT, 寄存器和查找表都属于逻辑资源, 用于进行逻辑 运算。 第二种方法是利用随机存取存储器(RAM, Random Access Memory ) 实现的, 当有某种类型的数据包到达数据包的监控系统 , 并产生数据包的 计数脉冲, 该监控系统从 RAM对应的地址中读出计数器的值后,对该值加 1然后写入 RAM。 第一种实现方法的优点是计数的速度快, 缺点是如果对 多个通道和多种数据包进行计数, 因为使用了较多的计数器和查找表, 从 而占用大量逻辑资源。 第二种实现方法的优点是占用较少的寄存器资 源, 但是由于读写 RAM至少需要 3个时钟周期, 所以如果计数脉冲密集, 计数 器的运算速度将不能满足高速技术的需求。 申请号为 03132077.5 , 发明名称为网络信息交换中多端口收发包数统 计方法的专利申请中, 提出一种数据包的计数方法, 使用现场可编程门阵 列 (FPGA, Field—Programmable Gate Array )在总线转换过程中进行包緩 存与分类计数;在所述 FPGA内部设置 RAM;尤其是釆用 FPGA中的 RAM 存放分类计数的结果。这种方法利用 RAM资源代替触发器资源保存计数器 的计数值, 可以减少统计消耗触发器过多的问题, 从而降低成本。 但是这 个方法存在两个缺陷: 其一是只利用 RAM实现计数, 而 RAM的数据读出 再写入至少需要 3个时钟周期, 该专利的应用场合是要求在 96个时钟周期 内, 因此需要统计的数据包的个数不能超过 32个, 否则将没有足够的时间 进行处理, 因此具有很大的局限性; 其二是虽然该方法针对多个通道的数 据包可以同时计数, 但是无法对单个通道的计数器进行清零, 如果某个通 道需要重新开始计数, 只能对整个系统复位, 因此降低了系统的灵活性。 发明内容
有鉴于此, 本发明的主要目的在于提供一种数据包的计数 方法及系统, 在降低逻辑资源使用率的同时高速的完成网络 中数据包数量的计算工作。
为达到上述目的, 本发明的技术方案是这样实现的:
本发明提供一种数据包的计数方法, 包括:
当低位计数器为计数状态时, 对包脉冲信号进行计数, 当所述低位计 数器计满时, 发出进位信号;
从发出进位信号的低位计数器对应的 RAM的地址中获取数据,将所述 数据加 1后再写入所述地址。
上述方法中, 所述当低位计数器为计数状态时, 对包脉冲信号进行计 数之前, 该方法还包括:
根据数据包产生包脉冲信号。
上述方法中, 所述根据数据包产生包脉冲信号为: 数据通道接口接收与其相连的数据仪表发送的 数据包, 根据通道号和 数据包的类型产生多种包脉冲信号, 将所述包脉冲信号发送给通道。
上述方法中, 该方法还包括:
当低位计数器为清零状态时, 对低位计数器的数据清零; 计算通道中 所有低位计数器对应的 RAM的地址, 将所述地址中的数据清零。
上述方法中, 所述当低位计数器为清零状态时, 对低位计数器的数据 清零; 计算通道中所有低位计数器对应的 RAM的地址,将所述地址中的数 据清零为:
当低位计数器是清零状态时, 将自身的数据置为 0; 按轮巡方式轮巡到 有低位计数器是清零状态的通道时, 根据通道号和数据包的类型计算通道 内所有低位计数器对应的 RAM的地址, 并发送给状态机; 状态机将所述地 址中的数据置为 0。
上述方法中,所述从发出进位信号的低位计数 器对应的 RAM的地址中 获取数据, 将所述数据加 1后再写入所述地址之前还包括:
按轮巡方式轮巡到发出进位信号的低位计数器 所在的通道时, 根据通 道号和数据包的类型计算低位计数器对应的 RAM 的地址, 将计算出的 RAM的地址发送给状态机。
上述方法中, 所述当低位计数器为计数状态时, 对包脉冲信号进行计 数, 当所述低位计数器计满时, 发出进位信号为:
通道中的每个低位的计数器根据包头识别各自 计数的包脉冲信号, 并 对各自的包脉冲信号进行计数, 当低位计数器计满时, 发出用于发出进位 请求的进位信号。
上述方法中,所述从发出进位信号的低位计数 器对应的 RAM的地址中 获取数据, 将所述数据加 1后再写入所述地址为:
状态机收到 RAM的地址后,发送给所述 RAM写使能脉冲信号, RAM 在下一个时钟的上升沿来临时, 输出自身所述地址存储的数据给状态机, 状态机将该数据加 1后发送给 RAM进行保存; 状态机完成进位工作后,将 自身的状态置为读写 RAM结束状态。
上述方法中, 所述将所述数据加 1 后再写入所述地址之后, 该方法还 包括:
清除所述低位计数器的进位信号。
上述方法中, 所述清除所述低位计数器的进位信号为:
状态机将自身的状态置为读写 RAM结束状态后,触发进位清除模块开 始工作, 所述进位清除模块根据该通道的通道号和发出 进位信号的低位计 数器对应的数据包的类型, 产生进位清除脉冲, 并发送给状态机, 状态机 对产生进位信号的低位计数器的进位信号进行 清除。
本发明还提供一种数据包的计数系统, 包括: 低位计数器、 状态机、 RAM; 其中,
低位计数器, 用于当自身为计数状态时, 对包脉冲信号进行计数, 当 计满时, 发出进位信号;
状态机,用于从发出进位信号的低位计数器对 应的 RAM的地址中获取 数据, 将所述数据加 1后再写入所述地址;
RAM, 用于为状态机提供自身的数据, 并保存状态机写入的数据。 上述系统中, 该系统进一步包括:
数据通道接口, 用于根据数据包产生包脉冲信号; 和 /或,
轮巡算法模块, 用于对通道进行轮巡, 当轮巡到有低位计数器是清零 状态或发出进位信号的通道时, 触发地址运算模块; 地址运算模块, 用于 当受到轮巡算法模块触发时, 根据通道号和数据包的类型计算低位计数器 对应的 RAM的地址, 并发送给状态机; 和 /或,
进位清除模块, 用于受到状态机的触发时根据通道的通道号和 发出进 位信号的低位计数器对应的数据包的类型, 产生进位清除脉冲, 并发送给 状态机。
上述系统中, 所述低位计数器还用于, 当自身为清零状态时, 对自身 的数据清零;
所述状态机还用于, 将地址运算模块发送的 RAM 的地址中的数据清 本发明提供的数据包的计数方法及系统, 计数器对包脉冲信号进行计 数,计满时发出进位信号,将发出进位信号的 计数器对应的 RAM的地址中 的数据加 1 ; 利用将寄存器和 RAM结合的方法对网络中数据包进行计数, 达到了高速的计算速度, 使得计算速度接近完全利用寄存器实现的计数 速 度, 同时降低了逻辑资源使用率, 与单独使用寄存器进行计数的方法相比, 节省了大量的逻辑资源; 此外, 在不影响其它通道计数的同时, 可以实现 对某一通道的计数器清零, 提高了系统的灵活性。 附图说明
图 1是本发明实现数据包的计数方法的流程示意 ;
图 2是本发明实现数据包的计数系统的结构示意 ; 具体实施方式
本发明的基本思想是: 当低位计数器为计数状态时,对包脉冲信号进 行计数, 当所述低位计数器计满时, 发出进位信号; 从发出进位信号的 低位计数器对应的 RAM的地址中获取数据, 将所述数据加 1后再写入 所述地址。
下面通过附图及具体实施例对本发明再做进一 步的详细说明。
本发明提供一种数据包的计数方法, 图 1 是本发明实现数据包的计数 方法的流程示意图, 如图 1所示, 该方法包括以下步骤: 步骤 101 , 根据数据包产生包脉冲信号;
具体的, 数据通道接口的一侧连接具有收发数据包功能 的数据仪表, 接收数据仪表发送的数据包; 数据通道接口的另一侧与多个通道连接, 每 个通道中存在多种类型的数据包, 每个通道中的每种数据包都配有一个二 进制计数器进行计数; 数据通道接口根据通道号和数据包的类型产生 多种 包脉冲信号, 并将每种包脉冲信号发送给对应的通道。
步骤 102, 低位计数器接收包脉冲信号, 并判断自身的状态, 如果是计 数状态, 就执行步骤 103 , 如果是清零状态, 就执行步骤 108;
具体的, 存在 n个通道, 每个通道有 m种数据包, 每种数据包都需要 一个 k位的二进制计数器进行计数, n*m个 i位寄存器作为 k位的二进制计 数器的低 i位的计数器, 称为低位计数器; 位宽为 j且深度为 n*m的 RAM 作为 k位二进制计数器的高 j位的计数器, 且 i+j=k, 每个 RAM的地址与 一个低 i位的计数器对应; 其中, i的值根据通道的数量和数据包的种类而 定, 当通道的数量较多或者数据包的种类较多时, i的值可以取的大一些, 这样低 i位的计数器发出进位信号的频率会降低,就 足够的时间处理进位 信号; 如果通道的数量较少或者数据包的种类较少时 , i的值可以取的小一 些; 低 i位的计数器和 RAM都通过信息交互接口与交换机的 CPU相连, 便于读取低位计数器的数据和 RAM的数据;
CPU通过信息交互接口, 对低位计数器的状态进行配置, 信息交互接 口中有多个寄存器, 每个寄存器对应一个通道中的所有低位计数器 , CPU 根据当前需求对每个寄存器的值进行设置, 例如, 当需要进行对某一通道 中包脉冲信号中的数据包进行计数时, 将寄存器的值设置为 1 ,表示该寄存 器对应的所有的低位计数器的状态为计数状态 ; 当对包脉冲信号中数据包 计数完毕时, 可以读取低位计数器的数据和 RAM的数据, 读取完数据, 就 可以对低位计数器和 RAM进行清零, 以便低位计数器和 RAM可以继续计 数, 此时将寄存器的值设置为 0, 表示低位计数器的状态为清零状态; 通道 中的低位计数器接收数据通道接口发送的包脉 冲信号, 低位计数器通过读 取信息交互接口中对应的寄存器的值判断自身 的状态, 如果是计数状态, 就执行步骤 103 , 如果是清零状态, 就执行步骤 108。
步骤 103,低位计数器对包脉冲信号进行计数,当计 满时发出进位信号; 具体的,通道中的每个 k位的二进制计数器的低 i位的计数器根据包头 识别各自计数的包脉冲信号, 并对各自的包脉冲信号进行计数; 当低位计 数器计满时发出进位信号, 即可以将 FPGA内部的触发器的值置为 1 ,表示 进位信号有效, 发出进位信号相当于向轮巡算法模块发出进位 请求; 发出 的进位信号同时可以触发状态机, 使其进入准备工作状态; 例如, 如果 k 位的二进制计数器的低 4位的计数器对包脉冲信号进行计数, 当低 4位的 计数器的值是 1111时, 如果再有包脉冲信号, 该计数器就会加 1然后变成 0000, 这时表示低 4位的计数器已经计满, 就发出一个进位信号, 此时该 计数器会加 1后变成 0000, 即实现了进位后自动从零开始计数, 所以可以 执行步骤 102。
步骤 104, 计算发出进位信号的低位计数器对应的 RAM的地址; 具体的, 轮巡算法模块对所有通道进行轮巡, 判断通道中的每个低位 计数器是否发出进位信号, 当判断出某个通道的某个类型的数据包对应的 低位计数器发出进位信号时, 轮巡算法模块就暂时停留在该通道, 触发地 址运算模块; 地址运算模块根据通道号和数据包的类型计算 该低位计数器 对应的 RAM的地址, 将计算出的 RAM的地址发送给状态机; 例如, 存在 8个通道, 每个通道有 16种类型的数据包, 现在第 2个通道的第 5种数据 包的进位信号为 1 , 那么地址运算模块计算出的 RAM 的地址是二进制数 01100, 其中, 前两位 01表示第 2个通道, 后三位 100表示第 5种数据包。
步骤 105 ,获取 RAM的地址中的数据,将该数据加 1后再写入该地址; 具体的, 状态机收到地址运算模块发送的 RAM 的地址后, 发送给该 RAM 一个写使能脉冲信号, RAM收到该写使能脉冲信号后, 在下一个时 钟的上升沿来临时, 输出自身对应地址存储的数据给状态机, 状态机将该 数据加 1 ,在下一个时钟的上升沿来临时发送给 RAM加 1后的数据, RAM 将加 1 后的数据在对应地址进行保存; 状态机完成进位工作后, 将自身的 状态置为读写 RAM结束状态。
步骤 106, 清除该低位计数器的进位信号;
具体的,状态机将自身的状态置为读写 RAM结束状态后, 触发进位清 除模块开始工作, 进位清除模块就根据该通道的通道号和发出进 位信号的 低位计数器对应的数据包的类型, 产生一个进位清除脉冲, 将该进位清除 脉冲发送给状态机; 当状态机收到进位清除模块发送的进位清除脉 冲时, 对产生进位信号的低位计数器的进位信号进行 清除, 即将实现进位信号的 触发器的值由 1改为 0。
步骤 107, 判断该通道是否还有进位信号, 如果有, 就执行步骤 104, 如果没有就执行步骤 110;
具体的, 轮巡算法模块判断当前所在的通道中是否还有 进位信号, 如 果有, 就执行步骤 104, 如果没有就执行步骤 110。
步骤 108,对低位计数器的数据清零, 并计算通道中所有低位计数器对 应的 RAM的地址;
具体的, 当低位计数器的状态是清零状态时, 将 FPGA 内部的触发器 的值置为 1 ; 同时该低位计数器将自身的数据置为 0; 轮巡算法模块对所有 通道进行轮巡, 根据触发器的值判断通道中是否有低位计数器 的状态是清 零状态, 如果有, 轮巡算法模块就暂时停留在该通道, 触发地址运算模块; 地址运算模块根据通道号和数据包的类型计算 该通道内所有低位计数器对 应的 RAM的地址, 将计算出的 RAM的地址发送给状态机。 步骤 109, 将 RAM的地址中的数据清零;
具体的, 状态机收到地址运算模块发送的该通道的所有 低位计数器对 应的 RAM的地址, RAM的地址是二进制数, 所以状态机按照 RAM的地 址由小到大的顺序, 依次读取地址中的数据, 然后将该数据置为 0。
步骤 110, 轮巡其他通道;
具体为, 当处理完某通道的中的进位请求后, 或者, 当对某通道中的 所有低位计数器和 RAM 中的数据清零后, 轮巡算法模块继续轮巡其他通 道; 釆用轮巡算法模块对所有通道轮巡的方式, 而不是釆用根据通道设置 的优先级的进行处理的方式, 可以避免几个通道中的低位计数器同时发出 进位信号时, 优先级最低的通道不能够及时得到处理的情况 。
为实现上述方法, 本发明还提供一种数据包的计数系统, 图 2是本发 明实现数据包的计数系统的结构示意图, 如图 2 所示, 该系统包括: 低位 计数器 21、 状态机 22、 RAM23; 其中,
低位计数器 21 , 用于当自身为计数状态时, 对包脉冲信号进行计数, 当计满时, 发出进位信号;
低位计数器 21还用于, 当自身为清零状态时, 并对自身的数据清零; 状态机 22 , 用于从发出进位信号的低位计数器 21对应的 RAM23的地 址中获取数据, 将所述数据加 1后再写入所述地址;
状态机 22还用于,将地址运算模块 26发送的 RAM的地址中的数据清 零;
状态机 22从发出进位信号的低位计数器 21对应的 RAM的地址中获取 数据, 将所述数据加 1后再写入所述地址为: 状态机 22收到地址运算模块 26发送的 RAM23的地址后, 发送给所述 RAM23 —个写使能脉冲信号, RAM23在下一个时钟的上升沿来临时, 输出自身存储的数据给状态机 22, 状态机 22将该数据加 1后发送给 RAM23进行保存;状态机 22完成进位工 作后, 将自身的状态置为读写 RAM结束状态, 并触发进位清除模块 27开 始工作;
RAM23 , 用于为状态机 22提供自身的数据, 并保存状态机 22写入的 数据。
该系统进一步还可以包括: 数据通道接口 24;
数据通道接口 24, 用于根据数据包产生包脉冲信号;
数据通道接口 24根据数据包产生包脉冲信号为: 数据通道接口 24接 收与其相连的数据仪表发送的数据包, 根据通道号和数据包的类型产生多 种包脉冲信号, 将所述包脉冲信号发送给通道;
该系统进一步还可以包括: 轮巡算法模块 25、地址运算模块 26; 其中, 轮巡算法模块 25 , 用于对通道进行轮巡, 当轮巡到有低位计数器 21是 清零状态或发出进位信号的通道时, 触发地址运算模块 26;
地址运算模块 26, 用于当受到轮巡算法模块 25触发时,根据通道号和 数据包的类型计算低位计数器 21对应的 RAM23的地址, 并发送给状态机
22;
该系统进一步还可以包括: 进位清除模块 27;
进位清除模块 27 ,用于受到状态机 22的触发时根据通道的通道号和发 出进位信号的低位计数器 21对应的数据包的类型, 产生进位清除脉冲, 并 发送给状态机 22。
以上所述, 仅为本发明的较佳实施例而已, 并非用于限定本发明的保 护范围, 凡在本发明的精神和原则之内所作的任何修改 、 等同替换和改进 等, 均应包含在本发明的保护范围之内。
