用于高速总线的流控制的系统和方法

文档序号:6415909阅读:161来源:国知局
专利名称:用于高速总线的流控制的系统和方法
技术领域
本发明涉及一个同步总线系统和方法。
背景技术
总线经常用于在设备之间传送数据。总的说来,使用两类总线,同步总线和异步总线。在一个同步系统中,连接到总线的设备彼此之间同步操作。而且,用于数据传输的时间开销,即从传输设备输出数据的时间到接收设备采样该数据的时间是一个时钟周期。随着计算机系统的复杂性的增加,在物理上将设备连接得足够近,以使得跨越连接的时间加上接收设备建立和保持的时间不超过该时序开销越来越困难。
在一个异步系统中,接收和发送设备的时钟不需要彼此同步。然而,接收设备必须具有一个逻辑,以在读出所捕获的数据以及采样该所捕获的数据之前,等待几个时钟周期以保证该数据是稳定的。
发明概述本发明的系统和方法使用传递流控制信息的数据包在设备之间提供流控制。在一个实施例中,维持一个对第一设备发出的数据包进行计数的计数器。该第一设备每发出一个数据包,该计数器就递增一,而该第一设备每收到一个回复数据包该计数器就减少一。使用一个对应于一个缓冲器的最大缓冲器计数来进行流控制,其方法是确定何时该第一设备发出的数据包会超过该最大缓冲器计数。如果该计数要被超过,就阻止该第一设备发出数据包,直到该最大缓冲器计数不会由于该数据包的发出而被超过。在一个实施例中,该所发出的数据包是一个请求数据包,其由存储在该缓冲器中的命令和数据信息组成。该命令信息和数据信息可以存储在同一个缓冲器中,或者该数据存储在一个与存储该请求数据包的命令信息的缓冲器分开的缓冲器中并在其中移动。
附图的简要描述参照下面的详细描述本领域的普通技术人员将明白本发明的目标,特征和优点。其中


图1是使用本发明的总线系统的系统的例子。
图2a,2b,2c,2d和2e示出了本发明的总线系统的一个实施例的信令结构。
图3是示出了2个时钟周期定时开销的选通启动定时细节的时序图。
图4示出通过总线接收传输的数据包的基本结构。
图5是示出该数据传输细节的时序图。
图6是一个示出用于同步该接收设备和发送设备电路的复位过程的一个实施例的流程图。
图7的流图示出了根据本发明的教导的数据包传输过程。
图8是一个简化的框图,示出该本发明的流控制机制的一个实施例。
图9a和9b是示出用于根据本发明的教导传输数据的过程的一个实施例的流程图。
图10a、10b和10c示出了在本发明的系统的一个实施例中使用的请求和完成格式。
图11是一个根据本发明的教导使用一个设备可配置域的一个过程的一个实施例的简化流图。
详细描述在图1中,示出一个包括本发明的教导的示例系统。很显然,本发明可以应用于多个系统和系统配置。图1示意了本发明的该总线系统可以提供的带宽。参见图1,所示出的同步总线系统100在控制器115和总线扩展器桥117,120和125之间提供连接,该控制器115起着微处理器总线110或存储器总线(未示出)之间的桥的作用,一个或多个微处理设备连接到该微处理器总线110上,一个或多个存储器设备连接到该存储器总线上。如在一个实施例中所示出的,桥117和120扩展和格式化通过总线100接收的数据,向一个64位的外围部件接口(PCI)总线121或两个32位PCI总线122,123提供输出,PCI兼容设备(未示出)连接到该PCI总线上。而且,还示出总线100向连接到一个图形总线和所连接的设备(未示出)的一个桥提供数据。
在图2a、2b、2c、2d和2e中示出了本发明的总线系统的信令拓扑。参见图2a,同步总线200将控制器215连接到扩展器桥220,该扩展器桥例如是用于桥接到PCI总线(未示出)的PCI扩展器桥。在本实施例中,所示出的控制器通过总线连接到一个总线扩展器。然而,很显然,该总线可以连接到多个类型的设备和子系统。图2b、2c、2d和2e的表描述了用于本实施例中的不同的信号。
在一个实施例中,该总线是一个16位宽的数据总线,用于传送命令,地址,数据和事务ID信息。两个另外的位传送数据域的屏蔽和其他信息。在一个实施例中,该两个另外的位的功能随着时钟周期而变化。例如,提供字节使能(屏蔽信息)的该域可用于标识该字节由有效的信息构成,以及可以交替地传送一个命令类型或奇偶校验。
该总线是一个位于发送和接收设备之间的双向总线。在本实施例中,该总线事务是全分裂事务(full split transaction),由请求数据包和完成数据包构成。该请求数据包启动一个事务。该完成数据包用于返回数据,用于指示该事务已经在目的设备上完成,以及在该源设备和目的设备之间重新分配缓冲器资源。所有事务可以分类为读取请求或者写请求。该读取请求包含用于非可提取读取的命令地址位使能,路由信息和所要求的数据的长度。该读取完成数据包包含该请求的状态,响应该读取请求所提取的数据,以及识别该相应请求的路由和事务信息。一个写请求在其数据包中包括该写入数据。该写完成数据包不包含数据,但是指示该写入是否成功完成。每个总线周期(XCLK)等价于该系统主时钟周期。然而,每个总线周期包含一个“P”半周期和“N”半周期。该“P”半周期例如只在XCLK时钟为高时出现。该“N”半周期只在该XCLK时钟为低时出现,从而通过在每个半周期传输数据包而将吞吐量加倍。
一个信息数据包包含多个32位的字。在每个XCLK周期,在该总线上传送与一个字有关的字节使能。每个字在该时钟周期的正和负相位之间分发,位[31∶16]在正相位上建立,位[15∶0]在负相位上建立。很显然,该总线不限于这一数据包结构,可以使用多种实现。
本发明的该高速同步总线的一个关键特征在于该复位信号(XRST#)使能连接到该总线的所有设备的同步。一旦进行了同步,传输和接收设备就根据预定的时序协议进行同步操作,在设备之间以多个时钟周期同步传输数据包。
如图2a所示出的,为了保持同步操作,该复位信号(XRST#)和时钟信号(XCLK)同时到达每个所连接的部件。在本实施例中,该XCLK和XRST#信号由一个部件215发出,传输到第二部件220,并且通过线路217,219传输回第一个部件215,线路217和219在长度上大约等于连接在第一和第二部件215,220之间的线路221和223。这将保证了部件215,220同时接收到信号,并且保持同步操作。线路217,223的长度最好尽可能地相一致,因为该时钟时序是关键的。线路219和221长度的一致性可以差一些。
在图3中示出了一个示意性的用于以2个时钟周期的时序开销的复位过程的时序图。连接到该总线的每个设备可观察到在同一个发生XCLK时钟信号上所撤销的XRST#。在观察到一个XRST#撤销后,经过一个预定数目的时钟周期(例如3个时钟周期),每个部件启动其同步选通信号。尽管在本实施例中规定了3个时钟周期,只要所有设备在同一个周期启动它们的同步选通信号,该周期的预定数目可以变化。参照图3,每个设备在时钟T3的上升边缘获取该XRST#撤销。因此,在时钟T6的上升边缘之后每个部件启动其选通信号发生器。因此该源同步信号获取电路可以同步其采样时钟,因为它知道该XRST#的撤销和该第一数据选通之间的时序关系。
可以以多种方式定义该系统和时序关系。然而,在本实施例中,采样该XRST#撤销的上升时钟边缘涉及到奇数周期,该第一数据选通从一个偶数时钟边缘开始。启动该选通信号的该最早的偶时钟边缘是在采样该XRST#撤销之后的第二个偶时钟边缘。在本实施例中,其实现两时钟周期的时序开销、用于接收数据的采样总是选择包含在两个时钟周期之前发出的数据的获取单元(例如触发器)。例如,在一个三时钟周期模式中,该选择总是选择在三个时钟周期之前发出的单元。在XRST#撤销时该多路转换器识别该奇时钟。因为该第一选通被定义在总是在一个偶时钟发送,该获取触发器和取样多路转换器保持同步。
如前所述,因为该时序开销已经被扩展跨越多个时钟周期,所以设备之间的距离比通常的同步总线系统长。更进一步,通过在偶数和奇数时钟周期都发送数据,可以部分地使用较少的管脚获得更大的数据吞吐量。在图4中示出了在接收机处的该捕获机制,该捕获机制允许这一功能以及扩展时序开销。通过两个捕获触发器405或410之一接收数据。该触发器使能由第三个触发器415控制,该触发器415使得在该正数据选通信号(P_STB#)的驱动下使该所使能的触发器在捕获触发器405和410之间切换。从而在一个偶时钟发出的数据由该偶捕获触发器410捕获。在一个奇时钟发出的数据总是由该奇捕获触发器405捕获。图4所示出的当前电路显示了用于该信号的正数据相位的捕获电路。因此,也可以包括一个负数据相位捕获电路,其由一个负选通信号(N_STB#)驱动。在这一电路中,该内核时钟-至-取样触发器也被反相。
再次参照图4,该采样多路转换器420在启动(即发出)数据传输之后两个时钟周期从该捕获触发器采样该数据。该多路转换器420由该复位信号XRST#和该电路430同步,该电路430由该复位信号驱动。因此,由于该采样多路转换器420被同步到在偶时钟初始采样,该数据首先在偶时钟到达,如在选通启动时序细节中所示出的,从而该多路转换器420在发出之后两个周期正确地采样该偶和奇时钟数据。
一旦通过该采样多路转换器处理该数据,该数据被输入到该组合逻辑和一个采样触发器440。其随后被输出到该设备的其他电路。应该注意的是,该电路430显示了多个触发器,它们产生充分的延迟以提供适当初始化用于有效采样数据。该延迟路径将该采样多路转换器420同步到该所发出的数据。该延迟可以根据所实现的配置而改变。最好是,如图2所示,XCLKout(时钟信号)和XRSTout#(复位信号)由一个共同的源产生。在本实施例中,两者由该控制器产生,并且由使两者经过一个外部时钟驱动器传送以及保持如图2所示的近似相同的传送信号线长度而将两者保持同步。最好是,该总线的长度受到下列因素的眼制XCLK,XCLK至P_STB#+TOF(设备之间的信号传输时间)+P_STB#至捕获数据有效+P数据采样的建立时间小于或等于所分配的时钟周期数目(在本例中为2个时钟周期)。因此,在本实施例中,经过该采样触发器和采样多路转换器之间的组合逻辑435的延迟必须被包括在该建立时间中。最好是,在XCLK至P_STB+TOF大于或等于一个时钟周期时,从接收到发送的回转时间必须从一个XCLK周期增加到两个XCLK周期。这是为防止发送数据与该跟随的负数据相位接收数据相冲突。
图5示出的时序电路表示了所示例的数据包传输的时序。现在参见图5,在T5之前的某一时刻XRST#已经撤消了。该选通(P_STB#,N_STB#)已经在运行,并且该取样电路被同步。在左边被括起来的并被标以“send”的信号表示在发送端所观察到的信号定时,“Receive”信号表示在接收端所观察到的同一个信号。其之间的差就是在发送设备和接收设备之间该信号的传输时间所产生的时间位移。
在T37时刻,该发送设备确立HRTS#以表示它请求发送,在T37时刻,没有观察到XRTS#(未示出)被确立,从而该发送设备知道它已经赢得总线的裁决。发送方在时刻T38确立XADS#,以构成数据包信息,如1P,1N,2P,2N所指示的。
在接收端,该接收设备在时刻T38观察到(捕获)所确立的HRTS#。这是在时刻T37所确立的经过了时间位移的信号HRTS#。该接收设备知道在下一个时钟期间预计出现XADS#,当前实施例利用一个分布式仲裁器。从而,如果在这一例子中的发送方没有较高的优先级,就会在HRTS#两个时钟之后而不是一个时钟之后发送XADS#。每个设备知道其自己的优先级。根据约定,高优先级的设备比低优先级的设备早一个时钟发送数据(假设该低优先级的设备没有事先请求)。因此,在低优先级的设备确立其请求时,它必须等待另外一个时钟周期,以保证该高优先级的设备观察到该请求。在时钟T39,接收设备才从捕获该HRTS#的捕获触发器采样该HRTS#。然后在时刻T39开始从各个触发器采样数据。
在简化的流程6和7中示出了复位该系统的过程,使其以同步方式操作传输数据。参照图6概括描述执行该复位的过程。在步骤605,传送复位信号,使得它被所有的设备同时收到。进一步,该复位信号(XRST#)被通过驱动器输出,并且被反馈到起源设备,使得该线的长度是一致的,并且该复位信号被所有设备同时收到。该复位信号由一个PLL时钟同步送出,该PLL时钟通常不与该控制器设备(例如图2的设备215)的内核时钟同相。然而,该同样长度的反馈线保证了该时钟(以及与其同步的复位信号)在该信号到达该线的末端的时刻与该内核时钟同相。在步骤610设备(例如图2的215,220)观察到该复位信号的撤消。在步骤616,将采样该复位信号的第一个上升的时钟边缘标识为奇时钟周期,将下一个边缘标识为偶时钟周期。将第一个数据选通指示为在该复位信号撤消之后的第二个(偶)时钟边缘。在步骤620,在该复位信号撤消时,选择每一个设备的接收电路中的多路转换器的一个触发器识别该奇时钟周期,以将采样电路同步到发出该数据选通和数据的发送电路。
在步骤630,在一个偶时钟周期的时钟边缘启动数据传输,这与在该偶时钟周期发出数据选通相一致。最好是,在启动数据传输之前该系统等待一个预定的时钟周期数目,诸如64个时钟周期,使得给予电路的启动初始化提供充分的时间。
现在参考图7描述该传输过程。在步骤700,该传输设备向该接收设备同时发出一个选通和数据。在步骤701,接收设备接收到该选通和数据。在步骤702,如果该选通是在一个偶时钟传送的,则该数据由偶触发器捕获。如果该选通是在一个奇时钟传送的,则该数据由奇触发器捕获。在步骤703,该数据在从该发送设备发出后两个时钟之后在该接收器被采样。从而如果该数据是在偶时钟周期发出的,则由该偶触发器采样该数据,如果该数据是在奇时钟周期发出的,则由该奇触发器采样该数据。如上所述,一旦在两个设备中的电路被同步,该接收器电路简单地在偶触发器和奇触发器之间切换。因此,我们描述了在多个时钟周期上操作同步总线进行传输的过程,其中该发送设备和接收设备以同样的频率接收时钟信号。
尽管没有要求上面描述的高速同步系统的操作,但是使用下面描述的嵌入的流控制方法和装置进一步增加了该系统的效率。
特别是,通过将流控制分布到连接到该总线的设备以及将流控制数据嵌入到数据包中减少总线开销。每个设备具有至少一个跟踪数据流和进入和出去总线的总线请求的跟踪设备或者电路。在初始化时,向每个跟踪设备提供关于其他所连接的设备的缓冲器容量的信息。在数据包的传输过程期间,该跟踪设备访问每个分组的预定的位数以确定该队列的状态(即多满/空),并且控制数据包在设备之间的流动。从而将流控制嵌入该数据包协议中。
在当前的实施例中,描述了两个设备之间的流控制。然而,可以考虑通过复制跟踪设备将该结构扩充到支持多对设备之间的流控制。在图8中示出了该系统的流控制部分的简化的框图。参见图8,将存储器控制器805连接到存储器802和一个处理器803。或者将该存储器控制器连接到一个处理器总线,一个或者多个处理器803连接到该总线上。该存储器控制器805通过一条总线815进一步连接到一个总线桥810。在一个实施例中,该总线桥810连接到一个PCI总线820。该总线桥810提供到PCI总线820的一个总线连接(例如一个64位的连接)。然而,可考虑使该总线桥支持多个总线连接(例如两个32位的连接)。在一个多总线连接装置中,该跟踪电路跟踪该双队列的状态,一个队列一个连接。另外,这里将设备805描述为一个存储器控制器。然而,很明显,该设备805可以是连接到总线815的多种设备类型。类似地,可以将设备810作为多种设备实现,并不限于总线桥。
该存储器控制器805包括请求队列跟踪设备逻辑电路822,数据队列跟踪设备逻辑电路832,外出请求队列824,外出数据缓冲器826,进入请求队列828和进入数据队列830。同样示出了接口/控制逻辑电路834,该逻辑电路提供用于与存储器802和处理器803连接,执行存储器802和处理器803的存储器操作,以及提供请求数据包和确认数据包(下面将进行描述)的支持逻辑电路。
为了说明简化的目的,所示出的在存储器802,处理器803和存储器控制器805之间的进行通讯的数据是通过该接口/控制逻辑电路834进行传输的。然而,可考虑在该队列和存储器802和处理器803之间直接进行数据传输。该请求队列跟踪逻辑电路822和数据队列跟踪逻辑电路832分别跟踪各个队列824,852和826,856各自有多满,使得一旦队列已满,该跟踪设备防止产生一个数据包和将其放入队列824,826。在当前实施例,跟踪设备822,832作为一个计数器工作,以保持可用的队列空间的计数。该接口/控制逻辑电路834与该跟踪设备822,832一起操作,以向处理器803和存储器802发出相应的控制信号/数据,允许/防止产生外出的数据包和将其放入相应的队列。进入请求队列828和进入数据队列830分别从总线桥810接收进入请求和确认数据包(和相关的数据)。在一个实施例中,分别对该写数据和读数据进行队列存储和跟踪。在一个实施例中,该请求队列维持读和写请求,但是该跟踪设备只允许一个预定最大数目的读请求和一个预定数目的写请求,而不管在该队列中可使用的数据项的数目。
在一个实施例中,该跟踪逻辑822被配置成在一个深度为8的队列中只允许两个读请求和6个写请求。这是理想的,从而在请求的数目超过一个队列的大小时一种类型的请求(例如写请求)不会阻止读请求的队列存储。从而在当前的实施例中,如果当前队列存储6个写请求,并且该设备希望存储第7个写请求,该跟踪设备将不允许这种情况,即使该队列具有接收另外两个请求的容量(它们是对于每个读请求预先分配的)。如果该队列当前有6个写请求,并且该设备想发出一个读请求,该跟踪设备将允许队列存储该读请求。
该总线桥810类似地被配置成具有一个请求队列跟踪设备850,数据队列跟踪设备860,外出请求队列852,进入请求队列854,外出数据队列856,进入数据队列858和接口/控制逻辑电路882。执行类似于上述的队列跟踪功能。跟踪设备850,860分别维持存储在队列854,828或858,830中存储的信息的计数,并且在其中一个队列满时防止产生数据包。这里没有详细描述的接口/控制逻辑电路882代表用于与该总线820通讯的逻辑电路,并且产生下面将描述的该请求和确认数据包。
图9a和9b是简化了的流程图,它们分别表示用于请求和数据的流控制过程。尽管分别描述了这两个过程,并且可以使用其中之一或者两个过程启动该流控制,最好是同时使用这两个过程以控制该流控制,如图9c所示。在该当前的实施例中,该跟踪设备保持一个表示存储在接收缓冲器中的数据的计数。例如,跟踪设备824维持在队列852中存储的请求的计数。在该计数超过一个预定的最大值时,该跟踪设备控制该设备,比如处理器803,以禁止产生该数据包,以及使该设备继续重试发出该请求,直到在该队列中有空间可以利用。在当前的实施例中,如果该跟踪设备指示该接收队列是满的,就不产生一个数据包;可以考虑在另一个实施例中,该跟踪设备可以使用另一机制防止一个请求进入一个满的队列。
现在转回当前的实施例,如果从总线820尝试一个进入PCI(写)请求,将重试该请求直到该进入跟踪设备850指示在设备805中的进入队列具有用于该写请求的空间。对于外出事务发生同样的情况。如果一个进入请求队列要接受一个事务,而在该接收进入队列中没有空间,就会发生死锁,即使没有发送数据包,直到在该接受队列中有空闲空间时为止。
参见图9a,在步骤900,初始化由该跟踪设备维持的请求缓冲器计数。例如,该计数可以被初始化为零。然而该实际值可以是另一其他值,使得在该计数到达对应于该相应缓冲器的大小的预定的最大值时,发生一个寄存器溢出。或者是将该计数初始化为对应于该预定的最大值的一个值,在要发送每个请求时该跟踪设备递减该计数。从而在该计数到达零时,达到该缓冲器的最大值。可以将该缓冲器的最大规模进行硬编码或者从一个配置寄存器中读出或者填充。最好是,检查相应的缓冲器对,例如724,752,的容量,以确定具有该较小的容量的缓冲器,在这种情况下,该最大规模对应于具有该较小容量的缓冲器的大小。进一步,出于多种原因,可以考虑,该预定的最大值不一定必须正好等于该缓冲器的容量,可以是小于实际缓冲器容量的一个值。例如,在当前实施例中,即使该缓冲器容量是8,该写请求的预定的最大值是6。也可以考虑其它实施例。
在步骤905,如果收到一个完整的数据包,请求跟踪设备递减该请求缓冲器计数,在步骤910,接收到一个完成数据包,其表示该请求已被处理并且不再在缓冲器中,在步骤915,如果是要传送一个请求数据包,在步骤920,递增该请求缓冲器计数,并且判断该计数是否超过该预定的最大值(步骤925)。如果该计数不超过该预定的最大值,则在该设备中的接收缓冲器具有接收该请求的容量,并且准备该请求分组用于传输,以及随后通过总线传送(步骤940)。如果该计数超过该预定的最大值,则该缓冲器的可用的容量不能接受该请求数据包,并且该请求数据包跟踪设备防止产生该请求数据包或者进入队列,并且重试在该启动总线的传输过程,步骤935。
应当注意,图9a是参照自第一设备(例如图8的设备805)传输请求数据包描述的。然而,由于该数据包缓存在该同一个缓冲器(例如图8的进入请求缓冲器852),在该同一个设备要发送一个完成数据包时,执行该同样的过程。另外,如果以一个双端口设备(诸如上述总线桥)执行该同一个过程,该第一设备就继续传送(最好传送到替代缓冲器),直到两个缓冲器的容量全部为满。
对于在数据包中包含的数据执行一个非常类似的过程,以控制流控制。一个请求数据包的大小是确定的,其适应预定量的空间。然而,该数据量是可变的。因此,对于数据缓冲器,访问该数据包的一个长度字段以确定所需的缓冲器的空间量。然后执行一个类似的过程,确定何时存储在队列中的数据要超过该数据队列的容量。该跟踪设备将不允许超过该数据缓冲器的容量。例如,如果在总线820上的设备想写16个DWORDS(16*4个字节),但是跟踪设备指示只有8个空间,该控制逻辑882将只接受8个DWORDS。该总线820上的设备(未示出)必须对其余的DWORDS重试写入,直到该跟踪设备指示有用于它们的空间。也可以将控制逻辑882配置成该控制逻辑不允许产生数据包,直到所有的数据可以放在该队列中。
参见图9b,初始化该数据缓冲器,步骤950。如果收到一个完成数据包(步骤955),在步骤960将该数据缓冲器计数递减一个存储在该完成数据包中的长度(LEN)值。通过使用LEN值,可以准确地执行与该缓冲器容量有关的的缓冲器跟踪。应该注意,该LEN值与在该引出信息中发现的长度值相同。在步骤965,如果要发送一个请求,就确定该LEN值,并且将数据缓冲器计数递增一个对应于该LEN的量。在步骤970,如果该数据包的数据量加上该缓冲器中的当前数据量超过该缓冲器的容量,就禁止该设备产生该数据包以及放入该缓冲器中。该设备随后重试(990),直到该缓冲器的容量可以接受该数据包的数据量。较佳的是,请求设备可以指示要发送的是适合该剩余缓冲器空间的数据的一部分(例如通过向该跟踪设备发布一个命令)。该请求设备随后对该数据的剩余部分发布请求,并且在需要的时候进行重试。如果不超过该缓冲器计数,则在步骤995由该请求设备形成该数据包,并且被放入该缓冲器中。
如前面所说明的,较佳的是该流控制过程要考虑可用的请求缓冲器的空间和可用的数据缓冲器空间。如果每一个缓冲器都是满的,不能接收数据,就不能处理该请求。这个过程在图9c的流程图中示出。在步骤996,判定是否接收到一个完成数据包,如果接收到一个完成数据包,则在步骤997将该请求缓冲器计数递减一个数量,该数量对应于一个请求,将该数据缓冲器计数递减一个数量,该数量对应于该LEN值。在步骤998,如果接收到一个请求,就判定在该请求缓冲器和数据缓冲器中是否有可用的缓冲器空间。由于数据量可以变化,有可能一个缓冲器是满的而另一个缓冲器仍然有空间。如果每一个缓冲器都不能用于接收一个请求,就不处理该请求,在步骤1000向发送设备发布一个重试信号,指示以后重试该请求。否则,在步骤1001,向该请求缓冲器输出该请求,向该数据缓冲器输出该对应的数据。
从而,将该流控制嵌入在该数据包协议中。在图10a,10b和10c中示出了示意性的数据包。所描述的流控制机制指类型编码(TP[1∶0]),请求命令编码(RCOM[4∶0]),完成命令编码(CCOM[4∶0])和长度(LEN[7∶0])域,这些可以在请求数据包(图10a)和完成数据包(图10b)中找到。最好是由该跟踪设备分别控制写入和读取,使得可以使用不同的最大计数值用于写请求和读请求。
例如,当将一个读请求推入该存储器控制器外出事务队列时,TP[1∶0]是00,表示一个不带数据的请求,RCOM[4∶0]为0,表示该请求使用一个读队列项(read queue slot)。形成该数据包并且将之放入该队列中,并且因此将该外出读队列跟踪设备递减1。在PXB将对应于该读请求的完成数据包发送回时,TP[1∶0]是[1∶x],其中如果该数据返回,则x是1,如果没有数据返回,则x是0。CCOM[4∶0]是0,表示这是一个用于一个读请求的完成。该外出读队列跟踪设备因此将该计数递增1。接下来是,当从该存储器控制器进入事务队列弹出一个读完成时,就将该外出读队列跟踪设备递增1。对于该总线桥发生类似的操作。
在要执行一个写入操作时,将该请求推入该设备的外出事务队列。TP[1∶0]是01,表示一个带有数据的请求,RCOM[4∶0]为1,表示该请求正在使用一个写队列项。将该输出写请求队列跟踪设备递增1。在将对应于该写请求的完成数据包发送回时,TP[1∶0]是10,表示一个不带数据的完成。CCOM[4∶0]是1,表示这是一个用于一个写请求的完成数据包。当从该设备的进入事务队列弹出一个写完成时,就将该外出写队列跟踪设备递增1。如上面所指出的,在一个事务队列跟踪设备递减到0时,该类型的事务就不再被推入到该事务队列中。最好是,该请求设备重试该类型的任何另外的动作。
在本实施例中,对数据缓冲器管理的处理有些不同;然而,可考虑以与请求相同的方式处理数据缓冲器管理。由该数据缓冲器跟踪设备使用在该请求数据包头标中的TP[1∶0],RCOM[4∶0]和LEN[7∶0]域以分配数据缓冲器。由该数据缓冲器跟踪设备使用在该完成数据包头标中的TP[1∶0],CCOM[4∶0]和LEN[7∶0]域以释放数据缓冲器。
例如,在由比如该处理器将一个读取请求推入该存储器控制器外出事务队列时,TP[1∶0]为00,表示一个不带数据的请求,RCOM[O]为0,表示该请求正在使用一个读队列项,将该外出读数据缓冲器跟踪设备递减LEN,其中该LEN指示数据的大小,在本实施例中,是所请求的DWORDS的数目。
在由该总线桥将该读取的完成数据包发送回时,TP[1∶0]为[1∶x],其中如果数据被返回则x为1,如果没有数据返回,则x为0。CCOM[4∶0]为0,表示该数据包是一个用于一次读取的完成数据包。在将一个读取完成从该存储器控制器进入事务队列弹出时,将该外出读取数据缓冲器递增LEN。
在由比如该所连接的处理器将一个写数据包推入该存储器控制器外出事务队列时,TP[1∶0]为01,表示一个带有数据的请求,RCOM[4∶0]为1,表示该请求正在使用一个写队列项。将该外出写数据缓冲器跟踪设备递减LEN,其中LEN表示被写入的DWORDS的数目。即使该写入在另一总线上没有成功,在该写请求数据包和该相关的完成数据包的LEN域中的值总是相同的。
在由该PXB将该写入的完成数据包发送回时,TP[1∶0]为10,表示一个不带数据的完成,CCOM
为1,表示该数据包是一个用于一个写请求的完成数据包。在该外出写数据缓冲器跟踪设备接收该写完成时,将该计数递增LEN。请求和完成以和它们输入相同的顺序离开一个事务队列。对于保留适当的事务顺序,即在一条总线上出现的次序与在该接收总线上的次序相同,这是必须的。然而,一个写完成不包含数据,因此,不要求顺序。因此,最好是将该完成数据包直接发送到该跟踪设备。
在一个数据缓冲器跟踪设备递减到0或者对于一个特定的请求其数据缓冲器不足时,该请求不能被推入该事务队列。该数据缓冲器跟踪设备的总线接口因此将重试该类型的任何其它事务。使用类似的逻辑支持由该总线桥发布的写数据包。
下面示出了该嵌入的流控制过程的简化的例子。为了讨论的目的,该例子被简化了,没有考虑诸如与预提取有关的其它配置参数。另外,下面的例子和讨论在一个设备的上下文中探讨该流控制机制,诸如通过该本发明的高速总线连接到一个PCI总线桥扩展器的存储器控制器,该PCI总线桥扩展器将数据传输到两个32位PCI总线或者一个64位的PCI总线。
数据缓冲器跟踪设备(事务的单独的跟踪设备)


某些事务需要传输固定数量的DWORDS。例如,一个行写命令(PCIMWI)必须传输一整行。如果一行由8个DWORDS组成,可以利用的缓冲器少于8个DWORDS,则必须重试该事务。然而,对于一个正常的写数据串,可能只能接收该数目的DWORDS的一部分,而其余部分要重试。例如,除非可以使用对应于一整行的DWORDS的缓冲器空间,否则要重试存储器读行(MRL)事务。
如上所指出的,最好将该总线桥配置成发送用于双32位的操作模式和单64位的操作模式的数据包。在双32位模式中,‘a’和‘b’事务队列在它们各自的总线上独立操作。只在该高速总线接口出现交互,在该接口中一组或者另一组队列在该高速总线上在该总线桥和该存储器控制器之间发送或者接收。
在单64位模式中,该外出事务队列被配对以作为单个外出队列出现,将该进入事务队列配对以作为单个进入事务队列出现。实际上,该64位PCI总线接口的队列深度是该双32位PCI接口的每一个的两倍。因此队列跟踪是可配置的,以跟踪一队进入/外出队列以及一单个组队列。
将该外出事务队列以与该进入事务队列类似的方式进行对待。如果来自该高速总线接口的一个外出事务进入该‘a’外出队列(OutQa),下一个外出事务将进入该‘b’外出队列(OutQb),等等。在该总线桥接口,逻辑(比如一个状态机)在OutQa和OutQb之间切换。在OutQa开始,在连接到该总线桥的总线(比如一个PCI总线)上尝试第一个外出事务。如果该事务完成了,它就从OutQa弹出,并且将该完成数据包推入该队列指针正在指向的进入队列。接下来,尝试在OutQb顶部的事务。如果在第一次尝试时完成每个外出事务,该外出队列指针对每个所完成的事务进行切换。
如果重试在该外出队列顶部的一个读事务,就将其移入该相应的读请求队列RRQ(a或b),外出队列指针切换到另一个队列。如果重试该外出队列顶部的一个写事务,最好该队列指针不切换。在该外出队列指针将切换到另一个队列之间,一个重试的写入必须成功。然而,在尝试完成在该当前队列的顶部的写之间,也可以尝试在任一RRQ中的任一读取。一旦该当前外出写成功,就将其从该队列弹出,并且将一个完成数据包插入该当前进入队列。即使一个未完成的读取仍然保留在该RRQ中,该外出队列指针将切换到该另一个队列。
概括而言,一旦一个事务从该当前队列弹出,该外出队列指针就切换到另一个队列。一个被重试的写入只有在其成功后才被弹出。将一个被重试的读取从该外出队列弹出并且推入该RRQ。可以在任何时候尝试在一个RRQ中的读取,因为在其从该外出队列弹出的时候满足其顺序要求。(注意在一个64位PCI模式中,在一个RRQ中的外出读取可以经过在另一RRQ中的外出读取)在32位模式,根据该数据包的目的地标识(目的地ID),将一个外出事务从该高速总线传送到外出队列‘a’或‘b’之一。如在前一节所讨论的,多路转换器选择该下一个外出请求或者先前所退役的读取。对于64位的PCI模式,最好使用一个单独的多路转换器。在该总线桥启动64位模式的PCI事务时,一个多路转换器从外出队列‘a’或外出队列‘b’之一选择该命令和地址位。
进入事务可以寻址超过32位,从而两个进入队列可以支持在32位和64位模式中的双地址周期(DAC)译码。对于地址的高和低32位,该进入请求队列具有单独的锁存使能。在32位模式,低位地址分别锁存在PCI总线‘a’或‘b’的地址锁存器‘a’或地址锁存器‘b’中。在下一个PCI时钟之前该进入请求队列锁存该低位地址以准备一个DAC的高位地址的到达。如果该进入事务是一个单地址周期事务,必须将0加载进该进入请求队列的高位地址域中。
在64位模式,由32位PCI主或者64位PCI主启动该进入事务。32位PCI和64位PCI主(比如存储器控制器)要求在C/B[3∶0]对数据包确立DAC以寻址超过4GB,因为PCI主在这时不知道该目标设备是否是64位。对于低于4GB的地址,不要求64位的PCI主将高位地址驱动为0。如果以FRAME#确立REQ64#,并且在该第一个地址周期PXB在C/B[3∶0]上译码DAC,它可以立即译码该整个地址。如果C/B[3∶0]不指示DAC,该PXB必须在译码该地址之前迫使该高位地址全部为0。
如先前所说明的,该数据缓冲器最好作为与该事务或者请求队列独立的结构存在。将该PCI事务的数据存储在与该事务队列独立的队列结构中。将这一数据队列结构称之为数据缓冲器或者数据队列。对于数据,需要独立的队列,因为在事务队列中的事务和完成不是总是以它们进入该事务队列的相同顺序退役的。例如,写事务可以以同样的方向经过读事务。同样,PCI延迟的写以PCI主返回它们的数据的顺序退役,不必以接收读请求或者读数据的同样的顺序。
在双32位PCI模式中,在一个进入PCI写事务进入InQa时,在PCI总线上接着该地址和命令的数据将进入该PW Data 1进入数据队列。在经过该F16总线发送该相关的写数据包时,包含该写命令和地址的数据包头标将从InQa事务队列中拉出,写数据将从PW Data1/DRPLY Data 1进入数据队列中拉出。类似地,PCI总线‘b’上的一个进入PCI写将该命令和地址推入InQb,在该PCI总线上随后的相关数据被推入PW Data 2进入数据队列。
在双32位的PCI模式中,一个对PCI总线‘a’的外出32位PCI读取在PCI总线上成功时,就从OutQa或RRQa拉出对该PCI总线‘a’的该外出32位PCI读取,以及将一个读完成推入该InQa进入事务队列。该相关的读数据进入该PW Data 1/DRPLY Data 1进入数据队列。在通过F16总线发送该完成数据包时,将从该InQa事务队列拉出包含该读取完成标识符的数据包头标,以及从该PW Data 1/DRPLY Data1进入数据队列拉出该读取数据。
每个32位的PCI端口具有两个未完成的进入PCI读取。如果在该PXB进入队列中有一项用于读取以及在该PXB和MIOC中有可用的进入读数据缓冲器,则将一个在PCI端口的进入PCI读取推入InQa。此时,以该进入读取的命令和地址域加载该进入延迟的读取完成跟踪设备,从而可以识别请求该读取的PCI主。也将对于这一进入事务唯一的一个事务标识符加载进该进入延迟的读取完成跟踪设备,从而在其到达该OutQa时,可以标识该读完成。在该进入读取在该P6总线上完成时,一个延迟的读完成(DRC)数据包(其包含该读数据)将通过该高速总线到达该总线桥。包含该进入读取标识符的DRC翻译头标将被推入OutQa。根据哪一个DRC数据队列被分配给这一进入读取,将随着该数据包的读取数据推入DRC Data 1数据队列或者DRC 2数据队列。在该PCI主返回其数据时(其将连续地被退役,直到该数据到达),如果该相关的进入读取完成已经从该OutQa事务队列的顶部弹出以及在进入延迟的读取完成跟踪设备中将该进入读取标记为完成,则该PCI主将从DRC Data 1或DRC Data 2数据队列接收该数据。
在64位PCI模式中,类似于在64位PCI模式中的事务队列,将该两组数据缓冲器队列配对。一个进入写入将使得数据被交替推入PWData 1和PW Data 2数据队列。该数据队列为32位宽(DWord)。如果一次从一个64位PCI总线主接收64位的数据,以及该数据队列指针正在指向PW Data 1队列,该第一个DWord被推入PW Data 1数据队列,以及下一个DWord将被推入PW Data 2数据队列。另外的DWORDS在两个进入数据队列之间交替。
该DRC数据队列和写数据队列被配对,并以类似的方式交错。
上述的改进的数据包格式除了嵌入流控制信息外,还提供了这里称之为事务标识(TID)域的至少一个域,可以以多种方式使用该域。根据该应用该域最好是可以配置的。其优点是发送设备(即分发一个请求数据包的设备)可在这一域存储预定的数据,例如一个事务标识符或其它标识符。在处理该请求和准备该完成数据包后,该接收设备的控制逻辑简单地将该域的内容拷贝到该完成数据包,以传送回最初的发送设备。因此,其配置可以是这样的,由于该接收设备简单地拷贝该内容并且将其发送回时,使得该域的内容只对该发送设备有意义。而且,由于该数据包不限于特定的数据,该域可以用于多种目的。进一步,由于该接收设备简单地将该内容拷贝到该完成数据包,因此该内容保持不受干扰。
参考图11概括描述这一过程。在步骤1105,发送设备形成一个请求数据包。该请求数据包包括该事务ID域,该事务ID域用于存储请求设备数据。在步骤1110,发布该请求数据包,在步骤1115,该接收设备接收该数据包,并且形成一个回复数据包(1120)。该接收设备简单将该TID域拷贝到回复数据包,用于发送设备的随后访问。由于对此只要求简单的拷贝操作,因此该TID的内容不要求由接收设备解释。在步骤1125,将包括该TID域的所拷贝的内容的回复数据包发送回该请求设备。
在本实施例中,该域用于一次延缓的外出读取(处理器到PCI)事务。一个延缓的事务是一个分裂的事务,其中该读取被分裂成该最初的读请求,以及后来的一个延缓的回复。该所请求的数据由该延缓的回复返回。因此将该读请求者的设备和事务ID放入该TID域。在发送带有该读取数据的完成数据包时,将该TID从该请求数据包拷贝到该完成数据包。在该完成数据包到达该进入请求队列的顶部时,将一个延缓的回复发送到该请求处理器。该延缓的回复拷贝该完成TID到该延缓的回复,用于寻址发起该最初的读取的处理器。
已经结合本较佳实施例描述了本发明。很显然,对于本领域的普通技术人员来说,可以对所描述的内容进行多种替换,修改,变化和使用。
权利要求
1.一种用于管理通过在一个第一设备和一个第二设备之间的总线的数据的流控制的方法,所述方法包括步骤监视由该第一设备向该第二设备发布的外出请求和由该第一设备从该第二设备接收的进入完成;对于该第一设备发布的每个外出请求递增一个第一请求缓冲器计数,以及对于由该第一设备接收的每个进入完成递减该第一请求缓冲器计数;以及确定该第一请求缓冲器计数是否超过一个第一请求缓冲器最大值。
2.根据权利要求1的方法,其特征在于进一步包括步骤如果一个外出请求使得该第一请求缓冲器计数超过一个第一请求缓冲器最大值,就防止由该第一设备发布外出请求,直到发布该外出请求使得该第一请求缓冲器计数不超过该第一请求缓冲器最大值。
3.根据权利要求1的方法,其特征在于所述监视和递增步骤由该第一设备执行。
4.根据权利要求1的方法,其特征在于通过一个第一请求缓冲器处理由该第一设备向该第二设备发布的外出请求,该第一请求缓冲器计数对应于该第一请求缓冲器的容量。
5.根据权利要求4的方法,其特征在于该第一请求缓冲器位于该第二设备。
6.根据权利要求4的方法,其特征在于该第一请求缓冲器位于该第一设备。
7.根据权利要求1的方法,其特征在于通过一个位于该第一设备的第一请求缓冲器和位于该第二设备的该第二请求缓冲器处理由该第一设备向该第二设备发布的外出请求,该第一请求缓冲器计数对应于该第一请求缓冲器和第二请求缓冲器中的容量较小者。
8.根据权利要求1的方法,其特征在于还包括步骤监视由该第二设备向该第一设备发布的进入请求和由该第二设备从该第一设备接收的外出完成;对于该第二设备发布的每个进入请求递增一个第二请求缓冲器计数,以及对于由该第二设备接收的每个外出完成递减该第二请求缓冲器计数;以及确定该第二请求缓冲器计数是否超过一个第二请求缓冲器最大值。
9.根据权利要求8的方法,其特征在于进一步包括步骤如果一个进入请求使得该第二请求缓冲器计数超过一个第二请求缓冲器最大值,就防止由该第二设备发布进入请求,直到发布该进入请求使得该第二请求缓冲器计数不超过该第二请求缓冲器最大值。
10.根据权利要求8的方法,其特征在于所述监视进入请求和递增该第二请求缓冲器计数的步骤在该第二设备中执行。
11.根据权利要求1的方法,其特征在于进一步包括步骤在初始化时,确定来自该第二设备的第二设备的第一缓冲器容量值;以及在该第一设备中存储一个对应于该第一缓冲器容量的值作为该第一请求缓冲器最大值。
12.根据权利要求1的方法,其特征在于进一步包括步骤在初始化时,确定在该第一设备中的一个缓冲器容量大小以及在该第二设备中的一个缓冲器容量大小;以及选择一个对应于该第一设备缓冲器容量大小和该第二设备缓冲器容量大小中的一个较小者的值作为一个第一请求缓冲器最大值。
13.根据权利要求1的方法,其特征在于对于由该第一设备发布的每个外出请求,将该第一请求缓冲器计数递增1,以及对于由该第一设备接收的每个进入完成,将该第一请求缓冲器计数递减1。
14.根据权利要求1的方法,其特征在于对于作为一个写请求的每个外出请求,将该第一请求缓冲器计数递增一个对应于要写入的数据量的值,以及对于作为一个写请求的每个进入完成,将该第一请求缓冲器计数递减一个对应于要写入的数据量的值。
15.根据权利要求1的方法,其特征在于还包括步骤监视由该第一设备向该第二设备发布的外出写请求的数据的大小和由该第一设备从该第二设备接收的进入写完成的数据的大小;对于该第一设备发布的每个外出写请求将一个数据缓冲器计数递增其数据的大小,以及对于由该第一设备接收的每个进入写完成将该数据缓冲器计数递减一个对应于该写请求的数据大小;以及确定该数据缓冲器计数是否超过一个数据缓冲器最大值。
16.根据权利要求15的方法,其特征在于进一步包括步骤如果该数据缓冲器计数将超过一个数据缓冲器最大值,就防止发布随后的外出写请求,直到发布该外出请求使得该数据缓冲器计数将不超过该数据缓冲器最大值以及该请求缓冲器计数将不超过该请求数据缓冲器最大值。
17.根据权利要求15的方法,其特征在于通过一个第一数据缓冲器处理由该第一设备向该第二设备发布的外出请求,该第一数据缓冲器计数对应于该第一数据缓冲器的容量。
18.根据权利要求17的方法,其特征在于该第一数据缓冲器位于该第二设备。
19.根据权利要求15的方法,其特征在于该第一数据缓冲器位于该第一设备。
20.根据权利要求15的方法,其特征在于通过一个位于该第一设备的第一数据缓冲器和位于该第二设备的该第二数据缓冲器处理由该第一设备向该第二设备发布的外出请求,该第一数据缓冲器计数对应于该第一数据缓冲器和第二数据缓冲器中的容量较小者。
21.根据权利要求15的方法,其特征在于进一步包括步骤在初始化时,确定来自该第二设备的第二设备的第一缓冲器容量值;以及在该第一设备中存储一个对应于该第一缓冲器容量值的一个值作为该第一数据缓冲器最大值。
22.根据权利要求15的方法,其特征在于进一步包括步骤在初始化时,确定在该第一设备中的一个缓冲器容量大小以及在该第二设备中的一个缓冲器容量大小;以及选择一个对应于该第一设备缓冲器容量大小和该第二设备缓冲器容量大小中的一个较小者的值作为一个第一数据缓冲器最大值。
23.根据权利要求15的方法,其特征在于进一步包括步骤与该第一设备有关的一个存储器控制器处理该进入请求和执行相关的操作,所述存储器控制器指示何时要产生外出完成以由该第一设备随后发布到该第二设备。
24.根据权利要求1的方法,其特征在于一个连接到该第一设备和第二设备的处理器从位于该第一设备的一个配置寄存器读取一个第一缓冲器大小值,以及确定在该第一设备上接收由该第二设备发布给第一设备的外出请求的一个进入缓冲器的大小,和在该第一设备上存储一个对应于该缓冲器大小的值作为该第一请求缓冲器最大值。
25.根据权利要求1的方法,其特征在于还包括步骤如果该第一请求缓冲器计数不超过一个第一请求缓冲器最大值,则将外出请求放入该第一缓冲器;递增该第一请求缓冲器计数;以及将在该第一缓冲器中的输出请求发送到该第二设备。
26.一个总线系统,包括一条总线;连接到该总线的一个第一设备;连接到该总线的一个第二设备,一个具有预定大小的第一进入请求缓冲器;一个位于该第一设备中的第一跟踪设备,所述第一跟踪设备配置成监视由该第一设备发布的和由该第一请求进入缓冲器接收的外出请求,以及由该第一设备从该第二设备接收的进入完成,并且对于该第一设备发布的每个外出请求递增一个第一请求缓冲器计数,以及对于由该第一设备接收的每个进入完成递减该第一请求缓冲器计数,将所述第一跟踪设备进一步配置成确定该第一请求缓冲器计数是否超过一个第一请求缓冲器最大值。
27.根据权利要求26的总线系统,其特征在于该第一进入请求缓冲器位于该第二设备。
28.根据权利要求26的总线系统,其特征在于该第一进入请求缓冲器位于该第一设备。
29.根据权利要求26的总线系统,其特征在于通过一个位于该第一设备的第一请求缓冲器和位于该第二设备的该第二请求缓冲器处理由该第一设备向该第二设备发布的外出请求,该第一请求缓冲器计数对应于该第一请求缓冲器和第二请求缓冲器中的容量较小者。
30.根据权利要求26的总线系统,其特征在于该第一请求缓冲器最大值对应于该第一进入请求缓冲器的容量。
31.根据权利要求26的总线系统,其特征在于将该第一跟踪设备进一步配置成如果一个外出请求的发布使得该第一请求缓冲器计数超过一个第一请求缓冲器最大值,就防止由该第一设备发布该外出请求,直到发布该外出请求使得该第一请求缓冲器计数不超过该第一请求缓冲器最大值。
32.根据权利要求26的总线系统,进一步包括一个第二进入请求缓冲器;位于该第二设备中的第二跟踪设备,所述第二跟踪设备被配置成监视由该第二设备发布的和由该第二进入请求缓冲器接收的进入请求,以及由该第二设备从该第一设备接收的进入完成,并且对于该第二设备发布的每个进入请求递增一个第二请求缓冲器计数,以及对于由该第二设备接收的每个进入完成递减该第二请求缓冲器计数;以及将所述第二跟踪设备进一步配置成确定该第二请求缓冲器计数是否超过或者将要超过一个第二请求缓冲器最大值。
33.根据权利要求32的总线系统,其特征在于所述第二跟踪设备进一步配置成防止由该第二设备发布外出请求,直到该第二请求缓冲器计数低于该第二缓冲器最大值。
34.根据权利要求32的总线系统,其特征在于还包括位于该第二设备中的进入数据缓冲器;位于该第一设备中的第二跟踪设备,所述第二跟踪设备配置成监视由该第一设备发布的和由该第二设备的进入数据缓冲器接收的外出写请求的数据的大小和由该第一设备从该第二设备接收的进入写完成的数据的大小,以及对于该第一设备发布的每个外出写请求将一个数据缓冲器计数递增其数据的大小,以及对于由该第一设备接收的每个进入写完成将该数据缓冲器计数递减一个对应于该写请求的数据大小;以及所述第二跟踪设备确定该数据缓冲器计数是否超过一个数据缓冲器最大值。
35.根据权利要求34的总线系统,其特征在于该第二跟踪设备进一步配置成如果该数据缓冲器计数超过一个数据缓冲器最大值,就推迟发布随后的外出写请求,直到该数据缓冲器计数低于该数据缓冲器最大值以及该请求缓冲器计数低于该请求缓冲器最大值。
36.根据权利要求26的总线系统,其特征在于进一步包括与该第二设备有关的一个存储器控制器,所述存储器控制器配置成处理该外出请求和执行相关的操作,所述存储器控制器进一步配置成指示何时要产生进入完成以由该第二设备随后发布到该第一设备。
37.根据权利要求26的总线系统,其特征在于还包括一个连接到该第一设备的处理器,所述处理器配置成从位于该第二设备的一个配置寄存器读取一个缓冲器大小值,以确定在该第二设备上接收由该第一设备发布到第二设备的外出请求的进入缓冲器的大小,和在该第一设备上存储一个对应于该缓冲器大小的值作为该缓冲器最大值。
38.根据权利要求26的总线系统,其特征在于还包括一个位于该第一设备的一个第二进入请求缓冲器,所述第二进入请求缓冲器配置成接收由该第一设备接收的进入完成。
39.根据权利要求26的总线系统,其特征在于还包括位于该第一设备中的一个第一外出缓冲器,其配置使得如果该第一请求缓冲器计数不超过一个第一请求缓冲器最大值,使所述外出请求放入该第一外出缓冲器用于随后通过总线输出到该第二设备。
40.根据权利要求26的总线系统,其特征在于还包括位于该第二设备中的一个第二外出缓冲器,其配置使得所述进入完成放入该第二外出缓冲器用于随后传输到该第一设备。
41.根据权利要求26的总线系统,其特征在于该第二设备是一个总线扩展器,所述总线系统还包括连接到该总线扩展器的一个第二总线。
42.根据权利要求26的总线系统,其特征在于该第一设备是一个总线桥,所述总线系统还包括连接到该总线桥的一个第二总线。
43.根据权利要求26的总线系统,其特征在于该第二设备是一个总线扩展器,所述总线系统还包括连接到该总线扩展器的一个第三总线。
全文摘要
本发明公开了一个用于控制设备之间的信息流的系统和方法.维护一个表示由一个第一设备发布的请求的计数。对于由该第一设备发布的每个数据包递增该计数(920),对于在该第一设备接收的每个数据包递减该计数(910)。通过确定何时由该第一设备发布的数据包使得超过该最大缓冲器计数,使用该最大缓冲器计数(其对应于该缓冲器的容量)来执行流控制。如果该计数超过该最大值(925),就防止由该第一设备发布数据包,直到发布该数据包不会超过该最大缓冲器计数。
文档编号G06F13/14GK1279786SQ98811399
公开日2001年1月10日 申请日期1998年9月17日 优先权日1997年9月22日
发明者D·M·贝尔 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1