用于交叉存取的无阻塞的数据包缓冲的方法与装置的制作方法

文档序号:6540506阅读:185来源:国知局
专利名称:用于交叉存取的无阻塞的数据包缓冲的方法与装置的制作方法
技术领域
一个网络转送器从与其连接的多个数据入口接收数据包并将这些数据包送至与其连接的多个数据出口。该转送器要根据包含于数据包中的目标地址来确定数据包被传至的数据出口。从数据入口接收的数据包在送至数据出口之前被存于该转送器中的一个存储器中。
该转送器中的存储器可以是一个共用存储器,从所有入口接收的所有数据包在被送至出口之前均被存于其中。无阻塞转送器允许从所有入口接收的所有数据被送至出口。无阻塞转送器通常包括一个共用存储器,以便每个接口可以获得最大的存储容量。
共用存储器转送器的速度取决于该存储器的带宽。存储器的带宽取决于存储器的存取时间,和存储宽度即每段存储器存取时间内存取的字节数。例如,如果共用存储器为64字节宽并且其存取时间为80毫微秒(ns),则其写入或读出64个字节需80ns。如果与该转送器连接的一个数据入口在以每秒100兆位(M)二进制位的速度接收数据,则每10ns接收一个二进制位,每80ns接收一个8个二进制位的字节,并且每5120ns接收64个字节。64字节的数据被接收之后,执行一个写存储器周期,以一个单一的存储器访问把这64个字节写入64字节宽的存储器中。该数据入口用80ns的存储器带宽每5120ns把所接收的数据写入存储器,这样,64字节宽存取时间为80ns的存储器可支持64(5120ns/80ns)个每秒100M二进制位的接口。对于与该转送器连接的64个接口,每个接口周期为80ns。一个80ns的接口周期为每个接口提供每个周期一次的存储器访问。
要增大在每个接口周期中获得的存储带宽,需要作到下述的一点或几点缩短存储器的存取时间,增大存储宽度(即每个存储周期中二进制位读/写的数量),或者降低接口的数量。增大存储宽度受数据包最小规模的限制。缩短存储器存取时间受存储器的最小存储存取时间的限制。
也可以通过交叉安排存储单元来增大存储带宽,例如,把第一个数据包写入第一个存储单元,把第二个数据包写入第二个数据单元。然而,转送器中的交叉数据会导致阻塞,例如倘若接口A和接口B同时都要求访问第一个存储单元时。阻塞入口与出口的数据传递会导致数据包的丢失,因此,这种方法不能用来增大无阻塞转送器的存储带宽。
该包存储管理器包括读地址逻辑线路,用于在存储器中选择一个读地址,以便在接口周期进行读操作,还包括一个写地址逻辑线路,用于选择一个写地址,以便在由读地址逻辑线路选择的读地址上进行写操作。写地址逻辑线路选择写地址取决于读地址,这样,读写操作就能在一次单一的存储访问中同时进行。包存储管理器立足于对于每个出口的一个口队列和一个口队列中未存信息的地址的空闲表。管理器从输入的数据包中读取网络目标地址以确定一个合适的出口或该数据包将被存入的接口。管理器以从空闲表中去掉一个存储段地址的方式,把一个数据包段写入存储器,其作法是,把该段地址存在该数据包段所指的每个口队列的末尾,并把该数据包写入存储器中由该段地址所指明的地址。同时,位于每个口队列开头的一个地址指明将由管理器读取的数据包段。
数据包存储管理器中的读地址逻辑线路包括一个用于每个出口的口队列。该口队列存储由每个入口写入存储器的数据的存储器单元。口队列选择逻辑线路选择该口队列,从中去掉一个依赖口周期的存储地址。读选择逻辑线路根据从口队列去掉的存储地址选择该存储单元,从中读取信息。
存储器在物理上被分成几个组。组的数据最好为三个或四个。包存储管理器中写地址逻辑线路包括一个用于每个组的组空闲表。每个组空闲表储存存储器的组中可得到的单元的地址。写地址逻辑线路中的写选择逻辑线路选择一个组空闲表,从中去掉一个写地址。写选择逻辑线路可选择一个组空闲表,以便数据包的连续被写入存储器的交叉相间的奇数组与偶数组中。
写地址逻辑线路还可以包括用于每个组的组空闲表计数器。组空闲表计数器储存该组中可获得的单元的数量。写选择逻辑线路可根据该组空闲表计数器中的数量选择一个组空闲表。同时进行的读写操作可对同一个口进行也可以对不同的口进行。


图1A为一个无阻塞共用存储器转送器的方块图;图1B为可在一个入口接收的现行技术的以太网数据包的方块图;图2为描述在转送器中数据从入口经共用存储器到出口的传递的时间分配图;图3为描述图1A中所示的数据包存储管理器106的方块图;图4为描述图1A中所示的在物理上分为两个组的段缓冲存储器108的方块图;图5为描述用于在图4所示的两组缓冲存储器的在图3所示的读地址逻辑线路302的方块图;图6为描述用于在图4中所示的两组段缓冲存储器的在图3中所示的写地址逻辑线路的方块图;图7为描述图4中所示的两组段缓冲存储器的读、写地址的时间分配的时间分配图;图8为描述为在图4中所示的两组段缓冲存储器选择和写地址的步骤的流程图;图9为描述在图1A中所示的在物理上被分为四组的段缓冲存储器的方块图;图10为描述用于在图9中所示的四组段缓冲存储器的在图3中所示的读地址逻辑线路的方块图;图11为描述用于在图9中所示的四组段缓冲存储器的在图3中所示的写地址逻辑线路的方块图;图12为描述用于在图9中所示的四组段缓冲存储器的读与写地址的时间分配的时间分配图;图13为描述用于在图9中所示的四组段缓冲存储器的偶数组的选择读与写地址的步骤的流程图。
转送器100包括一个入口驱动器104和一个出口驱动器110。数据包在入口102串行接收。入口驱动器104对所接收的数据包中的标题进行检测与处理,根据被检测的标题确定哪个出口112转送数据包,并为该数据包生成一个转送矢量114。转送矢量114是一个位映射,具有与多个出口112中的每个出口对应的一个二进制位,指明该数据包是否要被转送到那个出口112。转送矢量114被转送至包存储管理器106。
包存储管理器106提供对段缓冲存储器108的访问。包存储管理器106为对段缓冲存储器108的读与写操作提供段缓冲存储器地址122并把所存的每个数据包在段缓冲存储器108中的单元存储在管理器106中。出口驱动器110通过选择控制信号120在多个出口112中选择将在其上传送数据包的一个出口,并把所储存的数据包提供给所选的出口112。
段缓冲存储器108是由所有入口102和出口112共享的一个共用存储器。转送器100是无阻塞的,也就是说,抵达任何一个入口102的数据包可无阻塞地被转送至任何一个出口112。转送器100提供同时进行的处理,即由入口驱动器104对在入口102接收的数据包进行的处理,以及由用于出口112的出口驱动器110对所存数据包的处理。
在数据包在一个入口102被串行接收的同时,该串行数据被分组而成为数据段。数据段被写入缓冲段存储器108。数据段的宽度根据入口102和出口112所使用的网络协议预先确定。例如,对于以太网协议,数据段的宽度为64个字节,因为以太网数据包的最好数据包规模为64个字节。
图1B是描述可在入口102接收的现地技术的以太网数据包120的方块图。该以太网数据包包括一个标题122,数据字段134和一个帧校验序列132。标题122包括一个目标地址124,一个源地址126,和一个长度或类型字段130。数据包120的大小取决于数据字段134的大小,可能在从46个字节到1500个字节之间变化。
图2是描述在转送器100中在入口112处接收的数据通过段缓冲存储器108转送至出口112的时间分配图。该时间分配器是连同图1A中的三口转送器(N=2),即具有三个入口102和三个出口112的转送器的方块图一起进行描述的。
在三个入口102的每个入口处,从时间200至时间202,一个数据段被串行接收。时间200与时间202之间的数据段时间间隔是在入口102接收数据段所占用的时间。在接收数据段的同时,入口驱动器104根据数据包在标题中的目标地址124来确定数据将被转送至哪个出口122。在时刻202,所有的数据均已被接收,并可通过包存储管理106写入到段缓冲存储器108中,在接收下面的数据包的时间206之前,包存储管理器106把所接收的所有数据包均写入段缓冲存储器108。
数据段时间间隔204被分成口周期时间间隔208,在每个数据段时间间隔204为与转送器100连接的每个口指定一个口周期时间间隔208。口周期时间间隔208是存储器访问周期,也就是说,提供给每个口的时间用于对段缓冲存储器108进行访问。在时间210,包存储管理器106把在入口0102接收的数据段写入段缓冲存储器108。从时间212至时间214,包存储管理器106把在入口1102接收的数据段写入缓冲存储器108。在时间214,在入口0接收的数据段可以在存储器中获得并可由出口驱动读出并转送至出口1。在时间214,包存储管理器106把在入口2102接收的数据写至段缓冲存储器108。在时间216,在入口接收的数据段可在存储器中获得并可由出口驱动器读出并转送到出口2。在时间216,包存储管理器106把在入口0102接收的下一个数据段写入段缓冲存储器108。在时间218,在入口2接收的数据段可在缓冲段存储器108中获得并可由出口驱动器110读出并转送到出口0112。
这样,就象它们在接口102被接收一样,数据段由包存储管理器106写入段缓冲存储器108。在所接收的数据段被写入的同时,数据段能够从段缓冲存储器108读出。入口102永远不会被对段缓冲存储器108的写操作阻塞,而出口112永远不会被对段缓冲存储器108的读操作阻塞。
图3是描述在图1A中所示的包存储管理器106的方块图。包存储管理器106同时处理来自入口驱动器104(图1A)的段缓冲存储器108进行写操作的要求和来自出口驱动器110(图1A)的对段缓冲存储器108进行读操作的要求。
包存储管理器106包括写地址逻辑线路300,读地址逻辑线路302,口时间分配逻辑线路304,以及地址选择逻辑线路312。写地址逻辑线路300提供段缓冲存储器108中可把来自入口102(图1A)的数据段存入其中的单元读地址逻辑线路302提供段缓冲存储器108中的已存入供出口112用的数据包的单元。
地址选择逻辑线路312把读地址310和写地址308转送至缓冲段存储器地址122。口时间分配逻辑线路304根据一个时钟306输入信号生成一个口周期314。在每个预定的数据段周期时间204,口时间分配逻辑线路304为一个预定数量的时钟周期一成口周期3 14,一个口周期时间208,并为口102,112中的每个口生成一个口周期314。数据段周期时间204取决于在任何一个入口102(图1A)串行接收一个数据段所用的时间。根据口周期314为口102,112选择读地址310和写地址308。如图所示,可由口时间分配逻辑线路304把相同的口周期314提供给写地址逻辑线路300和读地址逻辑线路302,或者可由口时间分配逻辑线路304把不同的口周期314提供给写地址逻辑线路300读地址逻辑线路302。
在每个口周期314的起点,根据口周期314,在读地址逻辑线路302中口队列的开头读地址逻辑线路302为该口选择一个预先排队的读地址310。写地址逻辑线路300根据读地址逻辑线路302选择的读地址310为口周期314选择一个写地址。
地址选择逻辑线路312通过段缓冲存储地址122把写地址308和读地址310送至缓冲段存储器108。将被写入段缓冲存储器108的数据包的写地址308在读地址逻辑线路302中进行列队。将从缓冲段存储器108中读出的数据包读地址302在读地址逻辑线路302中进行排队。写地址逻辑线路300和读地址逻辑线路302将在图5,6,10和11中更详细地示出。
图4是描述在图1A中示出的在物理上被分为两组108A和108B的段缓冲存储器108的方块图。段缓冲存储器108的每一组有一个关联的存储地址,地址-A400和地址-B402。2组地址选择逻辑线路404根据在写地址308中的被编码的段缓冲存储器108的组把写地址308送至地址-A400或地址-B402。2组地址选择逻辑线路404根据在读地址310中被编码的缓冲段存储器108的组把读地址310送至地址-A400或地址-B402。例如,读地址310和写地址308的最主要的位(“MSB”)可被用于确定段缓冲存储器108的组108A,108B以及将由2组地址选择逻辑线路404传送的写地址308和读地址310。写地址逻辑线路300(图3)和读地址逻辑线路304(图3)确保在同一周期314(图2)期间发出的读地址308和写地址310用于段缓冲存储器的不同的组108A,B。对段缓冲存储器108的一个组的一个读访问与对段缓冲存储器108的另一个组的一个写访问同时出现。
图5是描述用于在图4中所示的两组段缓冲存储器404的在图3中所示的读地址逻辑线路302的方块图。读地址逻辑线路302包括口队列选择逻辑线路512,口队列510和读地址选择逻辑线路506。口队列510储存将被提供给出口112的数据包在段缓冲存储器108中的单元的地址。每个出口112被赋予一个独立的口队列510。当一个数据段被写入段缓冲存储器108时,已写入该数据段的单元,写地址308,被储存(或排队)于一个或多个口队列510。写入写地址308的口队列510由口队列选择逻辑线路512确定。口队列选择逻辑线路512根据转送矢量114选择口队列510。转送矢量114的生成已结合图1A进行了描述。
在存于口队列510中的写地址308中的数据段被将有一个拷贝送至其处的每个出口从段缓冲存储器108读出之后,所存的写地址308被从口队列510中清除。
图6是描述在图2中所示的用于在图4中所示的两组段缓冲存储器108A,108B的写地址逻辑线路300的方块图。用于两组段缓冲存储器108A,108B的写地址逻辑线路包括一个两组写选择逻辑线路600,一个用于组-A的空闲表606,一个用于组-B的空闲表608,一个用于组-A的空闲表的计数器604,一个用于组-B的空闲表的计数器610和一个写地址选择逻辑线路602。
每个空闲表606,608储存空闲表各自的在段缓冲存储器108A,108B的组中可得到单元,而数据可被写入这些单元。用于组-A的空闲表606储存在段缓冲存储器108A的组-A中可得到的单元,而用于组-B的空闲表608储存在段缓冲存储器108B的组-B中可得到的单元。
在一个口周期时间314内,两组写选择逻辑线路600根据读地址310对从中提取写地址308的空闲表606,608进行判断。可根据读地址310的SMB或读地址310的其他任何位对段缓冲存储器108A,108B的组进行选择。例如,如果两组写选择逻辑线路图600由读地址310判断出读地址310用于段缓冲存储器108A的组-A,则写地址从用于组-B的空闲表608中提取。如果读地址310B用于段缓冲存储器108B的组-B,则写地址从用于组-A的空闲表606提取。这样,一个数据段可从段缓冲存储器108的一个组读出。同时,另一个数据段被写入段缓冲存储器108的另一个组。
如果两组写选择逻辑线路600判断出读地址310用于段缓冲存储器108A的组-A,它就通过ENA-B信号618启动组-B空闲表608以便组-B空闲表608能为写地址选择逻辑线路602提供一个组-B地址614。由于一个地址从组-B空闲表608去掉,两组写选择逻辑线路600生成一个更新计数A信号的作为/更新计数值A信号,就降低了数B的空闲表计数值610。
在数据段被写入段缓冲存储器108中由写地址308指明的单元的同时,写地址308被从各个空闲表606,608中去掉,并且写地址308根据转送矢量114被写入一个或多个口队列306的末尾。一个拷贝计数值626被存入拷贝计数逻辑线路624供写地址308使用。拷贝计数值用于跟踪多投放数据包,也就是说,跟踪为一个以上的出口112排队的数据包。在由写地址308指明的单元被写地址逻辑线路302(图3)读取之后写地址308被送还各空闲表606,608,并且与写地址308相关的拷贝计数值被置为零。
如果在当前的口周期314没有数据段要被读取,并且有一个数据段要被写入,则两组写选择逻辑线路600对空闲表606,608进行判断,根据空闲计数值604,610从606,608中提取写地址308。两组写选择逻辑线路600通过作为/更新计数A信号622和作为/更新计数B信号616从用于组-A的空闲表计数值604和用于组-B的空闲表计数值610获得当前的计数值。用于组-A的空闲表表计数值632和用于组-B的空闲表计数值630被送至两组写地址逻辑线路600。具有最大计数值的空闲表计数值604,610指明段缓冲存储器的最不满的组108A,108B。两组写地址逻辑线路路600对计数值进行比较并根据是组-A计数值632还是组-B计数值630更大来生成一个EN-A620信号或一个ENA-B618信号。具有最大计数值604,610的空闲表606,608被选择。写地址308以所选择的空闲表606,608选择。这样,由于数据段被写入段缓冲存储器108,它们即被均匀地分布在段缓冲存储器的两个组108A和108B中。
图7是一个分时图,用于对图6中所示的两组段缓冲存储器108的读、写地址的时间划分进行描述。在每个数据时间片204中,为与转送器100连接的64个口中的每个提供了对缓冲存储器的两次访问。数据段时间片204是在64个口中的任何一个口上接收一个数据包段的时间。这样,数据段时间204是可得到的最大的时间,在该时间内为与与转送器100连接的每个口把一个数据包段存入段缓冲存储器108中。
数据段时间片204取决于数据在一个入口112被接收的速度以及传送数据所提供的网络协议。例如,如果所用的网络协议是100兆赫的以太网协议,在每个口上每10ns接收一个比特,每80ns接收一个字节,每5120ns接收一个最小规模为64字节的数据包。这样,对于与转送器100(图1A)连接的64个100MHz的以太网口中的每个口而言,对于80ns的口周期,每5120ms可储存一个最小规模的数据包。
每个口被指定一个口周期208,在此期间对段缓冲存储器108进行访问。在每个口周期时间208中,能够在段缓冲存储器108的不同地址读出或写入一个数据段。口周期时间208取决于数据段时间片204和与转送器100连接的口的数量。
在时间700,一个数据段时间片204的开头,通过启动帧脉冲信号生成一个帧脉冲,帧脉冲信号可用于对口分时逻辑线路304(图3)进行初始化。在700,用于口0的口周期208开始。一个用于入口0的写地址可被送至段缓冲段存储器108A,同时,用于出口0的一个读地址可被送至段缓冲段存储器108的B组108B。
在时间702,用于口1的口周期208开始。用于入口0的一个读地址可被送至段缓冲段存储器108A,同时,用于出口0的一个写地址被送至段缓冲段存储器的B组108B。
在时间704,数据段时间片的末端,通过启动帧脉冲信号生成一个帧脉冲。在数据段时间片204期间,为与转送器连接的64个口中的每个口生成一个口周期。
图8是一个流程图,用于描述包存储管理器106为在图3中所示的两组段缓冲存储器108A,108B选择读、写地址而采用的步骤。如图8所示,对于每个口周期314,读、写地址用于同一个口,即,入口102和出112是同一个口。然而,象所示出的那样,入口102和出口112不必是同一个口,读地址和写地址可以用于不同的口。图8的描述结合图4至7进行。
在步骤800,两组写选择逻辑线路500要判断是否有对出口112的正在进行的读操作。如果有正在进行读操作,处理转步骤802继续进行。如果没有正在进行的读操作,处理转822继续进行。
在步骤802,两组写选择逻辑线路600判断地址通过存储访问送逻辑线路312送往段缓冲存储器中的哪个组108A,108B。如果读地址310用于组-A108A,处理转至步骤812继续。如果读地址310用于组-B108B,处理转至步骤804继续。
在步骤804,两组写选择逻辑线路600判断是否有正在根据口周期314进行的写操作。如果有对该口正在进行的写操作,处理转步骤810继续。如果没有,处理转步骤806。
在步骤810,两组写选择逻辑线路600从用于组-A的空闲表606提取段缓冲存储器组-A108A中的一个可得到的单元的地址。来自用于组-A的空闲表604的组-A地址612被选作由写地址选择逻辑线路602使用的写地址308。用于组-A的空闲表计数604被判断。写地址308和读地址310通过存储器访问逻辑线路312被送至段缓冲存储器的各组108A,108B。处理在步骤808继续进行。
在步骤806,读地址通过存储器访问逻辑线路312被送至段缓冲存储器的组-B108B。处理在步骤808继续。
在步骤808,读操作完成之后。通过拷贝计数逻辑线路624对用于读地址的拷贝计数值624进行判断。如果拷贝值624为零,读地址310被送回组-B的空闲表608,并且组-B的空闲表的计数值610被降低。处理在步骤820继续。
在步骤822,写选择逻辑线路600判断是否有对该口正在进行的写操作。如果有对该口正在进行的写操作,处理在步骤824继续。如果没有,处理在步骤820继续。
在步骤824,写选择逻辑线路600从储存在组-A的空闲表计数器604中的计数值以及储存在组-B的空闲表计数器610中的计数值判断段缓冲存储器的哪个组108A,108B是最不满的。如果写选择逻辑线路判断出段缓冲存储器A108A是不满的,处理转步骤828继续。如果两组写选择逻辑线路600判断出段缓冲存储器的组-B108B是最不满的,处理转至830。
在步骤828,写选择逻辑线路600从组-A的空闲表604中去掉在段缓冲存储器的组-A108A中可得到的一个单元的地址。从组-A的空闲表606中选择一个地址612作为写地址选择逻辑线路602使用的写地址308。由于组-A地址612被从组-A空闲表606中去掉,组-A的空闲表计数值604被降低。写地址308通过存储器访问逻辑线路312(图2)被送至缓冲段存储器的组-A108A。
在步骤830,写选择逻辑线路600从组-B的空闲表608中去掉在段缓冲存储器的组-B108B中的一个可得到的单元的地址。从组-B的空闲表608中选择组-B地址614作为写地址选择逻辑线路602的写地址308。由于组-B地址614被从组-B的空闲表608中去掉,要对组-B的空闲表计数值610进行判断。写地址308通过存储器访问逻辑线路312(图2)被送至缓冲段存储器108B的组-B。
在步骤812,写逻辑线路600判断是否有正在对该口进行的写操作。如果有一个正在进行的写操作,处理转步骤816继续。如果没有,处理在步骤814继续。
在步骤816,写选择逻辑线路600从组-B的空闲表608中去掉在段缓冲存储器的组-B108B中可得到的一个单元的地址。从组-B的空闲表608中选择组-B地址614作为写地址选择逻辑线路602的写地址308。由于组-B地址614被从组-B的空闲表608中去掉,组-B的空闲表的计数值被降低。写地址308和读地址310通过存储器访问逻辑312(图2)被送至缓冲段存储器的各组108A,108B中。处理在步骤818继续。
在步骤814,写选择逻辑线路600通过存储器访问逻辑线路3312(图2)把读地址送至段缓冲存储器的组-A108A。处理在步骤818继续进行。
在步骤818,读操作结束之后,读地址的拷贝计数值被拷贝计数逻辑线路624降低。如果拷贝计数值为零,读地址310被送回组-A的空闲表606,并且组-A的空闲表计数值被提高。处理在步骤820继续进行。
在步骤820,口分时逻辑线路304(图2)被增至下一个口周期314。处理在步骤800为下一个口周期继续进行。
图9是描述在图1A中所示的段缓冲存储器的方块图,该存储器在物理上分为四个组,段缓冲存储器108Ae(A组-A,eeven偶数),段缓冲存储器108Ao(A组-A,oodd,奇数),段缓冲存储器108Be(B组-B,eeven偶数),段缓冲存储器108Bo(B组-B,oodd奇数)。该存储器在物理上可以根据存储地址的两个MSB而分为四组,例如,选择A或B组的MSB位以及选择奇数或偶数组的MSB-1存储地址。
段缓冲存储器108的每个组有一个相关的存储地址,地址-Ae 900与地址-Ao 902,地址-Be 904与地址-Bo 906。存储器脉冲逻辑线路312根据在写地址308中编码的段缓冲存储器108的组以及口周期把写地址308送至地址-Ae900,地址-Ao902,地址-Be904或地址-Bo906。存储器访问逻辑线路312根据在读地址310中编码的段缓冲存储器108的组以及口周期把读地址310送至地址-Ae900,地址-Ao902,地址-Be904或地址-Bo906。
在每个数据段时间内提供给每个口的存储带宽通过在每个数据段时间内为每个口提供两个口周期314,一个偶数口周期和一个奇数口周期的方式被增加一倍。在偶数周期内对偶数组108Ae,108Be进行访问而在奇数周期内对奇数组108Ao,108Bo进行访问。写地址逻辑线路300(图2)和读地址逻辑线路304(图2)保证在每个口周期内给出的读地址308和写地址310被用于缓冲段存储器的不同组108Ae,108Ao,108Be,108Bo。这样,在一个偶数周期内,对偶数组108Ae的读访问与对偶数组108Be的写访问同时出现。
通过在每个数据段时间内为每个口提供两个口周期并且对于每个口周期提供一个同时进行的读访问与写访问,段缓冲存储器108的带宽对于与转送器100连接的每个口而言被增加了三倍。这样,在每个数据段时间内,对于每个口而言,可对段缓冲存储器108进行四次访问。存储器访问成对提供,对一个偶数组的读操作与对另一个偶数组的写操作同时进行。
图10是描述在图3中所示的用于在图9中所示的四组段缓冲存储器108的读地址逻辑线路302的方块图。读访问逻辑线路302(图3)包括偶数/奇数口队列选择逻辑线路1000,用于每个出口112的一个口队列510,以及偶数/奇数读地址选择逻辑线路1004。对于一个四组段缓冲存储器108,口分时逻辑线路304(图3)为预定数量的时钟周期生成一个偶数口周期1006和一个奇数口周期1008并且在每个数据段时间片(图2)中生成一个偶数/奇数信号1010。结合图10对一个偶数口周期1006和一个奇数口周期1008的分时图的例子进行描述。
口队列510已经结合图5进行了描述。偶数/奇数口队列选择逻辑线路1000根据奇数口周期1006和偶数口周期1008的状态以及来自口分时逻辑线路304(图3)的偶数/奇数信号1010选择一个口队列510以读取信息。如果或者是奇数口周期1006或者是偶数口周期1008对于该口而言是现行周期,则从口队列510选择该口将要读取的下一个数据段并将其送至偶数/奇数读地址选择逻辑线路1004。
偶数/奇数读地址单元选择逻辑线路1004根据偶数口周期1006和奇数口周期1008的状态转送由口队列510提供的地址504。如果单元504是奇数单元并且该奇数口周期1008是现行周期,则单元504被转送至偶数/奇数读地址选择逻辑线路1004,但是如果单元504是奇数并且偶数口周期1006是现行周期,则单元504不被转送至偶数/奇数读地址选择逻辑线路1004,但是如果单元504是偶数则单元504要被转送。这样,在一个数据数时间里,如果数据段被存于段缓冲存储器108的奇数与偶数组中,则一个口可以从段缓冲存储器108读取数据段的两上单元。
图11是描述图2中所示的用于图9中所示的四组段缓冲存储器108的写地址逻辑线路的方块图。四组写选择逻辑线路1100为段缓冲存储器的四个组108Ao,108Ae,108Bo,108Be中的一个组选择一个写地址308。段缓冲存储器的每一个组108Ae,108Ao,108Be,108Bo均有一个相关的空闲表1112,1114,1116,1118和空闲表计数器1102,1104,1106,1108。
四组写选择逻辑线路1100对空闲表1112,1114,1116,1118进行判断,根据读地址310,偶数/奇数信号910,从空闲表中提取一个写地址。如果四组写选择逻辑线路1100从偶数/奇数信号910判断出存储器访问是用于偶数周期并且读地址310是用于缓冲段存储器的Ae组108Ae,则从Be组的空闲表1106提取一个写地址。如果四组写选择逻辑线路1100从偶数/奇数信号910判断出存储器访问是用于偶数周期并且读地址310是用于缓冲段存储器的Be组108Be,则从Ae组的空闲表1112中提取一个写地址。
如果四组写选择逻辑线路1100判断出读地址是用于缓冲段存储器的Ae组108Ae,它就通过ENA-3信号1134为Be组激活空闲表1116,以便用于Be组的空闲表1116能够为四组写地址选择逻辑线路1120提供一个Be组地址。由于一个地址从Be组的空闲表中去掉,四组写选择逻辑线路1100生成一个更新计数器Be信号以作为/更新计数器Be信号1140,通过降低组-Be的空闲表计数值1140来更新Be组的空闲表1116。
如果没有有效的读地址,则四组写选择逻辑线路1110对空闲表1112,1114,1116,1118进行判断,根据空闲表计数1102,1104,1106,1108从空闲表中提取写地址308。具有最大值的空闲表计数1102,1104,1106,1108指明具有最大量的可得到的单元的段缓冲存储器108Ae,108Ao,108Be,108Bo。与空闲表计数器1102,1104,1106,1108中的可得到最大量的单元有关的空闲表1112,1114,1116,1118被选择,以便提供段缓冲存储器108中将被写的下一个单元。这样,当数据写入时,就均匀地分布在缓冲段存储器的组108Ae,108Ao,108Bo,108Be之间。
例如,对于当前的口周期314而言没有读地址310,则两组写选择逻辑线路1100通过作为/更新计数值Ae信号1144和作为/更新计数值Be 1140信号从Ae组的空闲表计数器1102和Be组的空闲表计数器1106获得当前的计数值。组-Ae的空闲表计数值1102和Be组的空闲表计数值1106被送至四组写地址逻辑线路1100。两组写地址逻辑线路600对计数值进行比较,并根据组-Ae计数值1106或组-Be计数值1102哪个更大来生成一个ENA-1信号1130或个ENA-3信号1134。
空闲表写地址1122,1124,1126,1128中的一个地址被选择之后,写地址308通过四组写地址选择逻辑线路1120被送至段缓冲存储器108。拷贝计数值626被存于用于写地址308的拷贝计数逻辑线路624中。拷贝计数值626用于跟踪多投数据包,即,为一个以上的出口112排队的数据包。
图12是对在图9中所示的四组段缓冲存储器108的读地址与写地址的时间划分进行描述的分时图。在每个数据段时间片204中,为与转送器100连接的64个口中的每个口提供对段缓冲存储器的4次访问。数据段时间片204是在64个中的任一个口上接收一个数据段所用的时间。这样,数据段时间204是可得到的最大时间,在该时间内为与转送器100连接的每个口在段缓冲存储器108中储存一个数据段。
每个口被安排一个口周期时间208,在该周期中对段缓冲存储器108进行访问。在口周期时间208内,为一个口在数据段存储器的一个组中读出或写入一个数据段。口周期时间208取决于数据段时间片204以及与转送器100连接的口的数量。段缓冲存储器108(图1A)的访问时间取决于口周期时间208。
在1204,每个数据段时间片204的开头,通过给出一个帧脉冲信号而生成一个帧脉冲。该帧脉冲信号可用于对口分时逻辑线路304(图3)进行初始化。在1206,口0的偶数周期开始。口0的一个写地址被送至缓冲段存储器的Ae组108Ae,同时,口0的一个写地址被送至缓冲段存储器的Be组108Be。在时间1214,口32的奇数周期开始,口32的一个写地址被送至缓冲段存储器的Ao组108Ao,同时,口32的一个读地址被送至缓冲段存储器的Bo组108Bo。在口0的偶数周期的起点1206之后,口32的奇数周期的起点1214出现在半口周期时间208。偶数周期的起点与奇数周期的起点间的这一延迟允许在奇数周期与偶数周期期间在缓冲段存储器108中使用共用逻辑线路。如果不使用共用逻辑线路,奇数周期的起点与偶数周期的起点可以同时安排。
在口0的偶数周期开始之后。在1218,口0的奇数周期的起点被安排半个数据段时间204再加上半个口时间片208。该时间是图12中的延迟时间1220。例如,如果数据段时间片204是5120ns(64个字节,每字节8比特,每个比特10ns)并且口0的偶数口周期的起点1206开始0,则口0的奇数口周期的起点被安排在口0的偶数口周期的起点1206之后的2200ns(5120/2+40)。
在数据段时间片204中,转送器100能够按并是数据段的大小的倍数的字节计数值来接收数据包。这些数据包占用近乎等量的时间作为最小规模的数据包而被接收。例如,为了在一个数据段时间片204内储存在入口0接收的65个字节的数据包,在口0的偶数周期内前64个字节被写入段缓冲存储器108,而最后一个字节在口0的奇数周期内被写入段缓冲存储器108。
转送器100可以接收大于一个数据段的数据包。接收同一个数据包的数据时,四组写选择逻辑线路1100通过一个包信号1138来保证用于同一个数据包的连续数据段的写地址208选自交替的交替的偶数与奇数空闲表。例如,如果第一个数据段被写入选自偶数组-B的空闲表1116的写地址308,则下一个连续的数据段根据是否存在一个对组-A 108Ao或组-B 108Bo的读操作而被写入选自奇数组-B的空闲表918或奇数组-A的空闲表1114的一个写地址308。
图13是描述为在图9中所示的的四组段缓冲存储器的偶数组选择读地址与写地址的步骤的流程图。
在一个偶数口时间片内,段缓冲存储器的偶数组108Ae,108Be被选择。在奇数口时间片内,对段缓冲存储器的奇数组108Ao,108Bo的读地址与写地址执行相同的步骤。如图13中所示,在偶数口时间片内读与写操作针对同一个口,即,入口102与出口112是同一个口。如图所示,入口102和出口112不必是同一个口,读操作和写操作可以同时针对不同的口。图13的描述将结合图9至图12进行。
在步骤1300,四组写选择逻辑线路1100从指明对出口112的现行读操作的读选择逻辑线路1004判断是否存在有效的读地址310。如果存在一个现行的读操作,处理转1304步骤继续。如果没有,处理转1328步骤继续。
在步骤1304,四组读选择逻辑线路1004通过存储器访问逻辑线路312判断读地址将被送至段缓冲存储器的哪个偶数值108Ae,108Be。如果读地址310用于偶数组-A 108Ae,处理转步骤1308继续。如果读地址310用于偶数组-B 108Be,处理转步骤1306继续。
在步骤1308,四组写选择逻辑线路1100根据接口槽的号码402判断是否有现行的为入口102的写操作。如果有为入口进行的现行写操作,处理转1320继续。如果没有,处理转步骤1318继续。
在步骤1320,四组写选择逻辑线路1100通过ENA-B信号1134从用于偶数组-B的空闲表1116提取用于段缓冲存储器的偶数组-B的108Be的一个可得到地址。用四组写地址选择逻辑线路1100选择来自用于组-B的偶数组-B空闲表1116的偶数组-B地址1126作为写地址308。通过作为/更新计数值Ae信号1140来判断偶数组-B空闲表计数值1106。写地址308与读地址310通过四组读/写地址选择逻辑线路908(图9)被送至段缓冲存储器的各自的偶数组108Ae,108Be。处理在步骤1324继续。
在步骤1318,读地址310通过四组读/写地址选择逻辑线路908被送至段缓冲存储器的偶数组-A 108Ae。处理在步骤1324继续。
在步骤1324,读操作结束之后,读地址310被送回用于偶数组-A的空闲表1112并且用于偶数组-A的空闲表计数值1102被增加。处理在步骤1326继续。
在步骤1328,四组写选择逻辑线路1100判断是有对该口的现行写操作。如果有一个对该口的现行写操作,处理在步骤1330继续。如果没有,处理在步骤1326继续。
在步骤1330,四组写选择逻辑线1100从存在用于偶数组-A的空闲表计数器1102中的计数值以及存在用于偶数组-B的空闲表计数器1106中的计数值判断段缓冲存储器的哪个偶数组108Ae,108Be最不满。如果写选择逻辑线路判定段缓冲存储器的偶数组-A 108Ae最不满,则处理在步骤1334继续。如果四组写选择逻辑线路1100判断缓冲段存储器的偶数组-B 108Be最不满,则处理转至步骤1336继续。
在步骤1334,四组写选择逻辑线路1100从偶数组-A的空闲表1112中去掉在段缓冲存储器的偶数组-A 108Ae中可得到的单元的地址。由四组写地址选择逻辑线路1120从偶数组-A空闲表1112中选择组-A地址1122作为写地址308。由于偶数组-A地址1122被从偶数组-A空闲表1112中去掉,偶数组-A的空闲表计数值被降低。写地址308通过四组/写地址选择逻辑线路908(图9)被送至段缓冲段存储器的偶数组-A 108Ae。
在步骤1336,四组写选择逻辑线路1100从偶数组-B的空闲表1116中在段缓冲存储器的偶数B 108Be中可得到的一个地址。由四组写地址选逻辑线路1120从偶数组-B的空闲表1116中选择偶数组-B地址1126作为写地址308。由于偶数组-B地址1126被从偶数组-B的空闲表1106中去掉,偶数组-B的空闲表的计数值1116被降低。写地址308通过四组读/写地址选择逻辑线路908(图9)被送至缓冲段存储器的偶数组-B108Be。
在步骤1306,四组写选择逻辑线路1100判断是否存在一个为该口的现行的写操作。如果有一个现行的写操作,处理转步骤1316继续。如果没有,处理转步骤1312继续。
在步骤1316,四组写选择逻辑线路1100从偶数组-A的空闲表1112中去掉在段缓冲存储器的偶数组-A 108Ae中可得到的一个地址。由四组写地址选择逻辑线路1120从偶数组-B的空闲表1116中选择偶数组-A地址1122作为写地址308。由于偶数组-B地址1126被从偶数组-B的空闲表1112去掉,偶数组-B的空闲表计数值1102被降低。写地址308和读地址310通过四组读/写地址选择逻辑线路908(图9)被送至段缓冲存储器的各组108Ae,108Be。处理转步骤1322继续。
在步骤1312,四组写选择逻辑线路1100通过四组旋/写地址选择逻辑线路908(图9)把读地址送至段缓冲存储器的偶数组-A 108Ae。处理在步骤1322继续。
在步骤1322,读操作执行完之后,读地址310被送回偶数组-A空空闲表1112并且偶数组-A的空闲表计数值1102被增大。处理转步骤1326继续。
在步骤1326,与下一个偶数口时间片对应的处理开始。下一个偶数口周期906由口分时逻辑线路304(图2)确定。
本发明不受缓冲段存储器108(图1A)如结合图4-6所描述的被分成四组的限制,也不受如结合图9-13所描述的被分成四组的限制,该缓冲段存储器可被分成2N的任何数的组(其中N=1,2,3,4……)。
随着参照其优选的实施例对本发明进行的详细展示与描述,本技术领域的专业人士将会理解,在不背离由所附的权利要求所固定的本发明的范围的前提下,可以在形式与细节上进行各种各样改变。
权利要求
1.一种转送器,包括多个入口;多个出口;一个存储器,用于从多个入口中的任一入口接收数据流并向多个出口中的任一出口提供数据流;一个数据包存储管理器,为多个出口中的一个出口执行读操作,并为多个入口中的一个入口执行写操作,读操作与写操作在一个单存储器访问周期内对不同的存储单元进行。
2.如权利要求1所述的转送器,其中的包存储管理器还包括读地址逻辑线路,根据一个接口周期,在存储器中为读操作选择一个读地址;写地址逻辑线路,根据由读地址逻辑线路选择的读地址在存储器中为写操作选择一个写地址。
3.如权利要求1所述的转送器,其中的读地址逻辑线路包括一个接口队列,用于多个出口中的每个出口,该接口队列储存由管理器根据新接收的数据包中的网络目标写入存储器的数据的单元的存储地址;口队列选择逻辑线路,根据接口周期选择一个接口队列,从中去掉一个存储地址;逻辑线路,用于根据从所选口接口队列的开头去掉的存储地址来选择存储单元,并从该单元读取信息。
4.如权利要求3所述的转送器,其中的写地址逻辑线路包括一个接口队列中未被储存的地址的空闲表;写选择逻辑线路,用于为管理器在存储器中提供一个地址以写入一个数据包段,提供的方式是从空闲表中去掉一个存储段地址并把该段地址储存在该数据包段被引向的每个口队列的尾部,管理器把数据包段写入由该段地址指明的存储器中的单元。
5.如权利要求4所述的转送器,其中的存储器在物理上被分成多个组。
6.如权利要求5所述的转送器,其中组的数量为2。
7.如权利要求5所述的转送器,其中组的数量为4。
8.如权利要求5所述的转送器,其中的写地址逻辑线路还包括一个用于每个组的空闲表,写选择逻辑线路选择一个空闲表,从中去掉一个段地址。
9.如权利要求8所述的转送器,其中的写地址逻辑线路根据读地址选择一个空闲表。
10.如权利要求8所述的转送器,其中的写地址逻辑线路选择一个空闲表,这样,一个数据包的连续段被写入存储器的交插的奇数与偶数组。
11.如权利要求8所述的转送器,其中的写地址逻辑线路还包括用于多个组中的每个组的一个空闲表计数器,该空闲表计数器存有该组中可得到的单元的计数值,写选择逻辑线路根据该计数值选择一个空闲表。
12.权利要求1所述的转送器,其中的入口之一与出口之一是同一个口。
13.权利要求1所述的转送器,其中的入口之一与出口之一是不同的口。
14.一个转送器,包括多个入口;多个出口;一个存储器,用于从多个入口中的任一入口接收数据流并向多个出口中的任一出口提供数据流;一个装置,用于为多个出口中的一个出口执行读操作,并为多个入口中的一个入口执行写操作,读操作与写操作在一个单存储器访问周期内对不同的存储单元进行。
15.一个在权利要求14中所要求的传送器,其中用于执行操作的装置还包括一个装置,根据一个口周期为读操作在存储器中选择一个读地址;一个装置,根据由读地址逻辑线路选择的读地址在存储器中为写操作选择一个写地址。
16.一个在权利要求15中所要求的传送器,其中用于选择读地址的装置包括一个口队列,用于多个出口中的每个出口,该口队列中存有由执行写操作的装置根据在新接收的数据中的网络目标地址写入存储器的数据的单元的存储地址;一个装置,用于根据口周期选择口队列,从中去掉一个存储地址;一个装置,用于根据从所选的口队列的开头去掉的存储地址择一个存储单元,从中读出信息。
17.一个如在权利要求15中所要求的传送器,其中用于选择读地址的装置包括一个口队列中的未被存入信息的地址的空闲表;一个装置,用于从空闲表中去掉一个存储段地址,并把该段地址存到该段被引至的每个口队列的末尾,并提供该地址用于由执行读写操作的装置把数据包写至由该段地址指明的存储器中的单元。
18.一个如在权利要求17中所要求的传送器,其中的存储器在物理上被分成多个组。
19.一个如在权利要求18中所要求的传送器,其中组的数量是2。
20.一个如在权利要求18中所要求的传送器,其中组的数量是4。
21.一个如在权利要求18中所要求的传送器,其中,选择写地址的装置还包括一个用于每个组的空闲表,并且用于清除的装置选择一个空闲表以从中去掉一个段地址。
22.一个如在权利要求21中所要求的传送器,其中,选择写地址的装置根据读地址选择一个组空闲表。
23.一个如在权利要求21中所要求的传送器,其中,选择写地址的装置根据读地址选择一个组空闲表,以致于一个数据包的连接段被写入存储器的交插的奇数与偶数组。
24,一个如在权利要求22中所要求的传送器,其中,选择写地址的装置还包括用于多个组中的每个组的一个空闲表计数器,该空闲表计数器中存有可在该组中得到的单元的计数,选择写地址的装置根据空闲表计数器中所存的计数选择一个空闲表。
25.一个如在权利要求14中所要求的传送器,其中,多个入口中的一个入口与多个出口中的一个出口是同一个口。
26.一个如在权利要求14中所要求的传送器,其中,多个入口中的一个入口与多个出口中的一个出口是不同的口。
27.在一个转送器中共享一个存储器的一个方法,包括把数据流从多个入口中的任一入口接入存储器;把数据流从存储器送往多个出口中的任一出口;为多个出口中的一个出口执行读操作并且为多个入口中的一个入口执行写操作,读操作与写操作在一个单存储器访问周期内对不同的存储单元进行。
28.一个如权利要求27中所要求的方法,其中,执行读操作与写操作的步骤还包括按照一个口周期,在存储器中为读操作选择一个读地址;根据由读地址逻辑线路选择的读地址在存储器中为写操作选择一个地址。
29.一个如权利要求28中所要求的方法,其中,选择一个读地址的步骤包括把写入存储器的数据的单元的存储地址存入用于多个出口中的每个出口的一个队列,该口队列取决于新接收的数据中的网络目标地址;按照口周期选择口队列,从中去掉一个存储地址;根据从中队列中去掉的存储地址选择存储单元,从中读取信息。
30.一个如权利要求29中所要求的方法,其中,选择写地址的方式包括提供一个口队列中未存信息的地址的一个空闲表;从该空闲表中去掉一个存储段地址;把该段地址存至该段被引向的每个口队列的末尾;提从该地址以把数据包写入由段地址指定的存储器中的单元。
31.一个如权利要求30中所要求的方法,其中的存储器在物理上被分成多个组。
32.一个如权利要求30中所要求的方法,其中的组的数量为2。
33.一个如权利要求30中所要求的方法,其中的组的数量为4。
34.一个如权利要求30中所要求的方法,其中选择写地址的步骤包括把可得到的单元的地址存入用于多个组中的每个组的一个组空闲表中;从多个组空闲表中选择一个组空闲表;从所选择的空闲表中去掉该写地址。
35.一个如权利要求33中所要求的方法,其中,根据读地址来选择组空闲表。
36.一个如权利要求33中所要求的方法,其中,组空闲表被选择,以致于一个数据包的连续段交替地写入存储器的奇数与偶数组中。
37.一个如权利要求35中所要求的方法,其中,选择写地址的步骤还包括把可得到单元的计数存入用于多个组中的每个组的一个组空闲表计数器中;根据该计数选择一个组空闲表。
38.一个如权利要求27中所要求的方法,其中,多个入口中的任一入口与多个出口中的任一出口是同一个口。
39.一个如权利要求27中所要求的方法,其中,多个入口中的任一入口与多个出口中的任一出口是不同的口。
全文摘要
执行存储器的交叉存取以增大一个无阻塞转送器的共用存储器的带宽。转送器从多个入口接收数据包,将这些数据包储存在共用存储器中,并将这些数据转送至多个出口。共用存储器在物理上被分为两组以提供两路交叉存取。两路交叉存取的实现方式是从一个组读取将被转送至一个出口的一个数据包,同时把一个入口接收的一个数据包写入其他组。共用存储器在物理上被分为四组以提供四路交叉存取。四路交叉存取的实现方式是同时读与写两个偶数组或两相奇数组。还提供组平衡技术以使共用存储器的组处于同水平的占用率。
文档编号G06F12/06GK1385015SQ00814958
公开日2002年12月11日 申请日期2000年8月21日 优先权日1999年8月31日
发明者戴维·A·布朗 申请人:睦塞德技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1