![]() |
|
||||||||||||||
| . 网站首页 . 产品新知 . 业界资讯 . 技术文库 . 下载中心 . 服务导航 . 邮购需知 . 技术论坛 . | ||
|
||
|
|||||
| 使用FPGA和IP Core实现定制缓冲管理 | |||||
作者:Mark Wan… 文章来源:今日电子 点击数: 更新时间:2008-2-4 ![]() |
|||||
|
来源:今日电子 作者:Altera公司 Mark Wang 在通信网络系统中,流量管理的核心是缓存管理、队列管理和调度程序。本文结合使用FPGA及IP Core阐述缓存管理的结构、工作原理及设计方法。 目前硬件高速转发技术的趋势是将整个转发分成两个部分:PE(Protocol Engine,协议引擎)和TM(Traffic Management,流量管理)。其中PE完成协议处理,TM负责完成队列调度、缓存管理、流量整形、QOS等功能,TM与转发协议无关。 随着通信协议的发展及多样化,协议处理部分PE在硬件转发实现方面,普遍采用现有的商用芯片NP(Network Processor,网络处理器)来完成,流量管理部分需要根据系统的需要进行定制或采用商用芯片来完成。在很多情况下NP芯片、TM芯片、交换网芯片无法选用同一家厂商的芯片,这时定制TM成为了成本最低、系统最优化的方案,一般采用FPGA来实现,TM的常规结构如图1所示。
图1 TM的常规结构图
SEG模块为数据切分块,根据交换网的数据结构要求,在上交换网的方向上负责把IP包或数据包切分为固定大小的数据块,方便后期的存储调度以及交换网的操作处理,SEG模块可配合使用SPI4-P2 IP Core来实现。与SEG模块对应的是RSM模块,RSM模块将从交换网下来的数据块重新组合成完整的IP包或数据包。 BM(Buffer Management)模块为缓冲管理模块,管理TM的缓冲单元,完成DRAM的存取操作。外部DRAM的控制部分可使用使用DDR SDRAM IP Core实现。 QM模块为队列管理模块,负责完成端口的数据队列管理功能,接收BM模块读写DRAM时的数据入队、出队请求,TM所能支持的数据流的数目、业务类型数目、端口的数目等性能指标在QM模块处体现出来。 Scheduler模块为调度模块,根据数据包类型及优先级和端口分配的带宽进行调度,TM流量整形、QOS等功能通过调度模块实现。 CELL_EDIT模块完成输出数据的封装,把由DRAM中读出的数据封装后发送出去。 在TM中需要基于数据服务策略对于不同服务等级的数据包进行不同的管理策略,同时要保证流媒体的数据包不能乱序,数据包有大有小,经过SEG模块所分割成的数据块的数目也有多有少,这样就必须有一套行之有效的数据结构基于链表的方法管理这些数据。QM模块基于业务、数据流的方式管理队列,包的管理便由BM模块完成。 BM模块中基于包的数据结构方面由两部分构成:BRAM和PRAM。BRAM为数据缓冲区,对应片外的DRAM。BRAM负责存储数据单元,相对于SEG模块切分的数据单元,BRAM内有相应大小的存储单元BCELL与之对应,BCELL在BRAM内以地址空间划分,每个BCELL相同大小,BCELL为BRAM的最小存取单元。在实际系统中基于SEG模块切分的数据单元大小,BCELL一般为64~512B。 PRAM为指针缓冲区,PRAM对应片外的SSRAM。PRAM内部同样以地址空间分为PCELL,PCELL与BCELL一一对应,每一个PCELL对应于一个BCELL,对应的PCELL与BCELL地址相同。 PCELL的地址对应的代表相应单元的BCELL的地址,PCELL中的基本信息是下一跳指针。PRAM与BRAM关系如图2所示。
图2 PRAM与BRAM关系图
Free List代表空闲的地址队列。为方便地辨识、管理空闲的地址,避免地址冲突,在BM中将所有空闲的地址使用一个链表进行管理。这个链表就是空闲地址队列。空闲地址队列依据系统需求的不同有着不同的形式,一般空闲地址队列的构成和PQ List相似,由空闲地址首指针Free_Hptr和空闲地址尾指针Free_Tptr构成。BM模块的所有操作都围绕着空闲的地址队列Free List进行。 基于BM模块的数据流结构,BM模块一般分为Write Control模块、Free List control模块、Read Control模块、PRAM Control模块、BRAM Control模块。BM的结构如图3所示。
图3 BM结构图
在BM模块中,BRAM的带宽与PRAM的带宽一般为TM的瓶颈。PRAM的带宽主要受限于访问的次数,而BRAM的带宽受限于接口带宽。例如对于一个10G的TM,BRAM的有效带宽必须保证20G,以接口利用率最差只能达到65%计算(考虑SEG模块切分信元出现的N+1问题),需要保证接口带宽达到30G。使用64位的DRAM接口,接口速率不能低于500MB/s,这样对Datapath模块的设计提出了更高的要求。在实际系统中,BRAM主要使用DDR SDRAM、DDR II SDRAM。 当使用Stratix II FPGA,BRAM使用DDR II SDRAM时,测试表明DDR II SDRAM接口速率可达到800MB/s。在常规使用的情况下,DDR II SDRAM接口速率可保证达到667MB/s。对于一个64位的DRAM接口,接口速率可达到42.7GB/s,完全可以满足一个10G的TM系统。 BM模块作为缓冲管理模块,缓冲的基本单元为BCELL,基于对BCELL的管理,对于BM的操作都牵涉到空闲地址队列的操作以及链表的操作。最基本的操作就是写入操作和读出操作。BM模块的写入操作由Write Control模块发起。 对于Write Control模块,有数据单元需要写入,首先向Free List模块申请空闲地址,Free List将首指针a给Write Control模块,作为该数据块的写地址,同时读出首指针a对应在PRAM中的内容,得到下一跳地址b,将下一跳地址b作为新的空闲地址首指针。 PQ List将尾指针n更新为新写入的地址a,同时更新PRAM中n地址的内容,将a作为下一跳添入n地址。基于节省操作周期,NULL的内容保留原值,不再更新。这样,一次BRAM的写入操作需要一次PRAM的读取操作及一次PRAM的写入操作。 QM模块接收调度模块的出队信息,将出队的PQ链表信息传送给BM模块进行读取操作。
图4 BM模块的写入操作
图5 读出操作的Free List堆栈结构
Read Control模块由PQ List的首地址0读出相应的BRAM中的内容,同时读出PRAM中对应的下一跳地址1,更新地址1为新的首地址。Free List将首指针a更新为刚释放的地址0,同时地址0中写入下一跳指针a。这样一次BRAM的读出操作需要一次PRAM的读取操作及一次PRAM的写入操作。 作为堆栈形式的空闲地址队列在实际操作中会把一部分空闲地址队列放入片内缓冲中。这样在读BRAM释放地址进入空闲地址队列时可以节省PRAM的一次写入操作,在写BRAM时申请空闲地址时可以节省PRAM的一拍读取操作。PRAM堆栈结构下内置空闲地址队列表如图6所示。
图6 PRAM堆栈结构下内置空闲地址队列表
图7 读出操作的Free Lis链表结构
Free List相对于堆栈模式增加尾指针d。Free List在回收地址时维持首指针a不变,将尾指针d更新为刚释放的地址0,同时地址d中写入下一跳指针0。这样一次BRAM的读出操作同样需要一次PRAM的读取操作及一次PRAM的写入操作。对于链表方式的空闲地址队列Free List,在每个读、写周期必须进行两次PRAM的写入操作及两次PRAM的读取操作,PRAM的效率不高。 针对两种空闲地址队列的效率及对DRAM的影响,在很多系统中采用了折中的方法,即在PRAM中使用链表方法管理空闲地址队列Free List,在片内采用堆栈模式另建一个空闲地址队列Free List,在这种情况下,每个读、写周期需要三次PRAM的操作。 在实际系统中,BRAM的带宽与PRAM的带宽一般为TM的瓶颈,PRAM主要受限于访问的次数,而BRAM受限于接口带宽。 在10G的TM系统中,片内数据总线的位宽定为128位,系统时钟定为150MHz,BCELL的大小定为64B。在这种情况下,读取操作和写入操作均为4个时钟周期。在满足10G系统的需求下,读取、写入操作周期为7个时钟周期。在前面曾计算过,在满足10G TM系统的情况下,BRAM采用64位 DDR II SDRAM,接口时钟使用250MHz即可满足数据接口的需求。PRAM采用32位ZBT SRAM ,接口时钟使用系统时钟,每个PCELL为64位,每个读、写周期需要6个时钟周期完成。在实际系统中采用Altera FPGA,BM的设计可以满足10G的TM线速工作的需求。 在40G核心网的TM系统中,片内数据总线的位宽为256位,系统时钟采用250MHz(在40GE的系统中可选用200MHz)。采用DDR II SDRAM,接口时钟使用333MHz,则192位的BRAM可以满足40G的TM需求。此时,BCELL可为96B、192B、384B,在这里选用192B。当BCELL选用192B时,读取操作和写入操作同样均为6个时钟周期。在满足40G系统的需求下,读取、写入操作周期为9个时钟周期。PRAM采用48位QDR SRAM,接口时钟使用150MHz,每个PCELL为96位,在每个读、写时钟周期内,PRAM最多可被操作5次。在采用Altera FPGA的情况下,BRAM采用192位 DDR II SDRAM,PRAM采用48位QDR SRAM,BM的设计可以满足40G的TM线速工作的需求。 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| VHDL中语句使用问题探讨 VHDL语言程序配置EAB的研究 汽车车灯控制系统的VHDL语言… 用VHDL语言在CPLD上实现串行… 使用VHDL语言设计FPGA的几个… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|