数字通信处理器的制作方法

文档序号:7586168阅读:653来源:国知局
专利名称:数字通信处理器的制作方法
相关申请的交叉索引这个专利申请要求下列美国临时申请的优先权§60/084,706,Brown,等人,可编程的包交换机,98年5月8日申请;和§60/105,823,Brown,等人,数字通信处理器,98年10月27日申请。
本发明的领域本发明一般涉及数字网络,更特别地,涉及在这样一个数字网络中所使用的交换机。
现有技术的描述

图1包和协议在数字系统中所进行的通信一般是经过包进行的。图1中的113显示了一个包。简单地说,一个包是一个比特序列,这个比特序列的含义是由一个协议决定的。这个协议定义处理这个包的数字设备如何解释包中的比特。不管什么协议,大多数包具有一个报头115,这个报头表示如何根据这个协议来处理该特定包,另外,包也具有一个负荷117,这个负荷117是包所进行通信的实际信息。一个包也可能具有一个报尾119,这个报尾119可能简单地仅指示包的结束,但是也可能包括允许对在包的传输或者处理期间所发生 的错误进行检测和/或者纠正的信息。取决于包协议的不同,这个包的长度可能是固定的,也可能是不定长的。在下面的讨论中,报头115和报尾119中的内容将被称作协议数据,因为解释这些内容的方式完全是由这个协议所决定的,而负荷117中的内容将被称作负荷数据。某个特定协议的包也经常被称作帧或者信元。
在数字系统中,在许多不同的层上使用包来进行通信。这样,在这个数字系统中一个层上的一组包的负荷可能是一更高层的一个包。这被显示在图1的137中。IP包是根据IP协议来被解释的一个包。IP包121具有一个IP包报头123和一个长度可变的IP负荷125。包括在IP报头123的信息中的是IP负荷125的长度。当IP包121被经过一个物理网络来传送时,IP包被承载在一个传送包127流135的负荷中。每一个传送包127具有其自己的报头129,负荷131,和报尾133。这里被称作传送包的是在ISO-7层模型中的链路层的包。传送包的长度可能是固定的或者也可能是可变的,这与链路层所使用的协议相关。
处理这个传送包的设备按照包的报头129和报尾133所指示的来对这个包进行处理,并且不检查负荷131内的内容。当一个传送包到达其目的地时,其负荷被传递到这个系统中、它所希望到达的部分,在这个情形下,其负荷到达根据IP协议而进行工作的一个部件,并且这个部件按照IP报头123中所指示的来处理IP包121。当然,IP负荷125仍可以是更高层上的另一个包。例如,它可以是需要发送到一个解密器的一个包,并且这个包的负荷可以是一个被加密的IP包121。在这样一个情形下,处理IP包121的这个部件将这个负荷传递到这个解密器,这个解密器对加密的IP包121进行解密,并且将被解密的IP包返回到处理IP包的这个部件,以进行进一步的处理。当然,对IP包的这个处理可能包括将这个被解密的IP包发送到另一个目的地,并且如果与这个目的地的通信是经过传送层包127的协议来进行的,处理IP包的这个部件将向产生传送层包流的这个部件提供被解密的IP包,并且这个被解密的IP包将被携带在传送层包127的负荷中。
包交换机当包被用于在相互远离的数字系统中进行通信时,包就在连接这个系统的数字网络中移动。在物理层,这个数字网络可以采用任何形式的媒质来在两个设备之间发送一个信号,例如,采用以太,一个导电线,或者一根光纤。包被包交换机在传输路径之间进行路由。这个包交换机根据典型地被包括在包的报头中的信息来路由这个包。如人们所期望的是,每一类协议均有其自己的路由规则。例如,IP协议使用逻辑路由;一个IP包的每一个源或者目的地均具有一个逻辑IP地址,并且用于发送到一个给定目的地的一个IP包在其报头中具有这个目的地的逻辑IP地址。这个报头不指出目的地的物理位置。这个IP包交换机必须将这个IP地址翻译成至少在到其目的地的部分路径上获得这个包的一个物理地址,并且也必须产生发送到这个物理地址的一个传送包流135,在这个传送包流135的负荷131中携带这个IP包。这样,IP节点109(n)位于以太局域网105(a)的以太网节点107(n)上,并且连接到这个LAN105(a)的一个IP包交换机必须通过产生发送到以太网节点107(n)的一个以太网包流来对被发送到IP节点109(n)的一个IP包作出响应,其中,在这个以太网包流的负荷中携带这个IP包。
在101处显示了一个典型的IP交换机。包交换机101被连接到一些物理媒质106,通过这些物理媒质106,这个包交换机101可以接收和发送数据。这样媒质的示例可以是光纤或者可以是由电导体组成的电缆。每一个这样的媒质106具有其自己的、用于定义经过这个媒质而发送的数据的协议;例如,用于经过一个光纤来发送数据的、被广泛使用的协议是SONET协议。在图1中,媒质106(a..m)是使用SONET协议的光纤,而媒质106(n..z)是电缆。在这个媒质层的包在这里被称作媒质层包,并且媒质层包的负荷是传送层包。就ISO-7层协议模型来说,这个媒质层包就是物理层的包。在交换机103中,经过光纤被发送和接收的传送层包是根据在ATM广域网111中被使用的ATM协议来产生的,而经过电缆被发送和接收的传送层包是根据在局域网109中被使用的以太网协议来产生的。在许多情形下,传送层包的负荷是IP包,并且在这些情形下,包交换机103将这个IP包路由到IP节点109。如上面所描述的,这是通过确定IP包为到达其目的地将经过的媒质106(i),并且然后,根据这个媒质所要求的协议产生一个包流,来完成的,其中,媒质层包流将与这个媒质一起被使用的传送层包流作为负荷,并且接着传送层包流将IP包作为的负荷。这样,如果包交换机103从WAN 111接收到需要被发送到IP节点109(n)的一个IP包,并且IP节点109(n)位于以太局域网105(a)的以太网节点107(n)上,包交换机103就必须以媒质106(n)所要求的形式产生一个包流,这个包流的负荷是需要发送到以太网节点107(n)的一个以太网包流,并且接着,这个以太网包流的负荷是IP包。
这样,交换机103必须能够执行下述功能§读取具有输入媒质协议所要求的形式的包流,并且检索作为这个包流的负荷的传送层包,和检索作为传送层包的负荷的其它类型的包;§将在ATM WAN 111上所接收的传送层包路由到在ATM WAN111上的另一个目的地;§将在一个以太网LAN 105上所接收的传送层包路由到连接在包交换机103的某个以太网LAN上的另一个目的地;§对IP包,按照IP地址所要求的来路由这个包。
§产生具有输出媒质协议所要求的形式的向外发送包流,并且这个向外发送包流的负荷是传送层包,并且接着,传送层包的负荷包括其它类型的包。
这样的路由可能需要将一个类型的传送层包翻译到另一个类型的传送层包。例如,如果从ATM WAN 111进来一个IP包,并且这个包的目的地是以太局域网105(a)的以太网节点109(n),包交换机103必须从ATM传送层包的负荷中提取这个IP包,并且然后将这个IP包放置在将发送到以太网节点107(n)的以太网包的负荷中。
另外,包交换机经常被用于执行安全功能,例如滤波,加密/解密,或者加扰/解扰。在这里,包交换机103被显示为在一个专用网络104和一个公用网络102的边界。每一个IP包121的报头包括这个包的源IP地址和目的IP地址,并且专用网络104的安全政策禁止从公用网络102来的、具有某些特定源地址的IP包对专用网络104进行访问,并且也禁止从私用网络104来的、具有某些特定源地址的IP包对公用网络102进行访问。交换机103通过将每一个输入IP包的源地址与需要被禁止其访问的一个源地址列表进行比较,并且如果这个输入包在这个列表上,就丢弃这个输入IP包,来对每一个输入IP包进行滤波。交换机103也采用类似的方法来对向外发送的IP包进行滤波。就加密/解密来说,包交换机103可能会从公用网络102接收一个IP包,这个IP包的负荷是需要发送到专用网络104中一个IP地址的一个被加密IP包。在这样一个情形下,包交换机103将获取这个被加密IP包,并且对这个IP包进行解密,然后,将这个IP包发送到在专用网络104中的目的地。类似地,包交换机103可以接收一个IP包,并且可以对这个IP包进行加密,然后在经过公众网络102发送其它IP包以前,将这个IP包作为另一个IP包的负荷,其中这个IP包是需要经过公众网络102被发送到属于专用网络104的一个目的地。
包交换机所提出的问题这种包交换机的设计向工程师们提出了很多问题。从前述讨论中可以很明显地看出,一个包交换机必须执行复杂的动作,例如对输入包流中的负荷进行定位并且产生向外发送的包流,在传送层或者更高层来对包流进行路由,翻译包中的信息,进行滤波,和加密/解密。包交换机执行这些动作时,其速度必须很快,并且其吞吐量必须很高。这个包交换机也必须能够处理很多类型的业务,例如从电子邮件的业务到数字TV的业务,到分组电话的业务,其中,在电子邮件中所需要的是在提交了一个电子邮件后的一个合理时间内(以小时来度量),这个电子邮件能够到达,在数字TV的业务中,包到达其目的地时,包之间的时间间隔必须是固定的,而在分组电话中,不仅对包之间的时间间隔有严格的限制,而且对一个包在网络中从其源到目的地所经历的总时间长度也有严格的限制。
在现代电子器件中,通过使用专用硬件,已经实现了高速度、高吞吐量,并且也实现了令人满意的时间限制,同时,也使用可编程的处理器来对付复杂程度。基于专用目的硬件的器件典型地是快速的,但是其价格昂贵,不灵活,并且也不能够进行复杂的处理;基于可编程处理器的器件典型地是便宜,灵活,并且能够进行任何所需要的处理,但是其缺点是速度慢。
这样,高速度包交换机是基于专用目的的硬件。如人们所希望的,这样的包交换机的速度很快,其吞吐量很高,并且能够满足时间限制,但是它们的价格是昂贵的,它们也不灵活,并且不能够执行复杂的功能,例如滤波或者加密/解密。另外,每一个传送层协议需要有自己的特殊硬件,并且因为这个原因,在一个高速度交换机中所使用的传送层协议的改变就需要改变这个交换机的专用目的硬件。
低速度的包交换机是基于可编程处理器的。另外,如人们可以预见的,在开始时,这些交换机的价格可以相对比较便宜,并且能够执行任何所希望的复杂功能,在处理传送层协议或者其它层协议的改变时,仅需要对这个处理器进行重新编程。但是,基于可编程处理器的包交换机没有足够的速度,吞吐量,或者能力来满足使用专用目的硬件制造的包交换机所能够达到的时间限制。
所需要的是这样一个包交换机,这个包交换机是灵活的,低价格的,并且具有能力来执行基于可编程处理器的包交换机能够执行的复杂特征功能,同时,也能够满足时间限制,并且能够提供高速度和高的吞吐量。这里所描述的数字通信处理器的一个目的就是提供这样一个包交换机。
通过提供包括多个数据流处理器,一个流上下文(context)处理器,一个队列管理器,和一个缓冲器管理器的一个集成电路,本发明克服了包交换机的和处理数据流的一般设备的前述问题。
正在接收一个数据流的一个数据流处理器从这个数据流中提取控制信息,将这个控制信息提供给这个上下文处理器以按照这个数据流的上下文所要求的来进行解释,并且使用这个上下文处理器所提供的结果来处理这个数据流。在这个数据流需要被进行进一步发送的情况下,这个数据流处理器将输入数据流中的负荷提供到这个缓冲器管理器,以将这个负荷保存在一个缓冲器中,并且向这个队列管理器发送一个排队命令。这个排队命令包括一个描述符,这个描述符包括标识这个缓冲器的至少一个标记和被正在发送这个数据流的数据流处理器所读取的一个队列的一个队列区分符。这个队列管理器将这个描述符排在合适的队列中。当进行发送的这个数据流处理器从这个队列中取出这个描述符时,这个数据流处理器使用这个标记来从缓冲器中拾取负荷,并且使用这个负荷来产生一个输出数据流,在产生这个输出数据流的过程中,按照这个输出数据流所要求的来添加控制信息。这个描述符被在这个数据流处理器上运行的程序所完全定义,所以,这个队列管理器提供了一个通用的机制,来在一个接收数据流处理器和一个发送数据流处理器之间以一个有序的方式传递信息。
一个数据流处理器包括一个接收处理器,一个发送处理器,一个控制数据处理器,局部存储器,和一个DMA引擎,这个DMA引擎在这个接收器处理器,这个发送处理器,和这个缓冲器管理器之间、以及在局部存储器和这个缓冲器管理器之间提供了DMA访问。属于每一个数据流处理器的局部存储器,以及属于这个缓冲器管理器和这个队列管理器的局部存储器,均是一单个全局地址空间内的一部分,并且可以被任何能够访问全局地址空间的设备所读取或者进行写入。当一个数据流处理器正在接收一个数据流时,这个接收处理器和这个控制数据处理器按照如下的方式来进行合作,以处理这个流发送处理器接收这个流,从这个流中提取控制信息,并且将这个控制信息传递到这个控制数据处理器,并且将这个负荷用DMA的方式传递到这个缓冲器管理器。而这个发送处理器在这个流的下一部分进行工作,这个控制数据处理器使用这个上下文处理器来处理已经被进行DMA操作的这个部分的任何上下文信息,并且向这个队列管理器发送带关于被进行DMA操作的负荷的描述符的一个排队命令。称作数据作用域(data scope)的一个数据结构简化了在这个控制数据处理器和接收处理器之间的信息交换。在这个发送处理器和这个控制数据处理器之间所进行的交互基本上是相同的,但是不同的是,负荷的移动方向是相反的。
这些数据流处理器包括串行数据流处理器和至少一个并行数据流处理器。这个并行数据流处理器可以被用于将这个集成电路连接到另一个相同类型的集成电路,连接到一个总线,或者连接到一个交换构造(switching fabric)。
这个串行数据流处理器是高度可配置的。配置是通过全局地址空间内的寄存器来完成的。每一个串行数据处理器可以接收和/或者发送独立的数据流,或者串行数据处理器组可以被组合在一起来合作处理一个数据流。一个串行数据处理器的I/O脚可以被配置成满足不同物理媒质的电气要求,并且也可以被配置成以使在一个组合内的所有串行数据处理器接收相同的输入。在一个接收处理器或者一个发送处理器内的各种器件可以按照处理正在被接收或者被发送的特定类型串行输入流所要求的来进行使能或者非使能,并且这个接收或者发送处理器也可以再循环它已经处理的一个数据流。
在细读下述的详细描述和图以后,该领域内的技术人员就可以理解属于本发明的其它目的和优点,其中图1是一个网络中的一个包交换机的一个框图;图2是包括本发明的数字信号处理器的一个包交换机的一个高层框图;图3是根据本发明的数字通信处理器的一个高层框图;图4是在数字通信处理器中的一个信道处理器的一个高层框图;图5是全局地址空间的一个图;图6是一个信道处理器的局部存储器的一个图;图7是在一个信道处理器中所接收的包的处理的一个流图;图8是一个信道处理器所输出的包的处理的一个流图;图9显示了接收和发送数据作用域;图10是一个接收处理器421的一个详细框图;图11是一个接收字节处理器的一个框图;图12是一个发送处理器427的一个详细框图13是一串信道处理器的一个框图;图14是一串信道处理器的局部和共享存储器的一个框图;图15是执行处理器313的一个框图;图16是构造处理器(fabric processor)303的一个框图;图17是Rx和Tx构造数据处理器的一个详细框图;图18显示了通过将两个DCP连接在一起而形成的一个交换机;图19显示了通过将多个DCP连接到一个交换构造而形成的一个交换机;图20显示了如何通过将一个DCP和另一个类型的数字交换逻辑连接到一个交换构造而形成一个交换机的;图21显示了一个优选实施方式中的表存储器207的细节;图22显示了TLE 301的内部结构;图23显示了寄存器存储器2205和控制存储器2215的细节;图24显示了TLE 301所执行的命令;图25显示了一个接收信道处理器307(i)和一个发送信道处理器307(j)如何进行合作来交换一系列传送层包;图26是将RxSDP 421组合在一个串中的一个示例;图27是将TxSDP 427组合在一个串中的一个示例;图28显示了一个环型总线消息;图29显示了到QME 305的信道处理器接口;图30显示了在一个优选实施方式中所采用的队列命令;图31显示了在一个优选实施方式中的队列数据结构;图32显示了在一个优选实施方式中的多播数据结构;图33是在一个优选实施方式中的MCL 3123的一个细节;图34显示了用于管理队列的各种结构;图35显示了QME 305的扩展接口;图36显示了调度程序扩展接口的细节;图37显示了在调度程序接口上消息所使用的定时;图38是缓冲器管理的一个逻辑视图39显示了BME 305的命令细节;图40显示了BME 305的硬件的细节;图41显示了SDRAM 229的内容的细节;图42显示了环型总线节点接口的细节;图43显示了其上实现了全局总线319和负荷总线317的一个总线结构;图44显示了在图43的总线结构上进行的长操作和短操作;图45显示了全局总线319和负荷总线317的实现细节;图46显示了可配置管脚逻辑443的各种结构的细节;和图47显示了被用于配置管脚和接收和发送处理器的寄存器。
图中的标号有3个或者更多的数字右边两个数字是在剩余数字所表示的图中的标号。这样,其标号为203的一个部件首先在图2中作为部件203出现。
下述详细描述将从一个数字包交换机的结构和操作的一个整体视图开始,这个数字包交换机包括根据本发明的数字通信处理器,并且其后是这个数字通信处理器的结构和操作的一个整体视图,并且然后提供这个数字通信处理器的部件的结构和操作的细节。
包括这个数字通信处理器的一个数字包交换机图2图2是使用一个数字通信处理器集成电路203而制造的一个包交换机201的一个框图,其中这个数字通信处理器集成电路203实现了根据本发明的这个数字通信处理器。集成电路201具有用于下述外部设备的接口§总共16对串行输入204和串行输出206 205(0…15),用于根据传送协议而被发送或者接收的包;§到一个可选数字交换机设备的一个32比特输出和一个从这个可选数字交换机设备来的32比特输入(接口221);§到一个可选主机处理器227的一个PCI总线接口225;§到一个SDRAM缓冲器存储器229的一个128比特宽的接口228;
§到一个SRAM翻译表存储器207的一个64比特宽的接口;和§到一个队列存储器213的一个32比特宽的接口。
更详细地讨论这些接口,可以对数字通信处理器203进行编程,以使在一单个DCP203中的串行输入和输出可以被用于很多不同的媒质和传送层协议。如果其中正在使用DCP203的网络改变了,这个DCP203可以被重新编程以处理新的网络结构。通过将几个串行输入或者输出连接到高速度协议的传输媒质,可以处理高速度协议。在一个优选实施方式中,这个媒质和这个传送层协议包括§10Mb以太网;§100Mb以太网;§1Gb以太网;§TI/E1接口;§T3/E3接口;§OC-3c接口;和§OC-12c接口。
DCP 203从输入204中接收媒质包,并且从输出206输出媒质包。在从一个输入204接收一个媒质包的时刻和从一个输出206发送一个媒质包的时刻之间所发生的处理与这个DCP如何被编程有关。对DCP203进行编程的方法包括下述的§每一个输入具有一个接收处理器,每一个输出具有一个发送处理器;这些处理器可以被独立地进行编程,以处理不同类型的媒质包,传送层包,和是传送层包的负荷的包;§输入和输出可以被组合在一起;§对与一个包流相关的状态进行的操作是可以被编程的;例如地址翻译和纠错码处理;§在DCP中的、包的源与目的地之间的关系是可以被编程的;和§从一个包的源被传递到一个包的目的地的信息是可以被编程的,这与包信息在目的地被解释的方式相同。
对一个典型的包交换应用,DCP 203被编程为按照如下的来进行工作当在一个输入204上接收到每一个媒质包时,DCP 203将从这个媒质包的负荷中来的数据保存在缓冲器存储器229的一个缓冲器231中;这个被保存的数据在这里被称作一个协议数据单元或者PDU;在很多情形下,这个PDU将是一个传送层包,这个传送层包是这个媒质包的负荷的一部分。当输出一个媒质包时,DCP 203从一个缓冲器231中检索这个PDU,在这个PDU中进行任何需要的改变(例如,改变传送层包中的路由信息,或者改变传送层包的类型),并且将这个协议数据添加到这个媒质包中。
DCP 203使用翻译表存储器207中的翻译表209来路由传送层和更高层的包。一旦这个包被路由,DCP 203将把一个描述符放置在队列存储器213与输出206相关的队列215的末尾,这个描述符表示包括这个包的PDU的缓冲器,并且这个输出206是将输出所述包的输出。一般,每一个队列215与一单个输出206相关,但是在一个输入204上接收的包可以被放置在任何队列215的末尾,这样允许在一个输入204上被接收的包可以经过很多输出206而输出。一个包也可以是多播包,即,在多于1个的队列215中进行排队。然后,DCP 203从与一个输出206相关的一个队列的头部取出描述符217,并且将这个描述符所标识的缓冲器231中的内容输出到这个队列的输出206。
DCP 203也从一个可选的数字交换构造接收包数据,并且向这个可选的数字交换构造提供这个包数据,如221所显示的。这个交换构造可以是另一个与包交换机201类似的包交换机,或者它也可以是任何其它能够路由数字数据流的设备。例如,包交换机201可以与其它包交换机一起连接到一个交叉交换机(crossbar switch),或者甚至可以连接到一个总线。从接口221所接收的或者输出到接口221的包数据的路由基本上与上面所描述的、在一个串行输入204上所接收的包的相同。最后,DCP 203可以经过PCI总线225从可选的主机227接收包数据,并且向这个可选的主机227提供包数据。
外部控制接口包括GPIO接口223和PCI总线接口225。GPIO接口223是用于监视和控制外部系统部件,例如LED,非挥发性存储器,物理层串行传输和接收部件,和电源供电部件,的一个公用设施接口。PCI总线接口225用于在DCP 203和一个主机处理器之间进行通信,并且这个主机处理器可能会控制交换系统201,并且也可以执行更高层的操作,例如对在系统201中所接收的包内容进行访问检查。
操作详细示例背景技术部分的示例将被用于更详细地显示包交换机201的部件如何被编程来路由包。为了示例的目的,串行对205(i)的串行输入204(i)正在接收一个SONET包流,这个SONET包流的负荷是一个ATM传送层包流。这个ATM传送层包流的负荷是需要被发送到IP节点109(n)的一个IP包,这个IP节点109(n)是在连接到以太网LAN 105(a)的一个设备107(n)上。以太网LAN 105(a)被连接到串行对205(j)的串行输出206(j)。因为包交换机201正在被用于路由IP包,所以DCP 203已经被编程为在串行输入204(i)上的输入传送层包中扫描包括IP包报头的负荷。当发现了一个IP包的报头时,DCP 203就开始将这个ATM传送层包流的负荷路由到被一个缓冲器标记233所规定的缓冲器存储器229中的一个缓冲器231。如果这个IP包比这个缓冲器长,就采用附加的缓冲器。
当这个IP包正在被传送到缓冲器存储器229时,DCP 203处理这个IP包的报头中的信息,来决定如何路由这个IP包,并且然后路由这个IP包。使用翻译表存储器227中的翻译表来完成对这个报头信息的处理。在这个情形下,需要进行两个翻译在这个IP包的报头中的IP目的地地址需要被翻译为具有这个目的地地址的IP节点所在的设备107(n)的以太网地址,和设备107(n)的以太网地址需要被翻译为队列存储器213中的队列的一个标识,其中串行输出206(j)从队列存储器213的这个队列输出以太网包。这些翻译中的一个翻译表表目211(i),从IP目的地地址(IPA)到以太网地址(ENA)的翻译被显示在翻译表209(a)中。
DCP 203使用从这个IP包的报头和这个翻译表209中获得的信息来产生关于这个IP包的一个描述符207。包括在这个描述符207中的是以太网地址和包括这个包的缓冲器231的缓冲器标记233。然后,DCP203将这个描述符207放置在队列215(j)的末尾221,这个队列215(j)是用于保存将从串行输出206(j)输出的包的。当描述符207到达这个队列215(j)的头部时,DCP 203拾取包括传送层包的这个缓冲器231的内容,并且将这个内容变为具有适合于串行输出206(j)的媒质协议的一个包流。这些媒质包的负荷是以太网传送层包。使用信息描述符207,DCP 203将设备107(n)的以太网地址给予这个以太网传送层包。而这个以太网传送层包的负荷是被保存在这个缓冲器标记所规定的缓冲器中的IP包。
这里,应注意,DCP 203当然对总共16个串行输入传送层包流和16个串行输出流同时执行上面所描述的操作或者这些操作的变形,并且在某些情形下,也同时在其自己和一个数字交换机之间通过接口221,和/或者在其自己和外部主机227之间经过PCI接口227传送数据流。另外,如上面所描述的,在很多情形下,这个包交换操作是由严格的定时限制所控制的。如下面将更详细描述的,在DCP 203的设计中关键是提供DCP 203内部的数据路径和存储器结构,这些DCP 203内部的数据路径和存储器结构具有前面所描述的操作类型所需要的速度和潜在特性。
DCP 203的结构图3和图5图3是DCP 203的内部结构的一个高层框图。出现在图3中的、图2中的部件的标号与图2中对应的标号相同。从其上发送和接收传送层包的串行输入和输出205开始,每一个串行对205被连接到其自己的可编程信道处理器307,这个可编程信道处理器307处理从这个对来的串行输入和到这个对的串行输出。这样,在这个优选实施方式中,有16个信道处理器307。对极高速度的传送层协议,最多可有4个信道处理器307可以被组合在一个信道处理器串中,如309所显示的。
构造处理器(fabric processor)303与信道处理器类似,其不同点是这个构造处理器303处理从接口221所接收的和提供到接口221的并行数据。表搜寻引擎301使用翻译表存储器207中的地址翻译来进行地址翻译。队列管理引擎305管理描述符的队列215。在某些实施方式中,这个队列被保存在DCP IC 203的存储器中;在其它实施方式中,队列存储器213是一个独立的外部存储器。缓冲器管理引擎315管理缓冲器存储器229中的缓冲器231。执行处理器313对其它部件中的数据进行初始化并且维持这些部件中的数据,使用可选的外部主机227和GPIO接口来PCI总线接口,并且在需要的时候执行更高层的处理。执行处理器313的程序和数据被保存在SDRAM 229中。执行处理器313,信道处理器309,和构造处理器303均使用TLE 301,QME 305和BME 315的公用程序来处理包和/或者帧,并且在这里它们被统称作包处理器。但是,这里应指出的是,一个包处理器不仅可以被用于处理包,而且可以被用于处理任何其它的数据流,并且可以被认为是一个通用的比特/4比特/字节/或者(在构造处理器的情形下)32-比特字流处理器。
DCP 203的所有处理部件是可以被编程的。这个信道处理器307可以被独立地编程为处理不同类型的媒质层包,传送层包,和传送层包的负荷,并且构造处理器303可以被编程为处理在不同交换设备中所采用的数据。表存储器207中的表可以被写入,也可以被读取,并且表搜寻引擎301可以被编程为对表执行不同类型的搜寻。队列管理引擎305可以被编程为建立不同数目的队列,并且在队列中使用不同尺寸的描述符,缓冲器管理引擎315可以被编程为缓存不同尺寸的库,并且在库中具有不同的缓冲器大小。最后,XP 313是一个通用处理器,并且可以被编程为执行任何功能。当DCP 203被初始化时,部件的程序被载入。程序代码可以被外部主机227载入到SDRAM 229中,或者这个程序代码也可以被保存在一个外部PROM中,这个外部PROM是由BME 315所管理的地址空间中的一部分。在任何一个情形下,XP313将这个代码载入到部件的存储器中。
数字通信处理器203的总线和存储器结构使DCP 203可以满足包交换的速度和时间限制,同时DCP203可以采用表搜寻引擎301,队列管理引擎305,和缓冲器管理引擎315作为共享的资源。除了表搜寻引擎301外,数字通信处理器203的所有部件共享一单个全局地址空间321。每一个包处理器的局部存储器在全局地址空间321中,并且每一个包处理器可以访问其局部存储器属于全局地址空间321的其它包处理器的局部存储器,也可以访问属于BME 315和QME 305的存储器。每一个包处理器能够对其自己的局部存储器进行直接访问,并且能够经过一个32-比特全局总线319对其它部件的局部存储器进行访问。另外,构造处理器303具有其自己的、到队列管理引擎305的路径304。
图5提供了全局地址空间321的一个概述图。首先是全局地址空间的部分504,它是由信道处理器307(0…15)的局部存储器501组成的。部分504进一步被划分为属于信道处理器串309中每一个的串存储器503。一给定信道处理器307(i)对其自己的局部存储器501(i)的访问速度最快,对一起组成其串存储器503的、其串中的其它信道处理器的局部存储器的访问速度是第二快的,对全局地址空间321中其余部分的访问速度是最不快的。其局部存储器是全局地址空间321中一部分的其它部件是构造处理器303,其局部存储器见505,QME305,其局部存储器见507,BME315,其局部存储器见513,以及XP313,其局部存储器见517。共享全局地址空间的这些处理器一般可以使用全局地址空间来进行处理器间的通信,例如,处理器可以在全局地址空间中建立信号标记来协调它们的操作。为了建立和使用这样的信号标记,在这个优选实施方式中的处理器具有一个测试-和-设置-比特指令。在全局地址空间中可以获得的其它信息包括QME局部存储器507中的队列状态信息505,缓冲器管理引擎局部存储器513中的缓冲器状态信息515,和XP局部存储器517中的全局配置寄存器519和系统接口配置信息521。最后,QME 305将关于一个包处理器所读取的队列的队列状态信息写入到这个包处理器的局部存储器中。
继续参考图3,每一个部件的局部存储器通过负荷总线317连接到缓冲器管理引擎315。这是一个128-比特宽的总线,它以4个字节的突发来进行工作,可以在SDRAM 229和其它部件之间传送高达64字节的数据。经过负荷总线317所传送的数据包括下述的§执行处理器313所使用的程序和数据;§执行处理器313使用来配置DCP203的数据;§在SDRAM 229和一个包处理器之间被传送的协议数据单元;§缓冲器标记233;和§被包处理器进行排队和从队列中取出的描述符。
在SDRAM 229和局部存储器之间进行的传送是通过一个直接存储器访问(DMA)机制来完成的。实现这个传送的部件向这个DMA机制提供了一个DMA指令,然后,这个DMA机制执行这个传送而不需要这个部件的干预。这个结构允许一个部件并行地传送协议数据单元并且执行其它处理,这大大地增加了DCP 203的操作速度和吞吐率。
表搜寻引擎301和包处理器均经过环型总线311连接。环型总线311是64-比特宽的总线,并且在它所连接的节点之间是时分复用的。在任何一给定时刻,这些部件中的每一个被分配的环型总线时隙数在1到5之间。每一个时隙可以携带一个64-比特的消息。因为这个总线在其连接的节点之间是时分复用的,并且每一个节点具有一预定最大数目的时隙,所以可以在一固定的时间内,保证一个消息能够从一个节点传送到环型总线311上的另一个节点。在一个目前优选的实施方式中,执行处理器313使用环型总线消息来配置和读取表存储器207中的表,并且这些包处理器使用环型总线消息来向表搜寻引擎301提供关于翻译的信息,并且表搜寻引擎301使用环型总线消息来向这些包处理器提供翻译的结果。任何连接到环型总线311上的设备可以向任何连接到环型总线311上的其它设备发送环型总线消息,并且也可以从任何连接到环型总线311上的其它设备接收环型总线消息,所以在其它的实施方式中,例如,环型总线消息可以被用于协调组成一个串309的执行处理器307的活动。
DCP 203部件的合作示例在图3所提供的细节上,继续参考图1和2,在输入线204(i)上正在接收ATM包流。输入线204(i)属于信道处理器307(i)。当这个ATM包到达时,信道处理器307(i)就开始一系列的DMA传送,其中首先将这些包传送到信道处理器307(i)的局部存储器,然后将这些包传送到被信道处理器307(i)所拥有的一个缓冲器标记233所规定的一个缓冲器231。在这个传送在进行时,信道处理器307(i)在ATM包的负荷中扫描IP包。当它发现了一个IP包的开始时,信道处理器307(i)从这个IP包的报头中提取这个IP包的目的地地址,并且为这个表搜寻引擎301产生包括这个目的地址的一个消息。在这个情形下,这个目的地址规定了连接到以太网LAN105(a)的设备107(n)上的IP节点109(n)。以太网LAN105(a)接收从串行输出206(j)输出的包。然后,信道处理器307(i)将这个消息放置到它自己在环型总线311上的一个时隙中。当信道处理器307(i)接收到对带设备107(n)的以太网地址的这个消息的一个答复和被串行输出206(j)所提供服务的队列号码m时,它就产生包括至少以太网地址和关于这个缓冲器的缓冲器标记233的一个描述符217(k)。然后,信道处理器307(i)经过负荷总线317向属于信道处理器307(i)的一个邮箱写入一个排队命令。这个排队命令包括至少描述符217(k)和这个队列号码m。队列管理引擎305通过将这个描述符217(k)放置在队列215(m)的末尾,来对这个命令作出响应。
串行输出206(j)属于信道处理器307(j),并且队列管理引擎305向这个串行输出206(j)提供队列215(m)头部的描述符。它通过将一个指定队列215(m)的出列命令经过负荷总线317写入到其邮箱来完成这个。队列管理引擎305通过经过负荷总线317向信道处理器307(j)提供在队列215(m)头部219的描述符217,来对这个出列命令作出响应。
最后,在队列215(m)头部219的描述符217是描述符217(k)。一旦信道处理器307(j)具有描述符217(k),它就使用描述符217(k)中的缓冲器标记233来开始从包括IP包的缓冲器231到信道处理器307(j)的局部存储器的一个IP包的DMA传送。当IP包到达时,信道处理器307(j)产生发送到以太网设备107(n)的一个以太网传送层包流,并且这个以太网传送层包流的负荷是IP包,并且将这个以太网传送层包流输出到串行输出206(j)。在这些包中的以太网地址当然是从描述符217(k)中获得的。
DCP203的总线和存储器结构的优点从前述描述中可以很明显地看出,DCP 203的总线和存储器结构允许一个包处理器并行地进行包报头处理,协议数据单元的转发,和排队与从队列中进行取出;另外,不同的总线不仅提供不同的路径,而且也提供满足在路径上执行操作的冗余性要求的路径。这样,对时间最敏感的操作是包报头中信息的翻译,因为只有获得了翻译的结果后,才能够进行路由。因为每一个包处理器在环型总线311上具有时隙,所以每一个包处理器能够在一个得到保证的时间内访问表搜寻引擎301,并且所以,能够满足翻译的时间限制要求。
另一方面,在包处理器和SDRAM 229之间进行的协议数据单元的传送需要进行高带宽的突发传送,并且确切地说,是经过负荷总线317在局部存储器和SDRAM 229之间的DMA传送所提供的高带宽突发传送。从缓冲器管理引擎315和一个信道处理器307(i)发起的缓冲器标记传送和了管理引擎305之间的描述符到一个信道处理器307(i)的传送对时间的要求也是非常严格的,所以,它们也是在负荷总线317上被完成的。
对时间要求不严格的操作可以通过在全局地址空间321中的读取和写入来完成。这样进行读取和写入操作所需要的时间与它们在全局地址空间中所处的位置相关。对全局地址空间中一给定处理器本身局部部分存储器进行读取和写入所需要的时间是最少的,对属于给定处理器串309的处理器进行读取和写入所需要的时间是第二少的,对不属于给定处理器串309的处理器进行读取和写入所需要的时间是最长的。
除了TLE301外,DCP 203的所有处理器均共享全局地址空间321的这个事实使处理器之间进行通信更容易实现。例如,执行处理器313可以简单地通过将数据写入到全局地址空间321中与它们相应的部分,来进行初始化和/或者重新配置其它部件,一个包处理器307可以获得关于正在被队列管理引擎305所管理的队列215的状态信息,关于正在被缓冲器管理引擎315所管理的缓冲器231的状态信息,或者在其串309中的其它包处理器的状态,这个状态信息的获得可以通过简单地从全局地址空间中、属于这些设备的部分中读取状态信息来完成,并且这些处理器可以通过全局地址空间中的信号标记来协调它们的动作行为。一个接收包处理器可以进一步在某些应用中使用全局地址空间,来将它所接收的协议数据单元直接写入到将输出这个协议数据单元的发送包处理器的局部存储器。最后,执行处理器313能够使用全局地址空间来决定执行处理器313与其共享全局地址空间的每一个处理器的状态。
在全局地址空间操作非常频繁的地方,可以提供专用的硬件支持。例如,构造处理器303能够对队列管理引擎305的全局地址空间进行其独有的访问,这样,就能够对状态信息进行排队而不需要增加全局总线319的负荷。类似地,每一个包处理器在全局地址空间中与其相关的部分中的QME 305中具有关于其邮箱的状态比特,这些比特被直接连接到队列管理引擎305中,以使每一个包处理器能够确定其邮箱的状态,而不需要增加全局总线319的负荷。
包处理器的细节下述部分首先将详细描述信道处理器307(0…n),然后,描述构造处理器303,最后描述执行处理器313。
一个信道处理器307(i)的整体视图图4和6
图4是一个信道处理器307(i)的部件的一个框图。如从图3中可以看出的,信道处理器307(i)经过串行输入204(i)接收串行包输入,经过串行输出206(i)提供串行包输出,并且被连接到环型总线311,并且在环型总线311中具有时隙,同时也被连接到负荷总线317和全局总线319。集合路径433和435和串路径437和439允许信道处理器(i)与在其串309中的其它信道处理器307进行组合,以处理极高速度的传输媒质。
在一个高层次上,信道处理器(i)有3个部件信道处理器RISC核心(CPRC) 401,这是控制其它部件操作的、并且能够访问全局地址空间321的一个通用目的处理器;串行数据处理器(SDP) 420,它的处理涉及从串行输入204(i)中接收包并且向串行输出206(i)输出包;和DMA引擎411,它经过全局总线317在信道处理器307(i)和BME 315或者QME 305之间进行数据传送。SDP 420和CP RISC核心401均经过环型总线接口415连接到环型总线311。SDP 420具有两个子部件RxSDP 421,它处理输入包;和TxSDP 427,它处理输出包。
继续参考CPRC401的细节,CPRC401是采用众所周知的MIPS1指令集的一个子集的一个通用目的微处理器。它可以在环型总线311上发送和接收消息,并且与SDP 420共享两个寄存器文件。提取空间417被用于保存SDP 420从输入包中所提取出的协议数据,以被CPRC401所使用,而融合空间419被用于保存CPRC 401提供到SDP 420的协议数据,以在产生输出包时使用。
CPRC具有4个上下文(context),即,独立的寄存器文件集。CPRC401可以在上下文之间进行切换,这或者是对一个程序中的一个BREAK命令作出响应,或者是对一个硬件中断作出响应。上下文被根据其号码而进行排序,上下文0具有最高的优先级,上下文3的优先级最低。每一个上下文有一个上下文项寄存器和一个上下文返回寄存器;当一个上下文被改变时,在当前上下文中的需要被执行的下一个指令的地址被保存在当前上下文的上下文返回寄存器中,并且使用被保存在新上下文的上下文项寄存器中的地址中的指令来继续执行。
有5个系统事件能够促使上下文进行切换§主复位§非屏蔽中断§跟踪中断§用户中断1§用户中断2对主复位事件和跟踪中断事件的上下文项寄存器的设置是系统所定义的;对其它事件,它们是可以被编程的。
指令存储器403包括被CPRC 401执行的代码。它仅能够被CPRC401和CP 307(i)所属于的串309中的其它CP 307的CPRC所读取和写入。在一个优选实施方式中,代码被按照如下的方法载入到IMEM403中首先,执行处理器313经过全局总线319将这个代码载入到DMEM 407,然后,CPRC 401将这个代码从DMEM 407传送到IMEM403。
DMEM 405是信道处理器307(i)的局部数据存储器。它可以被用于CPRC 401的局部存储器,也可以经过负荷总线413被用作对数据进行DMA传送。DMEM 405,提取空间417,和融合空间419均是全局地址空间321的部分,并且可以被信道处理器307(i)的串309中的其它信道处理器307所访问,也可以经过全局总线317被DCP 203中的其它处理器所访问。除了DMEM 405外,在一个优选实施方式中实现这个结构的存储器部件有请求FIFO 406,MUX 407,全局总线接口413,和负荷总线接口411。MUX 407复用RxSDP 421,TxSDP 427,负荷总线接口411和请求FIFO 406到DMEM 405的访问。反过来,请求FIFO 406允许CCP 203中连接到全局总线319的其它处理器可以访问DMEM 405,允许CPRC 401访问DM 405和全局地址空间321,允许在信道处理器CP 307(i)的串309中的信道处理器307中的其它CPRC 401访问DMEM 405。MUX 407,DMEM 405和负荷总线接口411一起组成了DMA引擎441,这个DMA引擎441经过负荷总线317在SRAM 229和CPRC 401和SDP 420之间执行DMA操作。
如上面的结构所隐含的,RxSDP 421,TxSDP 427,和负荷总线接口411对DMEM 411具有第一访问优先级,而全局总线接口413,CPRC 401,和其它CPRC 401必须争夺剩余的访问权。这样,这个结构在一个方面,将第一优先级给予了在SDP 420和DMEM 405之间进行的协议数据单元的DMA传送,而在另一个方面,将第一优先级给予了在DMEM 405和SDRAM 229之间进行的协议数据单元的DMA传送。
继续参考串行数据处理器420的部件的细节,RxSDP 421专用于处理输入包流。RxSDP 421从输入流中提取包括协议数据的字段,并且将一个字段的内容或者经过环型总线接口413提供给环型总线313,或者经过提取空间417提供给CPRC 401。RxSDP 421经过DMA传送将这个协议数据单元从包流提供到DMEM 405。RxSDP 421有3个子部件管脚逻辑(pin logic)443,它接收表示传输媒质中包流的物理信号;成帧支持处理器407,它对这个包流中的媒质层包和传送层包进行定位;和字节处理器453,它从这个传送层包和它们的负荷中提取协议信息,同时经过路径425将这个传送层包传递到DMEM 405。字节处理器451可以将所提取的协议信息放置在提取空间417中,和/或者经过将环型总线接口415将它放置在一个环型总线消息中。
TxSDP 427专用于产生一个输出传送层包流,这个输出传送层包流承载TxSDP 427经过DMA传送从DMEM 405中获得的协议数据单元。为了完成这个,TxSDP 427将CPRC 401已经放置在融合空间419中的协议数据融合入协议数据单元。TxSDP 427的部件在功能上与RxSDP 421的部件的功能是对应的。这样,字节处理器453在传送层包和其负荷中操作协议数据,成帧支持处理器449提供媒质层包所需要的协议信息,管脚逻辑445将这个数据变为用来输出这个数据的物理媒质所要求的形式。
SDP 420的其它令人感兴趣的特征是再循环路径441和集合路径433和435。再循环路径441允许被保存在DMEM 405中的包被返回到RxSDP 421,以被进行进一步的处理并且被输出到DMEM 405。集合路径433允许一个串309中的所有RxSDP 421接收相同的输入数据,而集合路径435允许TxSDP 427接收数据,以将数据从CP 307(i)所属于的这个串中的其它CP 307中的TxSDP进行输出。
信道处理器307的操作的示例图25图25显示了一个接收信道处理器307(i)如何与一个发送信道处理器307(j)进行合作,来在一个输入204(i)上接收包括一系列传送层包的一个媒质层包流,并且在属于发送信道处理器307(j)的一个输出206(j)输出包括一系列传送层包的一个媒质层包序列,这个传送层包的负荷是在信道处理器307(i)中所接收的传送层包的负荷。所接收的和所发送的媒质层包和传送层包当然可以属于不同的协议。
所接收的媒质层包是在信道处理器307(i)中的RxSDP 421中被接收的。RxSDP 421从这个传送层包和传送层的负荷中提取协议数据,并将所提取的协议数据提供到提取空间417,也经过DMEM 405和负荷总线417将由传送层包组成的协议数据单元DMA传送到BME 315,BME 315将这个协议数据单元放置在SDRAM 229的缓冲器231中,其中这个协议数据单元在2503。同时,在信道处理器307(i)中的CPRC401使用这个协议数据来产生一个描述符217,并且它经过负荷总线317将这个描述符217转发到QME 305以进行排队。(没有在这里显示的是,经过环型总线311将某些协议数据发送到TLE301,以进行翻译)。当CPRC 401发送需要被排队的描述符217时,CPRC 401规定它应被排队在一个队列215的末尾,这个队列215的头部正在被发送信道处理器307(j)所读取。QME 305将描述符207排队在规定队列215的末尾。
当信道处理器307(j)从队列215的头部中对一个描述符207进行队列取出时,QME 305经过负荷总线317将描述符207发送到信道处理器307(j)。信道处理器307(j)使用描述符207来产生需要被输出的包流的协议数据,并且将这个协议数据放置在融合空间419中。然后,信道处理器307(j)发起一个DMA操作,经过负荷总线317和DMEM 405将这个协议数据单元2503从SDRAM 229中的缓冲器231传送到串行数据处理器420。在串行数据处理器420中,TxSDP 427加上为输出206(j)产生一个媒质层包流2505所需要的协议数据,这个媒质层包流承载了从204(i)上所接收的包来的协议数据单元2503。
局部存储器501的细节图6图6显示了信道处理器307(i)的局部存储器501(i)。如前面所指出的,所有的局部存储器501(i)均可以被共享全局地址空间321的数字通信处理器203的任何部件所读取和写入。
数据作用域625(0)和625(1)如上面所描述的,RxSDP 421将输入包流DMA传送到SDRAM229,并且当RxSDP 421这样做时,RxSDP 421从输入包流中提取协议数据,并且将协议数据提供到CPRC 401以进行处理,而TxSDP 427从SDRAM 229接收输出协议数据单元,并且当RxSDP 421这样做时,TxSDP 427从CPRC 401接收协议数据并且将协议数据放置在输出包流的合适位置中。对一给定传送层包,然后,这个处理包括两个步骤。在一个输入包的情形下,它们是§提取这个协议数据,并且将这个协议数据单元DMA传送到SDRAM 229;和§在CPRC 401处理这个协议数据。
在信道处理器307中,这两个步骤是流水线处理的在输入包流的情形下,CPRC 401处理从前一个协议数据单元中提取的这个协议数据,而RxSDP 421从这个包流中提取协议数据,并且对从这个包流中提取的当前协议数据单元进行DMA传送。发送也被进行类似的处理,其中TxSDP 427发送当前协议数据单元,而CPRC 401处理需要被包括在下一个协议数据单元中的这个协议数据。
通过使用数据作用域625(0)和625(1),就可能进行流水处理。数据作用域625(0)和625(1)是可以被CPRC 401所看见的和所访问的数据结构,并且它们也控制SDP 420的操作和控制在CPRC 401和SDP 420之间进行的交互作用。一给定数据作用域625(i)包括一组数据作用域寄存器624和在数据作用域事件寄存器632中的一组标记632(i)。数据作用域寄存器624进一步由一个Tx数据作用域641和一个Rx数据作用域643组成。Rx数据作用域643在第一步骤期间,接收RxSDP 421从输入包流中提取的协议数据,并且在第二步骤中CPRC 401处理这个协议数据;类似地,Tx数据作用域641在第一步骤期间,接收CPRC 401为输出包流而处理的这个协议数据,并且在第二步骤期间,TxSDP 427输出来自Tx数据作用域641的这个协议数据。
除了提供包处理的流水操作外,数据作用域625也为在CPRC 401上被执行的程序提供了到当前正在被SDP的RxSDP 421所接收的、或者正在被TxSDP 427所输出的包流的一个统一接口。在需要对一个流进行进一步处理的应用中,可以增加数据作用域的数目。例如,包括处理一个输入流,将所产生的PDU保存在DMEM 405中,然后使用再循环路径441又处理被保存在DMEM 405中的PDU,和然后将最后的PDU使用DMA方式传送到SDRAM 229的RxSDP的处理可能包括4个数据作用域。
在CPRC 401上执行的程序决定哪一个数据作用域目前正在被SDP 420所使用。在SDP 420将协议数据提取到数据作用域625(0)并且从数据作用域625(0)融合协议数据时,CPRC 401处理在数据作用域625(1)中的数据。当SDP 420完成了对数据作用域625(0)的处理时,它向CPRC 401发送信号,并且CPRC 401建立数据作用域625(1),以使SDP 420能够在数据作用域625(1)上进行工作,并且CPRC 401自己开始在数据作用域625(0)上进行工作。
继续更详细地参考数据作用域625(i)中的内容,Rx数据作用域643包括提取寄存器601,提取寄存器601包括被RxSDP 601所提取的协议信息;RxCB 633,包括将RxSDP 421所接收的包DMA传送到SDRAM 229所需要的信息;和Rx状态635,包含关于RxSDP 421的状态信息,包括RxSDP 421是否完成了它正在进行的DMA传送。Tx数据作用域641包括用于包发送的模拟寄存器。融合寄存器603包括需要与输出包融合的协议数据,TxCB 633包括从SDRAM 229对TxSDP所正在发送的包进行DMA传送所需要的信息,并且Tx状态包括关于TxSDP 427的状态信息,包括TxSDP 427是否完成了它正在进行的DMA传送。
控制块寄存器611控制块寄存器611是控制在CPRC 401和SDRAM 229之间进行的DMA传送的一组4寄存器。一个WrCB 610控制从CPRC 401到SDRAM 229的DMA传送,而一个RdCB控制到CPRC 401的DMA传送。
环型总线控制寄存器617这些寄存器是环型总线接口415的一部分。它们允许RxSDP 421和CPRC 401在这个环型总线上发送消息,并且允许CPRC 401在这个环型总线上接收消息。发送消息使用4个寄存器,接收对被CP 307(i)所发送消息的答复使用8个寄存器,接收一个未经请求的消息使用一个寄存器队列。
SONET开销比特612这个寄存器包括CP 307(i)所输出的SONET包的SONET开销比特。
RxSDP控制613和TxSDP控制615这些寄存器包括分别控制RxSDP 421和TxSDP 427的操作的参数。
CP模式寄存器625这个寄存器包括控制CP 307(i)的操作的参数。
SDP模式寄存器627这个寄存器包括控制SDP 420的操作的参数。
队列状态621队列状态621包括关于QME 305中信道处理器307(i)的邮箱状态的信息,和关于正在被信道处理器307(i)所读取的队列的状态信息。这个寄存器中用于指示信道处理器307(i)的邮箱状态的硬件直接被QME 305所控制。这样,读取和写入这个寄存器不会对全局总线319产生任何负荷。QME 305经过负荷总线317将正在被信道处理器307(i)所读取的队列的状态信息DMA传送到DMEM 405。
事件定时器620这个寄存器包括可以被在CPRC 401中所执行的软件设置和启动的一个事件定时器;当这个定时器溢出时,有CPRC 401的事件机制对其作出响应的一个事件结果。
循环计数器寄存器619循环计数器寄存器619包括一个计数器值,一个时钟分频值,和一个CC使能比特。CPRC 401可以设置这个计数器值,这个时钟分频值,和这个CC使能比特。这个时钟分频值规定了计数器值相对CPRC401的时钟进行加1操作的速率。当CPRC 401设置了CC使能比特时,这个计数器就开始运行;当这个CPRC 401清除了这个CC使能比特时,这个计数器就停止运行。当前的计数器值不会受到设置或者清除CC使能比特的影响。
事件寄存器631这个寄存器包括表示是否出现了这个CPRC 401必须对其作出响应的一个异步事件的标记。有两类事件普通事件,其标记在寄存器630中,和与数据作用域625相关的数据,其标记在数据作用域事件寄存器632中。
除了这里描述的所有寄存器,一个CPRC 401也可以访问在其局部数据存储器405中的数据,并且能够如上面所描述的在SDRAM 229和局部数据存储器405之间、经过局部存储器405在一个SDP和SDRAM 229之间进行DMA传送。
CPRC 401,RxSDP 421和TxSDP 427进行合作的示例的细节图7-9图7提供了RxSDP 421和CPRC 401如何被编程来在处理一个输入包流中进行交互通信的一个概述图。流图701不仅指示被执行的操作,而且还指出RxSDP 421,CPRC 401和QME 305中的哪一个执行这些动作。在703开始,RxSDP 421读取一个输入包(705)。RxSDP421对它所读取的东西所进行的处理与这个材料在包中的位置相关。有3类信息是RxSDP 421必须处理的协议数据单元,必须被TLE 301所翻译的协议信息,和必须被CPRC 401所处理的协议信息。如在块707所显示的,当RxSDP 421读取协议数据单元时,这个RxSDP 421经过DMEM 405将协议数据单元用DMA方式传送到SDRAM 229;如在709所显示的,RxSDP 421使用环型总线311向TLE 301发送带TLE 301必须翻译的协议信息的一个消息;如在711所显示的,最后,RxSDP 421使用提取空间601将CPRC 401需要处理协议信息的信息传送到CPRC 401。
在模块713,CPRC 401使用它从RxSDP 421所接收的信息和它从TLE 301所接收的、对RxSDP 421的消息作出响应的答复,来决定需要对这个传送层包进行什么处理。如果这个传送层包是无效的,或者因为其内容被破坏或者因为其负荷是从被包交换机所滤波的一个源来的,CPRC 401将这个包标记为可以被丢弃。对这个标记作出响应(标记被包括在在DMA期间被添加的一个末尾中),这个DMA引擎停止进行发送,并且BME 315释放正在接收这个包的缓冲器231。
如果这个传送层包是有效的,CPRC 401使用它已经从TLE 301所接收的信息和在提取空间601中的信息来决定来自这个包的协议数据单元需要被放置在其中的队列215,并且产生关于这个队列的一个描述符217。然后,在751中,CPRC 401发送一个排队命令到负荷总线317上,这个排队命令包括这个描述符和这个协议数据单元需要被放置在其中的队列的号码。
QME 305通过将这个描述符217放置在合适的队列215中,来对这个排队命令作出响应。如在块717,719和721所显示的,取决于读取这个队列的DCP 203的部件,有3大类队列被XP处理器313所读取的队列;被一个信道处理器307所读取的队列;和被构造处理器303所读取的队列。在队列被XP处理器313所读取的情形下,与这个描述符相应的这个协议数据单元可能会发送到主机227;在队列被构造处理器303所读取的情形下,与这个描述符相应的这个协议数据单元可能会发送到一个交换构造。
这里应指出的是,因为RxSDP 421,CPRC 401和QME 305均是独立操作的处理器,流图701中所显示的处理可以被并行进行。RxSDP421,和CPRC 401的流水线处理已经被描述了;另外,CPRC 401不必要等待QME 305对CPRC 401的排队命令作出响应。
继续更详细地参考数据作用域625在RxSDP 421和CPRC 401之间的交互通信中的作用,图9显示了接收数据作用域643的细节。从Rx状态寄存器635开始,这个寄存器指出在RxSDP 421和CPRC 401之间的交互通信的状态;这个寄存器具有4个感兴趣的字段OWN字段935被硬件设置;这个比特指出RxSDP 421或者CPRC 401目前是否正在使用Rx状态635目前所属于的数据作用域625。L5:L0937是在程序控制下被RxSDP 421和CPRC 401所设置和复位的6个握手比特。忙941被RxSDP 941所设置,并且指出RxSDP 421是否是忙的。Tx状态639在功能和内容上与Rx状态635类似。
RxCB 633控制在输入包的DMA期间,在RxSDP 421和DMA引擎441之间的交互通信。当CPRC 401拥有RxCB 633所属于的数据作用域625(i)时,CPRC 401建立RxCB 633,并且当RxSDP 421和CPRC 401交替拥有数据作用域625(i)时,RxSDP 421使用RxCB633来继续对输入包进行DMA传送。RxCB 633中的大多数字段包括执行DMA处理所需要的各种寻址信息。缓冲器池号码909,BTAG933,和偏移931一起规定了DRAM 229中、DMA引擎441当前正在写入RxSDP 421所接收的包的位置。
如下面将更详细描述的,DRAM 229被划分为缓冲器池。BTAG 933是这个池中的缓冲器的缓冲器标记233,偏移931是缓冲器中、数据当前正在被写入的偏移。当DMA引擎441写入数据时,它更新偏移931。DMEM DMA地址907是DMEM 405中的16字节数据线的地址,其中DMA引擎441当前正在将数据从DMEM 405进行DMA传送到DRAM229。Txrcy地址905和Rxrcy地址903就是当RxSDP 421正在从DMEM 405重新循环数据时,RxSDP 421所使用的特殊地址。Txrcy地址905规定了TxSDP 427的DMA引擎441当前正在将数据写入到其上的DMEM 405线,而Rxrcy地址903规定了RxSDP 421正在向其写入数据的DMEM 405线。这样,这些地址允许RxSDP 421重新循环包,或者是在这些包被写入到SDRAM 229以前,或者是在这些包被写入到SDRAM 229以后。DMEM线地址901是RxSDP 421正在为其写入数据的DMEM 405线。
RxDBCTL 913包括控制在CPRC 401,RxSDP 421和DMA引擎441之间的交互通信的控制和状态字段§Avail 929指出RxCB 633是否可以被使用;§NR 927指出在放弃传送以前,为了将数据传送到DRAM 229,DMA引擎441应产生的请求次数;§Error 925指出在RxCB 933目前所代表的传送期间,是否出现了一个错误;
§Own 921指出RxSDP 421向其写入、并且DMA引擎441从其进行读取的DMEM 405中的线目前是否正在被RxSDP 421写入或者是否被DMA引擎441进行读取;§EOP 917被RxSDP 421设置,当RxSDP 421在将被写入到DMEM 405中的线的数据中遇到一个包结束指示时;§ST 915是SDP 420的目前状态;§BCTL状态919是负荷总线317的目前状态;和§长度911被RxSDP 421设置。它是RxSDP 421正向其进行写入的DMEM 405的线中的数据的长度。
TxCB 637基本上与RxCB 633类似,除了它所控制的DMA传送在相反方向进行,并且这些字段具有与这个方向相应的意义。
当RxSDP 421设置OWN比特935,在Rx状态寄存器636中的L2Done 937或者L1Done 939,或者在RxCB 633中的Avail 929时,这个结果是对CPRC 401的一个中断;哪一个动作将产生这个中断由数据作用域的数据作用域事件寄存器632中的多个比特所指示,该数据作用域是当RxSDP设置所讨论的比特时所在的作用域。相同的结构被用于Tx数据作用域641中的相应比特。
开始时,CPRC 401已经建立数据作用域625(0),并且将对数据作用域625(0)的拥有关系给予RxSDP 421。现在,CPRC 401拥有数据作用域625(1)。当一个包进入时,RxSDP 421提取协议数据并且将这个协议数据写入到提取空间寄存器601(0)。RxSDP 421在Txmsg 645(0)中将一个消息发送到TLE 301,该消息中包括需要被翻译的协议数据。查找的结果将出现在一个RxResp寄存器647(0,i)中。当这个在进行时,RxSDP 421开始将这个协议数据单元写入到在RxCB 633(0)中所规定的DMEM 405中的线。当已经接收了整个线时,RxSDP 421设置Rx状态635中的拥有者比特935,来指出CPRC401现在拥有数据作用域625(0),设置RxCB 633(0)中的拥有者比特921,来指出DMA引擎441现在可以读取它已经写入的线,并且产生自动地将RxSDP 421切换到数据作用域910(1)的一个信号。然后,RxSDP 421检查数据作用域625(1)的拥有者比特935,来看CPRC 401是否已经控制了它。如果CPRC 401已经控制数据作用域625(1),在RxSDP 421处理这下一个包以前,RxSDP 421就进行等待,直到CPRC 401放弃对数据作用域625(1)的控制。处理如上所述,除了RxSDP 421使用数据作用域625(1)的资源,而不是数据作用域625(0)的资源外。
当RxSDP 421使用数据作用域625(1)来进行工作时,CPRC 401处理接收数据作用域625(0)。CPRC 401检查和/或者删除RxSDP 421放置在提取空间寄存器601(0)中的这个协议数据,检查RxCB 633(0)来决定到SDRAM 229的DMA是否已经无错误地完成了,并且建立RxCB 633(0)以被RxSDP 421下一次使用。然后,CPRC 401使用RxSDP 421放置在提取寄存器601中的协议数据和在RxRsp结构647(0,i)中从TLE 301所接收的任何翻译,来为正在被写入到SDRAM 229的数据产生一个描述符,并且将这个描述符放置在QME305中的信道处理器307的邮箱中。当CPRC 401已经做完了所有这些时,它设置拥有者比特935(0),以使接收数据作用域625(0)又可以被RxSDP 421所使用。如果设置了拥有者比特935(1),表示RxSDP421完成了使用接收数据作用域625(1)进行的工作,CPRC 401使用与上面对接收数据作用域625(0)所描述的方式相同的方式,在接收数据作用域625(1)进行工作。
图8提供了CPRC 401和TxSDP 429如何在发送一个传送层协议流中进行交互通信的一个概述图。发送比接收简单得多,因为输出包仅需要被装配和发送,不需要被解释。在发送时所需要做的大多数工作是被CPRC 401完成的。从803开始,CPRC 401首先执行循环805;即,CPRC 401检查它从QME 305所接收的队列状态信息,以看在正在被信道处理器307(i)所读取的一个队列217中是否有一个描述符。如在807所显示的,如果有一个描述符217,CPRC 401将一个出列命令放置在负荷总线317上,并且也经过负荷总线317从QME 305接收这个描述符。然后,CPRC 401使用在这个描述符中的信息来建立正在被发送的包所需要的融合寄存器603(811),使用这个描述符中的缓冲器标记来在Tx控制块寄存器637中建立寄存器以将这个缓冲器内的内容从SDRAM 229传送到TxSDP 427(813),并且然后,开始这个传送(815)。当状态915或者EOP 917指示这个传送结束时,CPRC 401释放TxSDP 427和在这个传送中所涉及的其它资源(817)。TxSDP 427和CPRC 401以与RxSDP 421和CPRC 401进行交替的方式相同的方式来交替使用数据作用域625(0)和(1)。因为在数据作用域之间的交替是在CPRC 401所执行程序的控制下进行的,所以这个程序可以做任何所需要的处理,来在TxSDP 427和RxSDP 421之间分配一个数据作用域所表示的资源。
RxSDP 421的细节图10和11RxSDP 421和TxSDP 427向每一个信道处理器307(i)提供了在串行输入204(i),串行输出206(i),和信道处理器307(i)的其它部件之间的一个可编程接口。这样,一给定串行输入204(i)可以被按照正确处理属于给定协议的媒质层和传送层包所需要的方式来进行编程,而一给串行输出204(j)可以被编程成输出属于给定协议的媒质层和传送层包。每一个SDP 421或者427具有其自己的微程序存储器和独立的寄存器集合。
图10是RxSDP 421的一个框图。这些部件是将这个串行输入转换为并行,并且首先在媒质层包的级别上处理这个输入,然后在传送层包的级别上或者更高级别上来处理这个输入包的一系列处理器和FIFOS。某些处理器是专用于处理某些特定协议的。一个旁路路径可以被编程为允许数据旁路任何处理器和/或者FIFO。整体来说,这些部件如下所述§可配置的物理逻辑443,它从物理层接收串行输入,并且对它进行解释以产生一个10比特代码的流。
§管脚接口204(i),它从这个物理层接收10比特代码。
§8b/10b解码1001,它从管脚逻辑443所接收的10比特代码产生字节;§小的FIFO 1003,它是具有不同的、可编程的写入和读取时钟的一个异步FIFO(队列)。这个写入时钟的运行频率是这个输入数据流所需要的一个频率,而这个读取时钟的运行速率是CPRC 401的速度。在一个目前的优选实施方式中,FIFO 1003是8个9比特字深的FIFO。
§接收比特处理器1005,它对它从小的FIFO 1003中所接收的字节流进行图形匹配和字段提取,被提取的字段经过路径1005被发送到提取空间417。
§接收SONET帧模块1007,它处理SONET帧。接收SONET帧模块1007对帧中的数据进行解扰,从帧中删除协议数据,进行奇偶校验,并且经过路径1008将这个协议数据写入到提取空间417中。
§接收同步处理器1009,它处理ATM信元。接收同步处理器1009发现这个信元的边界,删除这个协议数据,使用这个协议数据启动一个TLE操作,对这个负荷进行解扰,并且经过路径1019将这个协议数据写入到提取空间417中。
§大的接收异步FIFO 1011,它是一个异步FIFO。在一个当前的优选实施方式中,FIFO 1011是一个64个10-比特字深的FIFO。FIFO1011主要是用于当TLE 301查找VPI/VCI时,对一个ATM信元进行分级,并且FIFO 1011也用于使用高速度接收包来提供灵活性。
§接收字节处理器1013,在微代码的控制下进行工作,来对9-比特字的数据进行图形匹配和字段提取。
通过复用器1002,1006,1014,和1010来实现旁路路径1015。复用器1010也实现了再循环路径441。旁路和再循环路径是可以通过设置SDP模式627中的比特进行动态地配置的。通过RxSDP控制613中的寄存器,数据可以直接在CPRC 401和比特处理器1005,同步处理器1009,或者字节处理器1013之间进行传送。
如前面所描述的,信道处理器307可以被进行组合来处理非常高速度的数据流。当被组合在一起时,被组合的信道处理器作为一个流水线来进行工作,其中每一个被组合的信道处理器依次处理数据流中的一部分数据。一个集合中RxSDP 421之间的协调可以通过令牌总线1027,1017,和1028来实现。例如,在一个组合中,一个被使能的Rx比特处理器1005仅当被令牌总线1004提供了这个令牌时,才处理输入数据流。几个令牌总线是需要的,因为用于处理一个输入流的RxSDP421部件将随输入流的类型而变化。
可配置管脚逻辑443的细节图46和47可以使用两个方法来配置配置管脚逻辑443§向一个串中的一个,两个,或者4个SDP 420提供输入流,或者从一个串中的一个,两个,或者4个SDP 420中接收一个输出流;和§使用这个用来发送输入流或者输出流的媒质所需要的不同物理接口来进行工作。
第一个类型的配置是为了允许将信道处理器307组合成一个串307以处理非常高速度的输入流或者输出流;第二个类型的配置允许DCP203被用于不同类型的传送媒质,而不需要在DCP 203的外部增加设备以对从这个媒质所接收的信号进行适配,以被DCP 203所使用。在信道处理器的局部存储器中的一个寄存器控制这两个类型的配置。这些寄存器可以被这个信道处理器自己所设置,或者可以被XP 313所设置。
图46是一个表4601,显示了在一个DCP 203中的一个串309如何被配置成来根据RMII,OC-3,DS1,DS3,GMII,TBI,和OC-12标准来接收和产生串行数据流。列4603列出了这个串中的每一个信道处理器的I/O管脚;列4605指出这个管脚的一般目的;这样,在每一个信道处理器中,I/O管脚0和1是用于时钟信号的,而剩余的管脚是用于数据的。剩余的列显示了这些管脚是如何被用于每一个媒质的列4607指出在RMII中它们是如何被使用的;4609指出在OC-3中它们是如何被使用的;4611指出在DS3中它们是如何被使用的;4615指出在GMII中,当这个串中的两个信道处理器被用于接收数据,而两个信道处理器被用于发送数据时,它们是如何被使用的;4617指出在TBI中,当这些信道处理器以相同的方式被使用时,它们是如何被使用的;和4619指出在OC-12中它们是如何被使用的,其中在一个串中的信道处理器交替作为发送器和接收器。
各种媒质需要不同类型的、用于I/O管脚的驱动器和接收器;这样,在可配置管脚逻辑443中的每一个I/O管脚具有一个3-态驱动器,一个TTL驱动器,和一个PECL驱动器。对例如使用PECL逻辑的OC-3媒质,I/O管脚对被配置为差分对,如列4609所显示的。
图47显示了管脚模式寄存器4701和SDP模式寄存器4713。每一个信道处理器307具有这些寄存器中的一个。寄存器4701决定如何配置这个信道处理器的I/O管脚。数据Cnfg比特4703是决定I/O管脚是否被一个3-态驱动器,一个TTL驱动器,或者一个PECL驱动器所驱动的4个比特。RxClk复用器4705和TxClk复用器4707分别规定正在被用于携带接收和/或者发送时钟信号的管脚。Rx数据使能4709规定了哪一个管脚被用于接收数据。最后,Tx数据使能4711规定哪一个管脚被用于发送数据。
SDP模式寄存器4713包括用于控制RxSDP 421中的哪一个部件被使能,循环电路中的什么被使能,和信道处理器309所属的串中目前采用哪个类型的组合的比特。信道处理器TxSDP 427也具有一个类似的寄存器。RxEn比特4715指出是否使能了这个信道处理器的RxSDP 421;比特4717指出是否使能了信道处理器的字节处理器313;比特4719指出是否使能了信道处理器的比特处理器1005;比特4721指出是否使能了Rx Sonet帧模块1007;比特4723指出是否使能了Tx同步处理器1009。下两个比特是用于再循环控制的,其中比特4725指出到字节处理器1013的再循环和比特4729指出从提取空间417到比特处理器1005的再循环。组合模式字段4731是一个2-比特字段,规定在这个串中是否没有进行组合,双向组合(即,两个信道处理器进行接收,两个信道处理器进行发送)或者4向的组合(所有4个信道处理器或者进行接收或者进行发送)。
SDP中处理器的实现方式图11图11显示了SDP中的处理器是如何被实现的。更具体地说,这里所显示的处理器是RxByte处理器1013,但是在Rxbit处理器1005中的处理器和接收同步处理器1009是类似的。SONET帧模块1007是使用与图11中的一个处理器类似的一个处理器而实现的一个可配置状态机。
如在复用器1107所显示的,RxByte处理器1013从大的FIFO 1011接收外部输入。RxByte处理器1013可以经过复用器1123向环型总线接口415,提取空间417,或者缓冲器1025提供外部输出,而环型总线接口415,提取空间417,或者缓冲器1025反过来又向DMEM 405提供协议数据单元。RxByte处理器1013内部的部件包括§控制存储器1101,它包括被处理器1013所执行的微代码,并且通过提供用于控制处理器1013中其它部件的控制信号(虚箭头),来对目前正在被访问的微指令作出响应。控制存储器1101可以由XP313加载。
§下一个地址逻辑1105,它通过从控制存储器1101中选择下一个需要被执行的微指令,来对来自控制存储器1105的控制信号和从条件代码复用器1121和内容可以被访问的存储器(CAM 1117)的输入作出响应。
§计数器1109和通用寄存器1115。这些计数器跟踪包中正被处理的比特位置。有4个8-比特计数器1109(0…3),它们可以被配置为2个16-比特计数器,并且如从计数器到下一个地址逻辑1105的输入所显示的,这个微代码可以规定与计数器值相关的动作。这些通用寄存器1115是6个8-比特寄存器,以用于保存在处理期间所使用的数据。
§CAM(内容可访问的存储器)1117一个CAM是在图形匹配中所使用的一个存储器。在CAM中的每一个信元包括一个图形,并且当与在一个CAM信元中所保存的一个图形匹配的数据被提供到这个CAM时,这个CAM输出这个信元在CAM中的位置。这个微代码也可能规定与CAM输出的值相关的动作。CAM 1117被CPRC 401和XP 313所载入。在CAM中有64个9-比特的字,并且这个CAM可以通过编程的方式被划分为最多16个“逻辑”CAM。
§CRC 111是用于执行循环冗余校验的专用硬件。也可以包括其它专用硬件来对包进行解扰。
§ALU 1119是一个包括一个圆筒旋转器(barrel rotator)的8-比特ALU。
如从前面可以看出的,XP 313通过载入CTL存储器1101和CAM1117来建立Rx字节处理器1013以进行工作。CPRC 401使用一个复位信号来停止或者启动字节处理器1013。
一旦字节处理器1013被设置为运行,字节处理器1013就将它所接收的每一个字节提供到CAM 1117。如果发现了表示一个传送层包的开始的一个匹配,控制逻辑1105就开始执行这个微代码,以处理这个传送层包。计数器被设置,并且字节处理器1013如CAM 1117所发现的进一步匹配和计数器值所指示的,来处理这个包。或者可以通过(图形,掩码,长度),或者通过(偏移,图形,掩码,长度)来规定在微代码中的匹配,其中偏移是在这个包中的偏移,掩码规定“不需要关心”这个比特,长度规定匹配中比特的数目。来自这个传送层包的协议数据被提取,并且经过路径1019被路由到提取空间417或者路由到环行总线接口415,并且这个协议数据单元被提取并且经过路径425被发送到16字节缓冲器1025,从这,它被DMA传送到DMEM 405中的一个线。通过(偏移,长度,寄存器地址)来规定这个微代码中的提取,其中偏移又是指在这个包中的偏移,长度是需要被提取的字段的比特长度,并且寄存器地址是通用寄存器1115中、这个字段将被保存在其中的一个寄存器的地址。
Rx比特处理器1005的细节继续更详细地参考RxSDP 421的部件所执行的功能,Rx比特处理器1005与Rx字节处理器1013类似,除了Rx比特处理器1005具有一个线性反馈移位寄存器,而不是CRC 1111外。这个线性反馈移位寄存器可以被配置成长度可达到32比特,并且具有相对这个数据流的多项式和位置。这个线性反馈移位寄存器被用于产生hash值或者其它校验和。Rx比特处理器1005在最低的层次上,处理被RxSDP 421所接收的字节流。这样,Rx比特处理器1005可以被编程为检测HDLC帧和无效的序列,被编程为删除填充的0,被编程为在一个OC-3数据流中发现STS帧和发现并删除输入以太网帧的前导码。
接收SONET帧模块1007的细节接收SONET帧模块1007处理SONET帧。帧模块1007可以从Rx比特处理器1005,或者也可以经过旁路1015直接从管脚接口204(i)接收这个帧。到SONET帧模块1007的输入包括连接到管脚接口204(i)的物理层接口芯片所恢复的接收时钟帧同步信号和包括在这个帧中的8-比特数据。一个SONET帧包括传送层开销和包括这个帧负荷的一个同步负荷封装(SPE)。包括在这个传送层开销中的是指向这个同步负荷封装的一个STS指针。这个同步负荷封装包括路径开销字节。
接收SONET帧模块1007对这个SONET帧中的字节进行解扰,进行奇偶性校验,并且经过路径1008将这个传送层开销写入到提取空间中。接收SONET帧模块1007进一步解释这个STS指针以发现这个SPE。在发现这个SPE后,接收SONET帧模块1007进行奇偶性校验并且将这个SPE的路径开销写入到提取空间中。在这个SPE中的负荷被进一步传递到RxSDP 421的部件,如这个负荷类型所要求的。例如,如果这个负荷是ATM信元,它们就被传递到接收同步处理器1009。在这个优选实施方式中,接收SONET帧模块1007不对SPE的负荷进行解复用。
接收同步处理器1009的细节接收同步处理器1009专用于处理ATM信元。一个ATM信元包括53个字节。5个字节是包括一个虚通道指示,一个虚信道指示,一个负荷类型指示,一个信元丢失优先级指示,一般流控制信息和一个头错误校验字节的一个头部。剩余的48字节是负荷。接收同步处理器1009通过连续地对5-字节序列进行头错误校验,将这个序列中的第5个字节作为对这个序列中前4个字节的头错误校验字节,来决定一个字节流是一个ATM信元流。如果这个头错误校验失败了,接收同步处理器1009就继续进行尝试。如果这个头错误校验成功了,接收同步处理器1009就发现了一个ATM信元。如果接收同步处理器1009在一个行中发现了一个可编程的信元数目,接收同步处理器1009就被同步到一个ATM信元流。接收同步处理器1009保持同步,直到连续头错误校验失败的次数达到一个可编程数目,这就表示同步处理器1009不再同步到一个ATM信元流。
当接收同步处理器1009与一个ATM信元流保持同步时,接收同步处理器1009解析这个ATM信元的头部,并且将这个头部的内容输出到提取空间。接收同步处理器1009通过对负荷进行解扰,并且通过将一个状态字节附加到这个负荷的末尾,以使如果对这个信元进行的头部校验失败了就可以丢弃这个负荷,来进一步处理这个负荷。一般地说,从接收同步处理器1009中输出的负荷被提供到大FIFO 1011,这个大FIFO 1011具有足够的深度来允许在进一步进行处理以前,可以对VPI-VCI进行TLE搜寻。
接收字节处理器1013的细节接收字节处理器1013可以被编程为执行几个功能§接收字节处理器1013为通过SONET的PPP处理HDLC换码序列;§接收字节处理器1013进行32-比特CRC校验,包括以太网和AAL5的帧校验序列;
§当信道处理器307(i)已经被与其它信道处理器307进行组合来处理1000BASE-X千兆以太网时,接收字节处理器1013进行以太网的定界符识别;使用这个再循环路径,接收字节处理器1013可以与其它接收字节处理器1013进行组合,来处理TI和T3的速率。这个再循环路径也允许处理多信道HDLC和加密/解密;和§接收字节处理器1013将一个状态字写入到提取空间中,当它检测到一个帧结束标记符时。
§接收字节处理器1013从一个ATM信元的头部中提取这个VPI-VCI,并且经过环型总线311向TLE 301发送包括虚通道指示符和虚信道指示符的一个消息。这个TLE 301通过将表示具有这个VPI-VCI组合的ATM流的输出队列的一个消息返回到信道处理器307(i),来对这个消息作出响应。
接收字节处理器1013处理9-比特字。接收字节处理器1013的操作已经被详细描述了。
各部件合作的示例在下面的示例中,假定RxSDP 421的管脚接口204(i)连接到其上正在使用SONET协议发送负荷数据的一个光纤上。在SONET帧中的负荷是ATM信元,并且其头部具有一个特定VPI-VCI的ATM信元中的负荷是一个IP包。RxSDP 421已经被编程为从这个SONET帧中提取ATM信元,并且处理这个ATM信元。
从这个SONET帧中来的字节首先发送到Rx比特处理器1005,Rx比特处理器1005再将这些字节发送到SONET帧模块1007。Rx比特处理器1005也检测这个帧的开始,并且向接收SONET帧模块1007发送表示字节到达的一个信号。这个接收SONET帧模块1007对这个SONET帧中来的负荷数据进行解扰,进行奇偶校验,并且对负荷数据进行定位。ATM信元的负荷被发送到接收同步处理器1009,接收同步处理器1009检测这个ATM信元,读取ATM信元的头部,并且将ATM信元中的信息发送到提取空间417。下面,ATM信元的负荷被发送到接收字节处理器1013,接收字节处理器1013将ATM信元的VPI-VCI对发送到TLE 301以进行翻译,并且将来自包括在ATM包的负荷中的任何包的报头信息读取到提取空间417中。
TxSDP 427的细节图12TxSDP 427执行与RxSDP 421相逆的操作即,TxSDP 427从SDRAM 229接收一个协议数据单元,并且以其目的地和管脚接口206(i)所连接的物理接口所要求的形式,来添加输出这个协议数据单元所需要的协议数据。另外,操作是分层的。其中传送层包的协议数据被添加到媒质层包的协议数据的前面。图12显示了TxSDP 427的细节。这个协议数据单元经过路径431从DMEM 405到16字节缓冲器1229,TxByte处理器1213从16字节缓冲器1229中读取这个协议数据单元;这个协议数据经过路径429从融合空间419来,并且被发送到TxSONET帧模块1207和Tx比特处理器1205和被发送到TxByte处理器1213。到RxSDP 421的的再循环路径在441;复用器1206,1204和1202实现了旁路路径1215。组合路径1223允许一个给定TxSDP 427将媒质层数据添加到被与这个给定TxSDP 427组合的其它TxSDP 427所产生的传送层包流。当一个给定TxSDP 427是一个组合的一部分时,通过在TxByte令牌总线1225上的这个令牌来控制TxByte处理器1213的输出。TxSDP 427的部件与RxSDP 421中名字类似的部件类似,除了它们的功能是将协议数据添加到一个协议数据单元流,而不是提取它。在功能上的这个差异的一个结果是,TxSDP 427中没有设备用于发送环型总线消息。TxStatus 639和TxCB 637具有与Rx数据作用域643的相应部件类似的功能,其中除了方向上有差异外。TxSDP ctl 615中的寄存器进一步允许CPRC 401与TxSDP 427进行通信,并且SDP模式627中的寄存器配置这个旁路路径。
这些部件如下,它们是按照其中处理输出的顺序来排列的§Tx字节处理器1213可以被编程为从DMEM 405读取一个协议数据单元,并且实现字段插入,删除和替代。Tx字节处理器1213也可以被编程为通过预先考虑这个协议数据单元中48-字节块的这个ATM头部,并且可选地对这个信元内容进行加扰,来产生ATM信元。当没有协议数据单元需要被发送时,Tx字节处理器1213产生空闲的ATM信元。
§大异步FIFO 1211的深度是64个字,并且其宽带是9比特,并且大异步FIFO 1211提供处理器1213执行的字段插入和删除所需要的灵活性。以核心时钟速率来对FIFO 1211进行写入,并且也可以或者使用核心时钟速率,或者使用串行时钟速率来读取FIFO 1211。
§SONET帧模块1207产生其中的负荷是TxByte处理器1213的输出的SONET帧。
§Tx比特处理器1205是一个智能的并行-串行处理器。在程序的控制下,Tx比特处理器1205实现了对它所接收的数据进行字段插入,字段删除和字段替代。这个输入数据是8比特宽,其输出数据是一次1,2,或者4个比特,这与物理接口相关。处理器1205包括一个通用线性反馈移位寄存器。
§小FIFO 1203数据被以核心时钟速度写入到这个FIFO,并且被以串行时钟速率来进行读取。这个FIFO是8个字深,并且是9比特宽。
§8b/10b编码器1201对数据进行8b/10b编码。
处理器1213,1207,和1205是可以被编程的,并且它们具有与上面所描述的Rx字节处理器1013相同的通用内部结构。
将通过与用于描述RxSDP 421的示例相逆的一个示例来描述这些部件之间的合作这个输入是为一个IP包的一个协议数据单元;这个输出是其负荷为ATM信元的一个SONET帧,ATM信元的负荷反过来又是IP包。这个IP包最后被保存在SDRAM 229中,从SDRAM229,这个IP包被DMA传送到DMEM 405;形成ATM信元和SONET帧所需要的这个协议数据在融合空间419中。以48-字节块为单位,从DMEM 405中读取这个IP包;Tx字节处理器1213为每48-字节块产生一个ATM头部,并且这个所产生的ATM信元被发送到大FIFO1211,从这个大FIFO 1211,这个所产生的ATM信元被SONET帧模块1207所读取。SONET帧模块1207将ATM信元封装作为ATM帧的负荷,并且添加必要的SONET协议数据。然后,这个SONET帧被输出到Tx比特处理器1205,Tx比特处理器1205将这个SONET帧进行串行化,并且将这个SONET帧输出到小FIFO 1203,从小FIFO1203,这个SONET帧被发送到编码1201,并且从编码1201,被发送到管脚接口206(i)。
对PDH电话使用信道处理器307在很多年内,长途电话服务提供者已经使用数字中继链路来承载长途电话呼叫。在这些系统中,这个呼叫所连接的电话所产生的音频信号被量化为1-字节采样,并且从许多呼叫来的被量化的采样和关于这些采样的路由信息一起被复用到中继链路上。
虽然这些采样和它们的路由信息可以被看作非常简单的包,但是,在这些系统中没有包的层次结构,并且在接收端口和发送端口之间的关系是固定的。所以,SDRAM 229中的包不需要表搜寻,描述符,队列,或者缓冲器。相反,这个接收信道处理器307(i)利用了它与发送信道处理器(j)共享全局地址空间321的这个事实,并且简单地将每一个采样写入到发送信道处理器307(j)的DMEM 405中的一个队列。在发送信道处理器307(j)中的CPRC 401管理这个队列。
信道处理器307的组合图13,14,26-27如前面所提到的,信道处理器307的结构是以4个信道处理器307组成串309。将信道处理器组成串的这种结构允许信道处理器被组合,以使它们可以使用比一单个信道处理器307所能够进行的速度更快的速度来进行发送或者接收。在一个优选实施方式中,组合被用于发送和接收OC-12c和千兆以太网协议。对这个OC-12c协议,串中4个信道处理器中的两个信道处理器可以被用于接收数据,而另外两个信道处理器可以被用于发送数据,或者两个串可以被使用,其中一个串用于接收数据,而另一个串被用于发送数据。对千兆以太网协议,两个串被使用,一个串中的4个信道处理器可以被用于根据这个协议进行接收,而另一个串中的4个信道处理器可以被用于根据这个协议进行发送。
在这里,组合一组信道处理器来接收一个协议被称作接收组合;相应地,组合一组信道处理器来发送一个协议被称作发送组合。在接收组合中,每一个信道处理器均接收从这个协议来的所有输入,但是仅仅处理输入中的一部分。在发送组合中,每一个信道处理器接收这个协议的部分输出,并且当需要时将其部分输出到实际上向这个发送媒质提供输出的信道处理器。串中信道处理器的串行I/O管脚以这样一个方式被进行连线,以使串中的所有信道处理器均接收相同的串行输入。也可能这样配置组合信道处理器,以使所有组合信道处理器可以被相同的定时器来控制。最后,被实现为在共享存储器中信号标记的令牌可以被用于协调串中信道处理器的操作。组合是通过设置属于这个串的信道处理器中的配置寄存器来完成的。
图13给出了允许以一个优选实施方式来进行组合的结构的细节。图中显示了有4个信道处理器307(j,0…3)的一个串309(j)。到一个串的输入被按照如下的方法进行组合每一个信道处理器307(j,k)具有7个I/O管脚CPP(0…6),这样就有28个串I/O管脚1301。串I/O管脚1301(0)是信道处理器I/O管脚1303(0,0),CLP 1301(2)是CPP 1303(0,1),等等,直到CLP 1301(27)是CPP 1303(3,6)。这些管脚这样被互联,以使在CLP 1301(0),CLP 1301(7),CLP1301(14)和CLP 1301(21)中的任何一个上的输入可以同时被所有的CPP 1303(0,0),CPP 1303(1,0),CPP 1303(2,0),和CPP1303(3,0)所接收。通过信元/帧组合路径1223来组合输出,如图12所显示的。如这里所显示的,从每一个TxSDP 425(j,i)来的输出1441,1223被连接到这个串中其它TxSDP 427中每一个的复用器1208,并且这样,一给定TxSDP 425(j,i)可以接收在这个串的其它TxSDP 427中任何一个的大FIFO 2122输出的输出,并且能够处理在大FIFO 1023后面设备中的输出。一给定RxSDP 421或者TxSDP 427如何与其串相关是通过设置SDP模式627中的比特来决定的。
每一个信道处理器307进一步具有允许信道处理器307选择11个时钟输入中的一个的一个时钟复用器1307。时钟输入中的8个,外部全局时钟输入1309(0…7)是数字信道处理器IC 203的外部时钟;两个时钟输入,CPGLC 1311是被一个信道处理器所恢复的全局时钟输入并且被提供到其它信道处理器,并且其中的一个输入,局部时钟1313,作为数字信道处理器IC 203的本地时钟。
通过3组令牌环来协调一个信道处理器串的处理TxSDP令牌环1225协调从这个串的TxSDP 427中的TxByte处理器1213的输出。仅具有令牌的这个TxSDP 427可以输出到大FIFO 1211。如图10中所显示的,RxSDP 421中的哪一个设备进行提供是由3个令牌环决定的,环1027是用于Rx比特处理器1005,环1017是用于Rx同步处理器1017,和环1028是用于Rx字节处理器1013。RxSDP 421中具有一个令牌环的、并且被使能的一个设备仅当它具有这个令牌时才提供输出。使用哪一个令牌环是与RxSDP 421中的哪一个设备被使能相关的。通过TxSDP和RxSDP所执行的微代码,环中用于RxSDP 421和TxSDP 427的令牌被传送和测试。信道处理器令牌环1315控制组合中信道处理器对全局总线319的写入访问。仅目前具有环1315的令牌的这个信道处理器能够对全局总线319进行写入操作。信道处理器令牌环1315通过串中信道处理器所共享的串存储器503中的信号标记来实现。
通过如图14所显示的,一个串中的局部和共享存储器结构来进一步支持组合。这个结构的结果是串存储器503。串存储器503包括用于串309(j)中信道处理器(0…3)中每一个信道处理器的信道处理器局部存储器503。每一个信道处理器存储器503(j,i)包括用于串行数据处理器的信道处理器307(j,i)存储器1403,总线控制存储器1405,用于CPRC 401的存储器1407,和部分指令存储器403。这个串中的每一个信道处理器307能够经过串路径439访问这个串中其它信道处理器中每一个中的DMEM 405。对另一个信道处理器中的DMEM 405进行访问有一个周期的延迟。当通信处理器203被初始化时,这个指令存储器可以被配置,以使这个指令存储器可以作为共享IMEM 1409在所有4个信道处理器之间进行共享,或者可以分割给所有4个信道处理器(IMEM 403)。当这个指令存储器被配置为共享存储器IMEM1409时,这个串中4个信道处理器中的每一个能够以一个固定的环绕顺序,每周期一次地对共享IMEM 1409进行给定的访问。共享IMEM403允许一个信道处理器或者其一个串的编程者可以在信道处理器所需的较大程序和独立信道处理器具有更大的灵活性之间进行折衷。
组合信道处理器的操作示例图26和27当组合信道处理器在处理千兆以太网时,这个接收器是有4个信道处理器的一个串309(i),这个发送器是有4个信道处理器的另一个串309(j)。图26显示了RxSDP 421(i,0…3)如何被配置,图27显示了TxSDP 427(j,0…3)如何被配置。两个串309(i)和串309(j)被这样配置,以使这个发送器中一个信道处理器中的接收时钟是这两个串的主接收时钟。这个发送串中的所有信道处理器均选择外部全局时钟1309中的信号作为用于千兆以太网的时钟。通过串存储器503中的信号标记来实现这个串的CP 307中CPRC 401之间的同步。RxSDP组合图26如图26所显示的,每一个RxSDP被这样配置,以使不是解码器1001,Rx比特处理器1005,和Rx字节处理器1013的处理器被旁路。解码器1001向CPRC 401提供一个3-比特同步丢失的输出2603。Rx比特处理器1005对输入的接收是被令牌总线1027所控制的,并且Rx字节处理器1013的输出是被令牌总线1028所控制的。这样,仅当Rx比特处理器具有这个令牌时,Rx比特处理器才将它对小FIFO 1003的内容进行处理的结果输出到大FIFO 1011,类似地,仅当Rx字节处理器1013具有这个令牌时,Rx字节处理器1013才输出它对大FIFO1011的内容进行处理的结果。
在这个优选实施方式中,每一个信道处理器接收一帧千兆以太网的数据,当它具有这个令牌时,并且当它接收到这个帧时,它将这个令牌传递到这个串中的下一个信道处理器,并且处理它刚才所接收的帧。如已经描述的,处理这个数据的一个结果是关于这个数据的一个描述符。这个信道处理器经过全局总线319将一个排队命令写入到队列管理引擎305中的其邮箱511中,并且队列管理引擎305通过将这个描述符进行排队来对这个命令作出响应。最后,令牌被实现为共享存储器中的信号标记,并且被用于管理接收串的成员对全局总线的访问,以使仅当这个接收串中的一给定信道处理器具有这个令牌时,它才能够向全局总线319进行写入。
TxSDP组合图27图27显示了在输出串中的TxSDP 427(j,0…3)如何被建立的。如从图中可以看出的,TxSDP 427(j,0…3)仅被使能的部分是Tx字节处理器1213,大FIFO 1223,和组合路径1223。输出流中的剩余处理是其中Tx比特处理器1205和编码器1201和Tx字节处理器1213被使能的TxSDP 427(j,0)所完成的。当一给定TxSDP 427(j,k)在令牌总线1225上具有令牌时,其Tx字节处理器1213经过大FIFO和组合路径1223向TxSDP 427(j,0)输出数据,然后,TxSDP 427(j,0)在复用器128中选择合适的输入,并且在复用器1208后面的、被使能的处理器中处理这个输入。
在配置2701中,这个串中的每一个信道处理器307反过来输出一个千兆以太网帧。如已经描述的,一个信道处理器307通过向QME 305发送一个出列命令来获得关于需要被发送的这个帧的协议数据单元的一个描述符,来开始进行一个传输。CP令牌环1315被用于确保,这个发送串中的信道处理器以正确的顺序获得了这个描述符。仅当这个发送串中的一个信道处理器具有CP令牌环1315中的令牌时,这个信道处理器才可以访问全局总线319,来向队列管理引擎305提供一个出列命令。一旦一个信道处理器具有关于需要被输出的数据的描述符时,它可以在其Tx字节处理器1213中对这个数据开始进行处理。仅当这个Tx字节处理器1213具有令牌环1305所提供的令牌时,这个数据才可以被从Tx字节处理器1213输出。从Tx字节处理器1213来的输出经过组合路径1223被发送到TxSDP(j,0),在TxSDP(j,0)中,从Tx字节处理器1213来的输出被输出。另外,这个结构允许这个串中一给定信道处理器处理需要被输出的这个帧,而这个发送串中的其它信道处理器正在输出它们的帧。
OC-12c的串基本上按照上面所描述的来进行工作,除了有4个信道处理器的一个串中的两个信道处理器被配置成用于进行接收,而另外两个信道处理器被配置成用于进行发送。令牌环被使用,如上面所描述的,除了当OC-12c被用于发送ATM信元时,令牌环11017控制接收信道处理器中的接收同步处理器1009。
执行处理器(XP)313的细节图15XP 313是实现了MIPS IV指令集的一个通用CPU。它执行数字通信处理器203中的下述功能§复位DCP 203并且对DCP 203进行初始化;§将程序载入到信道处理器307和构造处理器303中,并且设置参数以进行操作;§建立和维护表搜寻引擎301所使用的翻译表209,并且设置表搜寻引擎301中的寄存器;§处理异常;§运行DCP 203的实时操作系统;和§当有主机227出现时,与主机227进行交互通信。
与主机227进行的交互通信包括向主机227提供在全局地址空间321中的一个可变大小的窗口,并且也可以包括处理XP313从主机227接收或者向主机227发送的包。
图15是XP 313的一个框图。XP 313具有与一个信道处理器307相同的很多部件。与这些信道处理器类似,XP 313连接到环型总线311,负荷总线313,和全局总线319。基本处理部件是与CPRC 401类似的XP RISC核心处理器1501。有到环型总线311,两条局部存储器1507和1508的一个接口1515,到负荷总线317的一个接口1511,和到全局总线319的一个接口1513。两个DMEM 1507和DMEM 1508均是可以经过负荷总线接口1511被访问的,并且在负荷总线315上实际上是独立的节点。仅DMEM 1507是可以经过全局总线接口1513被访问的。在信道处理器中没有而XP 313中有的接口包括通用目的I/O接口1517,PROM接口1525,和PCI接口1523。指令存储器1503具有3个部件可载入指令存储器1503,指令只读存储器1504,和指令存储器加载器1506,指令存储器加载器1506包括由XPRC 1501执行来从DRAM 229载入IMEM 1503的程序。XP RISC核心1501所执行的代码和在执行这个代码中所使用的数据被保存在SDRAM 229中,并且经过DMA被从SDRAM 229传送到DMEM 1507,DMEM1508,和IMEM 1503,如XP RISC核心1501所需要的。与信道处理器307类似,XP 313能够访问全局地址空间321。XP/CP配置寄存器1517是XP 313中全局地址空间321的一部分。
执行处理器313所执行功能的细节执行处理器313通过向每一个信道处理器307发送一个复位信号,来对在数字通信处理器203中所接收的一个芯片复位信号作出响应。在这以后,XP 313开始执行初始化代码。这个初始化代码可能在前面已经经过PCI接口1523和全局总线317被载入到SDRAM 229中,或者,它可能已经被包括在连接到PROM接口1521的一个可选外部PROM中。这个初始化代码载入每一个信道处理器的IMEM 403,载入一个串的共享IMEM 149,载入RxSDP 421或者TxSDP 427所执行的程序,并且将配置信息载入到全局地址空间321内的寄存器中。
一旦已经对数字通信处理器203进行了初始化,XP 313就执行用于数字通信处理器203的一个实时操作系统,支持网络监视协议,并且处理信道处理器所发起的异常例程。XP 313进一步使用其对全局地址空间321的访问来管理信道处理器,构造处理器303,队列管理引擎305,和缓冲器管理引擎315。它使用这个到环型总线311的接口来管理表搜寻引擎301。一旦这个管理功能在翻译表209中插入和删除翻译表表目211;另一个正在管理统计表。管理翻译表209和缓冲器管理引擎315的能力给予了XP 313能力来配置在DCP 203中输入和输出端口之间的关系。
当有一个主机227时,XP 313将主机的可见性给到DCP 203的全局地址空间中,并且能够为它读取被TLE 301所管理的表。XP 313可以进一步用作对从主机226接收的、或者发送到主机226的包的一个包收发器。例如,主机227可以是一个互联网协议节点,所以,可以接收或者发送互联网包。作为一个包收发器,XP 313的工作方式基本上与一个信道处理器的工作方式相同,除了其I/O接口是一个PCI总线。
构造处理器303图16-20如图3中所显示的,构造处理器(FP)303管理在一个数字通信处理器203和一个交换构造222之间的接口。交换构造222被用于在一些交换设备,例如通信处理器203之间进行通信。图19在1901显示了一些DCP 203(1…x)如何被连接的,每一个DCP 203通过其FP303(i)连接到交换构造222。在属于一个DCP 203(i)的一个串行输入204(i,j)上所接收的包可以经过FP 303(i)和交换构造222被路由到另一个DCP(k),在这里,它们在FP 303(k)中被接收并且在一个串行输出206(k,l)上被输出。
数据作为构造帧通过交换构造222。一个构造帧的确切形式将随着交换构造结构的不同而不同,但是构造帧一般具有如图18所显示的部分§构造头1803,包括交换构造222使用来进行路由并且在交换构造222内进行流控制的信息;§帧头1805,包括将构造帧1801输入到交换构造222的源设备向从交换构造222接收帧1801的目的设备所提供的信息;和§负荷1807,是在从网络中源设备内所接收的、并且需要被目的设备输出到这个网络的负荷。
如下面将更详细描述的,构造处理器303可以被编程为处理不同类型的构造帧。在一个优选的环境中,构造处理器303可以被编程为处理具有一固定长度(FL 1809)的帧。这个固定的长度可以在32字节到128字节之间。
从前面的讨论中可以很清楚地看出,一个构造处理器303基本上具有与一个信道处理器307的功能相同的功能,除了它从交换构造222而不是串行端口接收输入,并且将输出提供到交换构造222而不是串行端口外。这个差异具有重要的影响。首先,交换构造222接收并行输入,并且提供并行输出,而不是串行输入和串行输出。输入或者输出的宽度取决于交换构造;在一个优选的实施方式中,构造处理器303可以被编程为每个时钟周期输出宽度是8,16,或者32比特的数据。
第二,构造处理器303必须以比信道处理器307的速度高得多的速率来处理数据。这样做的一个原因是输入和输出是并行的,而不是串行的;另一个原因是交换构造222是与其它设备进行共享的,并且一个构造处理器303从交换构造222接收数据并且向交换构造222提供数据的速度影响所有这样设备的速度和吞吐率。为了实现操作的必要速度,构造处理器303被实现为一对有限状态机。在一个优选实施方式中的这个有限状态机与具有下述特性的构造帧1801一起进行工作§这个帧具有一预定长度;§这个数据的前面是一固定长度的构造头1803;§这个交换构造通过构造头中的一个目的地比特掩码来实现多播(同时将一个包路由到多于1个的目的地);§可以通过一个简单的状态机来从这个构造头中提取拥塞信息;和§一系列相关构造帧1801中第一构造帧1801的关系是确定的。
构造处理器303的细节图16图16是构造处理器303的一个框图;总的说来它与图4的信道处理器类似,这一点将很快就会清楚。与一个信道处理器307类似,构造处理器303被连接到负荷总线317,全局总线319,和环型总线311;这样,它可以向SDRAM 229提供协议数据单元,并且从SDRAM 229接收协议数据单元,可以访问全局地址空间321,并且可以向表搜寻引擎301提供消息并且从表搜寻引擎301接收消息。这里有3个主要的差异§Rx构造处理器1617和Tx构造处理器1621通过32-比特总线1619和1623被连接到交换构造222;§交换构造控制引擎1601不是一个完全可编程的RISC处理器,而是两个可以进行参数设置的状态机Rx交换构造控制引擎1604,用于处理在构造处理器303中所接收的帧1801;和Tx交换构造控制引擎1602,用于处理需要被从构造处理器303输出的帧1801;和§交换构造控制引擎1601直接连接1625和1627到队列管理引擎305,由此实现对队列管理引擎305的访问,对队列管理引擎305的访问随时间的变化比经过全局总线319来进行访问的变化少。
构造处理器303的操作一般与一个信道处理器307的操作类似。取决于交换构造222,构造帧1801在Rx构造数据处理器1617中被以8,16,或者32-比特块来进行接收。Rx构造数据处理器1617将头1803和1805与负荷1807区分开。头中的某些信息被发送到提取空间1613,在提取空间1613中,这些信息可以被Rx交换构造控制引擎1604所使用;Rx构造数据处理器1617使用其它信息来产生TLE301的一个消息;这个消息被经过环型总线接口1611和环型总线311发送到TLE301。协议数据单元经过复用器1605,DMEM 1603,和负荷总线317被DMA传送到SDRAM 229中的一个缓冲器231(i)。Rx交换构造控制引擎1604响应Rx构造数据处理器1617所发送的环型总线消息,使用缓冲器231(i)的缓冲器标记233,提取空间1513中的头信息,和从TLE301所接收的信息来产生这个协议数据单元的一个描述符217;使用到队列管理引擎305的专用连接1625,交换构造控制引擎1601对这个描述符执行一个排队操作。
Tx交换构造控制引擎1602执行发送处理。Tx交换构造控制引擎1602从队列215中读取描述符,这个队列215是队列管理引擎305维持的指定交换构造222可以达到的目的地的描述符217的队列。构造处理器303从这个队列的头中读取描述符。对每一个描述符,构造处理器303使用在描述符中的信息来建立融合空间1615,使融合空间1615具有产生构造帧1801的头1803和1805所需要的信息,其中构造帧的数据由描述符的缓冲器标记233所规定,并且构造处理器303使用描述符的缓冲器标记233来发起从缓冲器存储器229经过负荷总线317,DMEM 1603和复用器1605到Tx构造数据处理器1621的DMA传送,然后,Tx构造数据处理器1621使用在融合空间1615中的信息来产生头1803和1805,并且使用被DMA传送的协议数据单元来产生负荷。当Tx构造数据处理器1621产生构造帧1801时,Tx构造数据处理器1621经过总线1623以8,16,或者32-比特块来将构造帧1801输出到交换构造222。
Rx构造数据处理器1617和Tx构造数据处理器1621的细节图17图17是Rx构造数据处理器1717和Tx构造数据处理器1621的一个细节框图。从Rx构造数据处理器1717开始,Rx构造数据处理器1717包括连接到输入数据总线1619的一个输入FIFO 1708,一个构造头解释器1707,一个头-负荷分离器1703,一个负荷FIFO 1705,和一个头部提取器和解释器1701。负荷FIFO 1705经过总线1616被连接到复用器1605,并且头部提取器和解释器1701被路径1614连接到提取空间1613,经过路径1616被连接到环型总线接口1611。部件1701,1703,和1707是用与在RxSDP 421和TxSDP 427中所使用的微序列器类型相同的可编程微序列器来实现的。
一般,Rx构造数据处理器1617的操作与RxSDP 421的操作类似,除了没有串行-并行数据转换。从交换构造222所接收的一个构造帧1801的字节首先被提供到FIFO 1708,FIFO 1708允许构造处理器303和交换构造222运行的时钟速率可以不同。交换构造222写入到FIFO1708的末尾,而交换构造头解释器1707从FIFO 1708的头部中进行读取。交换构造头解释器1707读取构造帧头1803,并且将构造帧头1803的被选择部件输出到提取空间1613。处理的下一阶段是头部-负荷分离器1703,头部-负荷分离器1703将帧头1808从负荷1807中区分开,并且将这个负荷发送到FIFO 1705,从FIFO 1705,这个负荷被DMA传送到缓冲器存储器229。FIFO 1705是足够地大,以能够保存这个负荷,直到能够对DMEM 1603进行DMA访问为止。然后,帧头部1808被提供到头部提取器和解释器1701,头部提取器和解释器1701对这个头部进行解释,并且将这个头部的信息输出到提取空间1613和/或者环型总线接口1611。
Tx构造数据处理器1621有3个可编程的部件和两个FIFO。与Rx构造数据处理器1617相同,可编程的部件是用微序列器实现的。可编程部件包括头产生器1709,它使用交换构造控制引擎1601放置在融合空间1615中的信息来产生帧头1805,头和负荷融合1711,它融合头1805和经过路径1620被从缓冲器存储器229DMA传送来的负荷1807,和构造帧头产生器1715,它在帧1801被输出到交换构造222以前产生构造帧头1803并且将它添加到帧1801上。FIFO 1717允许构造处理器303和交换构造222运行的时钟速率可以不同,并且FIFO1717提供了处理对DMEM 1603进行访问时的延迟所需要的灵活性。
使用DCP 203的交换系统的结构图19和20构造处理器303允许一个DCP 203能够很容易地与能够发送和接收符合上面所提出限制的帧1801的任何交换部件进行交互式通信。图19和20显示了这很多种可能结构中的3个结构。结构1901,其中一些DCP共享前面已经详细讨论的一个交换构造222;在结构1905中,没有独立的交换构造;作为代替,交换是通过经过它们的构造处理器303将两个DCP 203互相连接而形成的。这样一个系统可以通过将几个DCP 203的构造处理器连接到一个总线,并且通过提供一个令牌环或者某些其它机制来控制发送DCP 203对总线的访问,而被扩展。在结构2001中,连接到交换构造222的不仅是一些DCP 203,而且有DCP203不处理的、用于线路接口2003的非-DCP逻辑2002。这样一个结构2001可以被用于将前面已有设备集成到一个采用DCP 203的交换系统中。
表搜寻引擎301和翻译表存储器207的细节图21-24如前面已经指出的,表搜寻引擎301对在环型总线311上从信道处理器307,构造处理器303,和执行处理器313所接收的消息作出响应,在翻译表存储器207中的翻译表209上执行表搜寻操作,并且将带这个操作结果的环型总线消息返回到从其中接收消息的设备。
图21是翻译表存储器207的一个当前优选实施方式的一个细节。使用64-比特宽的流水线突发静态RAM模块来实现翻译表存储器207。模块207被划分为8个表池2101(0…7)。这个表池的尺寸可以是不同的,并且可以被划分为不同尺寸的表项,但是一给定表池中所有的表项的尺寸必须相同。图21中显示了两个这样的表项链接表项2111和数据表项2119。一个表池2101进一步被划分为由连续表项组成的部件表2106。图21中显示了这样的2个部件表表池2101(1)中的链接表2107和表池2107(7)中的数据表2117。每一个表项均具有它所属于的部件表2106中的一个索引;这样,LTE 2111具有一个链接索引2109,并且DTE 2119具有一个数据索引2114。一个部件表2106中的一个项是通过将其索引乘以表池中项的尺寸并且将这个乘积加到其部件表2106的开始位置而被定位的。
一般有两个类型的部件表2106链接表和数据表。这两个类型的部件表2106均使用与数据表中数据相关的关键字。例如,一个翻译表209可以将一个ATM包头中的VPI/VCI对翻译成将接收ATM包的描述符的队列存储器213中的队列215的号码。这个VPI/VCI对是关键字,并且通过这个关键字被定位的数据表项2119包括这个队列的号码。一个搜寻算法决定了这个关键字在翻译表中是如何被使用的。一个链接表包括其它索引表项或者数据表项的索引;它被使用,当关键字被进行翻译来对数据表项2119进行定位时。如从一个链接表项被用于对其它项进行定位这样一个事实可以期望的,链接表2111包括控制信息2113和链接信息2115。使用控制信息2113,将关键字进行翻译来确定跟随链接信息2115中的哪一个索引。控制信息2113和链接信息2115的准确特点由链接表2107所属于的翻译表2109的搜寻算法来决定。数据表项2119包括关键字2120和数据2121。当这个被翻译的关键字与关键字2120匹配时,然后项2119中的数据2121包括这个关键字的翻译,例如,VPI/VCI对的队列号码。
在一个优选实施方式中,一个翻译表209被一个搜寻算法号码2125所决定。这个搜寻算法号码标识一个数据结构2124,这个数据结构2124包括规定翻译 表部件表2106的虚拟表号码2127和规定翻译表209将使用的搜寻算法类型的一个算法标识2129。这个虚拟表号码通过一个号码来标识一个部件表2106,TLE301将这个号码分解为指向这个部件表的一个表指针2105。与目前信道处理器和构造处理器所使用的相比,使用虚拟表号码可以 在表存储器207中保存更多的部件表2106,并且允许简单地通过改变这个虚拟表号码所代表的表指针2105就可以将一个部件表2106切换到另一个部件表2106。例如,当信道处理器和构造处理器使用一给定的部件表时,执行处理器313可以建立一个新的部件表,然后,简单地通过发送带一个writereg命令2415的一个环型总线消息来用这个新的表替代给定表,这个writereg命令2415改变TLE 301中将虚拟表号码与表指针2105进行相关的寄存器中的表指针2105。
一给定翻译表209可以由多达4个部件表2106组成。其中一个部件表必须是一个数据表2117;其它的表是链接表2107。图21中所显示的翻译表209有两个部件表链接表2107和数据2117。部件表是由翻译表描述符2124中的虚拟表号码来标识的。
通过一个hash算法而实现的一个翻译可以用作一个翻译表209如何被用于将一个关键字翻译成数据的一个示例。hash算法是众所周知的。hash算法所做的就是将一长比特串映射到一较短的比特串。在这个情形下,长比特串是一个关键字,并且较短的比特串是一个表项的一个索引。hash算法可以被用于翻译表209仅包括数据表部件2117的情形。当建立这个数据表2117时,数据表项2119为其包括数据的一个关键字被进行hash,并且这个关键字的数据表项被产生在这个hash算法所产生的索引(i)位置上,如果这是可能的话,并且否则,在索引i后面第一个可用的位置上。被hash到索引i的一个关键字在下面将被称作关键字(i)。当关键字(i)被提供给hash算法时,hash算法返回数据索引2114(i)。与这个关键字相应的DTE 2119或者在索引2114(i),其这个情形下,就结束了搜寻,或者有一个hash碰撞,即,多于1个的关键字hash到相同的索引(i)。在这样一个情形下,数据表2117可以被建立以使其关键字hash到相同的索引(i)的DTE具有在2114(i)后面的索引,所以这个搜寻算法在索引2114(i)开始,并且将这个关键字与后面的数据表项2119中的关键字2120进行比较,直到它发现了其中关键字2120与这个关键字匹配的一个数据表项,或者直到它达到数据表2117的末尾而没有发现一个匹配,在这个情形下,它报告没有找到一个匹配的。如果需要更高的速度,对其索引2114产生碰撞的LTE建立一个链接表,并且在碰撞发生后,这个索引被应用到这个链接表。然后,这个链接表将给出与DTE中这个索引相应的项的索引。
表搜寻引擎301对环型总线消息作出响应,对搜寻表209执行搜寻和维护操作。表搜寻引擎301使用各种搜寻算法,包括hash算法,二进制树算法,和Patricia树算法,来进行搜寻。使用表项的搜寻和索引来实现表的维护。一般,规定表维护操作的消息来自执行处理器313。
环型总线消息图28在TLE 301和DCP203的其它部件之间的所有交互通信均是通过环型总线311上的消息来完成的;XP 313使用环型总线消息来建立和维护翻译表209,包处理器使用环型总线消息来将需要被翻译的项发送到TLE 301,并且TLE 301使用环型总线消息来返回翻译的结果。图28显示了一个优选实施方式中的环型总线消息。消息2801具有两个主要的部件,数据2817和控制2803。数据可以是64比特的任何类型数据。当一个环型总线消息被路由到TLE 301时,数据2817包括一个TLE命令。TLE 301执行这个命令,并且在被发送到TLE命令源的一个环型总线消息的数据2817中返回这个结果。控制2803具有下述字段§M字段2805是被硬件设置的,并且表示这个消息比64比特长,所以被包括在连续时隙的一系列消息中;§TY字段2807表示这个消息的类型;共有4个类型#没有占据这个环型总线时隙没有包括消息;#这个消息是一个指示;#这个消息是一个证实;#这个消息是一个请求;#这个消息是一个响应。
§LEN字段2809表示数据2817中这个消息的长度;§SEQ字段2811是可以被发送者所设置的一个序列号码,以使可以确定响应消息的顺序;§DEST字段2813表示环型总线311上、是这个消息的目的地的设备;和§SRC字段2815,表示是源的这个设备。
指示和证实消息类型简单地被用于确定连接到这个环型总线的设备的环型总线接口是否在工作;如果一个设备接收来自另一个设备的一个指示消息,它就向这个设备返回一个证实消息。在这个环型总线上的一个设备希望另一个设备为它执行一个操作时,它向另一个设备发送一个请求消息;当这另一个设备已经执行了这个操作时,它使用一个结果消息将这个所产生的结果发送回这个请求设备。
这样,使用一个表搜寻,希望执行表搜寻的信道处理器发送一个请求类型的请求消息,在这个请求消息中,这个信道处理器将自己规定为源,将TLE 301规定为目的地。数据2817包括这个操作的TLE命令,并且SEQ 2811可以被设置为允许信道处理器标识响应消息的一个值。TLE 301通过执行这个消息的TLE命令,并且将这个执行结果在一个响应消息中发送到信道处理器,来对这个请求消息作出响应。结果在数据2817中,TLE将自己规定为源,并且将信道处理器规定为目的地,SEQ 2811中的值与它在请求消息中的值相同。
图24是一个表搜寻操作命令列表,当表搜寻引擎301经过环型总线311接收这些命令时将对这些命令作出响应。每一个命令在这个表中具有一行;第一列规定这个命令的内容,第二列规定其ID号码,第三列规定它所返回的数据,第四列规定这个命令的影响。使用FindR命令2409来实现表搜寻;剩余的命令被用于建立和维护翻译表209,初始化表搜寻引擎301,并且测试TLE是否在进行工作。
根据命令如何定位表中的项和它们对所定位的项执行的操作,这些命令可以被进行进一步的划分。关键字命令2423使用关键字来对项进行定位§Find命令2405采用一个关键字和一个算法号码作为参数,使用这个翻译表209和算法号码所规定的搜寻算法来搜寻这个关键字所表示的数据表项2119,并且返回数据项2119的内容,或者返回一个错误,如果没有发现这个关键字的项;§FindW命令2407采用关键字,算法号码,需要被写入的数据,以及偏移和长度说明符作为参数;它使用这个关键字和算法来发现这个关键字的数据项2119,并且将这个长度所规定的数据长度写入到这个项中从这个偏移位置开始的项上;§FindR命令2409的参数与FindW命令2407的参数相同,但是从这个关键字的项2119中的偏移处读取数据长度并且返回这个数据。
索引命令2421和2425使用虚拟表号码和索引来定位部件表2106中的项。属于组2421的命令从命令中所规定的项读取数据并且将数据写入到这个命令中所规定的项;属于组2425的命令修改命令中所规定的项中的数据§Write命令2401具有规定一个部件表2106的一个虚拟表号码,规定部件表中一个项的一个索引,需要被写入的数据,规定需要被写入数据部分的一个掩码,写入开始的偏移,需要被进行写入的数据长度;它按照命令所规定的来进行数据写入§Read命令2403具有相同的参数,除了掩码不同外;它读取在规定表的规定项的规定位置处的数据,并且返回这个数据;§XOR命令2411使用命令中的数据对在规定表的规定项的规定位置处的数据执行一个XOR操作或者一个CRC操作;在执行CRC操作的情形下,它返回这个CRC。
§Add命令2423将命令中的数据加到在规定表的规定项的规定位置处的数据上。
寄存器命令2427读取(2417)和写入(2415)TLE 301中的寄存器;这些寄存器是用寄存器地址来规定的。这些命令被用于使用定位翻译表,部件表2106,和搜寻算法的代码所需要的信息来对TLE 301进行初始化,并且被用于简单地将上下文信息写入到TLE 301或者从TLE 301中读取上下文信息。
Echo命令2419简单地将命令中的数据返回到发送者;它被用于检查环型总线311和所连接设备的环型总线接口是否工作正确。Nop命令2420是执行时不做任何处理的命令。
TLE 301执行下述基本循环1从环型总线读取一个命令;
2执行这个命令;和3经过这个环型总线返回结果。
在命令是对一个表进行操作时,执行这个命令的步骤包括步骤a)决定表项的索引;和b)对表项中规定位置上的数据执行所指示的操作。
对包括关键字的命令,确定表项索引的步骤包括步骤ⅰ.将这个关键字翻译为一第一索引值;ⅱ.拾取被保存在这个索引值所规定的翻译表项中的关键字;ⅲ.如果这个关键字和被拾取的关键字匹配,就转到步骤V;ⅳ.如果它们不匹配,根据这个搜寻算法计算一个新的索引;转到步骤ⅱ;和v.对被保存在这个索引值所规定的表项中的数据执行操作。
图22显示了表搜寻引擎301的内部结构。被发送到表搜寻引擎301的一个环型总线消息在环型总线节点2201中被接收;在这个消息中的命令被命令处理器2203和表搜寻引擎301中的其它部件所处理。进行这个处理所需要的信息被保存在寄存器存储器2205中,并且这个算法所需要的程序被保存在控制存储器2215中。
图23显示了寄存器存储器2205和控制存储器2215的细节。为了本发明的讨论方便,寄存器存储器2205中有4类感兴趣的寄存器算法配置寄存器2301,表配置寄存器2311,虚拟表配置寄存器2341,和消息上下文寄存器2319。算法配置寄存器2301将命令中所使用的算法号码与表209和控制存储器215中的hash代码2323相关。对目前被TLE 301所使用的每一个表207,均有一个算法配置寄存器(ACR)2301,并且ACR 2301(i)的索引是其算法号码3125。图23中显示了一单个ACR 2301(i)。一给定ACR 2301包括组成表207的部件表的虚拟表号码。LVT1 2325是第一索引表的虚拟表号码;LVT22327是第二索引表的虚拟表号码;LVT3 2329是第三索引表的虚拟表号码;最后,DVT 2333是数据表的虚拟表号码。HASHF#2331是在搜寻虚拟表中被使用的hash功能的号码。
部件表配置寄存器2311描述了SRAM 207中的部件表2106。每一个部件表2106均具有一个CTCR 2311(i),并且表的CTCR 2311的索引是表的物理表号码2343。每一个CTCR 2335表示其表的类型2335,表项的尺寸2337,和表在SRAM 207中的开始的偏移2339。最后,VTCR 2341描述了目前在使用的虚拟表。每一个虚拟表号码2127有一个VTCR 2341,并且一给定虚拟表号码的VTCR 2341(i)包括目前被VTCR 2341(i)的VT#2127所规定的部件表的物理表号码2323。为了切换一给定VT#2127所表示的部件表,所需要的仅仅是改变VTCR 2341中与VT#2127相应的PT#2323。
消息上下文寄存器2319包括与目前被表搜寻引擎301所处理的一个环型总线消息相关的数据。有4个这样的消息上下文寄存器;这样,TLE 301可以同时处理4个环型总线消息;等待消息可以被保存在输入FIFO 2202或者被保存在环型总线311本身上。仅一个消息上下文寄存器,消息上下文寄存器2319(k)被显示在图23中。每一个消息上下文寄存器2319在其中包括3个类型的数据来自环型总线消息的消息信息2321,在表搜寻引擎301中处理环型总线消息期间被产生和使用的处理信息2327,和包括处理的目前结果的结果2329。当完成了处理时,这个结果将在一个环型总线消息中被返回给被处理的这个消息的源。消息信息2321包括命令的类型,这个命令所发送的信息,是这个环型总线消息的源的处理器,和这个消息的一个序列号。处理信息2327包括算法代码2323中的一个程序计数器,这个搜寻将检索的最后链接表项2111的内容,和将被拾取的下一个链接表项2111在SRAM 207中的地址。结果2329包括从执行这个命令而产生的信息。在一个FindR命令的情形下,这个结果将包括这个命令规定的、从与这个关键字相关的数据表项2119中读取的数据或者如果没有发现这个关键字的数据表项2119就是一个空值。
返回到图22,部件2203,2207,2213,2209,2211,和2219是通过能够访问控制存储器2215和寄存器存储器2205的处理部件来实现的。部件2209能够经过SRAM存储器控制器2217执行对表存储器207的读取操作,部件2219能够经过SRAM存储器控制器2217执行对表存储器207的读取和阅读操作。当发送到TLE 301的一个消息出现在环型总线311时,环型总线节点2201将这个消息放置在输入FIFO2202的末尾;命令处理器2203读取FIFO 2202的头部。命令处理器2203将来自这个消息的信息保存在一组消息上下文寄存器2319(i)中。然后,这组消息上下文寄存器2319(i)被其它部件所使用,当它们执行这个消息的命令时。
部件的功能如下§初始的索引产生器2207从一组上下文寄存器2319(k)中的一个关键字产生一个部件表的一个初始索引;§地址产生部件2209从这个索引产生这个部件表项的地址,并且从这个部件表项拾取一个关键字;§比较和寄存器拾取部件2211拾取被保存在这组上下文寄存器2319(k)中的关键字;§SRAM数据寄存器2219比较这个被拾取的关键字和被保存的关键字,并且根据这个比较来判断是否已经发现了被保存关键字的数据表项2119。如果已经发现了被保存关键字的数据表项2119,SRAM数据寄存器2219拾取这个数据表项,并且将带这个数据表项的内容的一个环型总线消息发送到输出FIFO 2221;否则,SRAM数据寄存器2219拾取这个链接表项,并且将它放置在上下文寄存器2319(k)中,并且在索引产生2213中继续进行处理;§索引产生部件2213使用被保存的关键字和被拾取的链接表项来产生下一个表索引2111(1)的索引,并且将这个索引放置在上下文寄存器2319(k)中;然后,地址产生部件2219使用这个索引来产生下一个表项的地址。
用包括一个findR命令2409的一个环型总线消息作为一个示例,并且假定命令中的alg#规定了一个hash算法,一旦命令处理器2203已经在上下文寄存器2319(k)中为这个消息建立了消息信息2321,初始的索引产生器2207使用从这个命令中来的关键字执行这个hash算法,以获得值I。地址产生2209使用I来计算数据表项2119(I)的地址,并且SRAM数据寄存器2219拾取项2119(I)。如果其关键字字段2120包括关键字,就完成了这个搜寻,并且SRAM数据寄存器2219产生在数据字段2121中包括数据的一个环型总线响应消息。否则,索引产生2213就将DIX 2114增加1,地址产生2208增加下一个DTE2 119的地址,如上面所描述地,这下一个DTE 2119的地址被拾取,并且被进行测试。以这个方法继续进行执行,直到其关键字字段2120与关键字匹配的一个DTE 2119被发现或者已经达到了数据表的末尾。
表搜寻引擎301的其它使用如XOR 2411和增加2413命令的出现可以很清楚地看出,TLE 301除了可以维护表并且在表中搜寻信息外,还可以做更多的功能。因为每一个包处理器能够以一个固定的最大延迟来对TLE 301进行访问,TLE 301和翻译表存储器207一般可以被用于保存和处理与一个包处理器所正在处理的输入包流相关的上下文信息,这样,来克服一个包处理器仅具有数量相对较少的DMEM 405所带来的限制。完成地址翻译所需要的信息是这样一个上下文信息的示例。另一个是检测一个包的正确性所需要的信息,其中这个包正在被作为另一个包的负荷而承载。
包中的正确性检测是通过在包末尾的一个循环冗余校验代码(CRC)来实现的。当产生这个包时,就从这个包的内容计算出CRC,当这个包到达其目的地时,就重新计算CRC并且将这个CRC与包中所包括的CRC进行比较。如果它们是相同的,这个包无错误地到达的可能性就很高;如果它们是不同的,这个包已经被破坏的可能性是同样地高。在后面的情形下,这个包被丢弃,并且一个消息被发送到这个发送者以请求重新发送这个包。一个SDP 420必须能够计算一个包的CRC,以校验一个输入包的CRC和向一个输出包提供CRC。当一个包在被接收或者输出时,有许多已知的算法可以计算飞行的CRC。
从前面可以很清楚地看出,在SDP 420中计算CRC需要与一个包相关的CRC信息在这个包通过SDP 420的整个时间期间内均被保持。在其CRC需要被计算的包是作为传送层包中负荷的高层包,并且承载属于不同高层包的负荷的传送层包在SDP 420所接收的包流和/或者从SDP 420所发送的包流中被进行交织的情形下,这个问题就变得更复杂了。在这样一个情形下,一个独立的CRC计算必须对每一个高层包进行。
在DCP IC 203中,通过使用TLE来处理和保存中间结果,解决了计算CRC的问题。当其CRC正在被计算的一个高层包的每一个部分通过这个SDP时,CPRC 401收集计算高层包的这个部分的中间CRC所需要的信息,并且向TLE 301发送带这个信息和规定这个信息如何被应用到这个高层包前一个中间CRC的一个命令的一个环型总线消息。当高层包的最后一个部分通过时,带这个信息的最后一个环型总线消息被发送,并且TLE 301执行这个命令来完成CRC计算。然后,CPRC 401发送读取这个结果的一个读取命令2403,并将TLE 301在这个环型总线消息中发送的、被返回的结果与这个包末尾的结果进行比较,来确定这个包是否已经被破坏了。
TLE 301可以被用于保存包流上下文的另一个区域是业务统计。这些统计可以响应从包处理器来的环型总线消息在TLE 301中被累加,然后,可以被执行处理器313所读取,并且或者被执行处理器313或者一个主机处理器227使用来按照DCP 203所属网络的当前业务状态的需要来配置DCP 203。
队列管理引擎305的细节队列管理引擎305按照包处理器所规定的将描述符217在队列215中进行排队,并且又按照包处理器所规定的从队列中取出描述符。当一个包处理器独自工作时,这个包处理器典型地在多于一个的队列中对描述符进行排队,但是仅从单个队列中取出描述符。当包处理器被进行组合时,所有组合包处理器一般从一单个队列中进行读取。QME305进一步提供与独立的排队和从队列中进行取出的操作相关的状态信息和将队列自己与包处理器相关的信息。QME 305既不读取它进行排队的描述符,也不决定下面一给定包处理器将从哪一个队列中进行读取。队列被完全保存在DCP 203中,可以被保存在那里和/或者在一个外部队列存储器213中,或者可以被保存在一个外部排队和规划单元中被被这个外部排队和规划单元所管理。在后面的情形下,QME 305采用一个命令接口来将排队命令和出列命令从包处理器传递到这个外部排队和规划单元,并且将命令的结果和状态信息传递回给包处理器。在这个情形下,队列被安排的方式当然完全是取决于这个外部排队和规划单元。
这里应指出的是,一个描述符的内容完全被向QME 305提供描述符以进行排队的包处理器所决定,并且描述符的内容被解释的方式也完全被从队列中取出描述符的包处理器所决定。这样,QME 305是在包处理器之间有顺序地通过消息的一个一般系统,包处理器属于DCP203是其中一个部件的交换系统,并且这个一般系统被用于在包处理器和外部排队和规划单元之间传递信息。
包处理器的QME接口图29图29显示了一个信道处理器307(i)的QME接口2901,但是其它包处理器具有相同的接口,除了构造处理器303具有其自己到QME305的专用连接。从QME 305中的接口部分开始,QME 305的局部存储器当然是全局地址空间321的部分,并且因此可以被CP 307(i)所访问。包括在QME 305的局部存储器中的是队列状态信息2902。如后面将更详细描述地,队列状态信息2902允许信道处理器307(i)决定它可以从QME 305中的哪一个队列中可以取出描述符并且决定这些队列的条件。信道处理器307(i)中的CPRC 401这样可以访问QSI 2901来决定下面它将从哪一个队列中取出一个描述符。在QME 305中,对每一个包处理器均有一个队列邮箱2903。为了进行排队或者从一个队列中取出一个描述符,CP 307(i)经过负荷总线317向CP307(i)的QMB 203发送一个队列命令2913。对一个出列命令作出响应,QME 305经过负荷总线317向CP 307(i)返回一个从队列中进行取出的消息2907。从队列中进行取出的消息2907包括被从队列中取出的描述符和关于这个描述符所表示的协议数据单元的信息,并且包括从这个队列中取出描述符的队列的条件。QME 305进一步使用全局总线319中多余的周期来向独立的包处理器发送关于被这个包处理器所进行服务的队列的队列状态报告(BQSR)2915。这些报告表示这个包处理器所服务的哪一个队列已经变空了,并且哪一个队列已经不是空的了。它们作为在这个包处理器的局部地址空间中队列状态寄存器601中被接收的队列状态报告(RQSR)2915。最后,在CP 307(i)中有一个队列操作状态寄存器,它包括表示QME 305从CP 307(i)所接收的最后队列命令的执行状态的两个比特。其4个可能的状态是§成功地完成和/或者空闲§没有成功完成§忙,正在等待执行命令§忙,命令正在被QME执行假定CP 307(i)正在接收和发送包,典型地,它将如下采用接口,在已经获得了产生和对一个接收包的描述符进行排队所需要的信息后,CP 307(i)建立一个写控制模块610来向CP 307(i)的QMB 2903(i)发送一个排队命令,检查QOS 2911来确保这个邮箱不处于忙的状态,并且启动发送这个排队命令的DMA。在这样对描述符进行排队时,CP 307(i)周期性地检查RQSR 2915来决定它正在从其中发送包的任何一个队列是否已经变为非空。如果队列中的一个已经变为非空,CP 307(i)以刚才对排队命令所描述的方法,来发送一个出列命令。QME 305使用DEQM 2907对这个出列命令作出响应,并且CP 307(i)可以使用被包括在DEQM 2907中的这个描述符来发送它所表示的包。CP 307(i)可以使用被包括在DEQM 2907中的其它信息来规划这个描述符所表示的包的发送,或者来更新它自己关于队列状态的拷贝。这里,应注意的是,CP 307(i)可以完成上面所描述的任何事情,而不需要访问全局地址空间321中QME 305的部分并且因此去增加全局总线319的负担。当然,如果CP 307(i)需要更多的关于它对其进行写入或者从其中进行读取的队列状态的信息,它就可以访问QSI 2902。
队列命令2913的细节图30在一个优选实施方式中,一个包处理器可以命令QME 305来执行4个操作§队列配置;§在一个队列上对一个描述符进行排队;§从一个队列中取出一个描述符;和§在一些队列上对一个描述符进行排队。
这些操作的命令被经过负荷总线317发送到QME 305;在负荷总线317上的一个处理(transaction)包括两个部分一个地址和数据。对涉及单个队列的队列命令,这个地址被用于规定操作和这个队列,如在3001所显示的。计数字段(CNT)3003,处理号码(T#)3005,和池标识(PI)3007对所有负荷总线地址是共同的;CNT 3003规定了在这个处理中正在被读取或者写入的16-比特量的数目;T#3005区分从相同源到一给定目的地的多个处理;PI 3007规定目的地,或者BME 315中的一个缓冲器池或者为被BME 315所执行的缓冲器标记操作和为QME 305所执行的队列操作预留的池数目。在其PI 3007规定了QME 3005的地址中,这个地址进一步包括一个操作标识3009,这个操作标识3009规定了上述操作中的一个,并且对涉及一单个队列的操作,这个地址包括队列号码3011。
这个命令的数据部分的内容随命令而改变。对配置队列命令,数据3013在3015规定了在这个地址的3011所规定的队列可能包括的描述符217的最大数目,在3017规定了要从其中拾取描述符的、QME 305中的描述符池,和3019表示描述符允许,描述符允许3019规定了可以被允许的描述符217的数目,但是不是实际在队列中使用的描述符217的数目。这个配置队列命令允许这个包处理器读取一给定队列来动态地改变被分配到这个队列的资源数目,当条件改变时。例如,如果在被正在从这个队列进行发送的信道处理器服务的输出端口上有一个突发业务,这个信道处理器307可以使用这个配置队列命令来增加这个队列的最大描述符数目和/或者描述符允许,并且当突发过去时,这个信道处理器307可以减少这个队列的最大描述符数目和/或者描述符允许。
对单播排队命令,有两个字的数据3021。第一个包括描述符权重3023,描述符权重3023规定了正在被排队的描述符所表示的DRAM229中的数据量。第二个包括将在3011所规定的队列中进行排队的描述符217。对这个出列命令,也有两个字的数据3025。第一个字包括正在被从队列中进行取出的描述符的描述符权重3023,是仍然在队列中的描述符的总权重的队列权重3027,和是仍然被保留在队列中描述符数目的队列长度3029。第二个字包括已经从在3011所规定的队列中进行取出的描述符217。接收这个被从队列中取出的描述符的包处理器可以使用第一个词中的信息,来决定下面它将向它正在从其中进行发送的哪一个队列发送一个出列命令,或者发送一个配置队列命令来改变一个队列可以使用的资源数目。
其地址部分被显示在3031、其数据部分被显示在3035中的多播排队命令对将被多于一个包处理器发送的一个描述符进行排队。在地址部分3031和地址部分3001之间的唯一差异是它包括队列级别(QLEV)字段3033而不是队列号码字段3011。队列级别字段3033规定了将接收这个描述符的队列的一个最小服务或者优先级程度。这个命令的数据部分3035在其第一个字中包括指出哪一个包处理器将输出这个队列的一个多播矢量(MCV)3037。另外包括在第一个字中的是这个描述符217的描述符权重3023,描述符217是在第二个字中。如这个命令中的数据所指出的,这个多播排队命令规定了包处理器和服务级别而不是具体的队列,并且QME 305在被具有至少最低服务级别的所规定包处理器进行服务的队列中对描述符217进行排队。这个描述符实际上没有被拷贝到所有队列,如下面将详细描述的。向QME305发送一个多播排队命令的、正在进行接收的包处理器也向BME 315发送一个命令,这个命令设置在多播排队命令的描述符中所规定的BT233的一个计数器;每一次一个正在发送的包处理器接收到已经被进行多播(在描述符中被指出)排队的一个描述符并且发送由描述符的BT 233所规定的PDU时,这个正在发送的包处理器向BME 315发送一个命令,以将BT 233的计数器减1。
队列数据结构的细节图31和32图31和32显示了在一个优选实施方式中,在缓冲器管理引擎305中实现队列215的数据结构的细节。与DCP 203正在被采用的这个特定情形所需要的队列的数目和尺寸相关,这个数据结构可以都在DCP203内部的存储器中,这个队列控制数据结构可以在DCP 203内部的存储器中,并且队列自己可以是在队列存储器213中,或者所有队列数据结构均在队列存储器213中。
这些队列215是描述符记录3111的被链接列表。所有描述符记录3111的尺寸均是相同的,但是这个尺寸可以在系统进行初始化后的参数所设置。这些描述符记录被保存在一些描述符池3109(0…q)中,池的尺寸和数目是由QME 305可以获得的存储器数量来决定的。属于一给定队列的描述符记录3111必须都是来自一单个描述符池3109(i)。每一个描述符记录3111包括至少下述字段§使用计数(IUC)3139,它指出描述符目前正在其上进行排队的队列的数目;和§下一个指针(NPTR)3115,它指向队列中下一个缓冲器记录。
在这个描述符正在被用于将关于一个缓冲器231的信息从一个接收包处理器传递到一个发送包处理器的情形下,描述符记录3111也包括下述字段§描述符权重(DW)3137,它指出描述符的缓冲器标记233所表示的缓冲器的大小;和
§缓冲器标记(BT)233,SDRAM 229中这个描述符所表示的缓冲器的缓冲器标记;和否则,描述符217的内容并且由此描述符记录3111的内容由作为这个描述符的源的这个包处理器来决定。例如,如果这个源包处理器正在处理其中这些包的最终目的地是一些以太网节点的一个流中的包,并且这个目的地包处理器是向这些以太网节点所属的一个LAN输出包的一个发送包处理器,描述符217将包括从这个缓冲器标记233所规定的缓冲器内容而产生的包的以太网地址。图31中也显示了一个多播列表记录(MCLR)3123的一个池3121。如后面将详细描述地,这些记录在多播中被使用。
每一个队列215被队列列表3101中的一个队列记录3103所表示。队列列表3101在全局地址空间321的缓冲器管理引擎305的部分中,并且因此可以被包处理器所读取。这个队列的队列号码3105是其队列记录3103在列表3101中的索引。队列列表3101被划分为部分3107,每一个部分3107是用于发送包的每一个包处理器的。一给定包处理器的所有队列被列表3101的包处理器部分3107中一连续队列记录组所表示。在全局地址空间321的QME 305部分中的配置信息包括队列列表3101的每一个包处理器部分的基地址3108和这个包处理器正在读取的队列数目;所以,一个包处理器可以确定哪一个队列正在被哪一个包处理器所服务,并且给定一个队列号码,就可以发现这个队列记录3103。队列列表3101进一步被QME 305所使用,来确定一给定包处理器接收关于哪一个队列的广播队列状态报告2915。
每一个队列记录3103包括下述字段§头指针(HDPTR)3113,它指向目前正位于记录队列的头部的描述符记录3111;§末尾指针(TPTR)23113,它指向目前正位于记录队列的末尾的描述符记录3111;§队列长度(QL)3129,它是目前在记录队列中的描述符记录3111的数目;§总描述符权重(TDW)3131,它是记录队列中所有描述符记录的DW字段3137中值的和;§被分配的描述符允许(ADA)3133,它是比那些比实际在队列中的描述符多的、并且可以被分配到队列中的描述符的数目;和§队列长度限制(QLL)3135,它规定了这个队列的最大允许长度。
应注意,ADA 3133和QLL 3135,与将是队列描述符的源的池3809一起,被这个配置队列命令所设置。
图31中显示了一单个队列215(0)。队列215(0)包括描述符记录3111(i…k),其中描述符记录3111(i)在这个队列的头部,并且所以被QR 3103(0)中的HDPTR 3113所指向,描述符记录3111(k)在这个队列的末尾,并且所以被QR 3103(0)的TPTR 3117所指向。在描述符记录3111(k)的后面是一个被分配描述符记录3111(q…t)的一个链接列表3119。这些描述符记录已经被分配到队列215(0),但是还不是这个队列215(0)的部分,因为它们在队列215(0)末尾的后面。ADA字段3133决定了可以在链接列表3119中的描述符记录的最大数目。
当通过一个配置队列命令来对一个队列215(i)进行初始化时,QME 305建立被分配描述符记录3111的一个链接列表3119,并且设置队列记录3103(i),以使头部指针3113和末尾指针3117指向链接列表3119中的第一个描述符记录3111,并且QL字段3129被设置为0。当QME 305执行这个操作时,它设置QOS寄存器2911以指出其状态。
当在一个包处理器的队列邮箱2903中接收到一个排队命令时,QME 305拾取这个命令中的描述符217,将这个描述符217写入到属于这个命令所规定的队列的列表3119中的第一个描述符记录3111,将QL 3129增加1,并且更新TPTR 3117来使TPTR 3117指向描述符记录3111被写入到其中的描述符记录3111。如果在链接列表3119中没有描述符记录3111,QME 305将ADA 3133中所规定的数目添加到这个列表中。另外,QME 305使用QOS寄存器2911来指出这个操作的状态。如果这个队列215的队列长度在描述符217被进行排队以前是0,QME 305向这个队列的包处理器发送一个广播通知2905,以指出这个队列现在不为空。
当接收到一个出列命令时,QME 305使用头部指针3113来定位在这个队列头部中的描述符记录3111,从这个描述符记录3111中读取描述符217,更新头部指针3113以使头部指针3113指向这个队列中下一个描述符记录3111,并且如果列表3119中有比ADA字段3113所允许数目少的描述符记录3111,就将前面的头部描述符记录3111添加到列表3119中。另外,QOS寄存器2911指出这个操作的状态。描述符217在这个命令的返回数据中被返回。如果这个被从队列中取出的描述符是这个队列中的最后一个描述符,QME 305就发送一个BQSR2905,以表示这个队列现在是空的。
多播排队和从队列中进行取出图32和33如上面在队列命令的讨论中所指出的,多播排队命令允许一个包处理器对可以被不止一个的发送包处理器所使用的一个描述符进行排队。图32显示了在一个优选实施方式中是如何实现多播排队的。除了在队列列表3101上的队列外,队列管理引擎305维持一单个多播列表3201。QME 305将在一个多播排队命令中所接收的一个描述符215放置在多播列表3201中的一个描述符记录3111中,并且这个描述符保持在多播列表3201中,直到将发送这个描述符所表示的协议数据单元的所有包处理器已经发送了这个协议数据单元。
继续多播列表3201的细节,多播列表3201被指向列表3201中的第一个DR 3111(g)的一个多播列表记录3203所表示。列表3201中、表示一个描述符215的任何DR 3111将具有与其相关的一个或者多个多播列表记录3123,包处理器仍然必须发送这个描述符215的协议数据单元。与DR 3111相关的这个多播列表记录3123保存一个指针列表3209;这些指针包括指向多播列表3201中下一个DR 3111的一个指针和指向单播队列中DR 3111的一些指针。
在图32中,详细地显示了DR 3111(h)的指针。DR 3111(h)中的描述符215被一个多播排队命令进行排队,这个多播排队命令的结果是这个描述符215被在单播队列215(i)和215(j)中进行排队。这样,在队列215(i)中DR 3111(a)中的NXTPTR 3115指向多播列表3201中的DR 3111(h),与在队列215(j)中DR 3111(k)中的NXTPTR 3115的指向一样。DR 3111(h)的NXTPTR 3115指向MCLR 3123(r),MCLR 3123(r)是与DR 3111(h)相关的第一个MCLR。MCLR 3123(r)有3个指针一个指针,指针3211,指向多播列表3201中的下一个DR 3111;另一个指针,指针3212,指向在队列215(i)中DR 3111(h)后的DR;第三个指针,指针3213,指向MCLR 3123(s),MCLR 3123(s)有第四个指向DR 3111(l)的指针3214,DR 3111(h)是在队列215(j)中DR 3111(h)后的DR。
图33中显示了MCLR 3123的细节。每一个MCLR 3123具有两个队列指针3301,两个队列指针3301中的每一个规定了一个队列号码(3203)和指向这个队列号码3203所规定的队列中的下一个DR 3111(h)的一个下一个指针(NPTR)3205和一个下一个MCLR指针(NXTMCLR) 3213,这下一个MCLR指针(NXTMCLR) 3213指向与这个DR 3111相关的下一个MCLR。在与多播列表3201中的一给定DR 3111相关的第一个MCLR中,第一个QPTR 3301指向这个多播列表中的下一个DR 3111。
如从前面的讨论中可以看出的,简单地通过使每一个队列215中的前一个DR 3111指向DR 3111(h)并且包括指向与DR 3111(h)相关的MCLR 3123中的每一个队列中后面的DR 3111的一个指针,就可以将DR 3111(h)变为任何数目单播队列215中的一个DR。这样,这个多播排队操作就是将正在被排队的描述符217的一个DR 3111添加到列表3201,决定这个描述符217需要在哪一个单播队列215中进行排队,如单播队列215所需要的添加MCLR 3123,如图32所显示的在单播队列中设置在前一个DR 3111中的指针,设置这个单播队列215中的末尾指针以使这个末尾指针指向多播列表中的这个DR3111,并且设置在使用计数3139来指出描述符217已经被在其中进行排队的单播队列的总数目,的这样一个事情。当一个单播队列对在多播队列中DR 3111后面的DR 3111进行排队时,它设置在MCLR 3123中其QPTR 3301中的NPTR 3205来指向这个新添加的DR 3111。下面将更详细地说明QME 305如何决定这个描述符将在哪一个单播队列中进行排队。
对多播列表3201上的一个DR 3111进行从队列中进行取出的操作按照如下来工作只要在使用计数比1大,这个从队列中进行取出的操作将按照与对不在多播列表3201上的一个DR 3111所描述的方法相同的方法来工作,除了每一个从队列中进行取出的操作将在使用计数减1并且在新末尾DR 3111中的NPTR 3115被从单播队列的QPTR3301中的NPTR 3205所设置外。当DR 3111中的在使用计数是1时,这个从队列中进行取出的操作另外将设置这个DR 3111的在使用计数为0,并且设置其NPTR 3115指向多播列表中的下一个DR 3111,并且将其MCLR 3123返回给一个自由列表。
在多播排队中选择单播队列将回忆起,这个多播排队命令不规定这个描述符将在其中进行排队的队列,而是规定了发送包处理器(MCV字段3037)和一个队列或者服务级别(QLEV 3033)。一给定队列或者服务级别的意义完全是由读取这个队列的这个包处理器被编程的方式所决定的。在执行多播排队命令中,QME 305必须将这个信息翻译成一个单播队列号码。这是通过队列号码映射表(QNMT)3303来完成的,如图33所显示的。
作为一个发送包处理器如何使用这个队列或者服务级别的一个简单示例,如果这个服务级别简单地反映了队列中的优先级,并且较大的号码表示较高的优先级,然后,这个发送包处理器将不会向一给定优先级的队列提供服务,只要在高优先级的队列中存在一个非空的队列。
队列号码映射表3303具有针对每一个包处理器的一个部分3307。这些部分是根据包处理器号码的顺序来进行排序的。每一个部分3307具有每一个服务级别的一个项(QNMTE)3305。在一个优选实施方式中,有8个服务级别。包处理器0的一个示例部分3307被显示在图33中,在图33中,假定包处理器0使用一个简单的优先级系统,在这个简单的优先级系统中,较高的服务级别表示较高的优先级,并且包处理器0具有服务级别为0,3和4的队列。其中包处理器0没有队列的一个服务级别的一个项33305的值是0;包处理器0有队列的一个服务级别的一个项33305的值包括QROFF和具有这个项服务级别的包处理器队列的数目,QROFF是这个服务级别的队列的队列记录块3103在队列列表3101中的偏移。
QNMTE 3305被包处理器号码和排队级别号码来服务,如3309所显示的。这样,如果地址3309规定了包处理器号码0和排队级别3,这个地址所定位的项3305就是3305(0,3)。使用在项3305(0,3)中所规定的QROFF,QME 305可以发现这个包处理器和排队级别的第一个队列记录3103;它可以选择使用这个队列,或者它可以选择具有这个排队级别的队列的另一个队列记录3103所规定的一个队列。如果地址3309规定了具有一个0值的一个QNMTE 3305,表示这个包处理器没有这个排队级别的队列,QME 305就移动部分3307,直到它发现一更高排队级别的一个QNMTE 3305并且如刚才所描述地选择了这个排队级别的一个队列。
使用QME 305的队列管理图34如前面所提到的,QME 305所管理的队列215可以被完全包括在DCP IC 203的QME 305存储器中,可以被包括在一个扩展的队列存储器213中,或者可以对来自QME 305的命令作出响应而被一个外部的排队和规划单元所管理。图34给出了具有和不具有外部规划单元的结构示例。在这些图中,描述符217的流是用实的、粗浅灰色箭头表示;协议数据单元流是用虚的、黑灰色箭头表示。
3401显示了一个独立的DCP 203,其中队列被包括在直接被QMU305所管理的存储器中;3403显示了一个独立的DCP,其中已经被添加了一个外部排队和规定单元3405;在这样的结构中,这个外部排队和规定单元处理这样的事情,例如一给定包处理器的队列数目,这些队列的级别,和多播。具有一个外部排队和规定单元的QME305,QME305在DCP 203中仅有其自己的存储器;在这个存储器中,有将被发送到外部单元3405和每一个发送包处理器的队列的描述符217的一单个队列,这每一个发送包处理器接收从外部单元3405被发送到QME305以被发送包处理器所发送的描述符217。这些队列的功能是在这个包处理器和外部排队与规划单元之间提供一个缓冲器。
3407显示了一个结构,其中两个DCP 203(0和1)被一个交换构造222所连接,并且这两个DCP 203的队列管理是被DCP203(1)中的QME 305(1)所完成的。QME 305(0)简单地发送关于需要在被构造处理器303(0)进行读取的一个队列上进行排队的描述符217的排队命令,构造处理器303(0)经过交换构造222向构造处理器303(1)发送命令。然后,QME 305(1)在这个命令中所指出的队列215上对描述符进行排队。这个队列215可以是被DCP 203(0)或者DCP203(1)中的一个发送包处理器所读取的一个队列。关于被DCP 203(0)中的包处理器所读取的队列的队列状态信息被从QME 305(1)经过构造处理器303(1),交换构造222,和构造处理器303(0)发送到QME 305(0),然后,QME 305(0)设置接收者的QOS寄存器2911或者如环境所需要的向这个接收者发送一个广播队列状态报告2915。对出列命令,如刚才所描述地这个命令被传递到QME 305(1),并且对这个命令作出响应而被从队列中进行取出的这个描述符,如对状态信息所描述的,被发送回QME 305(0),并且被从QME 305(0)发送到这个发送包处理器。
当在一个DCP 203中的一个包处理器所接收的一个协议数据单元需要被从另一个DCP中的一个发送包处理器进行发送时,在这个发送包处理器所属的DCP中的BME 315通过经过这个构造处理器将这个缓冲器标记转发到这个进行接收的包处理器的缓冲器管理引擎,来对这个发送包处理器发送这个协议数据单元的请求作出响应,这个进行接收的包处理器的缓冲器管理引擎通过经过构造处理器向这个在进行发送的包处理器的缓冲器管理引擎提供协议数据单元,来对这个缓冲器标记作出响应,然后,这个在进行发送的包处理器的缓冲器管理引擎将这个协议数据单元提供到这个发送包处理器。
3409显示了与3407类似的一个结构,除了这些队列是在被QME305(1)所管理的一个外部排队与规划单元3411中外。队列命令,状态信息,和描述符被如刚才所描述地在DCP 203(0)和DCP 203(1)之间进行传递,除了QME 305(1)然后将这些命令传递到这个外部排队与规划单元3411并且从这个外部排队与规划单元3411接收状态和描述符外。3413显示了带直接向QME 305(0)和QME 305(1)提供服务的一个外部排队与规划单元3415的一个结构。操作如上面所描述的,除了任一个QME 305可以为自己或者作为另一个QME 305的一个代理来处理外部单元3415外。
QME 305的外部接口图35在一个优选实施方式中,QME 305具有一个55-管脚的外部接口,这个外部接口可能被与一个外部同步SRAM存储器组或者与一个排队与规划单元一起使用,如上面所描述的。图35显示了这个外部接口在每一个情形下是如何被使用的。3501显示了这个存储器外部接口。有32个双向数据线3503,20个单向地址线3505,和4或者5个控制线3506。使用普通的方法来写入到存储器组或者从存储器组进行读取。
3507显示了这55个管脚外部接口是如何被与一个排队与规划单元3508一起使用的。另外,这里有32个双向数据线3509,16个双向命令线3511,和8个控制线3513。就这个接口来说,QME 305是主控,规划器3508是从部件。规划器3508或者QME 305可以向另一个发送消息,但是一个消息被发送的方向是由QME 305决定的。消息的传送是流控制的,即规划器3508和QME 305每一个均向另一个指出它是否可以接收消息和接收什么样的消息,并且这个发送者可能不能够发送,除非这个接收器能够接收这个消息。QME 305也是这个接口的时钟信号源。
有4个可能的消息尺寸§12字节,其中4个是命令,8个是数据,在2个时钟周期内被发送;§24字节,其中8个是命令,16个是数据,在4个时钟周期内被发送;§36字节,其中12个是命令,24个是数据,在6个时钟周期内被发送;和§48字节,其中16个是命令,24个是数据,在8个时钟周期内被发送。
这个消息的尺寸是在DCP 203被初始化时被决定的。当然这个消息的内容是通过QME 305和规划器3508之间的交互通信来决定的,但是对大多数部分来说,它们将包括将在被规划器3508所管理的队列上进行排队的、或者从被规划器3508所管理的队列中取出来的描述符217。
当QME 305被用作所有发送包处理器的一个代理,并且这些包处理器中的每一个可能或者不可能在一给定时刻从规划器3508接收一个描述符时,流控制就变得有些复杂了。在一个优选实施方式中,这个包处理器可能有多达25个队列一个是用于执行处理器313,一个是用于16个信道处理器317中的每一个,8个是用于构造处理器303。构造处理器303具有8个队列,因为它必须对所有经过交换构造222的通信进行负责,并且如上面可以看出的,这样的通信包括系统控制信息和协议数据单元。另外,需要不同类型帧的设备可能被一单个构造处理器所连接。
当与一个外部规划器3508一起使用时,QME 305具有一单个接收器队列(RQ) 3519,QME 305将它从这个接收包处理器所接收的所有描述符217均放置在单个接收器队列(RQ) 3519中,直到这些描述符能够被输出到规划器3508以进行排队和每一个发送包处理器的一个发送队列(TQ) 3521。当一个发送包处理器的一个TQ 3521是满的时,QME 305就不能够为这个发送包处理器的这个队列接收更多的描述符217。
因为仅有一单个输出队列,将消息路由到规划器3506的流控制是简单的当这个规划器能够接收一个消息时,这个规划器在控制3513中激发一个信号,并且规划器流控制寄存器3517表示这个信号的状态,所以QME 305仅需要等待发送下一个消息,直到控制寄存器3517这样指示。将消息路由到QME 305的流控制是通过规划器3508中的DCP流控制寄存器3515完成的,规划器3508中的DCP流控制寄存器3515包括25个流控制比特,一个比特是用于每一个可能的发送包处理器。规划器3508可以发送其最终目的地是一给定发送包处理器的一个消息,仅当如果在DCP流控制寄存器3515中针对这个发送包处理器的流控制比特这样指示时。QME 305发送到规划器3508的每一个消息的一个部分可以被用于设置或者清除寄存器3515中的流控制比特,并且QME 305发送一个消息,当一个发送器的发送队列3521是满的时这个消息就设置这个发送包处理器的比特,当发送队列3521又有空间来保存描述符时,QME 305就发送一个消息来清除这个比特。
虽然QME 305的外部接口一般被用于与队列管理设备进行通信,但是它不需要是这样的。因为一个描述符的内容完全是由产生这个描述符的包处理器来决定的,这个外部接口可以被包处理器使用来将数据写入到经过这个外部接口可以被访问的一个设备和/或者,被使用来从这样一个设备中读取数据。这个能力可以被使用的一个方面是将一个包处理器编程为一个“包取样器”,即,简单地收集关于在一个包流中包的信息的一个设备。RxSDP 421可以被编程为从这个包流中提取每一个包所需要的信息,并且将这个信息提供到CPRC 401,然后,CPRC 401将这个信息封装到一个描述符中,并且对这个描述符进行排队以使这个描述符可以被QME 305发送到能够保存和分析这个信息的一个外部设备中。
规划器外部接口的细节图36和37图36显示了这个外部接口的独立管脚如何被与一个规划器3508一起使用的。在图8中,列标号管脚3601显示了组成一个组的管脚的数目,并且在这个列标号方向3603中的箭头显示了信息流的方向。DCP->SCHED表示从QME 305到规划器3508的流,并且DCP<-SCHED表示相反方向的流。从8个控制管脚3513开始,§时钟管脚3603,提供从QME 305到规划器3508的一个时钟信号;§D_flow_ctrl 3607在每一个周期,提供从QME 305到规划器3508的3比特流控制信息;规划器3508使用在一个消息的第一个两周期内接收的6比特D_flow_ctrl 3607来设置或者清除在D流控制寄存器3515中的一个比特;§S_flow_ctrl 3609是从规划器3508到QME 305的一个比特的流控制信息;QME 305使用管脚3609上的值来设置S流控制寄存器3517;§Xfer_rqst 3611是当规划器3508希望向QME 305发送一个消息时,规划器3508激发的一个信号;和§Xfer_ctrl 3613是QME 305发送给规划器3508的两比特,以指示在管脚上的数据和控制信号如何在下面的时钟周期中被解释;细节在下面被给出。
命令管脚3511是双向的;它们包括16个命令比特和1个奇偶校验比特。数据管脚3509也是双向的;它们包括32个数据比特和1个奇偶校验比特。
接口3507的操作被Xfer ctrl 3613所控制。这两行的4个值的意义如下§00不是一个其后跟着一个消息的时钟周期;§01一个时钟周期,在两个周期后,其后面将是从QME 305到规划器3508的一个消息的第一个周期;在发送这个消息所需的最初两个周期期间,D_flow_ctrl 3607将向规划器3508传送流控制信息;§10一个时钟周期,在两个周期后,其后面将是从规划器3508到QME 305的一个消息的第一个周期;在发送这个消息的第一两个周期期间,D_flow_ctrl 3607将向规划器3508传送流控制信息;§11一个时钟周期,在两个周期后,其后面将是两个时钟周期,其中流控制信息在这两个时钟周期内经过D_flow_ctrl 3607被传送到规划器3508。
如从前面的描述中可以看出的,6比特流控制信息可能在每一个消息内被从QME 305传送到规划器3508,并且当没有消息在被传送时,可以在每2个时钟周期内被传送到规划器3508。这个6比特的值包括规定一个空操作的一个值和其它多个值,响应这些值,规划器3508针对发送包处理器的25个队列中的每一个队列设置或者复位D流控制寄存器3515中的独立流控制比特。
如前面所讨论的,一个消息可以是2,4,6,或者8周期长,并且在每一个周期内传送16比特的命令数据和32比特的描述符数据。这个命令数据的语义取决于规划器3508和QME 305被编程的方式,除了对从规划器3508到QME 305的一个消息外,这个第一周期内的命令数据必须采取3514所显示的形式前面6个比特必须具有图案3615,并且最后6个比特必须包括这个消息需要到达的队列的号码。这个号码当然决定了这个消息将被放置在哪一个发送队列3521中。
图37显示了带2-周期和4-周期消息的接口3507的操作示例。这2-周期消息被显示在3701。3703显示了这个接口的时钟周期;3613显示了这个时钟周期内在Xfer_Ctrl 3613上的值;3511显示了在命令数据管脚3511上的内容;3509显示了在描述符数据管脚3509上的内容;3607显示了在D_flow_Ctrl管脚3607上的内容。这样,在周期1中,Xfer_Ctrl 3613被设置为01,表示在下一个周期后的周期(周期3)将是从QME305发送到规划器3509的一个2-周期消息3702的第一个周期。在周期2中,Xfer_Ctrl 3613被设置为00,表示在下一个周期后的周期不是一个消息的第一个周期。在周期3中,命令3511和数据3509包括这个消息的命令数据和描述符数据的第一个周期的内容,并且D_flow_Ctrl 3607包括到规划器3508的流控制数据的第一个周期的内容。Xfer_Ctrl 3613再被设置为01,表示从QME 305发送到规划器3508的另一个消息的第一个周期将从周期5开始。
在周期4中,消息3702的第二个半部分被发送,并且命令3511和数据3509包括命令数据和描述符数据的第二个周期的内容,并且D_flow_Ctrl 3607包括流控制数据的第二个周期的内容。在周期5和6中,第二个消息被发送,并且在周期5中,Xfer_Ctrl 3613表示下面是一第三个消息,并且从周期7开始。
3705显示了从规划器3508向QME 305发送两个4-周期消息3707;在周期1中,Xfer_Ctrl3613被设置为10,表示在周期3中开始的第一个消息将被发送到QME305;在周期2-4中,Xfer_Ctrl 3613被设置为00,因为这个消息是4周期长。在周期3-6中,第一个消息的命令数据3511和描述符数据3509的4个周期的内容被发送;仅在这个消息的前两个周期,即,周期3和4中,才发送D_flow_Ctrl3613。在周期5中,Xfer_Ctrl 3613再被设置为10,表示第二个消息的第一个周期将从周期7开始。
向规划器3508发送流控制信息的工作方式与发送一个2-周期消息的工作方式相同,除了在流控制序列开始前两个周期,Xfer_Ctrl3613具有值11。在周期3中,这个流控制信息的前3个比特被在D_flow_Ctrl3607上发送,并且在周期4中,第二个3比特被发送。规划器3508和QME 305忽略在命令数据3511和描述符数据3509上的值。
缓冲器管理引擎315和缓冲器存储器229的详细描述缓冲器管理引擎315的基本功能是管理缓冲器存储器229中的缓冲器231,从协议数据单元被在DCP 203中接收的时刻到它们被从DCP203发送的时刻,这些协议数据单元被保存在缓冲器存储器229的缓冲器231中。首先,下面的描述将描述缓冲器管理引擎315提供给包处理器的、到缓冲器存储器229的接口,然后描述这个接口的实现细节和BME315所执行的其它功能。
BME 315的逻辑概图图38图38显示了到缓冲器管理引擎315所产生的缓冲器存储器229的接口。在一个优选实施方式中,缓冲器存储器229可以被划分为多达32个缓冲器池3803。当n是池的数目时,这些池中的n-l个包括缓冲器231,缓冲器231反过来又包括协议数据单元2503。n-l个池的数目和尺寸与缓冲器231的数目和尺寸是在DCP203被初始化时决定的;一个池可以有高达64K缓冲器,并且所有这些缓冲器231的尺寸是相同的,在一个优选实施方式中,这个尺寸可以是从64字节到64K字节。每一个池2803是被一个池ID 3819所标识,并且这个池中的每一个缓冲器是被一个缓冲器标记233所标识的;在一个缓冲器233内部,用偏移3802来规定位置;这里,这个偏移规定了PDU 3804的开始。在一个优选实施方式中,这个偏移规定了一个16字节块数据的开始。
第n个池2803包括关于这些缓冲器的缓冲器标记233。对n-l个缓冲器池2803中的每一个,有一个缓冲器标记队列3805。一个缓冲器池2803(i)的一个缓冲器标记队列3805(i)包括关于缓冲器池2803(i)中每一个缓冲器231的缓冲器标记项3806,并且关于缓冲器231(i,j)的缓冲器标记项3806(i,j)包括缓冲器231(i,j)的缓冲器标记233。每一个队列2805具有指向这个队列头的一个指针3807和指向这个队列末尾的一个指针3809。当DCP 203被初始化时,就建立这些队列。当DCP 203中的一个接收包处理器需要关于一个池2803(i)中的缓冲器的缓冲器标记时,这个接收包处理器从这个队列3805(i)的头部接收这些缓冲器标记;当一个发送包处理器释放缓冲器标记时,这些缓冲器标记被返回到这个队列3805(i)的末尾。
当然,如果一个多播命令已经在比多于1个的队列管理引擎315中的队列215上,放置了带一给定缓冲器标记233(i,j)的描述符,缓冲器标记233(i,j)就不能够被返回到这个队列3805(i)的末尾,直到缓冲器标记233(i,j)的最后一个拷贝已经被返回。在一个优选实施方式中,通过缓冲器标记计数器3811来解决这个问题。对在QME 305中比1个多的队列215中的每一个缓冲器标记,在缓冲器标记计数器3811中有一个项3813,并且这个项包括缓冲器标记目前所位于其中的队列的计数。这个项可以被使用池ID和缓冲器标记来访问。
当一个接收包处理器为一个描述符产生一个多播排队命令时,这个接收包处理器向BME 315发送一个消息,以表示这个描述符位于其中的队列的数目;发送包处理器所接收的这个描述符包括来自这个发送的DR 3111的INC值;当INC大于0时,这个包处理器向BME 315发送一个计数器减1的消息,以表示BT计数器3811中BTAG的计数器应被减1;当这个计数器被减1到0时,这个缓冲器标记233被返回到其缓冲器标记队列3805的末尾。
BME 315经过负荷总线317从这个包处理器接收对缓冲器231进行写入的命令,接收从缓冲器231进行读取的命令,接收获得缓冲器标记的命令,接收返回缓冲器标记的命令,和接收设置和对BT计数器中项进行减1的命令。对缓冲器进行读取和进行写入的命令的形式显示在图39的3901。这些字段的意义如下§CNT字段3903表示在传送中,有效的、连续的16字节数据量的数目;§T#字段3905被一给定包处理器用于区分总线处理;§池ID 3907标识缓冲器池3803(0…n-l);§偏移3909规定了在BTAG 3911所标识的缓冲器中的偏移;和§BTAG 3911标识了正在被读取或者正在被写入的缓冲器231。
池ID 3907,偏移3909,和BTAG 3911一起组成了缓冲器地址3913。如在后面关于负荷总线的讨论中将更详细描述的,一个命令是否是一个读取命令或者写入命令是从这个命令出现在其上的负荷总线周期来决定的。池ID值0规定BT池3803(n)和池ID值0x 1F规定关于QME 305的命令。对读取命令,QME 315将规定数量的数据和处理#3905从规定的缓冲器返回到进行请求的包处理器。这样,这个进行请求的包处理器可以使用这个处理号码来跟踪被返回数据对什么请求作出了响应。
一个包处理器可以对BTAG池3803(n)中的BTAG 233执行下述BTAG读取操作§分配BTAG 233;和§读取在BT计数器211中的一个BTAG 233的CNT项2813;这些BTAG写入操作是§初始化BTAG 233;§对一个BTAG 233进行释放;§在计数器3811中为一个BTAG 233设置一个计数器;§将关于一个BTAG 233的一个计数器进行减1。
这些命令的形式被显示在3915。BT池ID 3907表示其中规定了一个BTAG的BTAG池3803(n),这个BTAG是在其中规定了一个计数的BTAG字段3911中,这个计数在CNT 3903中,并且偏移3909包括规定BTAG命令之一和一个池ID 3919的一个命令值3917,这个池ID 3919规定了被这个BTAG命令所影响的BTAG 233所属于的缓冲器池。在这个命令需要一个响应的地方,在响应中返回这个处理号码3905。
在BTAG读取命令中所采用的字段如下在分配命令中,CNT 3903表示正在发送命令的这个包处理器所请求的BTAG的数目。与这个值相关,正在进行请求的包处理器将从池ID 3919所规定的池中接收8,16,24,或者32个BTAG 233;当然,BTAG字段3911被忽略。BME315通过在负荷总线上对这个进行请求的包处理器进行的一个写入操作,来向这个进行请求的包处理器返回BTAG 233。
在计数器读取命令中,CNT 3903被设置为0,BTAG 3911包括其在BT计数器中的计数值将被读取的BTAG 233,并且池ID 3919包括关于BTAG所属于的池3803的池标识3819。BME 315通过在负荷总线上对这个进行请求的包处理器进行的一个写入操作,来返回这个计数值。
继续BTAG写入命令,这个初始化命令被用于设置BTE 3806中BTAG 233的值。在这个命令中,CNT规定了正在被进行初始化的BTE3806的数目;可能的数目是8,16,24,和32。池ID 3919规定了正在被进行初始化的BTAG 233所属于的池3803,这样,也规定了正在被进行写入的缓冲器标记队列3805。
这个释放命令向BME 315返回一单个BTAG 233,以被再利用。在这个命令中,池ID 3919规定了正在被返回的BTAG 233所属于的缓冲器池3803,并且BTAG 3911包括BTAG 233。
在这个计数器命令中,池ID 3919规定了其计数器正在被设置或者被进行减1的BTAG 233的缓冲器池ID,并且BTAG 3911规定了自己的BTAG 233;在这个设置计数器的命令中,CNT 3903包括这个计数器将被设置成的这个值。QME 315通过在BT计数器中产生关于BTAG 233的一个CNT项3813并且将这个CNT项3813设置为这个命令中所规定的值,来对这个设置计数器命令作出响应。这个设置计数器命令被接收包处理器发送,当这个接收包处理器向QME 305发送带关于BTAG 233所表示的PDU的一个描述符的一个多播排队命令时。这个进行减1的计数器命令被发送正在被进行多播的一个协议数据单元的每一个发送包处理器所发送,当这个发送包处理器已经发送了这个PDU时。当正在被进行减1的这个计数器达到0时,CNT 3803所属于的BTAG 233被返回给BTAG 233的缓冲器池的BTQ 3805的末尾,并且计数器3811中关于BTAG的项变为无效。
BME 315的实现细节图40和41除了用作对缓冲器231进行写入并且对缓冲器231进行读取和用于分配和返回缓冲器标记233的接口外,BME 315还可以用作到SDRAM 229的一般接口。图41显示了SDRAM 229的内容。除了在4103的BTAG和缓冲器池3803(0…n),SDRAM 229还包括§存储器配置信息4111,它调整SDRAM 229的配置;§包处理器代码和数据4109,它包括当DCP 203被初始化时,被XP 313载入到包处理器的代码和数据;对信道处理器,代码和数据包括被用于对串行数据处理器进行初始化的代码和数据。
§翻译表4107包括在对DCP 203进行初始化时,XP 313载入到翻译表存储器207中的翻译表;§RTOS 4101是被XP 313所执行的、关于实时操作系统的代码;XP数据存储器4105包括XP 313在执行RTOS 4101中所使用的数据。
XP 313从RTOS 4101和XP数据存储器4105中将指令拾取到IMEM 1503和DMEM 1507与1508,如所需要的。
图40是在一个目前优选的实施方式中的BME 315的硬件框图。BME 315被连接到全局总线319和负荷总线317。BME 315经过负荷总线317接收BTAG和缓冲器命令并且对它们作出响应;BME 315在全局总线319上接收来自XP 313的存储器读取请求,并且经过负荷总线317对这个读取请求作出响应。包处理器的初始化是被用相同的方法完成的。
BME 315经过这些总线而接收的每一个对一个处理的请求包括一个命令4004和一个地址3913,并且写入命令还包括数据3818。这个地址如何被解释当然与命令的类型有关。在命令分析器4003中对命令进行分析。对配置SDRAM 229的命令的处理与对其它命令的处理不同;如4001所显示的,配置SDRAM 229的命令被提供到DRAM配置逻辑4035,DRAM配置逻辑4035将这个数据传递到一个配置FIFO4037,这个数据被从配置FIFO 4037载入到DRAM配置寄存器4030中。
其它命令如何被处理与它们是读取命令或者写入命令或者是其它命令有关。其它命令被提供到命令FIFO;读取命令的地址被提供到读取地址FIFO 4013;写入命令的地址被提供到写入地址FIFO 4021,并且数据被提供到数据FIFO 4017;对一个命令作出响应而被读取的数据被输出到读取数据FIFO 4043;这些FIFO用于提供在DCP 293和SDRAM 227之间所需要的灵活性。在地址的情形下,地址产生模块4011将在缓冲器和BTAG命令中所使用的地址翻译成适合于SDRAM 229的形式;为了完成这个,地址产生模块4011包括规定当前如何配置SDRAM 229中的缓冲器的一个缓冲器配置文件。如目前所实现的,与一给定缓冲器地址3913相应的、SDRAM 229中的一个地址被如下计算SDRAM地址=池基地址(池ID)+((Btag & Btag掩码(池ID))>>Btag shift(池ID))CAT((偏移&偏移掩码(池ID)))命令,读取地址,和读取地址分别从FIFO被提供到队列4067,4015,和4025。DRAM CTRL 4009读取在队列4067的头部的命令,DRAM CTRL 4009按照DRAM配置寄存器4039的当前设置所需要地来解释这个命令,并且向SDRAM 229的复用器4025和地址驱动器4019和数据收发器4041提供必要的控制信号。
地址产生器4027读取在读取地址队列415的头部的地址,并且地址产生器4027将这个地址提供到驱动器4019并且指出这是一个读取操作。在写入地址队列4025的头部的地址也被地址驱动器4019所读取,地址驱动器4019将这个地址和一个写入命令提供到地址驱动器419。在这个相同的时刻,在写入数据队列4029头部中的数据被输出到数据收发器4041,以使这个数据可以被输入到SDRAM 229。地址产生器4017将高优先级提供给读取地址队列4015,因为向一个发送包处理器提供PDU比将PDU保存在SDRAM 229中的时间要求更严格。
为了避免这样一个情形一个读取操作读取在写入数据队列4029中正等待被覆盖写的数据并且因此获得了旧的数据,BME 315包括一个CAM 4023。当一个地址被写入到写入地址队列4025的末尾时,这个地址的项就在CAM 4023中被产生;当一个地址被写入到读取地址队列4015的末尾时,这个地址的项也被输出到CAM 4023;如果地址的项存在匹配,在地址产生器4017读取读取地址队列4015中的下一个地址以前,在写入地址队列4025中的地址的队列就被清空。
BTAG缓存4031包括来自每一个BTAG队列3805的头端的BTAG233;这个队列3805中的剩余部分在SDRAM229中。当对BTAG233的一个请求从一个包处理器到达时,如果可能的话,就从BTAG缓存4031来满足这个请求;否则,从SDRAM 229中队列3805的部分来满足这个请求,并且从队列3805中的这个部分被重新载入到这个队列的BTAG缓存。
BTCNT 3811实现了BT计数器3811。缓冲器标记计数命令设置,读取,和对BTCNT 3811中的值减1;每一次接收到一个减1的BTAG命令,就如上面所描述的,对BTAG的CNT项的值进行减1。
从SDRAM被读取的PDU被输出到读取数据FIFO 4043;来自FIFO 4043的输出,与来自DRAM配置4035,BTAG缓存4031,和BT CNT 3811的输出一起均被提供到复用器4046,复用器4046选择到读取数据队列4045的输出,读取数据队列4045又依次将这个输出输出到负荷总线317。
环型总线311的细节图28和42环型总线311基本上被包处理器使用来向TLE 301发送协议数据以进行翻译,并且从TLE 301接收翻译的结果。但是,环型总线311可以被用于向任何环型总线311上的节点发送消息并且从任何节点接收对这个消息的答复。在一个优选实施方式中,这些节点是包处理器和TLE 301。
环型总线311被设计成向在总线节点之间的消息提供有保证的访问带宽和有上限的延迟。这个总线是91比特宽,其中27比特用于控制信息,64比特用于从发送节点发送到接收节点的数据。这个总线被时分复用成一个数目可变的时隙,其中每一个时隙包括一个核心时钟周期。每一个时隙被以存储段组的形式从节点传送到节点。当目前在一个节点上的时隙没有被占据时(即,没有包括环型总线消息 2801),这个节点可以将到这些节点中一个的一个消息写入到这个时隙中(其它实施方式可以允许到多个节点的消息被写入到一个时隙中)。然后,这个消息开始从节点到节点的环行,直到这个目的地节点从这个时隙中取出这个消息。
每一个节点在环型总线311中可以有一个到5个时隙来包括其源节点是这个节点的消息。如果这个节点没有使用多于1个的时隙,这些时隙就不存在在环型总线311上。从这个描述中可以看出,将一个消息从一个节点发送到总线上的另一个节点所需要的时间随这个总线上消息的数目而变化,其时间上限是当每一个节点在环型节点上具有5个包括消息的时隙时所需要的时间。
有5个类型的消息2801。每一个消息的类型被这个时隙中类型字段2807的值所表示。是这个消息的源的节点被SRC 2825所表示,并且是这个目的地的节点是DEST 2813所表示。这些类型是§没有占据§指示,被源节点使用来查询这个目的地节点是否对环型总线消息作出响应。这个指示不包括数据。
§证实,被一个指示的目的地节点使用来对这个指示的源节点作出响应。这个证实不包括数据。
§请求,一个主动提供的消息,其上有这个目的地节点进行操作的数据,并且在某些情形下,并且这个目的地节点向这个请求的源节点返回带操作结果的一个响应消息。
§响应,这个请求的目的地节点向这个请求的源节点发送的一个消息,这个消息上有这个目的地节点执行的、对这个源的一个操作的结果。
图42显示了环型总线接口4201,每一个节点具有到这个环型总线的环型总线接口4201。有两个关于其目的地是这个节点的消息的FIFOFIFO 4203包括请求消息;FIFO 4209包括其目的地是这个节点的响应消息;两个FIFO 4203和FIFO 4209被这个节点所读取。溢出流FIFO 4211被其源是这个节点的消息所使用,这个消息必须继续在环型总线311上环行,因为它们的目的地节点还没有读取它们。当其目的地是这个节点的一个消息到达了这个节点时,它被放置在其类型所要求的FIFO中。如果这个FIFO中没有空间来保存这个消息,这个消息就继续环行。
这个节点经过缓冲器4214将消息输出到环型总线311,其中缓冲器4214从rbus in 4202,溢出FIFO 4211,和请求FIFO 4217接收消息,缓冲器4214包括正在被这个节点所发送的请求消息。如果溢出FIFO 4211是空的,当其源节点是这个节点的一个消息被在这个节点中所接收时,它就被立即放置在缓冲器4214中以在它到达时所占据时隙中被输出。如果溢出FIFO 4211不是空的,其源节点是这个节点的新接收消息就被放置在溢出FIFO 4211的末尾,并且在溢出FIFO 4211头部中的这个消息被放置在缓冲器4214,以在这个新接收消息到达时所占据时隙中被输出。如果新接收的消息是空的,并且溢出FIFO 4211不是满的,在请求FIFO 4217头部中的这个消息被发送到空消息的时隙中;否则,在溢出FIFO 4211头部中的这个消息被发送到空消息的时隙中。这个机制可以确保仅当其它节点处理了一个节点所发送的消息时,这个节点才能够经过环型总线311发送新消息。指示和证实是被接口4201在硬件级别上被处理的,并且不需要被排队。
全局和负荷总线下面关于这些总线的实现的描述将从两个总线均使用的简单总线结构的描述开始,然后,详细描述总线本身。
请求总线和返回总线图43和44在这个优选实施方式中,全局总线319和负荷总线317被时分复用成一单个基本总线结构。这个总线结构被显示在图43的4301。总线结构4301是一个被时隙化的、多信道的、共享的、仲裁总线,并且允许流水线式和重叠操作。每一个操作从占据一5时钟周期时隙的一个请求开始。这个总线以166MHz的时钟速率进行工作。这个包处理器4303,BME 315,和QME 305均被连接到总线结构,并且在这里被称为总线节点。
总线结构4301具有两个部分,被总线节点所使用来产生总线请求并且提供关于这个请求的地址和数据的请求总线4305,和返回总线4317,返回总线4317被使用向进行请求的总线节点返回一个总线请求的结果。请求总线4305具有3个信道两个命令/地址信道,用于承载命令和地址,即用于承载关于全局总线操作的地址和命令的全局总线命令/地址信道4307和用于承载关于负荷总线操作的地址和命令的负荷总线命令/地址信道4309,和用于承载关于全局总线和负荷总线操作的数据的一个数据信道4311。在这个优选实施方式中,每一个命令-地址信道是32比特宽,数据信道4311是128比特宽。返回总线4317具有两个信道,用于承载一个请求和这个返回数据将被返回的目的地地址的返回地址信道4321,和承载被返回数据的返回数据信道4319。另外,返回地址信道4321是32比特宽,并且返回数据信道4319是128比特宽。为了执行一个总线操作,能够访问一个时隙的一个节点将这个操作所需要的命令和地址放置到命令-地址信道4307之一上,并且将这个操作所需要的任何数据放置到请求数据信道4311上。当一个操作将数据返回给请求者时,总线控制4315将到这个返回数据源的一个请求放置在返回地址信道上,其后是返回数据将被返回的目的地地址,并且然后,返回数据的源将需要被返回的数据放置在返回数据信道4319上。一个节点对总线结构4301的访问是被总线控制4315所控制的。如后面将更详细描述地,总线控制4315向每一个节点提供一个有保证的请求总线4305和返回总线4317的带宽部分。
图44显示了一个总线操作是如何被一个节点所执行的。每一个时隙占据5个总线周期。在一个命令-地址信道4307或者4309上,在一个时隙的周期内关于这个总线的信息被显示在4402
§周期0请求4405,规定了这个操作;§周期1地址4407,规定了这个操作的一个地址;§周期2总线授权4409总线控制4315在这个周期返回一个信号,以表示哪一个请求节点接收到访问;§周期3确认4411如果在前一个时隙中所规定的操作成功了,总线控制4315在这个周期中返回一个确认。
§周期4地址4413,规定了这个操作的第二个地址。
如后面将更详细描述的,地址的使用是被这个操作所定义的。
一个节点对总线结构4301可以执行两类一般类型的操作短操作,它传送4字节的数据,和长操作,它传送64字节的数据。在这些类型中的每一个中,有一个读取操作和一个写入操作。在一给定时隙4402中,一个包处理器4303可以执行一个读取操作,而另一个包处理器可以执行这个类型的一个写入操作。短操作被在全局总线命令-地址信道4307中所规定,而长操作在负荷总线命令-地址信道上被规定。
在图44中,4425显示了短操作。在一个短操作中,在一个时隙4402期间这个操作被在请求命令-地址信道4309上进行请求,在这个时隙4402中的第一地址是写入地址4415,如果在这个操作中这个数据将被写入,并且如果这个数据将被读取,最后的地址就是读取地址4417。对这个写入操作,已经被授权对请求总线3305进行访问的这个节点将需要被写入到这个写入地址所规定的地址中的4字节数据在时隙4402的第5个时隙中被放置在请求数据信道4311上。
对这个短读取操作,当总线控制器4315已经为一个读取操作授权了总线时,它在时隙4402的第4个时隙中将关于一个节点的一个请求4421放置在返回地址信道4321上。总线控制器4315在下一个时隙4402的第1个时隙中将关于这个数据4423的返回地址放置在返回地址信道4321上,并且这个请求4421中所规定的这个节点在这下一个时隙4402的第3个时隙中将返回数据4420本身放置在返回地址信道4321上。
长操作如4427所显示。在时隙4402中、一个节点请求一个长操作的周期期间,这个节点在周期1中将关于一个长读取操作的读取地址4417放置在请求地址总线上;这个节点在周期4中将关于一个长写入操作的写入地址4415放置在请求地址总线上。在长写入操作中,如果这个节点已经被授权进行访问,这个节点在下一个时隙4402的周期1-4中,将需要被写入的64字节数据4429以16-字节块的形式放置到请求数据信道4311上。在长读取操作中,如果这个节点已经被授权进行访问,总线控制器4315在时隙4402的第5个周期中,将规定了这个响应节点的一个请求放置到返回地址信道4321上;总线控制器4315在下一个时隙4402的第1个周期中,将这个请求节点的地址放置到返回地址信道4321上;这个响应节点在这下一个时隙4402的第2个周期中,将表示在返回数据中是有效的16-字节数据块的数目的一个计数值4435放置到返回地址信道4321上,并且这个响应节点从这下一个时隙4402的第3个周期开始,将这个返回数据4437以4个16-字节数据块的形式放置到返回数据信道4319上。
在请求和返回总线上实现全局总线319和负荷总线317图45图45在4501显示了全局总线319和负荷总线317如何被复用到总线结构4301。从图4中可以清楚地看出,时隙4402是5个周期长,而需要被写入的长数据4429和需要被返回的数据4437每一个均是4个周期长,并且需要被写入的短数据4419和需要被返回的短数据4420每一个是一单个周期长。
这样,就可能在总线结构4301上重叠短操作和长操作,如图45所显示的,并且由此可以将请求数据信道4311的每5个周期中的4个周期用于负荷数据,而第5个周期用于全局总线并且相同的第5个周期用于返回数据信道4319。在图45中,实现全局总线319的短操作被显示在图中的上半部分;实现全局总线317的长操作被显示在图中的下半部分。如图中间部分的请求命令-地址信道4307和4309的表示所显示的,负荷时隙4507比全局时隙4503提前一个时隙周期;这样,需要被写入到负荷时隙4507中的长数据4429在需要被写入到全局总线时隙4503的短数据4519和需要被写入到全局总线时隙4505的短数据4419之间,出现在请求数据信道4311上。类似地,在返回总线4317上,需要被返回的、关于负荷请求4509的长返回数据4437在需要被返回的、关于全局请求4503的短数据和需要被返回的、关于全局请求4505的短数据之间,出现在返回数据信道4319上。
全局总线317上的总线访问和寻址图45图45显示了关于全局总线319和负荷总线317的时隙4402如何被划分为偶时隙和奇时隙。一个偶时隙-奇时隙对组成一个10-周期的时间段4502。这个偶和奇时隙与包处理器4303的偶和奇组相应。组中的成员关系如下所显示
在每一个时间段4502中,4个全局总线处理被执行§在偶时隙中一个短读取操作和一个短写入操作;§在奇时隙中一个短读取操作和一个短写入操作。
对这些类型的处理中的每一个均有一个独立的令牌。在一个组中的包处理器中,以循环方式来旋转令牌,在组中,具有关于一个操作的令牌的这个包处理器对这个操作具有最高优先级。如果这个包处理器不请求它具有其令牌的这个类型的处理,按升序排列最靠近这个令牌的请求包处理器被授权访问这个总线。一个包处理器接收对这个总线的访问的最大延迟是100个周期。没有包处理器产生一个写入请求的时隙被队列管理引擎305使用来向这些包处理器广播队列状态报告2915。
在全局总线处理中,读取地址4417和写入地址4415是全(flat)32-比特的地址。在返回数据信道4319上的地址4423是一个有效的比特,其后是将这个接收者标识为包处理器,BME 315,或者QME 305之一的一个处理器标识符。
负荷总线317上的总线访问和寻址图45负荷总线317上的总线访问与上面关于全局总线319的描述完全相同;另外,每一个时间段4502被划分为一个偶时隙和一个奇时隙,并且就全局总线来说,这些包处理器被分配到奇时隙和偶时隙。另外,在一单个时间段4502内,有关于4个负荷总线处理的时隙§在偶时隙中一个长读取操作和一个长写入操作;§在奇时隙中一个长读取操作和一个长写入操作。
如对全局总线所描述的,令牌被采用来决定在这些包处理器之间的优先级,除了QME 305或者执行处理器313没有特殊的结构外。对地址来说,长读取操作和写入操作的地址是图39中所显示的负荷缓冲器命令。在返回地址信道4321上的、关于返回负荷数据的地址与返回全局数据的地址类似,除了它还包括一个3-比特处理号码,在数据被返回的负荷缓冲器命令中,总线控制器4315从处理号码3905拷贝这3-比特处理号码。
DCP 203作为一个一般的数据流处理器虽然前面的讨论已经描述了DCP 203是如何被用于一个包交换的,但是该相关领域内的技术人员将很清楚,DCP 203可以被用于处理数据流的任何应用中。通过组合,DCP 203的信道处理器307可以被构造成处理串行比特流中的数据,4比特流中的数据,和字节流中的数据,并且构造处理器303可以处理由32-比特字组成的流中的数据。TLE 301提供了用于保存和处理每一个数据流上下文信息的一个机制,并且QME 305提供了用于将关于流中所包括的负荷的信息从接收包括这个负荷的流的包处理器传递到发送包这个负荷的流的包处理器的一个机制,并且提供了连接到QME 305的外部单元。构造处理器303允许DCP 203被连接到另一个DCP 203,连接到一个并行总线,或者连接到一个交换构造,并且这样,允许从一些DCP203构造用于处理数据流的大设备,并且允许DCP 203与其它处理数据流的设备组合在一起。
包处理器可以被编程为处理任何类型的数据流。一个可编程SDP420与每一个包处理器中的一个可编程CPRC 401和一个DMA引擎的组合允许提取流中控制数据的操作与提取流的负荷,处理这个控制数据和将这个负荷传送到BME 315的操作分开。在CPRC 401内使用数据作用域来维护关于SDP 420和DMA引擎对流的处理的当前状态的信息允许对控制数据的处理可以与负荷在BME 315和SDP 420之间的传送一起同时进行,并且也大大地简化了CPRC 401的编程。SDP420中的发送处理器和接收处理器可以被编程为对输入流中的图案和对比特计数作出响应,并且这个旁路的存在允许能够比较容易地配置发送处理器和接收处理器来处理不同类型的流。通过配置一个SDP重新循环一个流,组合信道处理器来处理高速串行流或者由4比特或者字节组成的流,和配置I/O管脚与不同类型的发送媒质一起工作,就获得了更多的灵活性。
DCP 203通过使用能够确保在包处理器和TLE 301之间通信的最小延迟的一个环型总线,通过使用一个时隙化的总线来传送突发数据,以在BME 315和包处理器之间传送负荷,以从BME 315传送缓冲器标记和将缓冲器标记传送到包处理器,和以在包处理器和QME 305之间传送描述符,DCP 203处理在数据流处理中所固有的时间限制。通过允许这些设备对相互之间的局部存储器进行访问的一个全局地址,就可以在包处理器,QME 305,和BME 315之间进行协调。在包处理器串的情形下,串的成员能够快速地访问相互之间的局部存储器。
结尾前面的详细描述已经向在本发明所属于的领域内的那些技术人员,公开了对本发明者目前所知为最佳的、采用它们的技术来处理数据流的模式,数据流是被发送到被设计成处理和路由包的一个数字通信处理器集成电路。相关领域内的技术人员能够立即理解,数字通信处理器的独立特征可以根据实际需要采用,而不是在这里所公开的情形中所采用,并且可以使用不同的方法从这里所公开的情形进行组合。相关领域内的技术人员将进一步认识到,可以使用不同的实现方法来实现这些特征。因为所有前面的原因,这个详细描述在所有方面均被认为是示例性的,并且不具有任何限制性,并且这里所公开的本发明的宽度不是从这个详细描述来决定的,而是从被理解为专利法所允许的全限制范围的权利要求书来决定的。
权利要求
1.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连,并且包括一个包括指令的可被写入的指令存储器;和一个接收处理器,连续地执行特定的指令来处理从这个数据流输入所接收的数据流和/或者一个发送处理器,连续地执行特定的指令来处理需要被输出到数据流输出的数据流。
2.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连,并且包括一个对这个数据流处理器是局部的、可被写入的局部存储器,多个局部存储器属于可以被任何一个数据流处理器所访问的一个全局地址空间。
3.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连;和一个上下文处理器,对从正在处理一个数据流的一给定数据流处理器所接收 的信息作出响应以产生关于这给定数据流的上下文的信息,并且将这个上下文信息提供给这个处理器;这个给定数据流处理器使用这个上下文信息来处理这个数据流。
4.如权利要求3所提出的这个集成电路,其中这个上下文处理器接收这个信息,并且通过一个总线来提供上下文信息,在这个总线上,对数据流处理器中的每一个和上下文处理器的延迟有一个上限。
5.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流,一个数据流包括控制数据和负荷;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连,一个被接收的数据流正在被进行处理以提取这个控制数据和负荷,并且一个被发送数据流正在被处理以将控制数据添加到这个负荷上;一个缓冲器管理器,提供用于保存负荷的缓冲器的地址,并且对带一个缓冲器地址的一个写入操作作出响应,将负荷写入到这个被寻址的缓冲器,并且对带一个缓冲器地址的一个读取操作作出响应,以从这个被寻址的缓冲器读取负荷;和一个队列管理器管理负荷描述符的队列,并且每一个描述符包括至少一个缓冲器地址,这个队列管理器通过将一个排队命令所提供的一个描述符在这个命令中所规定的一个队列中进行排队来对这个排队命令作出响应,通过在一个出列命令所规定的这个队列中取出一个描述符来对这个出列命令作出响应,一个数据流处理器通过使用所接收的一个数据流的负荷和这个缓冲器管理器所提供的一个地址来对缓冲器管理器执行一个写入操作,通过使用包括这个地址的一个描述符来执行一个排队操作并且通过执行从一个队列中进行取出的操作来发送一个数据流,来对这个所接收的数据流作出响应,并且使用作为在对缓冲器管理器的一个读取操作中一个从队列中进行取出操作的一个结果而获得的地址,使用从这个缓冲器管理器所接收的负荷来产生一个数据流,并且发送所产生的数据流。
6.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连;和一个组合特定数据流处理器的组合器,以使被组合的数据流处理器可以在处理一个数据流时进行合作,这个组合器包括在被组合的数据流处理器之间的、可配置的互联;一个可配置的操作协调器,用于协调被组合数据流处理器之间的操作;和一个配置器,用于按照组合这些数据流处理器的需要来规定可配置的互联和可配置的操作协调器。
7.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连,并且包括一个控制数据处理器,一个接收处理器,处理从这个数据流输入所接收的数据流,和/或者一个发送处理器,用于处理需要被输出到这个数据流输出的数据流,和数据结构,被控制数据处理器,接收处理器和/或者发送处理器所共享,并且包括被接收处理器和/或者发送处理器和控制数据处理器对接收处理器和/或者发送处理器和控制数据处理器采用流水线的方法处理一个数据流进行协调所使用的信息。
8.一个集成电路,包括多个数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和/或者数据流输出相连,并且包括一个接收处理器,用于串行地处理从这个数据流输入所接收的数据流,和/或者一个发送处理器,用于串行地处理需要被输出到数据流输出的数据流,这个接收处理器和/或者发送处理器具有多个处理部件,并且可以被配置成在处理数据流时旁路一个或者多个部件。
9.一个集成电路,包括多个串行数据流输入和/或者输出,它们接收和/或者发送数据流;多个处理这个数据流的数据流处理器,每一个数据流处理器与一个数据流输入和或/者数据流输出相连,并且包括一个接收处理器,用于串行地处理从这个数据流输入所接收的数据流,和/或者一个发送处理器,用于串行地处理需要被输出到数据流输出的数据流,这个接收处理器将一个被处理的数据流写入到一个存储器,和/或者这个发送处理器从存储器中读取一个被处理的数据流,并且这个接收处理器可以被重新配置成从这个存储器中读取需要被处理的一个数据流,和/或者这个发送处理器可以被重新配置成将一个被处理的数据流写入到这个存储器。
10.一个集成电路,包括多个串行数据流输入和/或者输出,它们串行接收和/或者发送数据流;至少一组并行数据流输入和/或者输出,它们并行接收和/或者发送数据流;多个处理这个数据流的串行数据流处理器,每一个串行数据流处理器与一个串行数据流输入和/或者数据流输出相连,并且包括一个串行接收处理器,用于处理从这个串行数据流输入所接收的数据流,和/或者一个串行发送处理器,用于处理需要被输出到数据流输出的数据流;和至少被连接到这组并行数据流输入的一个并行数据流处理器,每一个并行数据流处理器包括一个并行接收处理器,用于处理从这组并行数据流输入所接收的数据流,和/或者一个并行发送处理器,用于处理需要被输出到这组并行数据流输入的数据流。
11.一个集成电路,包括多个I/O管脚,接收和/或者发送信号;一个数据流处理器,用于处理被这些信号所表示的数据;一个可写入的配置区分符,用于规定其多个配置中的一个配置;和配置电路,连接在多个I/O管脚和这个数据流处理器之间,并且对这个配置区分符作出响应以按照这个配置区分符所规定的来配置I/O管脚,由此这个集成电路可以被用于多个发送协议。
12.如权利要求11中所提出的这个集成电路,其中这个配置区分符规定了I/O管脚的电气特性;和这个配置电路使用所需要的电气特性来配置I/O管脚。
13.如权利要求11中所提出的这个集成电路,其中有多个数据流处理器;和这个配置区分符规定了多个数据流处理器中哪一个数据流处理器被连接到这多个I/O管脚,由此多个数据流处理器可以共享对被所接收信号和/或者多个I/O管脚所发送的信号所表示的数据的处理。
全文摘要
一个集成电路(203),用于处理一般的数据流,并且用于处理特殊的包流。这个集成电路包括一些包处理器(307,313,303),一个表搜寻引擎(301),一个队列管理引擎(305)和一个缓冲器管理引擎(315)。这些包处理器包括一个接收处理器(421),一个发送处理器(427)和一个RISC核心处理器(401),所有这些处理器均是可以被编程的。这个接收处理器和这个核心处理器进行合作来接收和路由正在被接收的包,并且这个核心处理器和这个发送处理器进行合作来发送包。通过使用来自表搜寻引擎的信息决定这个队列管理引擎中、将接收描述这个被接收包的负荷的一个描述符217的一个队列215,来完成这个路由。这个发送处理器从一个队列中读取描述符,并且发送在这个描述符中所描述的负荷。这个核心处理器,发送处理器,和接收处理器并行进行工作。这些包处理器中的、队列管理引擎中的和缓冲器管理引擎中的局部存储器和寄存器是一个全局地址空间(321)的一部分。这些包处理器包括用于处理在串行媒质中所接收的包的串行处理器(307)和至少一个并行处理器(303)。这个并行处理器可以被用于将这个集成电路连接到另一个相同类型的集成电路,连接可以是使用一个总线,或者使用一个交换构造。通过设置全局存储器中寄存器中的比特,这些包处理器可以被进行进一步配置。配置包括串行包处理器的组合,在一个串行包处理器中重新循环一个数据流,旁路这个接收或者发送处理器的部件,并且配置一个串行包处理器的I/O管脚来处理不同的传输媒质。
文档编号H04L12/56GK1319209SQ9980800
公开日2001年10月24日 申请日期1999年5月7日 优先权日1998年5月8日
发明者托马斯·B·布莱特曼, 安德鲁·T·布朗, 约翰·F·布朗, 詹姆斯·A·法雷尔, 安德鲁·D·芬克, 戴维·J·赫塞克, 爱德华·J·迈克莱伦, 唐纳德·A·普莱尔, 马克·A·桑基, 保罗·施米特 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1