具体实施方式
参考图13,示出了分组交换机105,其包括一个和多个线性插件106,108,在本领域中也称为附属插件。线性插件106,108的一端和核心网络107或其它分组交换机或路由器连接。线性插件106,108的另一端和一个或多个交换机插件109连接。线性插件106接收来自核心网络107的分组并且将它们发送到交换机插件109,而且线性插件108接收来自交换机插件109的已交换的分组并将它们发送到核心网络107。在很多实施例中,线性插件106是双向的。可能提供中间平面(没有示出)来使在线性插件106,108和交换机插件109之间的互连更方便。
每一交换机插件109具有多个输入端口和多个输出端口。从单独的交换机插件109的角度来看,线性插件106是输入线性插件,因为它们提供分组到交换机插件109的输入端口,而线性插件108是输出线性插件,因为它们接收来自交换机插件109的输出端口的分组。交换机插件109的功能是将在它的输入端口中的其中一个输入端口接收的每一个分组发送到由分组本身指定或在其中的输出端口。在这种情况下,交换机插件109显示出自路由功能。为提供该功能,在优选实施例中,交换机插件109包括在其上驻留自路由交换结构的半导体衬底(或者“晶片”或“芯片”)110。在一些实施例中,芯片110可能是CMOS硅芯片,来平衡存储器密度、逻辑速度和开发成本,但是其它实施例不需要限制于CMOS、硅、半导体或甚至是电子器件。
应该理解术语“交换结构”的意义不限制于传统路由和/或分组交换应用,而是延伸到覆盖其它需在发送方和接收方之间暂时或永久的建立信号路径的应用。
图1示出了根据本发明的实施例的交换结构100,其包括N个“单元”114j,1≤j≤N,在交换机插件109内的单一芯片110上实现。像本文的其余部分中应理解的一样,“单元”是在数据分组上执行处理的实体。该处理可能是数据分组的交换或其它类型的处理。
单元114装备有用于和芯片外环境接触的输入/输出(I/O)接口。I/O接口通常指的是允许它和外部世界通信的单元的功能元件,在一个实例中,这个元件可能是芯片外(off-chip)的线性插件106。在示出的实施例中,每一个单元114包括用于接收来自一个或多个输入线性插件106的输入接口116和用于提供已交换的分组到一个或多个输出线性插件108的输出接口118。在其它实例中,I/O接口可能是在单元上的单独的I/O端口的集合。
在示出的非限制性实施例中,输入接口116和在芯片110上的管脚连接,芯片110的管脚被连接到在线性插件109上的迹线(traces)116”,其迹线116”通过可释放的连接器116’被连接到线性插件106。但是迹线116”不必需被包括在或嵌入在交换机插件109中并且不必需是电子器件;例如,在考虑使用基于磷化铟的交换结构的实施例中,可能优选导光的(guided)或自由空间的(free-space)光输入和输出。
另外,每一个单元114都装备有一个或多个发送器140和一个或多个接收器150。在不同单元中的发送器和接收器之间的通信通过包括“前向”信道和“反向”(或“向后”)信道的预先确定的互连图形(interconnect pattern)112的方式达成。前向信道被布置成允许在给定单元中的发送器140发送分组到在它自己的单元和/或一个或多个其它单元中的专用接收器150。相反的,在给定单元中的每一个接收器150专用于通过适当的前向信道来接收要么来自在它自己的单元、要么来自在一个其它单元中的发送器140的分组。这样,可以说发送器功能性地延伸进那些放置有它的专用接收器的单元,最终结果是在给定单元上的发送器在发送分组时不需要和在其它单元中的其它发送器竞争。向后信道包括从特定接收器传送控制信息到相关联发送器的专用连接,其沿着前向信道从该发送器接收分组。在不同单元中的单独的发送器在功能上是独立的。
互连图形112定义了一个或多个单元阵列(arrays of cells)。如在这里使用的,词“阵列”意在指定彼此连接的单元组。因此,在其中的互连是每一单元都不和每个其它单元直接通信的情况的实例中,芯片可能具有多个阵列。阵列的最基本的形式是彼此连接的两个单元。
在本发明的一个实施例中,互连图形112允许每一个单元发送数据到它自己和交换结构100的每个其它单元,并从其接收数据和访问控制信息。图10示出了在N=4,并且每一单元具有单一的发送器140和N=4个接收器150的情况下的这个特征。可以观察到在单元114j中的接收器150j是接收由在单元114j中的发送器140发送的分组的回送接收器(loopback receiver)。图19示出了如图10所示的相同的逻辑互连图形112,也就是,每一单元发送数据到它自己和交换结构100中的每个其它单元,并且从其接收数据和访问控制信息;但是,N=16并且单元被物理地布置在4×4矩阵中。为简单起见,仅仅示出了前向信道。
参考图11,示出了另一种选择的互连图形112,其中提供了十六个单元,每一个具有两个发送器140A,140B和八个接收器150。十六个单元114被布置在方形矩阵构成中,由此位于给定的行的、属于每一个单元的发送器140A被连接到位子相同的行中的、每一其它单元的接收器,并且位于给定的列的、属于每一单元的发送器140B被连接到位于相同列的、每一其它单元中的接收器。一个发送器对应八个接收器的事实有助于调节到更大数量的单元。在这个情况下,每个单元中有两个回送接收器,虽然在其中只有一个回送接收器或没有回送接收器的实施例也在本发明的范围之内。
虽然可为了简化芯片的整体设计,将在芯片110上的单元114做成在结构上和功能上彼此相同,但这不是一个必需。例如,图12部分的示出了在本发明范围之内的再一个可能的互连图形,其中单元中或单元组中的不对称被引入进设计中。如所示的,提供了十六个单元114,也布置在矩阵构成中,每一个具有单一的发送器140和一个或多个接收器150。图12的互连结构是“树”形特征的,其可能在特定情况中具有优势。特别的,树形结构包括一些相互琏接的单元阵列。在一个阵列中,单元#1适用于发送分组到单元#2,#3,#4,#5,#6,#7,#8,#9,#10,#11和#13,而在另一个阵列中,单元#7适用于发送分组到单元#5,#6,#8,#9,#10,#11,#12,#13,#14,#15和#16。为简单起见,图12仅仅示出了使得可以从单元#1和单元#7进行传输的连接。
仍然可以设计另一个不脱离本发明精神的互连图形。例如,在一个N×1交换结构的实施例中,单元可能被物理的实现为N/2×2的阵列,因为这提供了在N×1的物理实现的较简单配线和√N×√N的物理实现的较短配线之间的有优势的平衡。在另一实施例中,可能创建单元的三维阵列(或“立方体”)并且还提供一个或多个具有多个发送器的单元。
在这样的结构中还可能有多种变化的互连图形。例如,在使用8×8×8单元的设计中,将每一单元设计为包括三个发送器(一个对应“列”,一个对应“行”而且一个对应“线”),以及24个接收器,一个发送器对应于如正在涉及的单元的在同一列、行和线的每一个单元。如果单元还以对角线方式连接,则发送器和接收器的数量在单元中将不一样。例如,在立方体中心的单元将包括另外的四个发送器和32个接收器,而八个位于立方体顶点的单元每一个都将包括另外的八个接收器和一个发送器。
为了在单一的半导体衬底中利用现今可用的巨大互连性,可以使用像在这里所描述的单元来创建其它比如超立方体(hypercube)和三维(或更高维)环面网格(toroidal mesh)的图形。注意到措辞“维度”,在这里并不需要指单元物理布局的空间延伸,而是描述在单元组之间的功能关系。这样可能实现这样的单元阵列,其中单元被功能性地布置在三维或更多维中,而单元物理地占据或多或少相同的平面或占据半导体衬底的三维平面堆(stack of planes)或者其它区域。这样,在本发明的范围之内,有利于在平版印刷中取得优势,其将增加在芯片上的可允许的电路密度,从而允许在物理上两维或三维空间的衬底上逻辑地实现四维的交换结构。
另外,应该正视,虽然可能需要根据特定的互连图形来互连N个单元,但利用所需互连图形是其子组(subset)的互连图形,可将更大量的单元初始设计在半导体衬底上。在平版印刷和制造时,有故障的单元将被检测出,并且这些(连同那些可能是一些无缺点的单元,但是它们在N个单元以外)单元可以以电子的或者以别的方式使其失效,从而将其排除在芯片上需要的互连图形的N个完全可操作的单元之外。
图2中详细示出了在其中每一单元发送分组到它自己和每个其它单元,并从其接收分组的情况中,组成实例性单元(即,单元1141)的功能模块的实例性布置。可以看出,单元1141包括发射器140,N个接收器1501...150N,输入接口116,输出接口118和仲裁器260。将在之后详细描述的本发明的其它实施例,可能在每一单元中包括用于产生和处理特定控制信息的中央处理器(CPU,在图2中没有示出)。
对当前可利用的CMOS半导体或者用于比如砷化镓和磷化铟的半导体化合物的导光或自由空间的光器件使用电气通信是有利的。在其它实施例中,输入接口116和输出接口118可能使用多种媒介和技术和芯片外的环境通信,包括但是不限制于声波、无线电频率和机械通信。
输入接口116从芯片外的分组转发模块226通过数据路径252接收分组并且将它们通过数据路径230转发到发送器140。通过一组free_slot线207提供关于发送器140的占用信息到输入接口116;输入接口116沿着控制路径254将这个信息提供到芯片外的分组转发模块226。
接收器150被连接到仲裁器260,其通过数据路径202被连接到输出接口118。输出接口118通过数据路径256提供分组到芯片外输入队列228。通过输出接口118,以与业务流相反的方向将关于芯片外输入队列228的占用信息以almost_full标志208的形式提供到接收器150。这个功能也可能由外部向后信道提供。
互连图形112包括“前向”信道210j,1≤j≤N,以及“反向”(或“向后”)信道212j,k,1≤j≤N,1≤k≤N。前向信道210j由在单元114j中的发送器140使用来发送分组到对应的位于每一单元114k,1≤k≤N中的接收器150j。向后信道212j,k由在单元114k中的发送器140使用来访问来自在单元114j中的接收器150k的控制信息。这样,在这个实施例中,总共有N个前向信道,一个对应每一单元,并且有N2个向后信道,每一个对应每一单元对的组合。
交换结构100处理被组织为分组的数据。每一这样的分组具有一个或多个字,其中字的大小通常是固定的。在一个实施例中,前向信道210被选择为1比特宽从而允许串行传送数据。在另一个实施例中,前向信道的宽度被选择为至少能够允许包括到一个单独字中的两个或两个以上比特的并行数据传送。在再一个实施例中,前向信道210被选择为足够宽的宽度,从而允许包括一个单独字中的所有比特的并行数据的传送。
另一方面,向后信道212传送和前向信道210的需要容量相比带宽相对低的控制信息,并且因此单独的向后信道可能被设计为串行链路或一个具有与前向信道相比较低的并行度的信道。注意到因为N2个向后信道携带比较主数据路径而言少得多的信息,它们可以比前向信道210窄很多(就是说,一个到几个比特宽)或慢很多;另一种选择,来自多个向后信道的数据可能被多路复用到一个单一的物理信道上等。应该注意到,其中向后信道被设计为以并行方式传送信息的布置在本发明的范围之内。
应该理解术语“分组”意在一般地指定信息单位。这个定义的范围包括,但是不限制于,固定长度的数据包(datagram),可变长度的数据包,信息流和其它信息格式。分组的多种特性,比如它的长度,
优先权级别,目标等,可以在分组自身中提供或分开提供。
图3更详细地示出了适合用于本发明的分组350的结构。特别的,分组350的第一字(或字组)组成了所谓的“报头”(header)360并且分组350的剩余字组成了所谓的“有效负载”370。在非限制性的实例性实施例中,报头360的大小是一个单一的字,并且有效负载370的大小在从7个字到23个字的范围。在本发明的范围之内的不同实施例中,在每一分组的字的数量可能是固定的或者它可能从一个分组到另一个发生变化。
报头360具有包括控制信息的多种字段。例如,报头360可能包括:目标字段362、优先权字段364以及源字段366。目标字段362指定那个期望分组单元最终从其离开交换结构100的单元。这个单元可能被称为“目标单元”。目标字段362可能将目标单元以任何合适的方式编码,例如使用二进制码来代表目标单元或在目标单元的位置使用具有逻辑“1”的二进制掩码。
在本发明的一些实施例中可以提供多点通信功能,这时可能在给定分组350的目标字段362中指定多于一个目标单元。但是,暂时假定每一个分组仅仅和一个目标单元相关联,对多点通信情况的考虑将留到本文后面的部分。
优先权字段364将和分组350相关联的优先权级别编码。和分组350相关联的优先权级别基本上向交换结构100指示正在涉及的分组被转发到它的目标地址的相对紧急程度(relative urgency)。优先权级别的设置可包括经过例如8比特(表示包含在0和255之间的值)编码的细微渐变的范围。在其它实施例中,优先权级别的设置可能简单的包含“高”,“中”和“低”优先权级别。
在单独考虑单一交换结构的情况下,源字段336是可选择的。但是,当如图1所示类型的多个交换结构100互连时,对于下行流的交换结构,处理从上行流的交换结构接收的分组来知道在上行流交换结构中的哪个单元实际上发送这个分组可能是有用的。这种信息可能适于包含在分组350的报头360的源字段366中。
当然,应该了解仍然有并没有在图3中示出的其它的报头字段可能用于存储另外的涉及分组350的控制信息。例如,在目标单元中目标为CPU的分组可能在报头中被标识的方式就像由在给定单元中的CPU产生的分组那样。这个功能将在后面更详细的描述。在其它的实例性实施例中,报头360可能还包括一系列一个或多个“交换结构芯片”出口端口,该出口端口定义了通过多级结构的预先确定的路径。另外,对在线性插件上的每一端口,可能有一个或多个子端口。特定分组以其为目标的子端口可能在分组的报头360中的一个字段中被标识。
因为分组可能具有固定或可变数量的字,因此每一字通常具有固定数量的比特(就是说,每一字是固定的“宽度”)。例如,字可能包括,即,33比特,其中32比特可能携带实际信息(其对报头360和有效负载370是不同的类型),并且第33个比特可能是“分组结束”比特368,它是在当那个字是从那个它所属的分组的结束处起是预定数目的字时为这个特定字设置的。这样,连续字的分组结束(EOP)比特368中的变化检测就允许实体来处理字流,以定位新分组的开始。特别的,当这样一个实体检测到在EOP比特的下降沿时,将期待在属于当前分组的预先确定的附加字数量的接收后开始下一个分组。
本领域的普通技术人员将了解指示分组的长度和/或开始的另外的方式,例如,在字数量的方面,在指定分组的长度的报头360中包括附加的字段。当然,当每一分组是已知的和固定的长度时不需要这种方式,因为为了建立一个分组的终结和另一个分组的开始,字计数器可以被用作参考。像可以被本领域普通技术人员了解的那样,附加的比特可能用于例如奇偶校验和其它功能。
穿过图2的交换结构100的分组经历了三个主要的传输级(transmission stages),第一级包括将分组从芯片外环境发送到给定单元,如单元114J,其中通过该单元的输入接口116;接收时,发送器140开始将分组写入位于那个单元的存储器的过程。第二级包括将分组从在单元114J中的发送器140沿着对应的前向信道210J发送到驻留在目标单元中的接收器150J;接收时,分组被由在目标单元中的接收器150J写入存储器位置。最后,第三级包括将分组从在目标单元的接收器150J通过仲裁器260和通过那个单元的输出接口118发送。在所示的实施例中,输出端口118被连接到提供另外的缓冲和反馈这个缓冲状态的芯片外输入队列228,因此允许一种过量供应的交换结构,以传递那些暂时超出下一个链路容量的字符组。
根据本发明的一个实施例,仅当下行流具有足够空间来容纳分组的情况下,才考虑到具有给定优先权级别的分组的优先权级别,在特定级将其发送。这个功能通过在传输的每一级提供一种分组传输控制机制来达成,以调节分组流和达成大部分所需的整体功能。但是,本发明的范围也允许省略一个或多个控制机制。
在第一级,芯片外分组转发模块226通过参考由发送器140经由控制路径254提供的占用信息来控制从芯片外环境到单元114J的分组流。实例性的芯片外分组转发模块226将在后面更详细的描述;现在,提到使用占用信息来保证仅在如果发送器140能够容纳那个分组的情况下才发生到单元114J的分组的传输是有利的就足够了。
在第二级,如果支持无损传输,则对于控制机制来说有利于保证在单元114J中的发送器140不发送分组到在目标单元中的接收器150J,除非正在涉及的接收器能容纳那个分组。(目标单元可能是单元114J本身,但是更普遍的表示114j,1≤j≤N)。这种控制系统的实例性实施例将在下面描述;现在,提到在单元114J中的发送器140使用向后信道212j,J来监控位于单元114j中的接收器150J中的单独的存储器的状态(占用),从而确定分组是否可以被那个接收器容纳就足够了。
在第三级,在这个实施例中,在目标单元中的接收器150J依赖于almost_full标志208,该标志提供关于芯片外输入队列228的占用信息。这个控制机制将在下面详细的描述;现在,提到在目标单元中的接收器150J被阻止请求传输分组,除非它可以被芯片外输入队列228所容纳就足够了。
本领域的技术人员将通过对下面附加参考图4,5和7以及图2的一般单元的单独功能模块的更详细描述而更全面的了解分组传输的多个级和它们的相关控制机制。
在单元114J中发送器140的一个实例性的非限制性的实现将参考图7进行描述。发送器140具有包括多个存储区域的存储器,这些区域包括数据存储器702,多个控制存储器712,以及由多个队列控制器710的任何存储器和由发送器140使用的任何其他存储器。
发送器140从输入接口116沿着数据路径230接收字。字被通过一组数据输入端口反馈到数据存储器702。数据存储器702对应于分别通过write_address线716和write_enable线718从分组插入模块704接收的写地址和写使能信号是可写入的。write_address线716携带数据存储器702中的地址,其中当前数据路径230的数据将被写入该数据存储器702,而在write-enable线718上断言信号(asserting)触发了将这一字定稿到指定地址的实际操作。为了协调在数据存储器702中分组的到达和在write_address线716和write_enable线718中的信号的产生,数据路径230可能在进入输入存储器702的数据输入端口之前经过可选择的延时器件706。
在这个实例中,数据存储器702包括N个段713,一个对应于在芯片110上的N个单元的每一个。第j个段713j具有存储总共M个目标为单元114j的分组的容量。更特别的是,第j个段713j包括M个槽708j,A,708j,B,...708j,M,每一个槽具有可以容纳一个分组的大小。应该理解根据本发明的操作需要,本发明可应用任何N和M的合适的组合。在其它实施例中,数据存储器702可能包括能够存储部分流入数据流的存储器库(pool of memory)。
和数据存储器702的每一段713j相关联的是一个专用的队列控制器710,特别是队列控制器710j。队列控制器710j可访问相关联的控制存储器712j。控制存储器712j拥有表示数据存储器702的对应段713j的占用度的数据。术语“占用度”应该被理解为包含指示在数据存储器702中空间量的信息,以及包括能够直接或间接的提供这样信息的任何数据。在一些实施例中,这个信息可被表示为空闲度或占用度。在其它实施例中,控制存储器712包括多个入口714j,A,714j,B,...714j,M,这些入口存储在数据存储器702的第j个段713j中各自槽708j,A,708j,B,...708j,M的占用状态(就是说,占用或未占用)。另外,对于每一个占用的槽,对应的入口存储占据那个槽的分组的优先权级别。例如,在一个实施例中,控制存储器712j和/或入口714j,A,714j,B,...714j,M可能采用寄存器的形式。
不同的槽可被关联到不同的优先权级别,或者,如果有大量可能的优先权级别,则不同的槽可被关联到不同的优先权“类别”,比如“低”,“中”和“高”。例如,给定256个可能的优先权级别(0到255),低和中优先权类别可由对应于结构的一个优先权级别100的“低-中”优先权阈值来分开,而中和高优先权类别可由对应于优先权级别200的“中-高”优先权阈值来分开。
在本发明的一个实施例中,每一段包括每优先权类别的至少一个槽。通过实例的方式,数据存储器702的第j个段713j可能包括五个槽708j,A,708j,B,708j,C,708j,D,708j,E,其中708j,A和708j,B和高优先权类别相关联,槽708j,C和708j,D和中优先权类别相关联,708j,E和低优先权类别相关联。当然,应该了解,本发明包括其它数目的每段槽以及其它的槽和优先权类别的关联。例如,一个实施例可能允许高优先权分组进入任何槽,同时为高优先权分组唯一保留一些槽。
分组插入模块704可操作来监控通过数据路径230接收的在每一字上的EOP比特368,以定位新接收分组的报头。回想EOP比特368对在其所属分组中特定位置出现的字经历了转变(例如,下降沿)。以这种方式,EOP比特368的检测和监控为分组插入模块504提供了何时接收新分组的指示,以及,因为报头360位于分组的开头,因此当新分组的报头360到达时,分组插入模块704将知道。
分组插入模块704进一步可操作来从每一新接收分组的报头360中提取控制信息。这种信息包括新接收的分组的目标和它的优先权级别,以确定它应该被放到数据存储器702中的哪个槽中。分组插入模块704首先确定新接收的分组被装载入哪个段。通过从新接收分组的报头中提取目标字段来确定分组以其为目标的单元,从而达成这一点。目标字段标识N个单元114中的一个为目标单元。目标单元可能是单元114J自己但是更为普遍的指示114j。确定了和单元114j相关联的槽组之后,分组插入模块704确定接收的分组应被插入的槽。这通过确定所接收分组的优先权类别和验证和那个优先权类别相关联的槽的可用性来达成。
为此,通过比较分组的优先权级别和先前定义的优先权阈值,分组插入模块704确定分组的优先权类别。例如,使槽708j,A,708j,B,708j,C,708j,D,708j,E分别和高、高、中、中和低优先权级别相关联。而且,使低-中优先权阈值和中-高优先权阈值如先前所定义的,即,分别为100和200。例如,如果接收的分组的优先权级别是167,那么分组可以被写入的合适的槽包括708j,C和708j,D。
之后,分组插入模块704通过和队列控制器710j通信来确定哪个合适的分组是可用的,其中分组插入模块704和队列控制器710j通过各自的queue_full线726j和各自的new_packet线728j连接。另一种选择,可以使用总线结构来连接分组插入模块704和队列控制器710。在上述两种情况的任一情况中,分组插入模块704通过queue_full线726j获得和接收的分组的优先权类别相关联的槽的状态(也就是,占用或未占用)。
状态信息可能是包括一组和槽数量相等的位置比特的比特图形(bit pattern)的形式,其中在特定位置的逻辑值0表示对应的槽未占用,并且在那个位置的逻辑值1表示对应的槽确实被占用。以这种方式,对分组插入模块704来说很明显哪个和所接收的分组的优先权类别相关联的槽是可用的。
在上述实例中,当所接收的分组的优先权类别是“中”、并且槽708j,C和708j,D与中优先权类别相关联时,队列控制器710j将通过queue_full线726j提供槽708j,C和708j,D的占用情况。这个信息是通过参考在控制存储器712j中的入口714j,C和714j,D获得的。当然,队列控制器710j每次提供在存储器段713j中的所有槽的占用情况也包含在本发明的范围之内。
如果对于分组的优先权类别只有一个槽可用,那么这个槽被选择为所接收的分组将被写入的一个。如果对于分组的优先权类别有多于一个的可用槽,那么分组插入模块704可以自由选择这些槽中的任何一个来作为所接收的分组将被写入的一个。提供保证槽对分组的优先权类别一直可用的机制是有利的,因为这可以防止丢弃或拒绝分组。这种机制的实现的一种可能形式是在芯片外分组转发模块227上的调节电路,其仅在知道如果对具有正在涉及的优先权类别的分组在发送器140中有容纳空间的情况下,才发送到单元114J。这个特征将在本文后面进行更加详细的描述。
在确定了所接收的分组应该被写入的段和槽之后,分组插入模块704确定在数据存储器702中的对应的基地址。这可能要么通过计算对应于段的相对位置和槽的相对位置的偏移量来做出,要么通过参考将段和槽的组合映射到数据存储器702中地址的查找表来做出。
分组插入模块704适用于通过write_address线716提供基地址到数据存储器702,并且进一步适用于断言write_enable线718。在大致相同的时间,分组插入模块704沿着合适的new_packet线728j发送信号到队列控制器710j,这种信号指示要被写入的槽的标识和要占用那个槽的分组的优先权级别。队列控制器710j适用于通过更新状态和与标识的槽(在先前是未占用的)相关联的优先权信息来处理这个信号。
在所接收的分组的第一字被写入上面所确定的数据存储器702的基地址之后,随着沿着数据路径230接收到新的字,在write_address线716上的地址在每一个时钟周期(或在每多个时钟周期)增加。这将使得分组的字填充在数据存储器702中的所选的槽。同时,分组插入模块704监控在每一所接收字中的EOP比特368。当检测到一个新分组的时候,从新接收分组的报头360中提取控制信息的步骤重新开始上述过程。
除了是可写入的外,数据存储器702响应于由仲裁器760沿着read_address线792提供的读地址还是可读的。在一个实施例中,这可能被实现为双端口随机存取存储器(RAM)。在另外的实施例中,多个数据存储器702可能共享一个读端口,并且每一个具有独立的写端口。像要在后面更详细的描述的那样,仲裁器760启动从数据存储器702的读取作为通过对应的多个request线703从多个队列控制器710中接收的请求函数。如果对应的队列控制器710j需要将分组转发到单元114j中的接收器150J,则特定的request线703j将被断言。
将在这里描述适用于产生用于传输所接收分组的请求的队列控制器(如队列控制器710j)的一种可能的实现。特别的,队列控制器710j可操作来产生用于发送占用在数据存储器702中的槽708j,A,708j,B,...708j,M的可能的多个分组中的一个分组的请求。沿着对应的多个slot_id线705j中对应的一个提供将要发送的所选槽的识别,并在多个priority线707j中对应的一个上提供和所选槽相关联的优先权。
每一队列控制器710j实现确定所占用槽的标识的功能,其中该占用的槽拥有可被目标单元中的接收器容纳的最高优先权的分组。例如,这个功能可由逻辑电路合适的实现。通过实例的方式,可以将在单元114J的发送器140中的每一个队列控制器710j设计成验证在相关联的控制存储器712j的入口,以在与数据存储器702中的段713j相关联的所有占用的槽中确定拥有最高优先权的分组的槽的标识。队列控制器710j之后通过处理经由对应的向后信道212j,J接收的处理信息来评估在目标单元中的接收器的能力(也就是,在单元114j中的接收器150J),以容纳在所选槽中的分组。
在本发明的一个实施例中,在单元114j中的接收器150J将包括一组类似于在数据存储器702中的第j个段713j中的M个槽的M*个槽,尽管M*可能不同于M。在这种情况中,由向后信道212j,J携带的信息将指示每一个这些M*个槽的状态(占用的或非占用的)。(可能需要参考图5,其中接收器槽被指示为508。这个图将在后面描述接收器时更详细的描述)。这样,通过参考向后信道212j,J,在单元114J中的队列控制器710j可以知道它的最高优先权的分组是否可以被容纳在单元114j的相关联的接收器150J中。
如果最高优先权的分组确实可以被容纳,那么队列控制器710j把相关联的槽的标识放置在对应的slot_id线705j上,把分组的优先权级别放置在对应的priority线707j上,并且通过断言对应的request线703j来提交请求到仲裁器760。但是,如果高优先权的分组确实不能被容纳,那么队列控制器710j将在所有和在数据存储器702中的段713j相关联的被占用的槽中确定,拥有次最高优先权的分组的标识。像前面一样,这可以通过处理经由对应向后信道212j,J接收的信息来达成。
如果次最高优先权的分组确实可以被容纳,那么队列控制器把相关联的槽的标识放置在对应的slot_id线705j上,把分组的优先权级别放置在对应的priority线707j上,并且通过断言对应的request线703j提交请求到仲裁器760。但是,如果次最高优先权的分组确实不能被容纳,那么队列控制器710j在所有和在数据存储器702中的段713j相关联的被占用的槽中确定拥有次次最高优先权的分组的标识等等。如果没有分组可以被容纳,或者另一种情况下,如果没有槽被占用,那么队列控制器710j不产生任何请求,并且对应的request线703j保持未断言状态。
假定队列控制器710j已提交了请求并且其请求得到准许,则它将通过仲裁器760知道后面的情况。这个信息的交换可以通过许多方式达成。例如,仲裁器760可能通过在grant线711上发送唯一的编码来标识其请求被准许的队列控制器,并且,当准备完毕时,仲裁器760可能断言和队列控制器710共享的grant_enable线715。队列控制器710j可能因而通过以下方式来断定它的请求已得到准许:(i)检测通过grant线711从仲裁器接收的信号中的编码;以及(ii)检测已断言的grant_enable线715。
应该理解信令和检测已准许请求的其它方式也在本发明的范围之内。例如,可以提供分开的grant线给每一个队列控制器;当特定的队列控制器的请求被准许时,连接到该特定队列控制器的grant线将是唯一被断言的。
在接收其请求被准许的指示时,队列控制器710j访问在控制存储器712j中对应于槽的入口,该槽的分组现在面临在仲裁器760的控制下立即退出数据存储器702。特别的,队列控制器710j将那个特定的槽的状态改变到“未占用”,这将改变请求计算逻辑的结果,从而导致产生新的可能指定不同槽的请求。槽的改变的状态也将通过对应的queue_full线726j反映到基于该请求而随后提供到分组插入模块704的信息中。
还是在接收其请求已被准许的指示时,队列控制器710j断言返回到仲裁器760的对应的pointer_update线729j。像将在后面描述的仲裁器760一样,对一个pointer_update线729j的断言向仲裁器760指示它发出的准许已经被确认,允许仲裁器760基于可能是来自队列控制器710j的新请求和来自其它队列控制器710的待处理的请求来继续准备下一个准许。
仲裁器760的功能是准许从多个队列控制器710接收的请求中的一个,并因此控制从数据存储器720的读操作。为此,仲裁器760包括请求处理模块770,地址解码器780和分组转发模块790。
请求处理模块770接收来自队列控制器710的request线703,priority线707和pointer_update线729。请求处理模块770的功能是仅准许从队列控制器710接收的许多可能请求中的一个。请求处理模块770具有是grant线711的输出。grant线711被连接到每一个队列控制器710和地址解码器780。在本发明的一个实施例中,grant线711使用唯一的二进制码来标识其请求被准许的队列控制器。
地址解码器780接收来自请求处理模块770的grant线711和来自队列控制器710的slot_id线705。地址解码器780计算在数据存储器702中的基地址,该数据存储器702存储其传输被准许的分组的第一字。基地址被通过base_address线782提供到分组转发模块790。
分组转发模块790通过base_address线782接收需要从数据存储器702中提取的下一个分组的第一字的位置。分组转发模块790存储在base_address线782上的初始地址。一旦结束从数据存储器702中读取当前的分组,分组转发模块790断言grant_enable线715并且继续进行使得字被从数据存储器702中从初始的地址开始读取。
将参考图4描述请求处理模块770、地址解码器780和分组转发逻辑790的一个可能的实现。请求处理部分770包括请求产生器420,其通过request线703和priority线707被连接到队列控制器710。请求产生器420还和可编程轮循仲裁器(programmable round-robinarbiter)(PRRA)422通过多个request线424连接,并且可能进一步通过控制线413和指示器控制实体412连接。
请求产生器420适用于仅接受那些与在priority线707上指定的所有优先权级别中的最大优先权级别相关联的请求。为此,请求产生器420可能被实现为最大比较器,其输出所接收的优先权级别的最大值(最大到N);之后,这个最大值和所有在priority线707上接收的优先权级别比较,这将使当对应的一个request线703和最大优先权级别相关联时,单独的一个request线424被断言;其它的request线424保持未断言状态。随着这些最高优先权的请求被最终准许,队列控制器710将在request线703上产生新的请求,使得请求产生器420的输出随着时间而改变。
在request线424上的请求由PRRA 422处理。PRRA 422具有是提供到队列控制器710、指示器控制实体412和地址解码器780的共享的grant线711的输出。在可能的一个或多个被断言的request线中,仅仅一个将被PRRA 422准许作为由指示器控制实体412产生的“指示器”和“掩码”的功能。像已经描述的那样,grant线711标识其请求已被准许的队列控制器,以可以唯一地标识每一队列控制器710的二进制码的格式是合适的。
在一个实施例中,为一个或多个可能的优先权级别中的每一个定义指示器和掩码。和给定优先权级别相关联的掩码指示哪个和那个优先权级别相关联的队列控制器仍然保持未准许,而和给定优先权级别相关联的指示器指示哪个队列控制器710是最接近于使其请求被准许的一个。在多组指示器和掩码对中,指示器控制实体412在任何给定时间仅仅提交一个指示器和一个掩码到PRRA 422。
为计算指示器和掩码,指示器控制实体412需要在request线703和priority线707上的信息知识。可要么直接或要么通过控制线413从请求产生器420获得这个知识。另外,指示器控制实体412需要在pointer_update线729上传播的从队列控制器710接收的信息知识。像将在下面所理解的,提交到PRRA 422的指示器和掩码使得判定哪个队列控制器应该是下一个其请求被准许的情况是“公平”的。
为简化描述,但是不限制于本发明的范围,可以假定对每一可能的优先权级别不定义指示器和掩码,而是对每一组优先权类别进行定义,即高、中和低。同样,可以假定有四个队列控制器7101,7102,7103,7104,提交请求到请求产生器420。
通过实例的方式,使来自队列控制器7101,7102,7103,7104的请求分别和中、无、低和中优先权类别相关联。就是说,队列控制器7102没有提交请求。因此,初始的“高”掩码将是0000(因为没有请求具有高优先权类别),初始的“中”掩码将是1001(因为队列控制器7101和7104已提交了和中优先权类别相关联的请求),并且初始的“低”掩码将是0010(因为队列控制器7103已提交了和低优先权类别相关联的请求)。每一指示器的初始值将被设置为零,因为还没有任何请求被准许。
在这个实例中,最高优先权类别是中。因此,请求产生器420仅仅提交队列控制器7101和队列控制器7104的请求到PRRA 422的输入。另外,指示器控制实体412提供中指示器和中掩码到PRRA 422。作为结果,被准许的第一请求要么是队列控制器7101提交的,要么是队列控制器7104提交的。因为中指示器是零,因此PRRA 422可以选择准许哪个请求;这可以通过提供简单、无源的逻辑做出选择来解决。为不失一般性,使得第一个被准许的请求是由队列控制器7101提交的。在grant线711上的信号将因此被设置为编码值“1”,以指示在7101中的下标1。
像已经被描述的那样,队列控制器7101适用于通过pointer_update线7291的方式来确认它的请求被准许。任何由指示器控制实体412接收的确认使得它更新它的“有效的”指示器(也就是,被提供到PRRA422的那个)。在这个情况中,从队列控制器7101接收的确认使得指示器控制实体412将它的中指示器更新到1000。
注意到因为队列控制器7101的请求已经被准许,因此队列控制器7101将更新在控制存储器7121中的合适入口中的占用信息,这可能引起提交新的请求到请求产生器420。假定这时队列控制器7101的请求具有和先前相同的优先权类别,即,中。这使得中掩码成为0001,以指示队列控制器7104的请求在本轮中仍然没有被准许。
现在,假定队列控制器7103在此时提交了高优先权的请求。这使得仅队列控制器7103的请求通过请求产生器420。PRRA 422因此除了准许队列控制器7103的请求外没有别的选择。在grant线711上的信号可以因此被设置为编码值“3”,以指示在7103中的下标1。
队列控制器7103之后通过断言对应的pointer_update线7293来确认它的请求已被准许。由指示器控制实体412接收的这个确认使得它更新它的有效指示器,在这个情况中是高指示器将成为0010。注意到因为它的请求已被准许,因此队列控制器7103可能现在提交新请求,但是为这个实例的目的假定它没有。于是返回到先前具有最大优先权类别的请求来自队列控制器7101和7104的情形中。
这样,请求产生器420仅仅提交队列控制器7101和7104的请求到PRRA 422的输入,而指示器控制实体412提供中指示器(1000)和中掩码(0001)到PRRA 422。这向PRRA 422指示队列控制器7104在本轮中还没有被准许,并且最近的被准许的队列控制器是队列控制器7101。因此PRRA 422除了准许队列控制器7104外没有别的选择,即使队列控制器7101也提交了具有相同优先权类别的请求。尽管如此,因为队列控制器7101的请求已在上次被准许,所以这个结果仍然是公平的。
因此,应该理解到使用指示器和掩码可以导致公平的仲裁过程。在指示器和掩码没有被提供到PRRA 422的情况中,PRRA的简单逻辑将持续准许队列控制器7101的请求,每次都返回到队列控制器7101处于具有最高优先权类别的队列控制器组之中的情形。这样,很明显指示器控制实体412允许PRRA来以真正公平的方式来准许请求;在上述实例中,防止队列控制器7101不公平的独占数据路径202。
本领域的技术人员应该认识到其它用于在多个请求中仲裁的技术也在本发明的范围之内。例如,虽然指示器控制实体412在将PRRA 422
转换为公平的轮循仲裁器上是有用的,但它并不是本发明的一个必需。事实上,即使一个简单的优先权比较器也可以达成仅接受一个请求而阻止其它的任务。
应该进一步认识到,如果没有请求被提交到请求发生器420,那么没有请求以被PRRA 422准许而结束。在这个情况下,可以将在PRRA输出上的grant线711的输出设置为编码一个不标识任何队列控制器的值,例如,十六进制的“FFFFFFFF”或“空码”(deadcode)。
除了被提供到队列控制器710,在grant线711上的信号中指定的编码也被提供到地址解码器780。地址解码器780适用于计算作为这样的编码的函数的基地址,该编码是在grant线711上指定的和在grant线711上指定的编码来索引的特定slot_id线内容上指定的。就是说,地址解码器780使用grant线来标识在数据存储器702中的段,并且索引slot_id线705,以标识在被标识的段中的槽。
为此,地址解码器780可包括多路复用器784和组合器786。多路复用器784接收slot_id线705,并可由grant线711选择。grant线711和多路复用器784的输出反馈给组合器786。如果在grant线711上的编码指定了队列控制器710的已存在的一个(而不是上面提到的十六进制中的“FFFFFFFF”或“空码”),则组合器786可操作来输出基地址,其中该基地址等于段大小(也就是,M×分组大小)乘以在grant线上指定的编码与分组大小乘以多路复用器784的输出之间的和。沿着base_address线782将基地址提供到分组转发模块790。
应该了解如果在grant线711上的编码指示没有请求被准许,那么之后也可以设置在base_address线782上提供的信号来给预先确定的编码进行编码,该预先设定的编码不是指任何在数据存储器702中的地址,例如十六进制的“FFFFFFFF”和“空码”。
分组转发模块790沿着base_address线782接收来自地址解码器780的基地址。基地址指示要由分组转发模块790从数据存储器702读取出的下一个分组的起始地址。但是,在单元114J中的仲裁器760中的分组转发模块790可能处于把当前的分组放置在前向信道210J的过程中,并且因此分组转发模块790可操作来等待,直到它开始使下一个分组从数据存储器中读取之前结束读出当前的分组。
为了确定当前分组的结束,分组转发模块790监控由数据存储器702沿着前向信道210J转发的每一个字的EOP比特368。来自连续的字的EOP比特368形成EOP比特流,其将在分组结束之前的预先确定数目的字处经历转变(例如,下降沿)。以这种方式,分组转发模块790知道何时接近分组的结束。
在检测在EOP比特流的下降沿时,分组转发模块790记录在base_address线782上提供的基地址,并且通过grant_enable线715触发下一个准许。分组转发模块790之后继续使得下一个分组的字从数据存储器702中读取。这是通过沿着read_address线792提供读取地址来实现的。放置在read_address线792上的第一地址是基地址,而且这个地址一直增加直到检测到该下一个分组的结束为止,并如此进行。
grant_enable线715的断言引起下列的连锁反应。特别的,gran1_enable线715的断言将仅仅影响其请求已被准许的队列控制器。为了这个实例,假定这个队列控制器是队列控制器710j,并且它已经请求在槽708j,B中的分组的传输。在检测到grant_enable线715被断言时,队列控制器710j将通过对应的pointer_update线729j发送确认,这将触发在有效指示器中的更新,该有效指示器由指示器控制实体412存储和由PRRA 422使用。另外,队列控制器710j将访问和槽708j,B相关联的入口714j,B。更为特别的,它将更改槽708j,B的占用状态来指示这个槽已经不再被占用。
槽708j,B的占用状态的更改可能引起一个或多个下面的结果:
(i)第一,占用状态的改变可能引起在队列控制器710j中的逻辑来更新在对应的request线703j、slot_id线705j和priority线707j上的信号。
(ii)第二,占用状态的改变可能通过queue_full线726j以信号通知(signaled)分组插入模块704,这可能改变关于在何处插入接收到的分组的判定结果。
(iii)第三,占用状态的改变可能被通过free_slot线207j发送到输入接口116;输入接口116之后警告芯片外的分组转发模块226在槽708j,B中有空间,这可能触发新分组通过输入接口116被发送到发送器140。
取决于互连图形,从一个单元114j发送的分组依靠对应的共享前向信道210j到达在一个或多个单元(可能包括单元114j本身)中的对应的接收器150j。当然,接收分组的一些单元对于那个分组是目标单元而另一些不是。现在将参考图5描述接收器(例如,在单元114K中的接收器150j)的结构和操作。
接收器150j具有包括多种存储区域的存储器,这些区域包括数据存储器502,控制存储器512,任何由队列控制器510使用的存储器和任何其它由接收器150j使用的存储器。通过前进前向信道210j接收并且其目标到单元114K中的接收器150j的字被通过多个数据输入端口反馈到数据存储器502。
数据存储器502响应于通过write_adress线516和write_enable线518分别从分组插入模块504接收的写地址和写使能信号是可写入的。write_address线516携带当前在前向信道210j中的数据将被写入的数据存储器502的地址,而通过在write-enable线518上断言信号(asserting)来触发将这一字写入到指定地址的实际操作。为了协调在数据存储器502中分组的到达与在write_address线516和write_enable线518上信号的产生,前向信道210j可能在进入输入存储器502的数据输入端口之前经过可选择的延时器件506。
数据存储器502包括M
*个槽508
A,508
B,...,
,其中每一槽都足够大来容纳在上面描述的分组。这样,接收器150需要的数据存储器是M
*个分组。数据存储器502可能指的是存储器的一部分,并且槽508可能指的是细分(superdivisions)。回想在给定单元上的发送器140需要适合N×M个分组,并且给定每单元有N个接收器并且每芯片110有N个单元,则用于芯片110的数据存储器的总需求为N×((N×M)+(N×M
*))个分组,其等于N
2×(M+M
*)个分组,在这里没有计算其它组件比如队列控制器,PRRA等的存储器需求。
显然,对芯片110的存储器总需求是单元数量的二次函数并且是M和M*的线性函数。给定单元的固定数量,存储器的需求仅能通过改变M和M*改变。因此当设计目标为需要把所有单元配置在一个芯片上时,注意M和M*的值很重要。
M*和M之间的关系也是很重要的。例如,使得M*大于M将意味着更多的分组可被存储在接收器中而不是专用于那个接收器专用的发送器的段中。虽然这个选项在本发明的范围之内,但是并不允许接收器的所有M*个槽都保持在忙,否则会失去并行的可用程度。在一个更宽泛的情况中,同样在本发明的范围之内,当M*等于M时产生,尽管即使单一周期的等待时间将使高度并行无法达到。
这样,优选的方法是使得M*(接收器数据存储器大小)小于M(发送器每段数据存储器大小)。更为优选的方法是使得M*刚好略小于M,以最小化总存储器。一个甚至更为优选的方法是使得M*刚好足够大来容纳与每一优先权“等级”(例如,高,中,低)相关联的分组的小的数量,以在状态信息通过合适的向后信道返回时允许接收给定优先权的附加分组,并且使得M等于或略小于M*的两倍。例如,M和M*的合适的值包括,但是不限制于分别为3和5,或分别为4和7。在本发明的一个特定实施例中,数据存储器502包括三个槽508A、508B、508C,其中槽508A和高优先权类别相关联,槽508B和中优先权类别相关联,并且槽508C和低优先权类别相关联。
接收器150
j也包括队列控制器510。队列控制器510具有到控制存储器512的通路(该存储器512被细分为用于在数据存储器502中存储各自槽508
A,508
B,...
的占用状态(即占用或未占用)的多个入口514
A,514
B,...
)。另外,对每一个占用的槽,对应的入口存储占用那个槽的分组的优先权级别。例如,在一个实施例中,入口514
A,514
B,...
可能是寄存器的形式。在其它实施例中,控制存储器512可能存储数据存储器502的占用度或未占用度。
分组插入模块504可操作来监控通过前向信道210j接收的在每一字上的EOP比特368,以定位新接收分组的报头。回想EOP比特368对在其所属分组中特定位置出现的字经历了转变(例如,下降沿)。以这种方式,EOP比特368的检测和监控为分组插入模块504提供了何时接收新分组的指示,以及,因为报头360位于分组的开头,因此分组插入模块504将知道从何处寻找新接收分组的报头360。
分组插入模块504从每一新接收分组的报头360中提取控制信息。这种信息包括新接收的分组的目标和它的优先权级别,以确定它应该被放到数据存储器702的哪个槽中。分组插入模块504接受以单元114K为目标的分组并且忽略以其它单元为目标的分组。分组插入模块504还确定已被接受和接收的分组应该插入被哪个槽。这通过确定所接收的分组的优先权类别和验证和那个优先权类别相关联的槽的可用性来达成。
为此,在单元114K中的分组插入模块504可操作来验证在接收的分组的目标字段360中指定的目标是否对应于单元114K。在所有的分组是非多点通信(non-multicast)的分组的情况下,每一分组指定单一的目标单元,并且因此分组插入模块504功能的这个部分可能通过简单的二进制比较来达成。找出的以单元114K为目标的分组被接受以进行进一步处理,而其他分组则被忽略。
假定接收的分组被接受,则通过比较分组的优先权级别和先前定义的优先权阈值,分组插入模块504可操作来确认分组的优先权类别。通过实例的方式,如在上面所提出的,使槽508A、508B和508C分别和高、中和低优先权级别相关联。而且,使得低-中优先权阈值和中-高优先权阈值被建立为先前定义的,即,分别在100和200。例如,如果接收的分组的优先权级别是83,那么它被写入的槽应该是槽508C。
在这个实施例中,分组插入模块403知道它可以将接收的分组写入槽508C,因为,可以回想,如果对应的槽处于可用的第一位置,则分组仅能够在前向信道210j上发送。但是,在本发明的范围之内包括更多数量的槽,其中多于一个的槽可以和给定的优先权类别相关联,这可能需要分组插入模块504通过参考从队列控制器510接收的queue_full线526来验证单独的槽508的占用。
之后,分组插入模块504确定分组的第一字应该被写入的数据存储器502中的对应基地址。这可能要么通过计算对应于所选槽(在这个情况中是槽508C)的相对位置的偏移量,要么通过参考将槽映射到数据存储器502中地址的短查找表(look-up table)来做出。
分组插入模块504可操作来通过write_address线516提供基地址到数据存储器502,并且可进一步操作来断言write_enable线518。在大约相同的时间,分组插入模块504沿着new_packet线528发送信号到队列控制器510,这个信号指示被写入的槽的标识以及将占用那个槽的分组的优先权级别,队列控制器510适用于通过更新与标识的槽(其在先前是未占用的)相关联的状态和优先权信息来处理这个信号。
在接收的分组的第一字被写入上面确定的数据存储器502的基地址后,随着沿着前向信道210j接收到新的字,在write_address线516上的地址在每一个时钟周期(或在每几个时钟周期)增加。这将使得分组的字填满在数据存储器502中的所选槽。同时,由分组插入模块504来监控在每一接收的字中的EOP比特368。当检测到新分组的时候,上述过程从新接收分组的报头360中提取控制信息的步骤重新开始。
除了是可写入的以外,数据存储器502响应于由在单元114K中所有接收器150共同的仲裁器260沿着对应的read_address线593j提供的读地址的接收还是可读的。像将要在后面详细描述的那样,仲裁器260启动从数据存储器502的读取作为通过对应的多个request线503从在每一接收器150上的队列控制器510接收到的请求的函数。如果在对应的接收器150j中的队列控制器510需要转发分组到芯片外输入队列228时,则特定的request线503j将被断言。本发明的实施例可能包括,但是不限制于双端口RAM或单端口RAM的使用。
下面描述在接收器150
j中的队列控制器510的一个可能的实现,其适用于产生用于接收到分组的传输的请求。特别的,队列控制器510可操作来产生用于发送占用在数据存储器502中的槽508
A,508
B,...,
的可能的多个分组中一个分组的请求。沿着对应的slot_id线505
j提供选择来发送的槽的标识,而在对应的priority线507
j上提供和所选槽相关联的优先权。
队列控制器501实现这样一个功能,其验证在控制存储器512中的入口以确定被占用槽(其中该槽拥有可由芯片外输入队列228容纳的最高优先权的分组)的标识。例如,这个功能可由逻辑电路来合适的实现。通过实例的方式,队列控制器510被设计为在数据存储器502中的所有被占用槽中,确定拥有最高优先权分组的槽的标识。之后通过处理经由almost_full标志208接收的信息,队列控制器510评估芯片外输入队列228容纳那个分组的能力
如果断言了almost_full标志208,那么可能需要制止把更多分组发送到芯片外输入队列228的请求。在本发明的一些实施例中,almost_full标志208可能包括多个almost_full标志,一个对应于每一个优先权类别(高,中,低)。通过把用于断言高优先权almost_full标志的占用阈值设置为高于用于断言低优先权almost_full标志的占用阈值,它允许优选的处理高优先权分组。
如果最高优先权的分组确实可被容纳,那么队列控制器510把相关联的槽的标识放置在对应的slot_id线505j上,把分组的优先权级别放置在对应的priority线507j上,并且通过断言对应的request线503j来提交请求到仲裁器260。但是,如果最高优先权的分组确实不能被容纳,那么之后队列控制器510确定在数据存储器502中所有被占用的槽中拥有次最高优先权分组的槽的标识。像前面所述的,这可以通过处理经由almost_full标志208接收的信息来达成。
如果次最高优先权的分组确实可被容纳,那么队列控制器510把相关联的槽的标识放置在对应的slot_id线505j上,把分组的优先权级别放置在对应的priority线507j上,并且通过断言对应的request线503j来提交请求到仲裁器260。但是,如果次最高优先权的分组确实不能被容纳,那么之后队列控制器510确定在数据存储器502中所有被占用的槽中拥有次次最高优先权的分组的槽的标识,并如此进行。如果没有分组可被容纳,或者,如果没有槽被占用,那么队列控制器510不产生任何请求,并且对应的request线503j保持未断言的状态。
假定队列控制器510已提交了请求并且其请求已被准许,则它将通过仲裁器260意识到后一事实。这个信息的交换可以通过很多方式达成。例如,仲裁器260可能通过在共同的grant_enable线515上发送唯一的编码来标识包括其请求已被准许的队列控制器的接收器,并且,当准备完毕时,仲裁器260可能断言由在每一接收器150中的队列控制器510共享的grant_enable线515。队列控制器510可能因而通过以下方式来断定它的请求已得到准许:(i)检测通过grant线511从仲裁器260接收的信号中的唯一编码;以及(ii)检测被断言的grant_enable线515。
应该了解其它信令和检测准许的请求的方式也在本发明的范围之内。例如,可以提供分开的grant线到在每一个接收器150中的队列控制器。在这种情况下,当在一个特定接收器中的队列控制器的请求被转许时,连接到该特定接收器的grant线将是唯一一个被断言的。
在接收其请求被准许的指示时,队列控制器510访问在控制存储器512中对应于槽的入口,该槽的分组现在面临在仲裁器260的控制下立即退出数据存储器502。特别的,队列控制器510将那个特定的槽的状态改变到“未占用”,这将改变请求计算逻辑的结果,从而导致产生可能指定不同槽的新请求。在分组插入模块504需要知道槽的状态时,槽的被改变的状态也将被反映到通过queue_full线516提供的信息中。
也在接收其请求被准许的指示时,队列控制器510断言返回到仲裁器260的对应pointer_update线529j。像在后面对仲裁器260的描述一样,对pointer_update线529j中一个的断言向仲裁器260指示出它发出的准许已经被确认,允许仲裁器260基于来自在接收器150j中的队列控制器510的可能新请求和来自在其它接收器150中的队列控制器的待处理的请求来继续准备下一个准许。
仲裁器260的功能是接收来自在每一接收器150中的队列控制器510的请求,以仅准许一个请求,并控制从数据存储器502的读操作。为此,仲裁器260包括:请求处理模块570、地址解码器580和分组转发模块590。仲裁器260非常类似于先前参考图4描述的仲裁器760,仅在地址解码器580和分组转发模块590的实现上略有不同。
请求处理模块570从在接收器150j中的队列控制器510接收对应的request线503j、对应的priority线505j和对应的pointer_update线529j。请求处理模块570的功能是仅准许以这种方式接收到的可能的很多请求的一个请求。请求处理模块570具有是grant线511的输出。grant线511被连接到在每一接收器中的每一个队列控制器510和地址解码器580。在本发明的一个实施例中,grant线511使用唯一的二进制码来标识其请求已被准许的队列控制器。
地址解码器580接收来自请求处理模块570的grant线511和来自在每一接收器150的队列控制器510的slot_id线505。地址解码器780计算在数据存储器502中的基地址,该数据存储器502存储其传输被准许的分组的第一字。基地址被计算为为这样的编码的函数,该编码是在grant线511上指定的和由在grant线511上指定编码来索引的特定slot_id线内容上指定的。就是说,地址解码器580使用grant线来标识在接收器,并且索引slot_id线505,以标识在被标识出的接收器的存储器502中的槽。通过base_address线782将基地址提供到分组转发模块590。
分组转发模块590通过base_address线582接收基地址。另外,分组转发模块590接收来自请求处理模块570的grant线511。基地址指示出需要从grant线511上标识接收器的数据存储器502中提取的下一分组的第一字的位置。
因为分组转发模块590可能处于从另一接收器的数据存储器中读取当前分组的过程中,因此分组转发模块590被编程为等待,直到它在开始读取下一个分组之前结束读取当前分组。在它结束从任何一个它当前正在读取的数据存储器中读取当前分组之后,分组转发模块590在base_address线582上存储初始地址,断言grant_enable线515,并且继续从基地址开始从由grant线511标识的数据存储器502中读取。
在多个接收器150中的数据存储器502的输出到达多路复用器592的各个输入端口。多路复用器具有放置在数据路径202上的输出。对于哪个输入端口将出现在输出端口上的选择由从分组转发模块590接收的select线595控制。select线595是grant线511的锁存(latch)版本,select线595的锁存发生在接收grant_enable线515的情况中。
为了确定当前分组的结束,分组转发模块590监控沿着数据路径202传播的每一字的EOP比特368。来自连续字的EOP比特368形成EOP比特流,其将在分组结束之前的预先确定数目的字处经历转变(例如,下降沿)。以这种方式,分组转发模块590知道何时接近分组的结束。在检测在EOP比特流的下降沿的情况中,分组转发模块590记录在base_address线582上提供的基地址,并且通过grant_enable线515触发下一个准许。
分组转发模块590之后继续使得分组的字从由grant线511索引的接收器的数据存储器502中读取。这通过沿着对应的read_address线593j提供读取地址来达成。放置在read_address线593j上的第一地址是基地址,并且这个地址增加直到检测到下一个分组的结束,并如此进行。应该认识到不是为每一接收器提供分开的read_address线,而是可以具有单一的read_address线,其经过在grant线511上的信号控制下的多路信号分离器(demultiplexer)(没有示出)。
grant_enable线515的断言引起下列的连锁反应。特别的,grant_enable线515的断言将仅仅影响由在grant线511上的信号标识的接收器上的队列控制器510。为了这个实例,假定这个正在涉及的队列控制器是在接收器150j上的一个,并且它已经要求在槽508C中的分组的传输。在检测到grant_enable线515时,队列控制器510将通过对应的pointer_update线529j发送确认到仲裁器260,这将触发在有效指示器中的更新,其中该指示器是由指示器控制实体存储并由在请求处理模块570中的PRRA使用的。另外,队列控制器510将访问和槽508C相关联的入口514C。更为特别的,它将更改槽508C的占用状态来指示这个槽已经不再被占用。
槽508C的占用状态的更改可能引起一个或多个下面的结果:
(i)第一,占用状态的改变可能使在队列控制器510中的逻辑单元来更新在对应的request线503j、slot_id线505j和priority线507j上的信号;
(ii)第二,占用状态的改变可能通过queue_full线526j用信号通知分组插入模块504,这可能改变关于在何处插入接收到的分组的判定结果;
(iii)第三,占用状态的改变可能由队列控制器510沿着向后信道212K,j发送到在单元114j中的发送器140。这将警告发送器在槽508C中有空间,这可能触发新分组被通过前向信道210j发送到接收器150j。
因为新的分组将在旧的分组被读取之后到达,因此将会有利地导致有效的数据流水线。当分组的传输是原子运动(atomic action)(其至少和新分组的接收一样快)时,对应于旧分组的槽的占用状态可在发送一开始时就被设置为“不再被占用”。如果接收可以是传输速度的两倍,则可在分组被发送到二分之一时重新设置占用状态,等等。另外,像已经描述的,发送器140的特征将防止出现分组的传输,除非分组可被接收器容纳,从而有利的避免了在接收器的争用,如果没有考虑更多下行流空间的可用性而使传输受到影响时,就可能产生该争用。
进入交换结构100的分组具有在分组报头360的优先权字段364中被标识的优先权级别。那个相同的优先权级别和从交换结构100脱离的分组相关联。但是,当其由在给定单元的发送器或接收器处理时,提供暂时更改分组的优先权级别的机制是在本发明的范围之内。更为特别的,在本发明的范围之内可以,对于在给定单元上的发送器或接收器,保持和分组相关联的“虚拟”优先权级别并且在作出判定的过程中使用该虚拟优先权级别,而不更改如在分组报头360中定义的分组的实际优先权级别。因此应该认识到,如同存储在第k个单元114k中第j个接收器150j的队列控制器510的控制存储器512的入口中和在第k个单元114K中发送器140的第j个队列控制器710j的控制存储器712j的入口中的分组的优先权级别可能指的是分组的普遍优先权级别或者它的虚拟优先权级别。
再参考图6,其中示出了队列控制器610,其是在先前参考图5的发送器140描述的队列控制器510的更改的版本。队列控制器610从时间标记(time stamp)计数器620通过time_stamp线605进入“时间标记”。时间标记计数器620可操作来跟踪正在进行的时间测量,比如,时钟周期。在其它实施例中,时间可被根据流逝的原子事件(elapsedatomic events)的数量、发送或接收的分组数量等来测量。因此,时间标记计数器可能由在时钟线615上或者在先前描述的grant_enable线515上的信号来驱动。
队列控制器610具有到控制存储器512的通路。回想控制存储器512包括多个入口514
A,514
B,...,
。每一入口存储属于在数据
存储器502中的对应的槽508的信息。像已经在前面描述的,在每一入口的信息指示对应槽的可用性,以及如果那个槽可用的话,则它指示占用那个槽的分组的优先权级别。为了实现上述时效规则,附加的信息存储在每一个入口514中。
因此,入口514A包括:状态字段632、虚拟优先权字段634、时间标记字段636和时效掩码(aging mask)字段638。状态字段632指示槽508A是占用的还是未占用的。虚拟优先权字段指示在槽508A中的分组的当前虚拟优先权。时间标记字段636指示在当前占用槽508A的分组被写入那里的时间有效的时间标记。时效掩码字段638拥有随着分组时效(age)在特定时间增加到虚拟优先权的增量。取决于所实施的时效规则,该增量可能是固定的或可变的。如果假定时效规则一直使用固定的时效掩码(或者如果没有时效规则),那么时效掩码字段638是可选择的。
队列控制器610通过把分组的虚拟优先权更改为参数种类的函数来实现时效规则(例如,无,线性的,指数的,对数的),其中该参数种类包括分组的时效和一个或多个下面提到的:时效掩码字段638的内容,删除限制(kill limit)值(分组在被从数据存储器中消除之前用于分组的最大时效,而不考虑其优先权级别),时间间隔和最大可允许虚拟优先权级别。
图8示出了根据本发明实施例的涉及管理时效规则中的步骤。在步骤802,队列控制器610检查new_packet线528,以确定新的分组是否将要被写入在数据存储器502中的槽。如果是,则new_packet线528将指示槽的标识和它的优先权级别。在步骤804,队列控制器610将时间标记(通过time_stamp线605从时间标记计数器620接收到的)插入到被标识槽的时间标记字段636。另外,队列控制器610选择一个值来插入到被标识槽的时效掩码字段638。这个值可能被确定为沿着new_packet线528接收的新分组的优先权级别的函数。队列控制器610返回到步骤802。
但是,如果队列控制器610在步骤802确定没有新的分组将要被写入数据存储器502中,则队列控制器610继续进行步骤806,其中队列控制器610通过选择第一槽(例如槽508A)来开始。队列控制器之后执行步骤808,其包括获得在对应的入口(在这个情况中是514A)的时间标记字段636中的值,并且从当前的从时间标记计数器620接收的当前时间标记中减去它。这就产生了用于在所选槽(在这个情况下是508A)中的分组的时效值(age value)。在步骤808,队列控制器610比较在所选槽中的分组时效与表示分组的最大可允许时效的“删除限制”。
如果在步骤810超过了删除限制,则队列控制器610继续进行步骤812,其中分组被从数据存储器502有效地“消除”。从数据存储器502中分组的“消除”可以包含从数据存储器中的对应槽中分组的实际删除,也包含在对应于所选槽的入口中的状态字段362的重新设置。在从数据存储器502中消除分组之后,队列控制器610返回到步骤802。
如果在步骤810中没有超过删除限制,微量队列控制器继续进行步骤814,其中时效掩码字段368的内容可能会或可能不被添加到虚拟优先权字段364的内容。如果时效掩码字段368的内容确实被添加到虚拟优先权字段364的内容,这引起对于在所选槽中(在这个情况下是槽508A)的分组更高的虚拟优先权级别。时效掩码字段368的内容是否被添加到虚拟优先权字段364的内容取决于所采用的时效规则。而且时效掩码字段638在步骤816中更新的程度也取决于时效规则。
根据“无时效”规则,分组的虚拟优先权级别不随着时间改变。根据线性时效规则,用常数值V以期限为T的固定时间间隔来更改分组的虚拟优先权级别。为了确定是否又有一个时间间隔过去,在该时间间隔被指出是适于更新分组的虚拟优先权的时间,可以参考时间标记计数器620的输出。常数值V可能在时效掩码字段638中指定或者它可能被预先确定。
根据“指数的”时效规则,虚拟优先权级别通过指数增加的值V(t)在期限为T的固定时间间隔内增加。再一次,为了确定是否又有一个时间间隔过去,在该时间间隔被指出是适于更新分组的虚拟优先权的时间,可以参考时间标记计数器620的输出。为了创建指数增加的值,需要动态的参数,并且这应由时效掩码字段638提供。特别的,在平均分开的时间间隔内把经常增加的时效掩码字段638的内容添加到虚拟优先权字段634的内容将引起时效掩码字段638和虚拟优先权字段634的内容的指数增加的值。在一个实例性实施例中,在每次分组的虚拟优先权级别被更新时,时效掩码字段638的内容增加一倍。
根据“对数的”时效规则,虚拟优先级优先权级别在以时间的函数的期限内增加的时间间隔内以常数值V增加。常数值V可能是预先确定的或者它可能是分组的实际优先权级别的函数。为了创建对数增加的时间间隔,需要动态的参数并且这应由时效掩码字段638提供。特别的,通过比较经常增加的时效掩码字段638的内容与从时间标记计数器620接收的时间标记,以判定更新分组的虚拟优先权级别是否将引起以对数地减少的速率上发生这个更新。在一个实例性实施例中,时效掩码字段638的内容在每次分组的虚拟优先权级别更新时增加一倍。这有效地导致了对于分组的更慢的时效(aging)过程。
其它可能的时效规则包括但是不限于:二次的规则、或者一次增加的规则、或者由分组时效的函数索引的时效表。那些本领域的技术人员将理解根据基于诸如目标、优先权等的分组特性而应用的不同规则,可以实现多个这种时效规则。
最后,在步骤818,队列控制器610确定是否考虑了在数据存储器502所有的槽508(也就是,是否考虑了在控制存储器512中的所有入口514)。如果是,队列控制器610返回到步骤802;如果不是,则在步骤820选择下一个槽,并且队列控制器使用这个之后选择的槽继续执行步骤808(以及下面的步骤)。
在一些实施例,本发明提供了一种所谓的“多点通信”功能,通过该功能,进入在交换结构100的给定单元(例如,单元114J)中的发送器140的分组被通过对应的前向信道210J发送到在多个目标单元(可能包括单元114J本身)上的对应的接收器150J。这样的分组被作为多点通信分组提到;多点通信分组的一个特殊情况是广播分组,其目标单元包括在交换结构100中的所有单元。为容纳多点通信分组的发送,把多点通信分组的报头360的目标字段362设计为使得其能够指定两个或多个与多点通信分组相关联的目标单元。在本发明的一个实施例中,这可能通过以在每一目标单元的位置中具有逻辑“1”的二进制掩码的方式来编码目标单元的设置而达成。
穿过图2的交换结构100的多点通信分组经历了三个主要的传输级,和前面描述的非多点通信分组经历的传输级相似。第一级涉及将分组从芯片外环境发送到给定单元,如单元114J,其中通过该单元的输入接口116;接收时,发送器140将分组写入位于那个单元的存储器。第二级涉及将分组从在单元114J中的发送器140经由对应的前向信道210J发送到驻留在与分组相关联的2个或多个目标单元中的接收器150J;在每个目标单元接收分组时,分组被由在该目标单元中的接收器150J写入存储器位置。这一操作是由每个目标单元中的接收器独立执行的。最后,第三级涉及将分组从每个目标单元的接收器150J通过仲裁器260和通过那个目标单元的输出接口118发送。
为容纳多点通信分组的传输,前面参考图7描述的发送器140需要被更改。图9示出了适用于提供多点通信功能的发送器940的一个实例性但是非限制性的实现。为不失一般性,假定发送器940驻留于单元114J中。发送器940沿着数据路径230接收来自输入接口116的字。发送器940具有包括多种存储区域的存储器,这些区域包括数据存储器902,多个控制存储器712,912,由多个队列控制器710,910使用的一组寄存器912,以及由发送器940使用的任何其它存储器。通过多个数据输入端口将字反馈到数据存储器902。
数据存储器902对应于写地址信号和写使能信号是可读的,其分别持续从分组插入模块904通过write_address线716和write_enable线718接收。write_address线716携带当前数据路径230中数据将被写入的数据存储器902中的地址,而把这一字写入到指定地址的实际操作是由断言在write-enable线718上的信号触发的。为了协调在数据存储器902的分组的到达与在write_address线716和write_enable线718上的信号的产生,数据路径230可能在进入数据存储器902的数据输入端口之前通过可选择的延时器件706。
数据存储器902包括先前描述的段713,一个对应于在芯片110的N个单元中的每一个。第j个段713j包括M个槽708j,A,708j,B,...,708j,M,每一个槽为可容纳在以单元114j为目标的分组的大小。每一个段713中由对应的一个队列控制器710表示。队列控制器710j具有到相关联的控制单元712j的通路,其包括存储在数据存储器902的第j个段713j中的各自槽708j,A,708j,B,...,708j,M的占用信息(也就是,占用或未占用)的多个入口714j,A,714j,B,...,714j,M。对每一个被占用的槽来说,对应的入口也存储占用那个槽的分组的优先权级别。
另外,数据存储器902包括用于存储多点通信分组的第N+1个段913。存储在段913中的不同的多点通信分组可能以两个或多个目标单元的不同组合为目标。段913包括M个槽908A,908B,...,908M,每一个槽是可以容纳一个分组的大小。在本发明的一个实施例中,至少一个槽为每一优先权类别保留。数据存储器902的段913由多点通信队列控制器910表示。
多点通信队列控制器910具有到相关联的控制存储器912的通路,其包括存储在数据存储器902的段913中的各自槽908A,908B,...,908M的占用信息(也就是,占用或未占用)的多个入口914A,914B,...,914M。每一入口也存储对应分组的优先权级别以及标识对应分组以其为目标的目标单元设置的地址掩码。通过free_slot线901将占用状态提供到输入接口116。
类似于已经参考分组插入模块704所描述的方式,分组插入模块904可操作来监控在通过数据路径230接收的每一字的EOP比特368,以定位新接收的分组的报头。因为EOP比特368对在其所属的分组中特定位置出现的字经历转变(例如,下降沿),EOP比特368的检测和监控为分组插入模块904提供了何时接收新分组的指示,以及,因为报头360位于分组的开头,因此当新分组的报头360到达时,分组插入模块904将知道。
分组插入模块904从每一接收的分组的报头360中提取控制信息。这种信息包括:接收分组的目标单元(或多个单元)和它的优先权级别,以确定它应该被放置在数据存储器902的哪个槽。分组插入模块904首先确定接收的分组应该被写入哪个段。这通过从接收分组的报头中提取目标字段362来达成,以确定和分组相关联的目标单元(或多个单元)。
如果目标字段362标识一个目标单元,那么接收的分组是非多点通信分组,并且在非多点通信单元的情况下,分组插入模块904的操作和那些先前参考分组插入模块704所描述的相同。但是,如果目标字段362标识多于一个目标单元,那么接收器分组是多点通信分组,并且分组插入模块904的操作不同。特别的,只有在接收的分组是多点通信分组的情况下才会使得它被写入段913。选择分组被写入哪个特定槽以类似于参考图7的分组插入模块描述的方式达成,即,通过确定接收分组的优先权类别并且验证和那个优先权类别相关联的槽的可用性。
为此,分组插入模块904可操作来通过比较分组的优先权级别与一个或多个优先权阈值来确定多点通信分组的优先权类别。例如,使槽908A,908B,908C,908D,908E分别和高,高,中,中和低优先权级别相关联。而且,使得低-中优先权阈值和中-高优先权阈值像预先定义的那样,即,分别在100和200。例如,如果接收的多点通信分组的优先权级别是229,那么分组应该被写入的可能的槽包括槽908A和908B。
其次,分组插入模块904可操作来通过和多点通信队列控制器910通信来确定哪个潜在的槽是可用的,其通过queue_full线926和new_packet线928与多点通信队列控制器910连接。另一种选择,可以使用总线结构来连接分组插入模块904、多点通信队列控制器910和队列控制器710。在以上两种情况的任一情况下,分组插入模块904获得其相关联的优先权类别匹配接收分组的优先权类别的槽的状态(也就是,占用的或未占用的)。
状态信息可能是包括一组等于槽的数量的定位比特的比特图形的形式,其中在特定位置的逻辑值0表示对应的槽是未占用的,并且在那个位置的逻辑值1表示对应的槽确实是占用的。以这种方式,对于分组插入模块904,很明显和接收分组的优先权类别相关联的哪个槽是可用的。
在上述实例中,当接收的多点通信分组的优先权类别是“高”并且槽908A和908B是和高优先权类别相关联的,则多点通信队列控制器910将通过queue_full线926提供槽908A和908B的占用情况。这个信息将通过参考在控制存储器912中的入口914A和914B来获得。当然,对于多点通信队列控制器910,每次都提供所有在存储器段913中的槽的占用情况是在本发明的范围之内,而不是仅仅提供那些和分组的优先权类别相关联的槽的占用情况。
如果仅仅一个和分组的优先权类别相关联的槽是可用的,那么该槽被选为接收的分组被写入的那个。如果对于分组的优先权类别有多于一个的可用分组,那么分组插入模块904可自由选择这些槽中的任何一个作为接收的分组被写入的槽。注意到为了避免对于分组的优先权类别没有槽可用的情形,通过芯片外分组转发模块226来调节分组到发送器940的发送的有利的。这可能通过设置芯片外分组转发模块226,使得它仅在如果它知道在发送器940中有空间用于具有正在涉及的优先权类别的多点通信分组的情况下才发送多点通信分组到单元114J(就是,所示的单元)。
确定了应该将接收的多点通信分组写入哪个槽后,分组插入模块904可操作来确定在数据存储器902中的对应的基地址。这可能要么通过计算对应于槽的相对位置的偏移量,要么通过参考将槽映射到数据内存存储器902中的地址的查找表来作出。分组插入模块904适用于通过write_address线716提供基地址到数据存储器902,并且进一步适用于断言write_enable线718。在大致相同的时间,分组插入模块904沿着new_packet线928发送信号到多点通信队列控制器910,这个信号指示要被写入的槽的标识以及要占用那个槽的分组的优先权级别。多点通信队列控制器910适用于通过更新与被标识的槽(先前是未占用的)相关联的状态和优先权信息来处理这个信号。
在接收的多点通信分组的第一字被写入上面确定的在数据存储器902中的基地址之后,然后,随着沿着数据路径230接收到新的字,在write_address线716上的地址在每一时钟周期(或在每几个时钟周期)增加。这使得分组的字填满在数据存储器902中的所选槽。同时,在每一接收的字中的EOP比特368由分组插入模块904监控。当检测到新分组时,上述过程从新接收分组的报头360中提取控制信息的步骤重新开始。
除了是可写入的,数据存储器902响应于由仲裁器960沿着先前描述的read_address线792提供的读地址也是可读的。以类似于先前已经参考图7的仲裁器760描述的方式,仲裁器960启动从数据存储器902的读取作为通过对应的多个request线703,903从多个队列控制器710,910接收的请求的函数。如果对应的队列控制器710j需要转发非多点通信分组到在单元114j中的接收器150J,则特定的request线703j将被断言,而且如果多点通信队列控制器910需要转发多点通信分组到在多个单元114j1,114j2,...,114jP中的接收器150J,则request线903将被断言。
队列控制器710已经参考图7进行了描述。对于多点通信队列控制器910来说是以不同方式实现的。多点通信队列控制器910适用于产生用于传输接收到的多点通信分组到驻留于两个或多个目标单元114j1,114j2,...,114jP中的接收器150J的请求。特别的,多点通信队列控制器910可操作来产生用于发送占用在数据存储器902的段913中的槽908A,908B,...,908M的多个可能分组中一个分组的请求。沿着slot_id线905提供选择来发送的槽的标识,而且在priority线907上提供和所选槽相关联的优先权。
多点通信队列控制器910实现确定占用的槽的标识的功能,该槽拥有能够被目标接收器容纳的最高优先权的分组。例如,这个功能可能由逻辑电路合适的实现。通过实例的方式,多点通信队列控制器910可以被设计为验证在相关联的控制存储器912中的入口,以在与在数据存储器902中的段913相关联的所有占用的槽中,确定拥有最高优先权分组的槽的标识。多点通信队列控制器910之后评估在每一目标单元114j1,114j2,...,114jP中的接收器150J容纳在所选槽中的分组的能力。这通过处理经由对应的向后信道212j1,J,212j2,J,...,212jP,J接收的信息达成。
例如,使所选的多点通信分组是存储在槽908A中的高优先权分组,并且使该分组的地址掩码是1011,其指示该多点通信分组以1141,1143和1144为目标。在这个情况中,所需的占用信息将和在单元1141,1143和1144中的接收器150J中的槽508A(即高优先权槽)相关。这个占用信息将通过向后信道2121,J,2122,J和2124,J接收。
如果多点通信队列控制器910发现所选的多点通信分组确实可以由在每一目标单元的接收器容纳,则它将尝试在任何受影响的(非多点通信的)队列控制器710作出另一个到仲裁器960的请求之前得到(seize)前向信道210J的控制。因此,多点通信队列控制器910向仲裁器960作出多点通信请求。在一个实施例中,多点通信请求和与分组相关联的优先权级别相关联。在另外的实施例中,考虑到和在所有的目标单元中可用的接收器150J相关联的可能性,给予多点通信请求更高的优先权。多点通信队列控制器910把所选槽的标识放置在slot_id线905上,把多点通信请求的优先权级别放置在priority线907上,并且通过断言request线903来提交请求到仲裁器960。
假定这种由多点通信队列控制器910提交的请求被准许,多点通信队列控制器910将通过仲裁器960知道这个准许。信息的交换可通过很多方式达成。例如,以类似于先前参考仲裁器760描述的方式,仲裁器960可能通过在grant线911上发送唯一的编码来标识其请求被准许的队列控制器,并且,当准备完毕时,仲裁器960可能断言由队列控制器710,910共享的grant_enable线915。给定的队列控制器可能因而通过以下方式知道其请求已被准许:(i)检测在通过grant线911从仲裁器接收的信号中的唯一编码;以及(ii)检测被断言的grant_enable线915。
应该了解信令和检测已准许的请求的其它方法也在本发明的范围之内。例如,可以提供分开的grant线到每一队列控制器,包括多点通信队列控制器910和非多点通信队列控制器710;当特定队列控制器的请求被准许时,连接到特定队列控制器的grant线将是唯一被断言的。在这个情况下,不需要提供任何准许使能线。
在接收其请求已被准许的指示时,多点通信队列控制器910访问在控制存储器912中对应于槽的入口,该槽的分组现在面临在仲裁器960的控制下立即退出数据存储器902。特别的,多点通信队列控制器910把特定槽的状态改变到“未占用的”,这将改变请求计算逻辑的结果,从而可能导致产生新的指定不同槽的请求。槽的改变的状态也将反映到在通过queue_full线926提供到分组插入模块904的信息中。
也在接收其请求已被准许的指示时,多点通信队列控制器910断言返回仲裁器960的pointer_update线929。以类似于断言pointer_update线729j中的一条所描述的方式,pointer_update线929的断言向仲裁器960指示它发出的准许已经被确认,允许仲裁器960基于来自多点通信队列控制器910的可能的新请求和来自其它队列控制器710的待处理请求来继续准备下一个准许。
但是,在多点通信队列控制器910发现一个或多个目标接收器不能容纳多点通信分组的情况下,多点通信队列控制器910可能根据本发明的操作需求做下面三件事中的一件。它可能要么(i)尝试发送次最高优先权的多点通信分组到所有相关联的目标接收器;(ii)做出一个到仲裁器960的请求来在前向信道210J上发送多点通信分组,使得它由在那些具有可用槽的目标单元上的接收器150J接收,同时被在其它目标单元上的接收器150J忽略;(iii)在作出另一个请求到仲裁器960之前等待一些时间。
如果一个或多个目标接收器不能容纳分组,更改多点通信分组的虚拟优先权级别也在本发明的范围之内。如果把虚拟优先权级别增加到使该多点业务分组现在属于不同的优先权类别的这样一个程度,那么在当多点通信队列控制器910确定在每一目标单元的接收器150J中的合适的槽的可用性时将会得到不同的结果。
在上面的情况(i)中,多点通信控制器910尝试发送次最高优先权多点通信分组。这可以通过参考向后信道212来做出,以评估在每一目标单元中的接收器150J容纳次最高优先权的占用槽908的一个的多点通信分组的能力。如果多点通信队列控制器910再次发现一个或多个目标单元不能容纳多点通信分组,则多点通信队列控制器910可能尝试发送次次最高优先权多点通信分组,如此进行。
在上面的情况(ii)中,多点通信控制器910做出到仲裁器960的请求,以在前向信道210J上发送多点通信分组,使得它被在那些具有可用的槽的目标单元中的接收器150接收。这可能以好像所有目标单元能够容纳分组的相同的方式,也就是,通过在slot_id线905上放置所选槽的标识,在priority线907上放置合适的优先权级别,并且通过断言request线903来提交请求到仲裁器960达成。但是在接收其请求已被准许的指示时,多点通信队列控制器910将断言pointer_update线929,而不是改变槽的状态到“未占用”。
其次,多点通信队列控制器910将重新设置在那些对应于目标单元的比特位置中对应入口的地址掩码中的比特,其中该那些目标单元是被发现具有用于容纳多点通信分组的可用槽。例如,像先前一样,使所选的多点通信分组是存储在槽908A中的高优先权分组,并且使该分组的地址掩码是1011。像通过向后信道2121,J,2122,J,以及2124,J接收的那样,使关于在单元1141,1143,和1144中的接收器150J中的槽508A的占用信息,分别是“占用的,未占用的,占用的”。这意味着在单元1143和1144中的接收器150J的槽508A中有空间,但是在单元1141中没有。如果发送多点通信的请求被准许,则单元1143和1144将处理分组,但是单元1141不会。因此,地址掩码将变为1000并且可能被作为“剩余地址掩码”(residual address mask)提到。
因此,剩余地址掩码指示还没有接收多点通信分组的多点通信分组的目标单元。多点通信队列控制器910可操作来以上面描述的方式做出具有新地址掩码的请求,直到地址掩码被减小到“0000”,在此时指出多点通信队列控制器910将继续把在控制存储器912中的合适入口(在这个情况下是914A)中槽(在这个情况下,槽908A)的状态改变到“未占用”。
另外,如果发送多点通信分组到目标单元的不完全的子组的请求被准许,则多点通信队列控制器910必须向在仲裁器960中的分组转发模块指示出多点通信分组仅被发送到一些目标单元,使得当多点通信分组通过后来被准许请求的作用被重新发送到剩余的地址单元时,它不会由已经接收该分组的目标单元第二次拾取(pick up)。为此,在准许请求发送多点业务分组到目标单元的不完全的子组时,already_sent掩码被通过control线955提供到在仲裁器中的分组转发模块990。分组转发模块990使用already_sent掩码来以将在后面详细描述的方式更改多点通信分组的目标字段362。
结果,第一次被发送到目标单元的不完全子组的多点通信分组的目标字段362将标识目标单元的初始设置,而且因为一些目标单元具有在第一轮发送时不可用的接收器,从而在第二次重新发送的相同的多点通信分组的目标字段362,将仅标识那些已知具有用于容纳分组的可用槽的目标单元。但是,更改第一次发送的多点通信分组的目标字段362使得它仅仅指定那些已知有用于容纳分组的可用槽的目标单元也在本发明的范围之内。
在上面的情况(iii)中,在发现在一个或多个目标单元中的接收器150J不能容纳多点通信分组的情况中,多点通信队列控制器910可以适用于在沿着request线903做出到仲裁器960的延时请求之前等待一定量的时间(或者一定数目的发送分组)。延时请求跟随那些初始被发现为不可用的接收器的可用性的重新验证。在重新验证时,可能发现一些附加的接收器已建立(develop)了容纳分组的可用性。
延时请求可能以参考上面的情况(iii)所描述的相同的方式提交。但是,应该理解在请求被延时的时间内,其可用性在被首次验证时(并且保持请求)为可用的一个或多个接收器将变为不可用。因此要考虑接收器可用性的情形在延时请求之后可能不会变的更好,除非提供一些做出“暂时保留”的方式。因此,多点通信队列控制器910操纵在每一非多点通信队列控制器710中的请求产生过程,以暂时保留那些可以容纳所述多点业务分组的目标单元的接收器的槽,这种方式是在本发明的范围之内。
像由队列控制器710说明的的,这可以通过更改通过向后信道212接收的信息来达成。例如,关于在单元114j中接收器150J中的给定槽可用性的信息,如同通过向后信道212j,J接收的信息,可能一般由逻辑“1”指示那个槽可用,并且由逻辑“0”指示该槽被占用。如果那个槽需要由多点通信队列控制器910暂时保留,那么两输入逻辑与门999j可能在进入任何队列控制器710的入口之前被放置在向后信道212j,J的路径上。与门的第一输入将是从单元114j中的接收器150J导出的线212j,J,而且与门的第二输入可能由多点通信队列控制器910通过逻辑倒相器(未示出)提供。在操作中,多点通信队列控制器910将在为那个槽做出暂时保留时,将倒相器的输入设置到逻辑“1”,这将使得槽对另外的队列控制器710显示为不可用。多点通信队列控制器910将在准许它的随后暂时保存的延时请求之后重新设置到倒相器的输入(因此使得每一与门999j的输出对通过对应的向后信道接收的信息是透明的)。
如果到延时请求被准许的时间为止,显示多点通信分组可被所有在它的初始目标字段362中指定的所有目标单元中的接收150J容纳,那么多点通信队列控制器910如在上面的情况(i)中那样继续进行。但是,如果,在一些目标单元中的接收器150J仍然不能容纳多点通信分组,则多点通信控制器910如在上面的情况(ii)中那样继续进行。
现在继续参考图9描述仲裁器960。仲裁器960的功能是准许从多种队列控制器710,910接收的请求的一个,并且接着控制从数据存储器902的读取操作。为此,仲裁器960包括:请求处理模块970、地址解码器980和分组转发模块990。仲裁器960可能和先前参考图4描述的仲裁器760本质上一样,只是在请求处理模块970、地址解码器980和分组转发模块990的实现上有些不同。
分组转发模块770接收分别来自队列控制器710,910的request线703,903,priority线707,907和pointer_update线729,929。请求处理模块770的功能是仅准许从队列控制器710,910沿着request线703,903接收的许多可能请求中的一个。请求处理模块970具有作为grant线911的输出。grant线711连接每一个队列控制器710,910和地址解码器980。在本发明的一个实施例中,grant线711使用唯一的二进制码来标识其请求被准许的队列控制器。应该注意在仲裁器960的请求处理模块970仅在输入的数量上不同于在仲裁器760中的请求处理模块770。
地址解码器980接收分别来自请求处理模块970的grant线911和来自队列控制器710,910的slot_id线705,905。地址解码器780计算在数据存储器720中的基地址,该存储器存储其发送被准许的分组的第一字。通过base_address线982将基地址提供到分组转发模块990。应该注意到在仲裁器960中的地址解码器980仅在它处理在grant线911上的附加编码的能力和在更宽的范围内产生结合(incorporate)在数据存储器902中的段913的基地址的能力上不同于在仲裁器760中的地址解码器780。
分组转发模块990通过base_address线782接收需要从数据存储器902中提取的下一个分组的第一字的位置。分组转发模块990也通过control线995接收来自多点通信队列控制器910的already_sent掩码。回想already_sent掩码指示一个或多个目标单元,该目标单元的对应的接收器150J已经接收了由分组转发模块990要从数据存储器902中提取的分组。
分组转发模块990可操作来等待直到它在开始读取下一个来自数据存储器的分组之前结束读取当前分组。在它结束从数据存储器902中读取当前分组之后,分组转发模块990存储在base_address线982上的初始地址,断言grant_enable线915,并继续从初始地址开始从数据存储器902中读取。另外,分组转发模块990将already_sent掩码应用到从数据存储器902中提取出的分组的目标字段。在仲裁器960中的分组转发模块990在它索引更大的数据存储器902的能力和它应用already_sent掩码到从数据存储器中提取出的分组的目标字段的能力上与在仲裁器760中的分组转发模块790不同。
为了使得可以处理通过一个合适的前向信道210到达的多点通信分组,不必需更改前面描述的接收器150或仲裁器260。
注意到在发送器140(或940)中的分组插入模块704(或904)对字在何处被写入数据存储器702(或902)进行控制,但是它不控制字到达数据存储器702(或902)的数据输入端口的速率。这个级别的控制由像在下面描述的芯片外分组转发模块226提供。为下面的目的考虑非多点通信的情况,但是应该理解在这里描述的概念可相同的应用到多点通信分组的发送上。
特别的,在优选实施例中,不允许芯片外分组转发模块226发送分组的字到在给定单元中的接收器,除非在那个接收器的数据存储器702有空间来容纳分组,这将防止不得不在交换结构芯片中丢弃分组。允许这样的控制在芯片外分组转发模块226本地执行的本发明的特征来源于(stem from)使用存储在控制存储器712中的入口714。特别的,通过经控制路径254提供在每一单元的发送器的数据存储器702中的槽708的状态,芯片外分组转发模块226可被警告关于每一和优先权级别的特定类别相关联的槽的状态(占用的或未占用的)。
将在这里参考图20提供对芯片外分组转发模块226的一个可能的实现以及它和输入接口116以及输出接口118之间交互的详细的描述。回想芯片外分组转发模块226被通过数据路径252和控制路径254(其以相反的方向流动)连接到在单元114J中的输入接口116。数据路径可以是足够容纳所有在字中的比特的宽度或者它可能较窄(并且,因此,比数据路径230更窄)使得仅仅容纳在字中比特的子组,从而降低芯片110的管脚数量。如果数据路径252确实比数据路径230更窄,那么输入接口116应该被设置为提供速率匹配功能,使得总信息传送速率在两个数据路径上保持相等。控制路径254可能为一个或两个比特那样窄,以保持管脚数量的最小化。
像可以在图20中看到的,芯片外分组转发模块226包括缓冲器2010、控制器2020和存储器2030。数据路径2060向缓冲器2010提供用于传输到在单元114J中的发送器140的分组流。通过控制线2040连接到缓冲器2010的控制器2020,适用于控制从缓冲器2010到数据路径252上字的释放。
存储器2030存储多个(N×M)入口2080。入口2080可能也被作为“地区”(zones)提到。在发送器140的数据存储器702中,入口2080j,A到2080j,M对应于槽708j,A到708j,M,1≤j≤N。每一入口可能包括一个或多个间接指示在数据存储器702中对应的槽是否是占用或未占用的比特。至于“间接”,它意味着存储器2030关于在发送器140的数据存储器702中的特定槽的占用状态可能不是精确的,但是它包括给定目标和占用的优先权级别的槽数量的精确版本。控制器2020通过输入接口116和控制路径254接收来自发送器140的更新过的占用信息。控制器2020通过控制线2050具有到存储器2030的通路。
在操作中,控制器2020执行更新在存储器2030中的占用信息和控制分组从缓冲器2010的释放的任务。这两个任务可能是异步执行的。
关于从缓冲器2010的分组的传输,这被执行为缓冲器2010的内容的函数和存储在存储器2030中的占用信息的函数。特别的,当缓冲器2010包括准备好传输到发送器140的分组时,控制器2020以类似于在发送器104中的分组插入模块704的方式验证和那个分组相关联的目标单元并且验证它的优先权类别。
假定目标单元是单元114K。这意味着对正在涉及的分组来说,适于占用在数据存储器702中的槽708K,A,...,708K,M中的一个。另外,分组的优先权级别可能进一步缩小分组在到达发送器140时被插入哪个合适的槽的选择。因为存储器2030知道哪些槽是被占用的而哪些不是,控制器2020可以因此确定分组是否可被在数据存储器702中的合适的槽容纳。
在一个实施例中,控制器2020不允许分组被通过数据路径252发送到输入接口116,除非发现至少一个合适的槽是未占用的。在这种情况下,控制器2020将通过在分组被传输到发送器140之前或过程当中把在存储器2030中的一个合适的(并且是未占用的)入口设置到“占用的”来有效地保存一个合适的槽。哪个槽以这种方式保留是不重要的,只要优先权类别和目标与分组将在其到达数据存储器702时被实际插入的槽一致。
考虑“占用更新”任务,回想free_slot线207向输入接口116提供信息,以作为分组从数据存储器的释放。如果,当监控free_slot线207时,输入接口116确定被发送到它的目标接收器的分组的槽位置,则输入接口116将通过控制路径254发送“象征性释放”(token release)消息到控制器2020。这样一个象征性释放消息可能指定空出的精确的槽。但是,因为在存储器2030中的保留是作为目标和优先权类别的函数而作出的,因此输入接口116仅需要发送段(也就是,目标单元)和与被释放的槽相关联的优先权类别。在接收“象征性释放”消息的情况中,控制器2020改变在存储器2030中的一个入口中的信息,其中该存储器和那个目标、优先权类别以及先前“被保留”了的那个槽相关联。
因此,将在分组有机会到达发送器140之前为分组保留一个槽。和一旦槽被实际占用的时候就标记为“占用的”的情形相比这是有利的,因为它防止了在仅有用于一个分组空间的时候两个分组都被发送的情形发生。
另外,一旦分组到达发送器,它将被写入数据存储器702。当它开始被从存储器中写入时,在控制路径254上将“象征性释放”消息发送回控制器2020。这向控制器2020指示出在发送器140中具有用于具有特定目标和优先权类别的分组的空间,以及合适的分组可以被发送到发送器140。这个新分组将在旧分组开始被读取之后到达,并且,假定写入操作不会赶上(catch up)读取操作,这有利于引起高效的数据流水线,其更为有利的是当结合了在发送器140和接收器150之间发生高效的数据流水线(pipelining)时。
可能因为传输错误,包含在“象征性释放”消息里的信息不正确。为此,设置控制器2020使得它能够请求在发送器140的数据存储器702中的每一个槽的状态,从而执行存储器2030的“刷新”可能是有利的。这种类型的刷新操作可能在操作过程中的初始阶段和其它时间内执行。这可以通过经前向传播控制路径(没有示出)发送“刷新请求”消息到输入接口116达成。输入接口116可适用于通过发送在它的数据存储器702中的每一槽708的占用状态来响应“刷新请求”消息。这个信息从在控制存储器712中的入口714获得。在接收来自输入接口116的请求信息的情况中,控制器2020更新在存储器2030中的入口2080的内容。以这种方式,控制器2020能够收集关于在数据存储器702中的每一槽的占用的信息。
输入接口116可以通过在输入接口116和在队列控制器710的控制存储器712中的入口714之间提供离散的(discrete)或者总线(bussed)的信号连接而持续地访问最近的占用信息,这也在本发明的范围之内。例如,这样一个总线在一些实施例中可能是N×M比特宽。
现在参考图14,其示出了根据本发明的另一实施例的单元14141,其中提供了中心处理器(CPU)1400。单元14141是先前参考图2描述的单元1141的更改的版本。特别的,除了CPU1400,单元14141还包括功能模块的布置,这些模块包括先前描述的输入和输出接口116,118、已经更改了的发送器1440、N个更改的接收器14501...1450N、以及两个仲裁器260,1460,其中仲裁器260已经参考图5进行了描述。
CPU1400的主要目的是处理,启动和/或响应所谓的“系统分组”。系统分组通常不携带数据业务;而是,它们携带控制信息。可能由系统分组携带并由CPU1400产生的控制信息的实例包括:由发送器1440发送的分组的数目、在发送器1440的数据存储器中的占用槽的数目、在一个或多个接收器1450的数据存储器中的占用槽的数目、由外部端口116,118发送或接收的分组的总数目、由发送器1440或任何接收器1450删除(kill)的分组的数目,等等。可能以CPU1400为目标的系统分组携带的控制信息的实例包括:用于更改在时效机制中使用的参数或通过在发送器(参照图9)中的多点通信队列控制器910请求延时的设置的指令(instruction),或指示时间标记计数器620(参照图6)来计数分组的发送而不是时钟周期(或者相反)的指令。
在一个实施例中,CPU1400可以是具有到CPU随机存取存储器(RAM)的通路的32比特4级的流水线(pipeline)RISC处理器。CPURAM被分为擦除RAM(scratch RAM),插入RAM和转发RAM。擦除RAM用于暂时特性(temporary nature)的一般计算,而插入RAM用于存储从接收器1450到达的系统分组,且转发RAM用于存储要沿着合适的前向信道由发送器1440发送的系统分组。在一个实施例中,插入RAM和转发RAM中每一个的大小都可以是,一个、两个或多个槽,其中每一槽是足够存储一个分组的大小。例如,总RAM大小可能在两千比特的状态。当然,其它的CPU类型和存储器大小也在本发明的范围之内。
在单元14141中的CPU1400也通过异步外围总线1472连接到在其它单元中的其它CPU,其在每一单元(包括单元14141)中使用内部外围总线接口1470,并且在芯片100的其它地方使用共同的外部外围总线接口(没有示出)。在单元14141中的内部外围总线接口通过外围总线1472和外部外围总线接口通信。外围总线的目的是允许在每一单元中的CPU1400来和外部设备(例如,高速存储RAM,FPGA,UART等)交换信息。例如,当从外部存储器设备下载CPU初始编码时,外围总线是有用的。
为容纳系统分组与CPU1400之间的传输,把所有分组的报头的目标字段设计为使得其能够指定该分组是否是系统分组,就是说,要么以给定目标单元的CPU为目标,要么由给定源单元的CPU产生。因此,在本发明的一个实施例中,参考图18,为分组1850提供在分组的报头1860中的附加“到CPU”(或TCPU)字段1810和附加“来自CPU”(或FCPU)字段1820。为指示分组是系统分组,要合适地设置TCPU字段1810或者FCPU字段1820(或者两者)。如果分组1850不是系统分组,就是说,分组1850既不以给定单元的CPU为目标,也不由给定单元的CPU产生,那么TCPU和FCPU字段1810,1820保持为空。
如果分组确实是系统分组,那么关于分组含义的进一步的信息可能在分组的后面的字中找到。例如,系统分组的第二,第三或者其它字可能包含“类型”字段1880。类型字段1880标识由系统分组携带的控制信息的特性。当系统分组被路由到CPU1400时,将根据类型字段1880的内容来对它进行处理。系统分组可能还包括密码字段1890,其在软件上是可编码和可解码的。另外,系统分组可能包括查询比特1892,其指示CPU1400是否需要系统分组的响应。密码字段1890和查询比特1892中的一个或两个,如果使用的话,可能在分组1850的报头1860中出现或者在分组1850的有效负载中的随后的字中出现。
经过单元14141的系统分组流和业务分组(traffic packet)(也就是,非系统分组)流可能通过参考图15更好的理解,图15是图14的简化版本,其中实线表示业务分组可能传播的路径,虚线表示系统分组可能传播的路径。仲裁器260,1460为了简化示图的原因被略去了。
继续参考图14,输入接口116通过数据路径252接收来自芯片外分组转发模块226的系统分组和业务分组,并将它们通过数据路径230(先前参考图2进行了描述)转发到发送器1440。沿着一组free_slot线207把关于发送器1440的占用信息提供到输入接口116,其将这些信息与沿业务流的相反方向运行的外部向后信道254(也在前面参考图2进行了描述)转发到芯片为分组转发模块226。
发送器1440控制从芯片外分组转发模块226接收的系统分组和通信分组到对应的前向信道上的传输,在这个情况中是前向信道2101。另外,发送器1440要么独立地,要么响应于包含查询的系统分组还控制由CPU1400产生的系统分组到前向信道2101上的传输。达成所需功能的一个方式将在后面更详细的描述。
在单元14141中,接收器1450沿着前向信道210,一个字一个字的接收分组。每一个这样接收的分组可能是业务分组、以CPU1400为目标的系统分组、或没有以CPU1400为目标的系统分组。以CPU1400为目标的系统分组相对于业务分组和没有以CPU1400为目标的系统分组来说存储在不同的区域中。
用于传输由接收器1450存储的分组的请求可能被提到(made to)仲裁器260或仲裁器1460。以先前描述的方式,仲裁器260通过数据路径202连接到输出接口118。输出接口118提供分组到芯片外输入队列228。以almost_full标志208(先前已描述)的形式提供关于芯片外输入队列228的占用信息到接收器1450,该标志以和业务流相反的方向通过输出接口118。这一功能可由外部向后信道来提供。对于它的部分,仲裁器1460具有和CPU1400通过数据路径1402连接的输出。以cpu_almost_full标志1408的形式提供关于CPU1400的占用信息到接收器1450。
注意到在这个实施例中,以在单元14141中的CPU1400为目标的系统分组,以及通过芯片外分组转发模块226到达的系统分组,将在由在单元14141中的发送器1440放置在前向信道2101之后通过在单元14141中的接收器14501到达CPU1400。应该正视在本发明的其它实施例中,这种系统分组可能直接到达CPU1400,而不必经过前向信道2101。
现在参考图16,其示出了发送器1440的非限制型的实例性的实现,该发送器适用于允许系统分组和通信分组沿着合适的前向信道传输。为了不失一般性,假定发送器1440驻留在单元1414J之中,并且因此发送器1440和前向信道210J以及向后信道2121,J,2122,J,...,212N,J连接。
发送器1440从输入接口116沿着数据路径230接收字。这些字被通过多个数据输入端口反馈到数据存储器702。数据存储器702呼应于写地址信号和写使能信号是可写的,这两个信号是分别通过write_address线716和write_enable线718从分组插入模块704接收的。write_address线716携带当前数据路径230的字将被写入数据存储器702中的地址,而通过断言在write-enable线718上的信号触发了将这一字写入到指定地址的实际操作。为了协调在数据存储器702中的分组的到达和在write_address线716和write_enable线718上的信号的产生,数据路径230可能在进入数据存储器702的数据输入端口之前通过可选择的延时器件706。
数据存储器702包括先前描述的段713,一个对应于在芯片110上的N个单元中的第一个。每一个段713由对应的多个队列控制器1610中的一个表示。队列控制器1610j具有到相关联的控制单元712j的通路,其包括分别存储在数据存储器702的第j个段713j中的槽708j,A,708j,B,...,708j,M的占用状态(也就是,占用或未占用)的多个入口714j,A,714j,B,...,714j,M。对每一个占用的槽来说,对应的入口也存储占用那个槽的分组的优先权级别。
以类似于已经参考图7描述的方式,分组插入模块704可操作来监控在通过数据路径230接收的每一字的EOP比特368,以定位新接收的分组的报头。因为EOP比特368对在其所属的分组中特定位置出现的字经历转变(例如,下降沿),因此EOP比特368的检测和监控为分组插入模块704提供了何时接收新的分组的指示,以及,因为报头360位于分组的开头,因此当新分组的报头360到达时,分组插入模块704将知道。
分组插入模块704从每一接收的分组的报头360中提取控制信息。这种信息包括接收分组的目标单元(或多个单元)和它的优先权级别,以确定它应该被放置在数据存储器902的哪个槽。这些信息通过从接收的分组的报头中提取目标字段362获得,以确定和分组相关联的目标单元(或多个单元)。这自动确定了接收的分组应该被写入哪个段。另外,分组所属于的特定槽的选择将以参考图7的分组插入模块704所描述的方式来达成,即,通过确定接收的分组的优先权类别和验证和那个优先权类别相关联的槽的可用性。注意到发送器1440对于沿着数据路径230从输入接口116接收的系统分组和通信分组之间没有产生区别。
数据存储器702响应于由仲裁器1660沿着read_address线792提供的读地址也是可读的。以类似于先前已经参考图7的仲裁器760描述的方式,仲裁器1660启动从数据存储器702的读取为从多个队列控制器1610,1610CPU通过对应的多个request线1603,1603CPU接收的请求的函数。
如果对应的队列控制器1610j需要转发业务分组或系统分组到在单元1414j中的接收器1450J(可能甚至是单元1414J自己),将断言特定的request线1603j,而且如果CPU队列控制器1610CPU需要转发来自CPU1400的系统分组到在单元中的一个(可能甚至是单元1414J自己)的接收器1450J,将断言请求线1603CPU。
队列控制器1610也以类似于先前参考图7描述的队列控制器710的方式产生请求。特别的,队列控制器1610j可操作来产生用于发送多个占用在数据存储器702中的槽708j,A,708j,B,...,708j,M的可能的分组的一个的请求。沿着对应的多个slot_id线1605j中的一个提供选择来发送的槽的标识,而且在对应的多个priority线1607j上的一个提供和所选槽相关联的优先权。
队列控制器1610j实现确定占用的槽的标识的功能,该槽拥有能够被目标单元的接收器容纳的最高优先权的分组。例如,这个功能可能由逻辑电路合适的实现。通过实例的方式,可以设计在单元1414J中的发送器1440中的队列控制器1610j来验证在相关联的控制存储器712j中的入口,以在所有和在数据存储器702中的段713j相关联的占用的槽中,确定拥有最高优先权的分组的槽的标识。然后,队列控制器1610j通过处理经对应的向后信道212j,J接收的信息评估在目标单元中的接收器(也就是,在单元1414j中的接收器1450J)容纳在所选槽中的分组的能力。
在一个实施例中,在单元1414j中的接收器1450J包括一组类似于在数据存储器702的第j个段713j中的M个槽的M**个槽,但是M**和M不同。这些槽中的至少一个将为容纳以在那个单元中的CPU为目标的分组保存。由向后信道212j,J在这样的情况中携带的信息将指示每一这些M**个槽的状态(占用或未占用)。(可能需要参考图17A和17B,其中508指示不为CPU保留的接收器槽,并且其中1708指示为CPU保留的接收器槽。这个图将在后面当描述接收器时详细的描述)。这样,通过参考向后信道212j,J,在单元1414J中的队列控制器1610j知道它的最高优先权分组是否可以容纳在相关联的单元1414j中的接收器1450J中。
如果最高优先权的分组确实可以被容纳,那么之后队列控制器1610j将相关联的槽的标识放置在对应的slot_id线1605j上,将分组的优先权级别放置在对应的priority线1607j上并且通过断言对应的request线1603j提交请求到仲裁器1660。但是,如果最高优先权的分组确实不能被容纳,之后队列控制器1610j在所有和在数据存储器702中的段713j相关联的占用的槽中,确定拥有次最高优先权分组的槽的标识。像以前一样,这可以通过处理通过对应的向后信道212j,J接收的信息达成。
如果次最高优先权的分组确实可以被容纳,那么队列控制器1610j将相关联的槽的标识放置在对应的slot_id线1605j上,将分组的优先权级别放置在对应的priority线1607j上,并且通过断言对应的request线1603j提交请求到仲裁器1660。但是,如果次最高优先权的分组确实不能被容纳,之后队列控制器1610j在所有和在数据存储器702中的段713j相关联的占用的槽中确定拥有次次最高优先权分组的槽的标识,等等。如果没有分组可以被容纳,或者,如果没有槽被占用,那么由队列控制器1610j不产生任何请求并且对应的请求线1603j保持未断言状态。
对于它的部分,以非常不同于实现队列控制器1610的方式实现CPU队列控制器1610CPU。特别的,CPU队列控制器1610CPU已经访问相关联的控制存储器1612CPU。控制存储器1612CPU包括一个或多个分别存储CPU1400的转发RAM中的槽的占用信息的入口1614CPU。对每一在转发RAM中的被占用的(由系统分组)槽,在控制存储器1612CPU中的对应的入口还存储优先权级别和那个系统分组的目标单元。
CPU队列控制器1610CPU可操作来产生传输发送所选的多个可能的占用CPU1400的转发RAM的系统分组中的一个的请求。可基于分组的优先权级别和在目标单元中的接收器1450J容纳所选系统分组的能力选择传输系统分组。这可通过处理经合适的向后信道212j1,J,212j2,J,...,212jP,J中的一个接收的信息达成。
这个信息将向在目标单元的接收器指示在它的槽508(给不为在那个单元中的CPU预定的分组保留)或708(给为在那个单元中的CPU预定的分组保留)是否具有空闲槽。注意到需要这两个类型的信息,因为由CPU1400产生并在转发RAM中暂时储存的系统分组可能为在目标单元中的CPU指定,但是它也可以很容易的不为在目标单元中的CPU指定。
如果CPU队列控制器1610CPU发现所选系统分组确实能够被在目标单元中的接收器容纳,它将作出请求到仲裁器1660。在一个实施例中,这种请求和标识那个发送的系统分组的优先权级别相关联。在另外的实施例中,考虑到它仅仅是系统分组的事实,给这种请求较低的优先权。在其它,错误诊断情形中,发送系统分组的请求可能被给予一个相对高的优先权。为影响仲裁器1660的请求,CPU队列控制器1610CPU把请求的优先权级别放置在cpu_priority线1607CPU上,并且通过断言cpu_request线1603CPU提交请求到仲裁器1660。
假定由队列控制器1610,1610CPU中的一个提交的请求被仲裁器1660准许。则队列控制器1610,1610CPU将通过仲裁器1660知道这个事实。这个信息交换可以以多种方式达成。例如,以类似于先前参考仲裁器760描述的方式,仲裁器1660可能通过在grant线1611上发送唯一的码来标识其请求被准许的队列控制器,并且在准备完毕时,仲裁器1660可能断言由队列控制器1610,1610CPU共享的grant_enable线1615。目标的队列控制器将因而通过以下方式断定其请求已被准许:(i)检测在通过grant线911从仲裁器接收的信号中的唯一的码;以及(ii)检测断言的grant_enable线1615。
应该了解信令和检测已准许的请求的其它方法也在本发明的范围之内。例如,可以提供分开的grant线到每一队列控制器,包括CPU队列控制器1610CPU和其它队列控制器1610;当准许特定队列控制器的请求时,连接到特定队列控制器的grant线将是唯一被断言的。在这个情况下,不需要提供任何准许启动线。
在接收其请求已被准许的指示时,队列控制器1610j访问在控制存储器712j中对应于槽的入口,该槽的分组现在面临在仲裁器1660的控制下立即从数据存储器702输出。特别的,队列控制器1610改变特定槽的状态到“未占用的”,这将改变请求计算逻辑模块的结果,可能导致产生指定不同槽的新的请求。槽的改变的状态也将通过对应的queue_full线726j反映到基于该请求而随后提供到分组插入模块704的信息中。
另一方面,在接收其请求已被准许的指示时,CPU队列控制器1610CPU访问在控制存储器1612CPU中对应于要被发送的系统分组的入口1614CPU、特别的,CPU队列控制器1610CPU更改那个特定槽的状态到“未占用”,这将改变请求计算逻辑模块的结果,导致产生指定不同槽的新请求。
同时,CPU队列控制器1610CPU把在CPU1400的转发RAM中的对应槽中的系统分组放置在输出线1621上,输出线1621在多路复用器1620处是多路复用的,具有退出数据存储器702的数据。多路复用器1620由在指示CPU队列控制器1610CPU是否被准许的select线1689上的信号控制。该控制将是通过在grant线1611上的比特。就是说,grant线1611的状态可能调节是从数据存储器702中还是从CPU队列控制器1610CPU中得到沿着前向信道发送的分组。
还是在接收其请求被准许的指示时,目标队列控制器1610,1610CPU断言返回到仲裁器1660的对应的pointer_update线1629j,1629CPU。如将在后面结合仲裁器760描述的那样,对pointer_update线1629j,1629CPU中一个的断言向仲裁器1660指示它发布的准许已经被确认,允许仲裁器1660基于可能来自目标队列控制器的新的请求和来自其它队列控制器710的待处理的请求继续准备下一个准许。
现在将继续参考图16描述仲裁器1660。仲裁器1660的功能是准许从多种队列控制器1610,1610CPU接收的请求中的一个和因此控制从数据存储器702和从在CPU1400中的转发RAM的读操作。为此,仲裁器1660包括请求处理模块1670,地址解码器1680和上面提到的分组转发模块1690。仲裁器1660可能类似于先前参考图4描述的仲裁器760,仅在请求处理模块1670,地址解码器1680和上面提到的分组转发模块1690的实现上略有不同。
请求处理模块1670接收来自队列控制器1610,1610CPU的request线1603,1603CPU,priority线1607,1607CPU和pointer_update线1629,1629CPU。请求处理模块1670执行仅准许从队列控制器1610,1610CPU沿着request线1603,1603CPU接收的许多可能请求中的一个的功能。请求处理模块1670具有是grant线1611的输出。该grant线1611连接每一个队列控制器1610,1610CPU和地址解码器1680。在本发明的一个实施例中,该grant线1611使用唯一的二进制码来标识其请求被准许的队列控制器。
地址解码器1680分别接收来自请求处理模块1670的grant线1611和来自队列控制器1610的slot_id线1605。如果grant线1611标识不是CPU队列控制器1610CPU的队列控制器1610,那么之后地址解码器1680以在合适的slot_id线上指定的槽的函数,计算在数据存储器720中的基地址,该存储器存储其发送被准许的分组的第一字。该基地址被通过base_address线1682提供到分组转发模块1690。
但是,如果grant线1611标识CPU队列控制器1610CPU,那么不需要基地址计算,因为CPU队列控制器1610CPU自己确定传输哪个系统分组。
分组转发模块1690可操作来等待直到它在把下一个分组放置在前向信道210J上之前结束把当前分组放置在前向信道210J上。在它结束把当前分组放置在前向先到201J上之后,分组转发模块1690参考grant线1611。如果它指示准许的队列控制器不是CPU队列控制器1610CPU,那么之后分组转发模块1690存储在base_address线1682上的初始地址,断言grant_enable线1615并且从初始的地址开始继续从数据存储器702中读取。另外,分组转发模块1690通过select线1689控制多路复用器1620使得它接受(admit)来自数据存储器702的字和来自CPU1400的转发RAM的结构字(block word)。
另一方面,如果该grant线1611指示准许的队列控制器是CPU队列控制器1610CPU,那么分组转发模块1690断言grant_enable线1615,并且从在CPU1400中的转发模块启动读操作。另外,分组转发模块1690通过select线1689控制多路复用器1620使得它接受来自CPU1400的转发RAM的字和来自数据存储器702的结构字。
在给定接收器,所有沿着对应的前向信道接收的不指定给CPU的通信分组或系统分组进行如先前参考图5的接收器所描述的处理。但是,在该方法中,其目标单元对应于接收器位于其中的单元的以及特别指定给目标单元中的CPU1400的系统分组被不同的处理,并且因此需要更改先前参考图5描述的接收器。
为此,图17A和17B示出了适用于处理通过前向信道210j接收的系统分组的接收器1450j。接收器1450j具有包括多种存储区域的存储器,这些存储区域包括数据存储器1702、控制存储器1712、任何由队列控制器1710使用的存储器和任何其它由接收器1450j使用的存储器。
接收的单元被通过多个数据输入端口反馈到数据存储器1702。数据存储器1702对应于写地址和写使能地址是可写的,这两个地址分别通过先前描述的write_address线516和write_enable线518从分组插入模块1704接收。该write_address线516携带数据存储器1702中的地址,其中当前前向信道210j的数据将被写入该数据存储器1702,而在write_enable线518上通过断言信号触发了将这一字写入到特定地址的实际操作。为了协调在数据存储器1702上分组的到达和在write_address线516和write_enable线518上的信号的产生,前向信道210j可能在进入数据存储器1702的数据输入端口之前通过先前所描述的可选择的延时器件506。
数据存储器1702包括M
**个槽508,1708,包括M
*个先前描述的槽508
A,508
B,...,
,以及一个和多个附加的槽1708,其中每一个槽足够大来容纳一个上面描述的分组。槽508
A,508
B,...以及
被保留用于指定给芯片外输入队列228的分组,并且槽1708被保留用于给CPU1400的系统分组。在一个本发明的特定实施例中,数据存储器1702包括四个槽508
A,508
B,508
C,1708,这里槽508
A可能和高的优先权类别相关联,槽508
B可能和中的优先权类别相关联,槽508
C可能和低的优先权类别相关联,并且槽1708可能和任何指定给CPU1400的优先权的系统分组相关联。
在接收器1450
j中的队列控制器1710已经访问了控制存储器1712,其包括用于分别存储在数据存储器1702中的槽508
A,508
B,...,
,1708的占用状态的多个输入514
A,514
B,...,
,1714。另外,对每一个被占用的槽508,1708,对应的输入存储占用那个槽的分组的优先权级别。例如,在一个实施例中,输入514
A,514
B,...,
,1714可能采用寄存器的形式。在其它实施例中,填满级别和空白状态可能由控制存储器1712存储。
分组插入模块1704可操作来监控在每一通过前向信道210j接收的字上的EOP比特368,以定位新接收的分组的报头。重新调用EOP比特368以对在其所属的分组中特定位置出现的字进行转变(例如,下降沿)。以这种方式,EOP比特368的检测和监控提供分组插入模块504何时接收新的分组的指示,以及,因为报头360位于分组的开头,因此当新分组的报头360到达时,分组插入模块504将知道。
分组插入模块1704从每一新接收的分组的报头360中提取控制信息。这种信息包括新接收的分组的目标和接收的分组是否是被指定给CPU1400的系统分组。分组插入模块1704接受其被指定给其目标单元是单元114J的分组,而忽视指定给其目标单元不是单元114J的分组。分组插入模块1704还确定已被接受和接收的分组应该插入哪个槽。
在接收的分组是系统分组的情况下,这样的分组将不需要特别的处理,除非在分组的报头中的TCPU字段被设置。如果在本系统分组的报头中的TCPU字段确实被设置,那么接收的分组需要被放置在为系统分组保留的槽中,这在上面的实例中将是槽1708。另一方面,如果在系统分组1850的报头1860中的TCPU字段1810没有被设置(也就是,如果仅仅系统分组的FCPU1820字段被设置),那么接收器1450j以业务分组的方式处理这种系统分组。
通信分组350的报头360将为了确定应该放入数据存储器1702中的哪个槽的目的指示分组的优先权级别。分组插入模块1704可操作来通过比较分组的优先权级别和先前定义的优先权阈值来确定分组的优先权类别。以实例的方式,如在上面提到的,使槽508A、508B、508C分别和高、中和低优先权级别相关联。而且,使低-中优先权阈值和中-高优先权阈值被建立为先前定义的,即,分别在100和200。例如,如果接收的分组的优先权级别是12,那么它应该被写入的槽将是槽508C。
在这个实施例中,分组插入模块1704知道它可以将接收的业务分组写入空位槽508C,因为,它将被重新调用(recall),如果对应的槽在第一位置可用,则分组仅仅可以在前向信道210j上发送。但是,下面提到的也在本发明的范围之内,即,包括更大数量的槽,其中多于一个槽将和给定的优先权类别相关联,这可能需要分组插入模块1704通过参考从队列控制器1710接收的queue_full线526(先前描述的)验证单独的槽508的占用。
其次,分组插入模块1704确定分组的第一字应该被写入哪个在数据存储器1702中的对应的基地址。这可能要么通过计算对应于所选槽的相对位置的偏移值,要么通过参考将槽映射到在数据存储器1702中的地址的短查询表作出。
分组插入模块1704可操作来通过write_address线516提供基地址到数据存储器1702,并且进一步可操作来断言write_enable线518。在大致相同的时间,分组插入模块504沿着new_packet线528(先前参考图4进行了描述)发送信号到队列控制器1710,这种信号指示被写入的槽的标识和要占用那个槽的分组的优先权级别。队列控制器1710适用于通过更新状态和与标识的槽(在先前是未占用的)相关联的优先权信息来处理这个信号。
在所接收的分组的第一字被写入数据存储器1702的上面所确定的基地址后,然后使在write_address线516的地址在每一个时钟周期(或在每几个时钟周期)增加作为沿着正向信道210j所接收到的新的字。这将使得分组的字填满在数据存储器1702中的所选的槽。同时,通过分组插入模块1704监控在每一所接收字中的EOP比特368。当检测到一个新分组的时候,重新启动上述提取来自新接收的分组的报头360的控制信息的过程。
除了是可写入的,数据存储器1702响应于沿着read_address线702提供的读地址的接收还是可读的。在一些需要较高的交换速度的实施例中,可能使用双端口RAM来允许同时读和写,虽然单一端口的RAM可能为了减少芯片的实际成本(real estate)而使用。该read_address线1793j是由从队列控制器1710通过控制线1795接收的控制信号控制的1×2多路复用器1794的输出。多路复用器1794还具有两个数据输入,一个(指示为1791)来源于仲裁器260,且另一个(指示为1792)来源于仲裁器1760。
仲裁器260以先前描述的方式操作,也就是,它启动从数据存储器1702中的读取作为从在每一接收器1450中的队列控制器通过对应的多个request线503(先前已描述)接收的请求的函数。如果在对应的接收器1450j中的队列控制器1710需要转发分组到芯片外输入队列228,那么断言特定的request线503j。以类似的方式,仲裁器1760启动从数据存储器1702的读取为从在每一接收器1450中的队列控制器1710通过对应的多个tcpu_request线1703接收的请求的函数。如果在对应的接收器1450j中的队列控制器1710需要将系统分组放入CPU1400的插入RAM时,将断言特定的tcpu_request线1703j。
两个仲裁器260,1760并行操作,并且可以同时处理两个来自两个不同接收器1450的不同的请求。但是,在每一接收器1450中的队列控制器1710仅仅允许在给定的时间处理一个准许的请求。为使这个功能能够进行,下面提供了一种在接收器1450
j中的队列控制器1710的可能的实现,该接收器适用于为两个分组的传输产生最多两个请求,一个为来自在数据存储器1702中的槽508
A,508
B,...,
中一个的一个的芯片外传输,且一个为占用槽1708的分组的一个的CPU限制传输(CPU-bound)。
在到仲裁器260的请求的情况下,沿着对应的slot_id线505j提供选择来发送的槽的标识,同时在对应的priority线507j上提供和所选的槽相关联的优先权。特别的,队列控制器1710实现验证在控制存储器1712的输入的功能,以确定占用的槽的标识,该槽拥有能够被由芯片外输入队列228容纳的最高优先权的分组。例如,这个功能可通过逻辑电路合适的实现。通过实例的方式,设计队列控制器1710来在所有在数据存储器1702中的槽508的占用的槽中确定拥有最高优先权的分组的槽的标识。然后,该队列控制器1710通过处理通过almost_full标志228接收的信息评估芯片外输入队列228容纳分组的能力。
如果断言almost_full标志208,之后可能需要避免发送下一个分组到芯片外输入队列228的请求。在本发明的一些实施例中,该almost_full标志208可能包括多个almost_full标志,一个对应于每一优先权类别(高,中,低)。这允许通过为断言高优先权的almost_full标志的占用阈值高于为断言低优先权almost_full标志的阈值而对高优先权的分组进行优选的处理。
如果最高优先权的分组确实可以被容纳,那么之后队列控制器1710把相关联的槽的标识放置在对应的slot_id线505j中,把分组的优先权级别放置在对应的priority线507j中,并且通过断言对应的request线503j提交请求到仲裁器260。但是,如果高优先权的分组确实不能被容纳,那么之后队列控制器1710在所有在数据存储器1702中的占用的槽中确定,拥有次最高优先权的分组的标识。像前面一样,这可以通过处理通过almost_full标志208接收的信息来实现。
如果次最高优先权的分组确实可以被容纳,那么之后队列控制器1710把相关联的槽的标识放置在对应的slot_id线505j中,把分组的优先权级别放置在对应的对应的priority线507j中,并且通过断言对应的request线503j提交请求到仲裁器260。但是,如果次最高优先权的分组确实不能被容纳,那么之后队列控制器1710在所有在数据存储器1702中的占用的槽中确定,拥有次次最高优先权的分组的标识,等等。如果没有分组可以被容纳,或者,另外的,如果没有槽被占用,那么队列控制器1710不产生任何请求,并且对应的request线503j保持未断言状态。
在对仲裁器1460的请求的情况下,沿着对应的tcpu_slot_id线1705j提供选择来发送的槽的标识,同时在对应的tcpu_priority线1707j上提供和所选的槽相关联的优先权。可能仅有一个槽1708用于拥有指定给CPU1400的插入RAM的分组,在这种情况下,队列控制器1710实现验证这个槽是否被占用、以及这个槽是否可被CPU1400容纳的功能。例如,这个功能可通过逻辑电路合适的实现。该CPU1400的容纳接收的分组的能力可通过cpu_almost_full标志1480的方式来评估。
如果断言cpu_almost_full标志1408,之后可能需要避免发送下一个分组到CPU1400的请求。另一方面,如果没有断言cpu_almost_full标志1408,那么队列控制器1710将槽1708的标识放置在对应的tcpu_slot_id线1705j上,将分组的优先权级别放置在对应的线1707j上,并且通过断言对应的tcpu_request线1703j提交请求到仲裁器1760。
现在,假定由队列控制器1710提交的请求已经被准许。如果这个准许的请求被提交到仲裁器260,则后者可能通过发送在共同grant线511上的唯一的码标识包含其请求被准许的队列控制器的接收器,并且,当准备完毕时,仲裁器260可能断言由在每一接收器1450中的队列控制器1710共享的grant_enable线515。队列控制器1710可能因而通过以下方式断定其请求已被准许:(i)检测在通过grant线511从仲裁器260接收的信号中的唯一的代码;以及(ii)检测断言的grant_enable线515。
以类似的方式,如果这个转许的请求被提交到仲裁器1460,则后者可能通过发送在共同的cpu_grant线1711上的唯一的码来标识包含其请求被准许的队列控制器的接收器,并且,当准备完毕时,仲裁器1460可能断言由在每一接收器1450中的队列控制器1710共享的cpu_grant_enable线1715。队列控制器1710可能因而通过以下方式断定其请求已被准许(i)检测在通过grant线1711从仲裁器1460接收的信号中的唯一的代码;以及(ii)检测断言的cpu_grant_enable线1715。
在接收它的一个或两个请求被准许的指示时,队列控制器1710最多处理这些的一个。在一个实施例中,到仲裁器260的准许的请求具有超过到仲裁器1460的准许的请求的优先权。根据接收哪个准许的请求,队列控制器1710起不同的反应。
首先,无论准许的请求是到仲裁器260或仲裁器1460,队列控制器1710访问在控制存储器1712中对应于槽的输入,该槽的分组现在面对在仲裁器260的控制下立刻退出数据存储器1702。特别的,队列控制器1710更改那个特定槽的状态到“未占用的”,这将改变请求计算逻辑模块的结果,导致产生指定不同槽的新请求。在其中分组插入模块1704需要知道槽的状态的情况下,槽的更改的状态将在通过queue_full线526提供的信息中反映。
在其中到仲裁器260的准许的请求被接收的特定情况中,队列控制器1710断言返回到仲裁器260的对应的pointer_update线529j(先前已描述的)。该pointer_update线529j中的一个的断言指示仲裁器260它提交的准许已经被确认,允许仲裁器260基于可能是来自在接收器1450j中的队列控制器1710中的新的要求和来自接收器1450j的其它队列控制器的待处理的请求继续准备下一个准许。另外,队列控制器1710控制在控制线1795上的信号,该信号引向多路复用器1794,使得沿着read_address线1793j提供的地址是由仲裁器260输出的读地址。
在其中到仲裁器1460的准许的请求被接收的特定情况中,队列控制器1710断言返回到仲裁器1460的对应的pointer_update线1729j。该pointer_update线1729j中的一个的断言指示仲裁器1460它提交的准许已经被确认,允许仲裁器1460基于可能是来自在接收器1450j中的队列控制器1710中的新的要求和来自接收器1450的其它队列控制器的待处理的请求继续准备下一个准许。另外,队列控制器1710控制在控制线1795上的信号,该信号引向多路复用器1794使得沿着read_address线1793j提供的地址是用仲裁器1460输出的读地址。
仲裁器260的功能是接收来自在每一接收器1450中的队列控制器1710的请求,仅准许一个请求并且控制从数据存储器1702中的读操作。为此,仲裁器260包括请求处理模块570,地址解码器580和分组转发模块590。仲裁器260和先前参考图5描述的仲裁器260一样,并且因此不需要进一步的描述。
类似的,仲裁器1460的功能是接收来自在每一接收器1450中的队列控制器1710的请求,仅准许一个请求并且控制从数据存储器1702中的读操作。为此,仲裁器1460包括请求处理模块1770、地址解码器1780和分组转发模块1790。仲裁器1460和先前参考图5描述的仲裁器260非常类似,仅仅在地址解码器1780的实现上有小的不同。
特别的,地址解码器1780接收来自请求处理模块1770的cpu_grant线1711而不是来自在多种接收器1450中的队列控制器1710的slot_id线1705。地址解码器1780计算在数据存储器1702中的基地址,该存储器存储其发送被准许的系统分组的第一字。基地址被计算为在cpu_grant线1711上指定的码的函数。该基地址被通过base_address线1782提供到分组转发模块1790。
当然,本领域的技术人员将理解可为了提供多点通信功能和系统分组发送/接收功能两者而调整单元。
另外,如在这里使用的术语“存储器”应该被理解为指的是任何数据存储性能,即可能是分布式的,或者在一个单一模块里。
虽然本发明的特定实施例在这里进行了描述和图示,对本领域的技术人员来说,很明显在不脱离本发明和在附加的权利要求中定义的范围之内可以作出多种修改和变更。