kaiyun官方注册
您所在的位置: 首页> 通信与网络> 业界动态> EMD 10G线路接口卡的硬件设计与实现

EMD 10G线路接口卡的硬件设计与实现

2009-01-13
作者:杨 琴, 兰巨龙, 王 雨
关键词: 查表 组播 10G 轮询 权值

摘 要:针对现有网络接入设备难以满足流媒体等新业务要求的问题,深入研究了EMD(扩展用分复用单元)10G线路接口卡的功能与结构,并针对上行数据流的合路问题提出了基于FPGA的WDRR(加权欠账轮询)算法,该算法在不过度改变计算复杂度的情况下,使得时延性能得到改善;针对超宽表项的1 920位组播查表问题,提出了FPGA+TCAM+2*SRAM的组播流水线查表,与传统的查表方案相比,其效率提高了67%。最后通过仿真,测试表明该硬件设计方案能够满足ACR路由器对EMD 10G线路接口卡的要求。

关键词:大规模接入汇聚路由器; EMD 10G线路接口卡; FPGA; WDRR算法; TCAM

随着互联网的日趋成熟,新的业务流量不断涌现,语音、VOD、网络电视、虚拟个人网络等以视频信息为代表的宽带流媒体业务,对边缘网的交换设备提出了越来越高的要求,而现有的边缘网络级数多,端口密度低,带宽不可控,这些特点使得现有网络很难满足新业务流的要求,当有大量数据流到来时,无法实现用户层面的数据接入管理与控制。

国家“863”计划中大规模接入汇聚路由器(ACR)的研发就是为了从根本上解决边缘网的大容量交换需求,以及用户的大规模接入问题。ACR不仅具有常规大容量高性能双栈核心路由器的宽带IPv4/v6组网功能,而且具有大规模用户接入汇聚功能[1]。ACR的大规模用户接入汇聚功能主要体现在对用户接口和用户业务的管理与控制,以及支持宽带网络业务运营环境。ACR中负责用户端接入的模块是远端模块,它又包括扩展用分复用单元EMD(Ethernet Multiplexer-Demultiplexer)和远端接口单元RIU(Remote Interface Unit)。其中,EMD主要完成上下行数据的合路与分发,以及用户业务控制功能,是ACR实施用户管理与控制的主要设备。EMD包括二种线路接口,分别为EMD 10G线路接口和EMD 1000M线路接口。

本文主要介绍EMD 10G线路接口卡的设计与实现。图1为EMD 10G线路接口在整个ACR中所处的位置。从图1可以看出,一个10G线路接口卡通过ATCA背板下连4个千兆接口模块,每个千兆接口模块通过千兆接口下行支持10个RIU,每个RIU再下接48个BMG。于是,一个EMD设备最多可以接入1 920个用户,在确保用户服务质量的条件下,每用户不仅可同时观看1路HDTV和1路SDTV节目,还可以独享9M端到端带宽用于VOD,或者PC上网业务。

10G线路接口模块的功能主要包括:

(1)下行数据流方向:将外部物理信号通过光电、串并转换恢复成比特流。提取数据链路层帧并作相应处理,将IP报文根据单、组播以及IPTV组播查表结果封装成内部自定义格式,将数据报文复制送往4个千兆接口模块,实现组播复制。

(2)上行数据流方向:对4个千兆接口模块送来的四路数据调度合路输出,再根据单、组播以及IPTV组播查表结果进行上行的数据封装,封装成数据链路帧后,将比特流以光信号的形式发送到物理链路。

1 EMD 10G线路接口卡的设计

根据10G线路接口卡的功能需求分析,采用单片的多路链路层处理芯片完成数据链路层的处理,然后用FPAG+TCAM+SRAM完成数据报文的后续分类、查表以及封装处理。基于这种设计思想,给出EMD 10G线路接口卡的总体结构如图2所示。其工作流程仍分为上行和下行处理。可以看出,前端处理主要由商用芯片负责,报文的提取以及查表封装由FPGA完成。

在实际实现中,光电转换器件选用住友(SEI)公司的SXP3101EX,串并转换器件选择AMCC公司的S19237芯片,链路层处理芯片选用AMCC公司的S19205,TCAM选用IDT公司的75K75100,SRAM选用71T75602,FPGA选用Xilinx公司Virtex4系列的XC4VLX160和XC4VFX60,两块芯片间通过SPI接口进行数据交互,共同完成上下行的数据处理。

2 FPGA设计分析

根据上一节的介绍可知,FPGA主要完成IP报文的预处理,查表封装以及与4个千兆线路接口板数据的分合路。本节将详细介绍FPGA的设计方案。

下行数据进入FPGA中首先缓存,判断是协议报文还是数据报文,如果是协议报文则上交板级处理机,如是数据报文则进行单组播和IPTV组播查表,再将数据报文和查表结果格式封装下发分路到4个千兆接口板。上行方向,将从千兆接口收到的四路数据调度合路输出,对数据和协议报文分路处理,协议报文仍上交板级处理机,数据报文根据查表结果封装输出。根据该FPGA的功能分析,得到其内部功能模块划分如图3。图中虚线左侧为XC4VLX160芯片所完成的功能,虚线右侧为XC4VFX60芯片完成的功能,XC4VFX60带有两个Power PC 405硬核,16路高速通道,每路高速通道的速率为3.11Gb/s,可以满足4个千兆线路板的接口要求。

由于下行和上行数据在FPGA中的处理是一个相对的过程,现以上行数据流为例介绍FPGA的设计分析。在对上行数据流进行处理时,有三个关键环节,分别是:4路千兆线路接口板数据的合路调度输出,上行报文分路,数据报文的单组播查表以及IPTV组播查表。下面将详细介绍这三个功能模块的FPGA设计。

2.1 上行合路调度输出模块设计方案

千兆线路接口送来的四路数据先放在4个整包缓存队列中,等待合路调度输出。由于IP报文是变长数据包,同时兼顾到硬件实现的复杂度,因此,本文采用差额轮询DRR(Deficit Round Robin)调度算法。DRR为每个队列赋予了一个计数器,在每次轮循时,只有待发分组长度小于计数器值才允许发送分组。计数器的计算方法为:初值为定额值,每发送一个分组就减去此分组长度值,每经过一次轮循就加上定额值。但是由于DRR在轮询队列时是顺序访问下一个队列,没有考虑队列间的优先级问题,故易造成输出报文的时延性较差[2]

于是,在DRR算法的基础上,本文采用一种改进的加权DRR算法——WDRR(Weighted Deficit Round Robin)。该算法的基本思想是:给每个队列赋予一个权值Wi,是该队列的长度和包到达速率的比值,表示该队列的优先级。在每一轮轮询开始之前,先计算各队列的权值,并按降序排列,服务顺序从大到小。设置队列i的计数器Ci的初值为N字节,每轮轮询前各队列的计数器Ci=Ci+N。开始轮询时,如果权值最大队列中有整包,且Ci>Lmin(Lmin表示网络中最短包的字节数),则输出该队列中一个长度为整包,同时使Ci=Ci-,再判断是否满足前述条件,重复此过程,直到Ci≤Lmin;如果该队列中没有整包,则将此轮分配的N字节积累到下轮使用。此队列服务完成后转到权值次小的队列。在调度过程中,为了避免Ci无限增大,为其设置一个上限值Lmax

在算法实现中,由于IPv6的最短包长度为40B,于是取N和Lmin均为40;设网络中IPv6的最长包为1 500B,故取Lmax为1 500;设队列的计数器Ci的宽度为11bit,故最大计数值为2 048。具体的算法流程见图4。

WDRR算法在传统DRR算法的基础上,允许在计数器小于整包长度时仍可以输出一个整包,避免了队列中有包但无法传输的情况。同时,在不过度改变算法复杂度的情况下,对每个队列赋予权值,每一轮按照权值大小依次调度,使得输出结果更加平滑,时延性能得到改善,该算法由于其复杂度低也便于硬件实现与管理。

2.2 上行报文分路模块设计方案

对4路千兆线路接口卡送来的数据进行合路后,形成一路数据输出。为了便于后续查表和报文封装操作,需要将报文分类,以判断该报文是否需要查表,如果需要查表,确定是查单播表、组播表还是IPTV组播表。

首先提取协议类型字段,判断其是否是自定义控制帧,如是,则直接上交10G板级处理机;然后根据目的MAC判断单组播,对于组播报文,再根据协议类型域区分IPv4和IPv6报文,提取目的IP作为查表关键字,查上网组播表,或者IPTV组播表;对于单播报文,则将目的MAC地址作为查表关键字,查单播表。对于不需要查表的报文,则直接进行格式封装后,上交ACR-S。具体的报文处理流程见图5。

2.3 查表模块设计方案

报文进入查表模块后,根据报文类型不同可能需要查三个表,分别是:单播表、上网组播表和IPTV组播表。根据ACR的总体设计方案,要求最多支持100个IPTV组播台,顺序编号为0~99;最多支持1 920个用户,顺序编号为0~1 919。再结合ACR路由器的体系结构,设计三种表项结构见图6。其中,单播MAC表是48bitMAC地址到EMD和RIU出接口的映射,组播IP表是128bitIP地址到1 920个用户接口映射,IPTV组播表是128bitIPTV组播地址到1 920个用户的映射。

由表项结构可以看出,单播MAC查表采用传统的FPGA->TCAM->SRAM->FPGA查表方式即可实现。但是对于组播IP查表和IPTV组播查表,由于表项宽度过宽,达到1 920位,如果仍采用这种方式,难免会影响查表效率。为了提高查IP组播表和IPTV组播表的效率,本文从以下两个方面作了改进。

(1)传统的FPGA->CAM->SRAM->FPGA流水线查表,TCAM送出的控制SRAM连续读写的burst信号仅能维持5个周期,而对于数据位宽为32位的SRAM,需要最少60个周期才能完成IP组播表或是IPTV组播表的读写操作,也就是最少进行12次TCAM查表。TCAM从查表关键字送入到结果送出需要约10个周期,读SRAM需要5个周期,因此多一次查TCAM就会浪费5个周期,这样,进行一次组播查表需要120个周期,但其中有55个周期被浪费。由此可以看出,在表项宽度较窄时此方式效率较高,但是表项宽度较宽时,效率明显降低[3][4]

因此本文采用FPGA->CAM->FPGA->SRAM->FPGA的流水线操作,这种方式只需查一次TCAM,再根据TCAM返回的读SRAM的索引地址,读60个周期的SRAM,在70个周期内就能完成组播查表。与前一种方法相比,节省了50个周期。

(2)由于在SRAM中存放的查表结果有1 920位,即使采用FPGA->CAM->FPGA->SRAM->FPGA的流水线操作,读SRAM的周期也太长,总共需要60个周期才能读完一次查表结果。如果用两片SRAM共同存放1 920位的组播结果,一片SRAM存放前960位结果,另一片SRAM存放后960位结果,前后两个960位结果在两片SRAM中所处的物理地址是对应一致的。这样查一次TCAM得到的索引SRAM的地址同时送到两片SRAM,用30个周期即可读完一个组播结果。在表项维护和表项更新时,两片SRAM也是同步进行的。值得注意的是如果是查单播表,由于查表结果只需读一个周期32位的数据,因此在两片SRAM的对应地址中所存放的内容应该是一样的,最后选择其中一片SRAM的结果输出即可。

综上,采用FPGA+TCAM+2*SRAM的流水线查表操作后,进行一次组播查表总共需要40个周期就能完成,与传统的查表方式相比,完成一次组播查表减少80个周期,效率提高67%。

3 FPGA实现及仿真

在仿真实现时,上行合路模块在XC4VFX60中完成,报文分类和查表模块在XC4VLX160中完成,从芯片资源的角度来看,两片芯片的性能均能满足需求。仿真时,用ROM生成一个数据源,通过Xilinx 9.1集成开发环境,得到的上行报文合路模块和查表模块的关键信号仿真结果如图7和图8。

图7为用ModelSim得到的上行合路模块的仿真波形图,其中ge0~ge3分别表示4路1000M接口卡送来的数据,第129和128bit表示对应报文的包头和包尾指示,用来表示报文的开始和结束。dout表示合路输出数据,结果表明WDRR算法实现了4路报文的调度合路输出。

图8为查表模块一次IPTV组播查表的仿真波形图。由于查表模块需要片外TCAM和SRAM配合,才能得到输出结果,故在仿真时通过在该功能模块中插入chipscope核,测试查表效率。由图可以看出,查表关键字cam_key送入后,10个周期左右得到查表命中match指示,3个周期后得到查TCAM的结果cam_rbus,然后同时送入两片SRAM,读30个周期的SRAM结果,这样,按照预期目标成功完成一次组播查表。

本文根据ACR路由器对EMD 10G线路接口卡的要求,设计了EMD 10G线路接口卡,并详细分析了FPGA对数据流的处理。以对上行数据流的处理为例,对于4个千兆接口卡送来的四路数据报文,用WDRR算法,通过对每个队列引入权重度量,使得输出结果更加平滑,时延性能得到改善,但由于不过度改变算法的复杂度,仍较便于硬件实现与管理。对于报文分类处理后等待查表的数据报文,由于ACR对用户数量的支持,使得组播表项过宽,达到了1 920位,采用传统的查表机制效率低,但通过改进的FPGA+TCAM+2*SRAM的组播流水线查表,其效率可提高67%。通过编程以及仿真结果也可以看出,该10G接口卡基本上完成了所需要的功能。

参考文献

[1] 张兴明.大规模接入汇聚路由器(ACR)总体技术规范[S].国家数字交换系统工程技术研究中心,2005.

[2] 王重钢,隆克平,龚向阳,等.分组交换网络中队列调度算法的研究及其展望[J].电子学报,2001,29(4):553-559.

[3] 赵永忠,兰巨龙,刘勤让.10Gbps线路接口设计分析与实现[J].微电子学和计算机,2005,22(2):159-161.

[4] 张佳杰,扈红超,刘强,等.基于接入汇聚路由器的IPTV组播的实现[J].计算机工程,2007,33(11):107-109.

[5] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2005.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map