发明名称 核心路由器交换结构协处理器
摘要 核心路由器交换结构协处理器属于因特网主干网核心路由器技术领域,其特征在于:由上行和下行两模块组成,用FPGA外接存储器实现,支持4Gb/s包线速。上行模块,接收数据包过滤掉无用数据后,数据被分成两路,每一路数据包被分成定长带优先级的若干数据片。每个数据片加上特定的头成为信元,信元依据优先级和目的地址不同属于不同队列,存于存储器,依据队列信息和来自下行模块的流量控制信息,调度出信元,并发送给交换结构。下行模块从交换结构接收两路信元,提取其中的流量控制信息给上行模块,去掉信元头还原为数据片,数据片依据来源优先级不同属于不同队列,存于存储器,含有一个以上完整数据包分片的队列参加调度,调度成功的队列的数据包被输出。
申请公布号 CN101291546B 申请公布日期 2011.09.14
申请号 CN200810114737.0 申请日期 2008.06.11
申请人 清华大学 发明人 赵有健;杨珂;徐明伟;全成斌
分类号 H04Q11/00(2006.01)I;H04L12/56(2006.01)I 主分类号 H04Q11/00(2006.01)I
代理机构 北京众合诚成知识产权代理有限公司 11246 代理人 朱琨
主权项 核心路由器交换结构协处理器,其特征在于,所述交换结构协处理器是在大规模可编程数字集成电路芯片FPGA和FPGA片外存储器中实现的,由上行模块和下行模块组成,其中:上行模块,它包括下列功能子模块:包输入接口模块、包分路器模块、第一路反压模块、第二路反压模块、6个先进先出存储器:FIFO10、FIFO11、FIFO12、FIFO20、FIFO21、FIFO22、第一路包分片模块、第二路包分片模块、第一路信元缓存管理模块、第二路信元缓存管理模块、第一路队列调度模块、第二路队列调度模块、第一路信元发送模块、第二路信元发送模块、流量控制模块、以及上行CPU接口电路模块;其中:包输入接口模块,它有一个外部先进先出数据包存储器FIFO的输入端,从外部上行FIFO读取数据包,过滤掉无效数据,过滤后的每个数据包,有且只有一个头标识和尾标识;包分路器模块,它的输入端和包输入接口模块的数据包输出端相连,对输入的数据包,根据设定的状态,对包的头标识进行识别,以包为单位分为两路,第一路发送到FIFO10,第二路发送到FIFO20;FIFO10、FIFO20各自的数据包输入端分别和所述的包分路器模块的数据包输出端相连;包分路器接收第一路反压模块和第二路反压模块信号,在第一路反压模块或第二路反压模块信号无效的情况下,根据设定的状态,对接收包的头标识进行识别,以包为单位进行分路,包分路器支持4种分路方式:(1)数据包优先分配给FIFO10,只有在第一路反压模块反压信号有效的情况下,第二路反压信号无效的情况下,数据包才分配给FIFO20,(2)数据包在FIFO10和FIFO20之间均匀分配,(3)数据包只分配给FIFO10,(4)数据包只分配给FIFO20,在实际运行时,可以根据情况设定系统在一种分路方式下工作;第一路包分片模块从FIFO10接收数据包,第二路包分片模块从FIFO20接收数据包,分别把数据包分片为76或128字节的信元,为每个信元加上符合CSIX‑L1协议的信元头,CSIX‑L1信元头后面紧接的是负载数据,负载数据包含一个流量管理TM头,该TM头包括:源线卡号、信元标识、信元序列号、类型和优先级,一个信元含有8位优先级:TM头含优先级中的5位,信元扩展头中含优先级的3位,第一路包分片模块将分成的信元发送给FIFO11,第二路包分片模块将分成的信元发送给FIFO21;FIFO11和FIFO21,它们的数据输入端分别和第一路和第二路包分片模块输出端相连,而它们的读输入端分别和第一路信元缓存管理模块、第二路信元缓存管理模块各自的读FIFO输出端分别连接;第一路信元缓存管理模块和第二路信元缓存管理模块分别从FIFO11、FIFO21读入信元,分别把信元中具有相同目的线卡号和优先级的数据,按照分片的顺序存放在同一个队列中,不同目的线卡号和优先级的信元组成不同的队列,每个队列信息以链表保存;信元存储器按照最大信元的大小被分成大小相等的2N个存储块,N取不小于13的自然数,每个存储块存储一个信元,组成每个存储块的存储单元地址是连续的,一个数据包拆分成一个以上的数据信元,这些数据信元保存在不同的存储块中,这些存储块在存储器中的位置可以是互不相邻;信元缓存管理模块采用链表队列对信元存储空间进行管理,它包含两类链表:信元队列链表和空链表,信元队列链表的链表节点保存每个队列包含的信元信息,空链表保存外部信元存储器中没有利用的所有存储块信息,两类链表都保存在外部链表存储器中,动态共享链表存储器空间,信元存储器每个存储块的起始地址和链表存储器中链表节点存储地址一一对应,链表的每个节点单元存储地址指示每个存储块的起始地址,单元的存储内容,指示属于同一个链表的下一个链表节点的地址;信元缓存管理模块每接收到一个信元,就要从空链表中找到队头节点对应的存储块,将信元数据存入该存储块,并将该存储块对应的链表节点从空链表中删除,同时将他插入到它所属的信元队列链表尾部;每个信元缓存管理模块都各有一个片内状态存储器,每个队列是否存在信元的状态信息保存在状态存储器中,状态存储器一个存储单元对应一个队列,因为信元缓存管理模块支持1024个单播队列,1个多播队列,信元状态存储器至少有1025个存储单元,其中1024个存储单元存储1024个单播队列的状态,1个存储单元存储一个多播队列的状态,每个单元分别用“1”或“0”表示对应的队列是否存在信元,两个信元缓存管理单元都分别管理1024个分成64个优先级的单播队列、以及一个不分优先级的多播队列;流量控制模块,接收来自交换结构下行模块的流控数据,并将到达的流控数据发送到第一路队列调度模块、第二路队列调度模块以及第一路信元发送模块、第二路信元发送模块;所述的第一路队列调度模块和第二路队列调度模块,队列调度采用带加权的优先级调度规则,多播没有优先级,为了便于调度,也给多播定义一个加权值,系统支持64个单播优先级,每种优先级定义一个加权值,优先级越高对应的加权值就越大,每个队列初始的加权和值都为0,队列调度模块周期性地从信元缓存管理模块得到1024个单播队列和1个多播队列的状态信息,若某个队列状态信息为0,则置该队列的加权和值为0,如果某个队列的状态信息不为0,则该队列的加权和值等于该队列原来的加权和值再加上该队列优先级对应的加权值,队列调度模块对1025个队列进行周期性的调度,调度出当前加权和值最大的队列号传送给信元缓存管理模块,每次调度完毕,应该对调度成功队列的加权和进行更新,更新后的调度成功队列加权和等于未调度之前的加权和减去该队列优先级对应的加权值;信元缓存管理模块根据接收的调度信息,通过队列链表得到该队列第一个信元节点的存储起始地址,从外部信元缓存中读出信元,发送到FIFO12或FIFO22,并更新信元队列状态存储器的相应存储单元,同时,信元缓存管理模块要将输出信元的存储块对应的链表节点从所属队列链表中删除,同时将该节点插入到空链表的尾部;外部信元存储器未使用空闲存储块个数小于等于16时,信元缓存管理模块发出外部信元存储器快满信号给各自相连的FIFO11或FIFO21,同时停止从FIFO11或FIFO21读入信元,如果后来通过信元的发送,未使用空闲存储块个数增加,信元缓存管理模块继续从各自相连的FIFO11或FIFO21读入信元;第一路信元发送模块和第二路信元发送模块根据采自流量控制模块的链路级流量控制信息,决定是否分别从FIFO12、FIFO22中读取信元发送到外部的交换结构,如果流量控制信息有效,说明交换结构没有准备好接收信元,则不读FIFO12或FIFO22,不进行信元发送,否则,流量控制信息无效,说明交换结构准备好接收信元,则读FIFO12或FIFO22,进行信元发送;上行CPU接口电路模块使得所述的上行模块中各个功能子模块与线卡上的CPU模块互连,CPU模块发送指令对上行模块各个子模块的运行进行控制,同时通过CPU模块指令能够读出各个功能子模块的当前运行状态信息,供用户监控上行模块的运行使用;下行模块,它包含下列功能子模块:第一路信元处理模块、第二路信元处理模块、流量控制模块、数据包发送模块以及下行CPU接口模块,其中:第一信元处理模块和第二信元处理模块包括:交换结构接口模块、信元FIFO模块、包重组模块、数据片FIFO模块、数据包缓存管理模块、队列调度模块、以及数据包FIFO模块;除了交换结构接口模块有双时钟外,其它模块都只采用下行模块主时钟CLK做为工作时钟;其中:交换结构接口模块:包括第一路交换结构接口模块和第二路交换结构接口模块,第一路交换结构接口模块输入端和交换结构出口输出的信元开始信号SOF0、奇偶校验信号PAR0、32位信元数据信号data0、数据同步时钟CSIX_CLK0相连,同时它也接收第一路信元FIFO模块的存储空间快满反馈信号,和下行模块主时钟CLK相连;第二路交换结构接口模块输入端和交换结构出口输出的信元开始信号SOF1、奇偶校验信号PAR1、32位信元数据信号data1、数据同步时钟CSIX_CLK1相连,同时它也接收第二路信元FIFO模块的存储空间快满反馈信号,和下行模块主时钟CLK相连;交换结构接口模块将接收的信元区分为单播、多播和流控信元,完成单播、多播和流控信元的分离,并将分离出的单播和多播数据去掉CSIX‑L1信元基本和扩展头,保留扩展头中的优先级信息,信元扩展头中的优先级信息和余下的信元负载部分发送给各自的信元FIFO模块;如果信元FIFO模块反馈给交换结构接口的FIFO快满信号有效,则交换结构接口模块将接收的信元以一个完整的信元负载为单位丢弃,不发送给信元FIFO模块;除了交换结构接口模块有双时钟外,下行模块的其它子模块都只有一个下行模块主时钟CLK;交换结构接口模块还提取信元中的链路级流量控制信息,分离出流量控制信元,这些信息发送给流量控制模块;信元FIFO模块:包括第一路信元FIFO模块和第二路信元FIFO模块,它们各自输入端和所述各自相连交换结构接口模块输出端相连,它的读信号来自包重组模块;包重组模块:包括第一路包重组模块和第二路包重组模块,它们各自的数据输入端分别和对应的信元FIFO数据输出端以及信元FIFO是否为空的指示信号相连,此外,它还接收各自相连的数据片FIFO反馈的快满信号,如果数据片FIFO反馈的快满信号无效,包重组模块就从信元FIFO中读取去掉CSIX‑L1头的信元负载数据,根据信元负载数据流量管理TM头中的源线卡号、信元标识、信元序列号、类型和信元8位优先级来判断接收的信元是否正确,包重组模块去掉负载数据的TM头,去掉TM头的CSIX‑L1负载称为数据片,按照TM头中的源线卡号、类型和信元优先级不同,数据片分属于不同队列,如果数据片来源的源线卡号、类型和优先级相同,则它们属于同一队列,共1040个队列:1024个单播队列,16个多播队列,包重组模块将数据片和数据片对应的队列号传送给数据片FIFO;包重组模块含有一个序列号存储器,序列号存储器为1040个队列的每一个队列分配一个存储单元,用来记录每个队列预期接收的信元序列号,利用序列号存储器包重组模块能识别和标识错误的数据包;数据片FIFO模块:包括第一路数据片FIFO和第二路数据片FIFO,它们的数据输入端与各自相连的包重组模块的输出端相连,它的读信号来自各自相连的数据包缓存管理模块;数据包缓存管理模块接收队列调度模块输出的队列调度信息、数据包FIFO快满信号,数据包缓存管理模块还和片外数据缓存和链表存储器相连;数据包缓存管理模块:包括第一路数据包缓存管理和第二路数据包缓存管理,它们的数据输入端和各自相连的数据片FIFO数据输出端相连,数据包缓存管理模块将来自数据片FIFO具有相同源线卡号和优先级的数据片,按照接收的顺序存放在同一个队列中,一个数据包由一个或多个数据片组成,数据包缓存管理模块总共支持1024个单播队列,16个多播队列,共1040个队列,单播队列分成64个优先级,多播队列不分优先级,采用链表结构进行数据包存储的队列管理,为了进行数据包的存储管理,数据包缓存管理模块外接两个存储器,一个存储器,做为链表存储器,一个存储器做为数据片存储器,数据片存储器被分成大小相等的2N个存储块,N取不小于13的自然数,每个存储块存储一个数据片,组成每个存储块的存储单元地址是连续的,一个数据包由一个以上的数据片组成,这些数据片保存在不同的未使用的空闲存储块中,这些空闲存储块在存储器中的位置可以是互不相邻,每个存储块的起始地址和链表存储器中的链表节点存储地址一一对应;链表存储器保存链表,链表的每个节点单元存储地址指示每个数据片的起始地址,单元的存储内容,存储数据片信息,同时存储属于同一个队列的下一个链表节点的地址,数据包缓存管理模块也包含两类链表:数据片队列链表和空链表,这两类链表的建立、删除、插入方式和信元缓存管理模块一样;数据包缓存管理模块含有数据包队列状态存储器,该存储器保存每个数据包队列是否存在数据包的状态标识信息,每个存储单元取值为0或1,1表示相应队列含有完整数据包,0表示不含完整数据包,队列状态存储器一个存储单元对应一个队列;外部数据片存储器的未使用存储块个数小于等于16时,数据包缓存管理模块停止从各自的数据片FIFO读入数据片,如果后来通过数据片的发送,未使用存储块个数增加,数据包缓存管理模块继续从各自相连的数据片FIFO读入数据片;队列调度模块:包括第一路队列调度模块和第二路队列调度模块,它们的输入和输出端与各自相连的数据包缓存管理模块相应的输入输出相连,队列调度模块为所有多播队列定义一个加权值,为64个单播优先级,每种优先级定义一个加权值,优先级越高对应的加权值就越大,每个队列初始的加权和值都为0,队列调度模块周期性地从数据包缓存管理模块得到1024个单播队列和16个多播队列的状态信息,若得到某个队列状态信息为0,则置该队列的加权和值为0,如果某个队列的状态信息不为0,则该队列的加权和值等于该队列原来的加权和值加上该队列优先级对应的加权值,队列调度模块对1040个队列进行周期性的调度,调度出一个加权和值最大的队列号传送给数据包缓存管理模块,每次调度完毕,应该对调度成功队列的加权和进行更新,更新后的调度成功队列加权和等于该队列调度之后的加权和减去该队列优先级对应的加权值;数据包缓存管理模块根据接收的调度信息,从片外缓存中读出调度成功的队列中含有的队列头数据包的所有分片,发送到数据包FIFO,并更新数据包队列状态存储器的相应存储单元,同信元缓存管理模块一样,数据包缓存管理每发送一个数据片,都要进行队列链表节点的删除操作和空链表的插入操作;数据包FIFO模块:包括第一路数据包FIFO模块和第二路数据包FIFO模块,它们各自把从数据包缓存管理模块收到的数据包发送给数据包发送模块,数据包发送模块以包为单位,交替从第一路数据包FIFO模块和第二路数据包FIFO模块中读取数据发送给交换结构协处理器相连的外部下行FIFO;流量控制模块,它的输入端分别接收第一路、第二路信元处理交换结构接口模块的输出流控数据总线fc0、fc1,以及第一路和第二路信元处理模块信元FIFO快满信号,流量控制模块的输出接上行流量控制模块数据输入端;下行CPU接口模块,它使得下行模块内部各个功能模块与线路接口卡上的CPU模块进行互连,CPU模块发送指令对下行模块运行进行控制,也能够根据CPU模块指令读出其各个功能子模块内部状态信息。
地址 100084 北京市100084-82信箱