一种基于FPGA的万兆以太网帧解析方法
技术领域
本发明涉及万兆以太网高速数据通信协议的数据监测领域。具体涉及一种基于FPGA的万兆以太网帧解析方法。
背景技术
以太网服务由于简单易用、灵活和价格低廉被广泛采用,已经成为包交换业务的统一承载层,在电信级以太网上,Q-in-Q技术、MAC-in-MAC技术、MPLS技术以及1588时间同步技术等新技术被综合应用。因此对网络设备尤其是对手持测试设备而言,需要能够以低成本实现对可能带有多层VLAN标签、MPLS标签等多种混合类型的以太网帧进行实时解析的功能组件。
为了保证以太网的向下兼容,万兆以太网仍然采用与千兆以太网相同的帧格式。若仍然沿用千兆以太网的8bit位宽,逻辑的工作时钟频率将达到1.25GHz,这无论对芯片设计还是FPGA都是难以实现的,因此802.3的协议规定万兆以太网采用64bit数据位宽的XGMII接口进行并行处理,这对可能会带有多层VLAN标签和多层MPLS标签的混合以太网帧解析设计带来了新的挑战。
用于执行帧解析技术的常规技术可能不再适用于对万兆速率以太网帧低成本的处理,例如使用基于软件的帧解析技术,为能够承受高速通讯系统中的大量数据,采用大容量缓存与一组微码处理器的并行运算实现对各种混合帧格式的以太网帧分析,这种方法虽然具有灵活性高功能强大的优点,但这种帧解析方法的实现过于复杂,且帧解析过程还会因缓存的原因增加额外的抖动。
此外,如使用基于硬件的分立帧解析技术,以固定格式的掩码模板来获取以太网帧中的关键字段,这种方法存在灵活性差的缺点,一般仅能适用于少数几种被支持的协议。若要增加对多种通讯协议的支持,有人额外设计一种可针对每一帧动态改变掩码模板的装置,以实现帧解析器的动态配置,所有上述的这些设计均过于复杂,不适合手持设备的低成本实现。
发明内容
本发明的目的是解决现有基于软件帧解析方法存在设计过于复杂设计难度大且解析过程对以太网帧引入额外抖动的问题,提供一种基于FPGA的万兆以太网帧解析的低成本设计方法,实现各种混合类型的以太网帧的实时帧解析,同时解决FPGA内部并行处理的困难。
本发明的技术方案为:
一种基于FPGA的万兆以太网帧解析方法,该方法包含以下步骤:
第1、设置一个以太网帧间插解复用器,以帧间插解复用的方式,将收到的以太网帧依次平均推送到一组q个独立的数据通道中;具体操作步骤如下:
设置一个模为q的计数器,该计数器的初始值设为0,当接收到以太网帧的结尾时,判断该计数器的值是否为q-1,若是,则该计数器赋值为0,若不是,则触发该计数器累加1;当该计数器的值为0时,将以太网帧推送到数据通道1中,当该计数器的值为1时,将以太网数据帧推送到数据通道2中,依次类推,当计数器的值为q-1时,将以太网数据帧推送到数据通道q中。
较佳的,q为大于等于2的整数,q值应根据待解析的以太网帧头的复杂度决定,若需要解析的以太网帧比较复杂,则应选取较大的q值,使得每个数据通道中相邻以太网帧之间的最小间隔足够大,以保证每个数据通道中前一以太网帧解析完毕后,后一以太网帧才进入到该数据通道中。
第2、在每个数据通道中,均设置一个带有随机读取接口(宽度为72bit深度为m)的移位寄存器,以太网报文经由该移位寄存器延迟后输出,同时根据需要读取的关键字段地址在移位寄存器组中搜索需要获取的关键字段结果,输出该关键字段的值;具体步骤如下:
对应移位寄存器的每一列均设置1个地址计数器,当移位寄存器中的某一列中没有包含有效以太网帧的数据时,该地址计数器置0,否则累加1;将需要搜索的关键字段地址右移3bit,并与这m个地址计数器逐一进行比较,选取比较结果相等的那一列及相邻列的移位寄存器中的数据,再根据关键字段地址的低3bit控制,选取其中某两个byte的数据输出。
较佳的,所述移位寄存器组的深度m值在资源允许的情况下应尽可能大,但应满足公式(1)所述的条件,以保证每一时刻出现在移位寄存器组中的帧只有一个。
公式(1)中“length”为待解析以太网帧的最小帧长;“[]”为数据取整的符号。
较佳的,关键字段地址与所述地址指针比较方法为:
将关键字段地址右移3比特,与所述m个地址指针进行比较,如果比较结果中第k个是相等的结果,则选中第k个及第k+1个移位寄存器,再根据关键字段地址的低3比特,选取其中的16bit数据为需输出的关键字段输出,同时给出数据命中的状态指示信号valid;如果比较结果均为小于,则给出数据丢失的状态指示信号fail;如果比较结果均为大于,则给出数据在搜索中的状态指示信号search。
第3、在每个数据通道中均设置一个与所述移位寄存器组相对应的帧解析控制状态机,该帧解析控制状态机的下一跳根据所述移位寄存器组输出的关键字段进行跳转,实现对可能的多协议混合以太网帧的识别;与此同时根据该帧解析控制状态机的当前状态,产生需搜索的关键字段地址;根据所述帧解析控制状态机的跳转历程得到以太网帧的解析结果,并将结果写入FIFO中进行缓存。
较佳的,在每个数据通道中某一以太网帧开始进入所述移位寄存器时触发所述帧解析控制状态机离开IDLE状态,当这一以太网帧离开所述移位寄存器组时,触发该状态机回到IDLE状态;所述状态机的状态之间的跳转,均由所述valid信号有效时,通过判断所述移位寄存器组输出的关键字段决定下一跳的状态;同时设置一个地址增量寄存器,其值由所述状态机的当前状态决定,在状态机的每一次状态的跳转时,触发关键字段地址赋值为关键字段地址加上地址增量寄存器的值得到的和;根据帧解析控制状态机跳转历程,给出需要的帧解析结果,并将解析结果写入到FIFO中缓存。
较佳的,帧解析控制状态机的设计应涵盖所有需要解析的帧结构,并保证当收到需解析范围之外的帧时,状态机不会锁死在不确定的状态。当所述状态机跳转过程中出现fail信号指示时,表明本次解析失败,状态机应能返回到IDLE状态。
较佳的,用来存储解析结果的FIFO宽度与所述解析结果位宽相同,深度至少应大于2乘以q,保证工作时该FIFO不会出现满的情况。
第4、设置一个以太网帧间插复用器,将各数据通道中输出的以太网报文以帧间插复用的方式恢复为原来的以太网数据帧,同时读取所述每个数据通道中的FIFO里的帧解析结果,使恢复的以太网数据帧与帧解析结果对齐;具体步骤如下:
设置一个以太网帧间插多路选择器,设置一个深度为w的延迟线,一般情况下该延迟线由移位寄存器组成,也可以通过构造深度为w+1的双口RAM,控制RAM读地址始终与写地址有w的差值,来模拟移位寄存器的效果,该延迟线延迟w个时钟周期后输出的以太网帧与进入所述以太网帧间插解复用器前的原以太网帧完全相同,只是相对延时了w加上m个时钟周期;
设置一个模为q的读控制计数器,其值与q个所述FIFO相对应;当发现有以太网帧从所述延迟线输出时,首先判断该计数器的值是否等于q-1,若是,则该计数器赋值为0,否则,该计数器值累加1,与此同时触发一次对相应所述FIFO的一个时钟周期的读操作,并将读取的结果输出,实现所述解析结果输出与所述恢复的以太网帧输出的对齐。
较佳的,所述延迟线的深度w应满足公式(2)的所述条件,以保证所述以太网帧输出前,帧解析结果已经写入到FIFO中。
公式(2)中,“head_len”为待解析以太网帧中可能的需解析帧头的最大值,“[]”为取整运算。
本发明的优点和有益效果:
本发明以以太网帧间插解复用和复用的方法将万兆以太网帧分配到一组独立的低速数据通道上,再在每个独立的数据通道上,借助于一种可根据以太网帧中的相对位置返回关键字段的移位寄存器,使得各种混合帧格式的以太网帧解析能实时完成,并可实现帧解析结果与原以太网帧的对齐处理。应用本发明,克服了万兆以太网混合格式帧解析实时并行处理的困难,避免了帧解析引入的延时抖动,实现结构简单,成本低廉,容易理解,节约了实现的逻辑资源。
假设待解析以太网帧最小帧长为64byte,以太网帧需解析的最大帧头为42byte,取q等于3,m等于12,w值等于18,FPGA芯片选择为xilinx公司的xc7k160t;以本发明的方法完成对可能带有最高3层VLAN及MPLS标签的混合以太网帧解析的逻辑设计,在完成布局布线后占用的slices数量为1081个,RAMB36E1数量为3个,RAMB18E1数量为3个;应用本发明在一个实例中的仿真波形如图6所示,图中给出了以太网帧间插解复用,通道1帧解析以及帧间插复用部分关键信号的仿真波形。
附图说明:
图1是应用本发明实施例的以太网帧解析装置的结构示意图;
图2是本发明实施例的帧间插解复用的时序示意图;
图3是本发明实施例的移位寄存器装置的结构示意图;
图4是本发明实施例中帧解析控制状态机跳转示意图;
图5是本发明实施例中以太网帧间插复用装置的结构示意图;
图6是本发明实施例中仿真波形图。
具体实施方式
下面结合附图,及具体实施例对本发明再做进一步的说明。
结合一个示例说明对可能含有3层VLAN标签或MPLS标签的混合以太网实时帧解析的实现步骤,如图1所示为应用本发明实施例的以太网帧解析装置的结构示意图:从MAC层501输出的以太网帧最小帧长为64byte,经过装置502处理后以以太网帧间插解复用方式分配到数量q为3组宽度为72bit深度m为16的移位寄存器504中,帧间插复用器505以以太网帧间插复用的方式恢复原来的以太网帧,同时帧解析状态机503与装置504的关键字搜索功能相配合,根据关键字地址搜索16bit的关键字段,完成含多层VLAN标签、MPLS标签混合以太网帧的实时帧解析,并由装置505实现以太网帧解析结果与恢复以太网帧的对齐操作。
步骤1、图2所示为本发明实施例的帧间插解复用的时序示意图,在装置500中设置一个以太网帧间插解复用器,以帧间插解复用的方式,将收到的以太网帧依次平均推送到3个独立的数据通道中;具体操作步骤如下:
设置一个模为3的计数器,该计数器的初始值设为0,当接收到以太网帧的结尾时,判断该计数器的值是否为2,若是,则该计数器赋值为0,若不是,则触发该计数器累加1;当该计数器的值为0时,将以太网帧推送到数据通道1中,当该计数器的值为1时,将以太网数据帧推送到数据通道2中,当计数器的值为2时,将以太网数据帧推送到数据通道3中。
步骤2、在每个数据通道中,均设置一个带有随机读取接口的移位寄存器504,图3所示为本发明实施例的移位寄存器装置的结构示意图;以太网报文经由该移位寄存器延迟后输出,同时根据需要读取的关键字段地址在移位寄存器组中搜索需要获取的关键字段结果,输出该关键字段的值;具体操作步骤如下:
将所述移位寄存器的每一列分布编号为1至16,对应每一列移位寄存器均设置1个指针计数器装置601,用来指示寄存器组中对应列相对以太网帧起始的偏移位置。所述指针计数器位宽设计为4bit,当对应列的移位寄存器中无有效以太网帧数据时,该指针计数器复位为0;当对应列的移位寄存器中有有效帧数据时,该指针计数器累加1;当指针计数器累加到最大值15时,该寄存器停止累加。
所述关键字地址设计为7bit位宽,将其高4bit与所述16个指针计数器在地址比较器603中依次进行比较,若可找到某一个相等的比较结果,比如第3个比较为相等的结果,则生成4bit位宽的选择控制信号0011并推送到列选择器604的控制端,同时输出valid状态指示信号表示所述关键字搜索完成;若比较结果均为小于,则生成fail的状态指示信号表示所述关键字搜索失败;若比较结果均为大于,则生成search指示信号表示所述关键字正在搜索中。所述列选择器604用来根据4bit选择控制信号,选通移位寄存器602中某两列寄存器中的数据,并将数据推送到宽度为128bit的列缓存605中;比如当所述4bit选择控制信号的值为3时,则列选择器604会将第3列移位寄存器中的值推送到列缓存的bit64~bit127中,第4列移位寄存器中的值推送到列缓存的bit0~bit63中。
所述行选择器606根据关键字地址的低3bit,从所述列缓存605中选择16bit的关键字段输出。比如当关键字地址的低3位为101时,则选择bit103~bit88为关键字输出;当关键字地址的低3位为001时,选择bit71~bit56为关键字输出。
步骤3、在每个数据通道中均设置了一个与所述移位寄存器组相对应的帧解析控制状态机503,该帧解析控制状态机的下一跳根据所述移位寄存器组输出的关键字段进行跳转,实现对可能的多层VLAN标签、MPLS标签的识别;与此同时根据该帧解析控制状态机的当前状态,产生需搜索的关键字段地址;根据所述帧解析控制状态机的跳转历程得到以太网帧的解析结果,并将结果写入FIFO中进行缓存;具体操作步骤如下:
所述帧解析控制状态机的主体结构为如图4所示的帧解析控制状态机跳转示意图。从装置502推送的有效帧起始触发状态机从IDLE状态跳转到MAC状态,从装置504离开的以太网帧结尾触发状态机复位到IDLE状态。设置一个7bit位宽的关键字地址计数器,每一次状态的跳转均触发该关键字地址计数器进行累加操作。状态机的下一跳均根据装置504输出的有效关键字决定,当关键字搜索失败时,状态机恢复到IDLE状态。根据需要设置多个帧格式标志寄存器记录状态机的跳转历程,当所述状态机进入到IP状态时,产生一个时钟周期的写信号,将所述的帧格式标志寄存器写入到对应的FIFO705中进行缓存。
较佳的,设置一个7bit位宽的关键字地址累加值寄存器,其值与所述状态机跳转的关系如表1所示;当状态机处于IDLE状态时,所述关键字地址计数器保持为0,每当状态机的状态发生改变时,该关键字地址计数器的值重新赋值为该关键字地址计数器的值加上关键字地址累加值的和。
表1
步骤4、设置一个以太网帧间插复用器,将3个数据通道中输出的以太网报文以帧间插复用的方式恢复为原来的以太网数据帧,同时读取所述每个数据通道中的FIFO里的帧解析结果,使恢复的以太网数据帧与帧解析结果对齐;具体步骤如下:
如图5所示为本发明实施例中以太网帧间插复用装置的结构示意图,因同一时刻最多只能有一个数据通道上存在有效以太网帧,在装置701中设置一个多路选择器选择具有有效以太网帧的通道,选择后的以太网帧再推送到一个延迟线装置702中,就实现了原以太网数据流的恢复。较佳的,所述延迟线装置702可以由宽度为72bit深度为16的移位寄存器组成,也可采用块RAM构建一个宽度为72bit深度为17的双口RAM来模拟移位寄存器的操作;
如图5所示,3个通道的以太网帧解析结果均存入对应的FIFO705中,设置一个FIFO读控制逻辑,监测所述三个数据通道XGMII总线上的帧起始位,当捕捉到某一通道的帧起始时,则产生一次相应FIFO的读操作;设置一个初始值为0模为3的计数器703,当有以太网数据帧的帧头离开所述延迟线702时该计数器加1,利用该计数器值控制一3选1多路选择器704实现对3组FIFO读数据的选择,这样就实现了帧解析结果与恢复的以太网数据帧之间的对齐操作。
为说明本发明方法的可行性,如图6所示为应用本发明在某一实施例中具体的仿真波形,图中信号rx_data和rx_ctl为装置501输入的以太网帧,char_word为第一个数据通道中装置606输出的16bit关键字段,rx_data_d和rx_ctl_d为装置702恢复的以太网帧,fram_mac_type、fram_vlan_num及fram_mpls_num为装置704输出的以太网帧解析的结果示例。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。