可调节的重定时器缓冲器的制作方法

文档序号:18943426发布日期:2019-10-23 01:20阅读:308来源:国知局
可调节的重定时器缓冲器的制作方法

本公开涉及计算系统,并且特别地(但非排他地)涉及互连中的重定时器。



背景技术:

半导体处理和逻辑设计方面的进步已经允许可能存在于集成电路设备上的逻辑量的增加。作为必然结果,计算机系统配置已经从系统中的单个或多个集成电路演进到存在于单个集成电路上的多个核心、多个硬件线程和多个逻辑处理器,以及集成在此类处理器内的其他接口。处理器或集成电路典型地包括单个物理处理器管芯,其中处理器管芯可以包括任何数量的核心、硬件线程、逻辑处理器、接口、存储器、控制器中心等。

由于在更小的封装中装配更大处理能力的能力更大,更小的计算设备的普及度已经增加。智能电话、平板式计算机、超薄笔记本和其他用户设备已经呈指数级增长。然而,这些更小的设备对于数据存储以及超出形状因子的复杂处理两者都依赖于服务器。因此,对高性能计算市场(即,服务器空间)的需求也已经增加。例如,在现代服务器中,典型地不仅存在具有多个核心的单个处理器,而且还存在多个物理处理器(也称为多个插座)以增加计算能力。但随着处理能力连同计算系统中设备的数量一起增长,插座与其他设备之间的通信变得更加关键。

实际上,互连已经从主要处理电气通信的更传统的多点总线发展到促进快速通信的充分发展的互连架构。不幸的是,随着对未来处理器以甚至更高速率进行消耗的需求,对现有互连架构的能力也提出了对应的需求。

附图说明

图1示出了包括互连架构的计算系统的实施例。

图2示出了包括分层栈的互连架构的实施例。

图3示出了要在互连架构内生成或接收的请求或分组的实施例。

图4示出了用于互连架构的发送器和接收器对的实施例。

图5示出了潜在的高性能的处理器到处理器互连配置的实施例。

图6示出了与互连相关联的分层协议栈的实施例。

图7a-7c示出了用于确定链路的一个或多个子链路中的错误的测试模式的示例实现方式的简化框图。

图8a-8b示出了包括一个或多个扩展设备的示例链路的简化框图。

图9示出了示例重定时器设备的简化框图。

图10是示出用于动态地对重定时器的弹性缓冲器进行大小重新调整的示例技术的流程图。

图11a-11e示出了说明在一个示例中对重定时器的弹性缓冲器进行大小重新调整的简化框图。

图12是示出与包括重定时器的链路相结合的示例技术的流程图。

图13示出了包括多核心处理器的计算系统的框图的实施例。

图14示出了包括多个处理器的计算系统的框的实施例。

具体实施方式

在以下说明书中,阐述了许多具体细节,例如,特定类型的处理器和系统配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量/高度、特定处理器流水线级和操作等的示例,以便提供对本发明的透彻理解。然而,对于本领域技术人员显而易见的是,不一定需要采用这些具体细节来实践本发明。在其他实例中,为了避免不必要地模糊本发明,没有详细地描述公知的组件或方法,例如,特定的和可替代的处理器架构、用于所描述的算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实现方式、特定代码形式的算法表示、特定断电和门控技术/逻辑以及计算机系统的其他具体操作细节。

尽管可以参考特定集成电路中(例如,在计算平台或微处理器中)的能量节约和能量效率来描述以下实施例,但是其他实施例也适用于其他类型的集成电路和逻辑器件。与本文所描述的实施例类似的技术和教导可以应用于其他类型的电路或半导体器件,其也可以受益于更好的能量效率和能量节约。例如,所公开的实施例不限于台式计算机系统或超极本tm。并且还可以用于其他设备,例如,手持设备、平板式计算机、其他薄型笔记本、片上系统(soc)设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、互联网协议设备、数码相机、个人数字助理(pda)和手持pc。嵌入式应用典型地包括微控制器、数字信号处理器(dsp)、片上系统、网络计算机(netpc)、机顶盒、网络中心、广域网(wan)交换机或可以执行下面教导的功能和操作的任何其他系统。此外,本文所描述的装置、方法和系统不限于物理计算设备,而是还可以涉及用于能量节约和效率的软件优化。如将在以下说明书中变得显而易见的,本文所描述的方法、装置和系统的实施例(无论是参考硬件、固件、软件还是其组合)对于与性能考虑因素平衡的“绿色技术”未来是至关重要的。

随着计算系统的发展,其中的组件变得更加复杂。因此,用于在组件之间耦合和通信的互连架构的复杂度也在增加,以确保针对最佳组件操作满足带宽要求。此外,不同的市场细分需要互连架构的不同方面以适合市场的需要。例如,服务器要求更高的性能,而移动生态系统有时能够牺牲整体性能以节约功率。然而,大多数结构的唯一目的是以最大功率节约来提供可能的最高性能。下面讨论了多种互连,这些互连将潜在地受益于本文所描述的发明的方面。

一种互连结构架构包括外围组件互连(pci)快速(pcie)架构。pcie的主要目标是使得来自不同供应商的组件和设备能够在开放式架构中互操作,从而跨越多个市场细分:(台式的和移动的)客户端、(标准的和企业的)服务器以及嵌入式和通信设备。pci快速是针对各种未来的计算和通信平台而定义的高性能的通用i/o互连。一些pci属性(例如,其使用模型、加载-存储架构和软件接口)已经通过其修订版进行维护,而先前的并行总线实现方式已经由高度可扩展的完全串行接口取代。pci快速的最近的版本利用点对点互连、基于交换机的技术和分组协议中的改进,以递送新的性能和特征水平。pci快速支持的高级特征中的一些包括功率管理、服务质量(qos)、热插拔/热交换支持、数据完整性和错误处理。

参考图1,示出了由将组件的集合互连的点对点链路组成的结构的实施例。系统100包括与控制器中心115耦合的处理器105和系统存储器110。处理器105包括任何处理元件,例如,微处理器、主机处理器、嵌入式处理器、协处理器或其他处理器。处理器105通过前端总线(fsb)106与控制器中心115耦合。在一个实施例中,fsb106是如下面所描述的串行点对点互连。在另一实施例中,链路106包括符合不同的互连标准的串行、差分互连架构。

系统存储器110包括任何存储器设备,例如,随机存取存储器(ram)、非易失性(nv)存储器或可由系统100中的设备访问的其他存储器。系统存储器110通过存储器接口116与控制器中心115耦合。存储器接口的示例包括双倍数据速率(ddr)存储器接口、双通道ddr存储器接口和动态ram(dram)存储器接口。

在一个实施例中,控制器中心115是外围组件互连快速(pcie或pcie)互连层级中的根中心、根联合体或根控制器。控制器中心115的示例包括芯片组、存储器控制器中心(mch)、北桥、互连控制器中心(ich)、南桥和根控制器/中心。术语芯片组经常指代两个物理上分离的控制器中心,即,存储器控制器中心(mch)与互连控制器中心(ich)耦合。注意,当前系统经常包括与处理器105集成的mch,而控制器115以与下面所描述的方式类似的方式与i/o设备通信。在一些实施例中,可选地通过根联合体115来支持对等路由。

这里,控制器中心115通过串行链路119与交换机/桥接器120耦合。输入/输出模块117和121(也可以称为接口/端口117和121)包括/实现分层协议栈以提供控制器中心115与交换机120之间的通信。在一个实施例中,多个设备能够与交换机120耦合。

交换机/桥接器120将来自设备125的分组/消息向上游(即,沿着层级朝向根联合体向上)路由到控制器中心115,并且将来自处理器105或系统存储器110的分组/消息向下游(即,沿着层级远离根控制器向下)路由到设备125。在一个实施例中,交换机120被称为多个虚拟pci到pci桥接器设备的逻辑组装件。设备125包括要与电子系统耦合的任何内部或外部设备或组件,例如,i/o设备、网络接口控制器(nic)、插入卡、音频处理器、网络处理器、硬盘驱动器、存储设备、cd/dvdrom、监视器、打印机、鼠标、键盘、路由器、便携式存储设备、火线(firewire)设备、通用串行总线(usb)设备、扫描仪和其他输入/输出设备。通常在pcie中,诸如设备之类的日常用语被称为端点。尽管没有具体示出,但是设备125可以包括pcie到pci/pci-x桥接器,以支持旧有的pci设备或其他版本的pci设备。pcie中的端点设备通常被分类为旧有的集成端点、pcie集成端点或根联合体集成端点。

图形加速器130也通过串行链路132与控制器中心115耦合。在一个实施例中,图形加速器130与mch耦合,该mch与ich耦合。然后将交换机120以及因此i/o设备125与ich耦合。i/o模块131和118还用于实现分层协议栈以在图形加速器130与控制器中心115之间进行通信。类似于上面关于mch的讨论,图形控制器或图形加速器130本身可以集成在处理器105中。此外,系统的一个或多个链路(例如,123)可以包括一个或多个扩展设备(例如,150),例如,重定时器、中继器等。

转到图2,示出了分层协议栈的实施例。分层协议栈200包括任何形式的分层通信栈,例如,快速路径互连(qpi)栈、pcie栈、下一代高性能计算互连栈或其他分层栈。尽管紧接着下面参考图1-4进行的讨论涉及pcie栈,但是相同的概念可以应用于其他互连栈。在一个实施例中,协议栈200是pcie协议栈,其包括事务层205、链路层210和物理层220。接口(例如,图1中的接口117、118、121、122、126和131)可以表示为通信协议栈200。作为通信协议栈的表示也可以称为实现/包括协议栈的模块或接口。

pci快速使用分组以在组件之间传送信息。在事务层205和数据链路层210中形成分组以将信息从发送组件运载到接收组件。当发送的分组流经其他层时,利用在这些层处处理分组所必需的附加信息来对发送的分组进行扩展。在接收侧,发生相反的过程,并且分组从其物理层220表示变换为数据链路层210表示,并且(针对事务层分组)最终变换为可以由接收设备的事务层205处理的形式。

事务层

在一个实施例中,事务层205用于提供设备的处理核心与互连架构(例如,数据链路层210和物理层220)之间的接口。就这一点而言,事务层205的主要责任是对分组(即,事务层分组或tlp)的组装和拆分。转换层205典型地管理针对tlp的基于信用的流控制。pcie实现分离事务,即,请求和响应按时间分离的事务,从而在目标设备收集针对响应的数据时允许链路运载其他业务。

此外,pcie利用基于信用的流控制。在该方案中,设备在事务层205中通告接收缓冲器中的每一个的初始信用量。在链路的相对端处的外部设备(例如,图1中的控制器中心115)对由每个tlp消耗的信用的数量进行计数。如果事务没有超过信用限制,则该事务可以被发送。在接收到响应后,将恢复信用量。信用方案的一个优点是,只要没有达到信用限制,则信用返还的延迟将不会影响性能。

在一个实施例中,四个事务地址空间包括配置地址空间、存储器地址空间、输入/输出地址空间和消息地址空间。存储器空间事务包括用于将数据传送到存储器映射位置或从存储器映射位置传送数据的读取请求和写入请求中的一个或多个。在一个实施例中,存储器空间事务能够使用两种不同的地址格式,例如,短地址格式(例如,32位地址)或长地址格式(例如,64位地址)。配置空间事务用于访问pcie设备的配置空间。针对配置空间的事务包括读取请求和写入请求。定义消息空间事务(或简称为消息)以支持pcie代理之间的带内通信。

因此,在一个实施例中,事务层205组装分组报头/有效载荷206。当前分组报头/有效载荷的格式可以在pcie规范网站处的pcie规范中找到。

快速参考图3,示出了pcie事务描述符的实施例。在一个实施例中,事务描述符300是用于运载事务信息的机制。就这一点而言,事务描述符300支持对系统中的事务的识别。其他潜在用途包括跟踪对默认事务排序的修改以及事务与信道的关联。

事务描述符300包括全局标识符字段302、属性字段304和信道标识符字段306。在所示示例中,全局标识符字段302被描绘为包括本地事务标识符字段308和源标识符字段310。在一个实施例中,全局事务标识符302对于所有未完成的请求是唯一的。

根据一种实现方式,本地事务标识符字段308是由请求代理生成的字段,并且本地事务标识符字段308对于对该请求代理而言要求完成的所有未完成请求是唯一的。此外,在该示例中,源标识符310唯一地标识pcie层级内的请求者代理。因此,本地事务标识符308字段与源id310一起提供层级域内的事务的全局标识。

属性字段304指定事务的特性和关系。就这一点而言,属性字段304潜在地用于提供允许对事务的默认处理进行修改的附加信息。在一个实施例中,属性字段304包括优先级字段312、保留字段314、排序字段316和非窥探(no-snoop)字段318。这里,优先级子字段312可以由启动程序修改以向事务指派优先级。保留属性字段314被保留用于将来使用或供应商定义的使用。可以使用保留属性字段来实现使用优先级或安全属性的可能的使用模型。

在该示例中,排序属性字段316用于供应传达可以修改默认排序规则的排序类型的可选信息。根据一个示例实现方式,排序属性“0”表示要应用的默认排序规则,其中排序属性“1”表示放宽排序,其中写入可以在相同方向上传递写入,并且读取完成可以在相同方向上传递写入。窥探属性字段318用于确定事务是否被窥探。如所示的,信道id字段306标识与事务相关联的信道。

链路层

链路层210(也称为数据链路层210)用作事务层205与物理层220之间的中间级。在一个实施例中,数据链路层210的责任是提供用于在链路的两个组件之间交换事务层分组(tlp)的可靠机制。数据链路层210的一侧接受由事务层205组装的tlp,应用分组序列标识符211(即,标识号或分组号),计算并应用错误检测码(即,crc212),并且将经修改的tlp提交给物理层220以用于跨物理到外部设备的传输。

物理层

在一个实施例中,物理层220包括逻辑子块221和电气子块222,以将分组物理地发送到外部设备。这里,逻辑子块221负责物理层221的“数字”功能。就这一点而言,逻辑子块包括用于准备用于由物理子块222发送的传出信息的发送部分,以及用于在将所接收的信息传递到链路层210之前识别并准备所接收的信息的接收器部分。

物理块222包括发送器和接收器。发送器由逻辑子块221供应符号,发送器将该符号串行化并发送到外部设备上。接收器被供应有来自外部设备的经串行化的符号,并且将所接收的信号转换为位流。位流被解串行化并且供应给逻辑子块221。在一个实施例中,采用8b/10b传输码,其中发送/接收十位符号。这里,特殊符号用于利用帧223对分组进行成帧。此外,在一个示例中,接收器还提供从传入串行流中恢复的符号时钟。

如上面所陈述的,尽管参考pcie协议栈的特定实施例讨论了事务层205、链路层210和物理层220,但是分层协议栈不限于此。实际上,可以包括/实现任何分层协议。作为示例,表示为分层协议的端口/接口包括:(1)用于组装分组的第一层(即,事务层);用于对分组进行排序的第二层(即,链路层);以及用于发送分组的第三层(即,物理层)。作为具体示例,使用公共标准接口(csi)分层协议。

接下来参考图4,示出了pcie串行点对点结构的实施例。尽管示出了pcie串行点对点链路的实施例,但是串行点对点链路不限于此,因为串行点对点链路包括用于发送串行数据的任何传输路径。在所示的实施例中,基本pcie链路包括两个低电压差分驱动信号对:发送对406/411和接收对412/407。因此,设备405包括用于将数据发送到设备410的发送逻辑406以及用于从设备410接收数据的接收逻辑407。换言之,在pcie链路中包括两个发送路径(即,路径416和417)以及两个接收路径(即,路径418和419)。

传输路径指代用于传输数据的任何路径,例如,传输线路、铜线路、光线路、无线通信信道、红外通信链路或其他通信路径。两个设备(例如,设备405与设备410)之间的连接被称为链路(例如,链路415)。链路可以支持一个通道——每个通道表示差分信号对的集合(一对用于发送,一对用于接收)。为了扩展带宽,链路可以聚合由xn表示的多个通道,其中n是任何支持的链路宽度,例如,1、2、4、8、12、16、32、64或更宽。

差分对指代用于发送差分信号的两个发送路径,例如,线路416和417。作为示例,当线路416从低电压电平切换到高电压电平(即,上升沿)时,线路417从高逻辑电平驱动到低逻辑电平(即,下降沿)。差分信号潜在地表现出更好的电气特性,例如,更好的信号完整性(即,交叉耦合、电压过冲/下冲、振铃等)。这允许更好的时序窗口,从而实现更快的传输频率。

在一个实施例中,可以利用超路径互连(upi)来互连两个或更多个设备。upi可以实现下一代高速缓存一致的基于链路的互连。作为一个示例,upi可以在高性能计算平台(例如,工作站或服务器)中使用,包括在其中pcie或另一种互连协议典型地用于连接处理器、加速器、i/o设备等的系统中。然而,upi不限于此。相反,upi可以在本文所描述的系统或平台中的任一个中使用。此外,所开发的各个想法可以应用于其他互连和平台,例如,pcie、mipi、qpi等。

为了支持多个设备,在一个示例实现方式中,upi可以包括指令集架构(isa)不可知论(即,upi能够在多个不同的设备中实现)。在另一场景中,upi还可以用于连接高性能i/o设备,而不仅仅是处理器或加速器。例如,高性能pcie设备可以通过适当的(即,upi到pcie)转换桥接器与upi耦合。此外,upi链路可以由许多基于upi的设备(例如,处理器)以各种方式(例如,星形、环形、网格等)使用。图5示出了多个潜在的多插座配置的示例实现方式。如所描绘的,双插座配置505可以包括两个upi链路;然而,在其他实现方式中,可以使用一个upi链路。对于较大的拓扑,可以使用任何配置,只要标识符(id)是可指派的并且存在某种形式的虚拟路径以及其他附加或替代特征。如所示的,在一个示例中,四插座配置510具有从每个处理器到另一个处理器的upi链路。但是在配置515中示出的八插座实现方式中,并非每个插座都通过upi链路彼此直接连接。然而,如果处理器之间存在虚拟路径或信道,则支持该配置。在本机域中支持的处理器的范围包括2-32个。可以通过使用多个域或节点控制器之间的其他互连来实现更多数量的处理器,以及其他示例。

在一些示例中,upi架构包括分层协议架构的定义,包括(一致的、不一致的以及可选地其他基于存储器的协议的)协议层、路由层、链路层和物理层。此外,upi还可以包括涉及功率管理器(例如,功率控制单元(pcu))、用于测试和调试的设计(dft)、故障处理、寄存器、安全的增强,以及其他示例。图5示出了示例upi分层协议栈的实施例。在一些实现方式中,图5中示出的层中的至少一些层可以是可选的。每个层处理其自己的粒度级或信息量(协议层620a、602b具有分组630,链路层610a、610b具有微片(flit)635,以及物理层605a、605b具有物理微片(phit)640)。注意,在一些实施例中,基于实现方式,分组可以包括部分微片、单个微片或多个微片。

作为第一示例,物理微片640的宽度包括链路宽度与位的1对1映射(例如,20位链路宽度包括20位的物理微片等)。微片可以具有更大的大小,例如,184、192或200位。注意,如果物理微片640是20位宽并且微片635的大小是184位,则取分数数量的物理微片640来发送一个微片635(例如,20位的9.2个物理微片用于发送184位微片635,或20位的9.6个物理微片用于发送192位微片,以及其他示例)。注意,物理层处的基础链路的宽度可以变化。例如,每个方向的通道的数量可以包括2、4、6、8、10、12、14、16、18、20、22、24等。在一个实施例中,链路层610a、610b能够将多个不同的事务嵌入单个微片中,并且一个或多个报头(例如,1、2、3、4)可以嵌入在微片内。在一个示例中,upi将报头分割成对应的时隙以使得微片中的多条消息能够去往不同节点。

在一个实施例中,物理层605a、605b可以负责物理介质(电的或光的等)上的信息的快速传送。物理链路可以是两个链路层实体(例如,层605a和605b)之间的点对点。链路层610a、610b可以从上层抽象化物理层605a、605b,并且提供可靠地传送数据(以及请求)并管理两个直接连接的实体之间的流控制的能力。链路层还可以负责将物理信道虚拟化为多个虚拟信道和消息类。协议层620a、620b依赖链路层610a、610b以在将协议消息递交到物理层605a、605b以便跨物理链路进行传送之前将协议消息映射到适当的消息类和虚拟信道中。链路层610a、610b可以支持多条消息,例如,请求、窥探、响应、写回、非一致数据,以及其他示例。

如图6所示,upi的物理层605a、605b(或phy)可以在电气层(即,连接两个组件的电导体)上方和链路层610a、610b下方实现。物理层和对应的逻辑可以驻留在每个代理上,并且对在彼此分离(例如,在链路任一侧的设备上)的两个代理(a和b)上的链路层进行连接。本地和远程电气层通过物理介质(例如,电线、导体、光等)连接。在一个实施例中,物理层605a、605b具有两个主要阶段:初始化和操作。在初始化期间,连接对链路层是不透明的,并且信令可能涉及定时状态和握手事件的组合。在操作期间,连接对链路层是透明的,并且信令处于一定的速度,其中所有通道一起作为单个链路进行操作。在操作阶段期间,物理层将微片从代理a传输到代理b,以及从代理b传输到代理a。连接也称为链路,并且在与链路层交换微片和当前配置(例如,宽度)的控制/状态时从链路层抽象化包括介质、宽度和速度的一些物理方面。初始化阶段包括次要阶段,例如,轮询、配置。操作阶段也包括次要阶段(例如,链路功率管理状态)。

在一个实施例中,可以实现链路层610a、610b从而提供在两个协议或路由实体之间的可靠的数据传送。链路层可以从协议层620a、620b抽象化物理层605a、605b,并且可以负责两个协议代理(a,b)之间的流控制,并向协议层(消息类)和路由层(虚拟网络)提供虚拟信道服务。协议层620a、602b与链路层610a、610b之间的接口可以典型地处于分组级别。在一个实施例中,链路层处的最小传送单元被称为具有指定数量的位的微片,例如,192位或某种其他度量。链路层610a、610b依赖物理层605a、605b来将物理层605a、605b的传送单元(物理微片)成帧为链路层610a、610b的传送单元(微片)。另外,链路层610a、610b可以在逻辑上分成两部分:发送方和接收方。一个实体上的发送方/接收方对可以连接到另一个实体上的接收方/发送方对。经常在微片和分组的基础上执行流控制。错误检测和纠正也可以潜在地在微片级别的基础上执行。

在一个实施例中,路由层615a、615b可以提供灵活且分布式的方法来将upi事务从源路由到目的地。该方案是灵活的,因为可以通过每个路由器处的可编程路由表来指定用于多个拓扑的路由算法(在一个实施例中编程由固件、软件或其组合来执行)。路由功能可以是分布式的;路由可以通过一系列路由步骤完成,其中每个路由步骤通过在源路由器、中间路由器或目的地路由器上查找表来定义。在源处的查找可以用于将upi分组注入upi结构。在中间路由器处的查找可以用于将upi分组从输入端口路由到输出端口。在目的地端口处的查找可以用于将目的地upi协议代理作为目标。注意,在一些实现方式中,路由层可以是薄的,因为路由表以及因此路由算法没有由规范明确定义。这允许灵活性以及各种使用模型,包括要由系统实现方式定义的灵活平台架构拓扑。路由层615a、615b依赖链路层610a、610b来提供对多达三个(或更多个)虚拟网络(vn)的使用——在一个示例中,两个无死锁的vn(vn0和vn1)具有在每个虚拟网络中定义的多个消息类。可以在链路层中定义共享自适应虚拟网络(vna),但是该自适应网络可以不直接暴露在路由概念中,因为每个消息类和虚拟网络可以具有专用资源和保证转发进展,以及其他特征和示例。

在一些实现方式中,upi可以利用嵌入式时钟。时钟信号可以嵌入到使用互连发送的数据中。在时钟信号嵌入在数据中的情况下,可以省略不同的且专用时钟通道。这可能是有用的,例如,由于可以允许设备的更多引脚专用于数据传送,特别是在引脚空间非常宝贵的系统中。

在一些实现方式中,诸如符合pcie、usb、upi或其他互连协议的链路之类的链路可以包括一个或多个重定时器或其他扩展设备,例如,中继器。重定时器设备(或简称“重定时器”)可以包括接收和重新发送(重定时)数字i/o信号的有源电子设备。重定时器可以用于扩展可以与数字i/o总线一起使用的信道的长度。

图7a-7c是示出了互连两个系统组件或设备(例如,上游组件705和下游组件710)的链路的示例实现方式的简化框图700a-700c。在一些实例中,在没有设置在两个组件705、710之间的链路上的重定时器、重驱动器或中继器的情况下,上游组件705和下游组件710可以直接连接(例如,图7a的示例中所示)。在其他实例中,可以提供重定时器(例如,715)以扩展连接上游组件705和下游组件710的链路(例如,图7b中所示)。在其他实现方式中,可以串联地提供两个或更多个重定时器(例如,715、720)以进一步扩展连接上游组件705和下游组件710的链路。例如,特定互连技术或协议可以指定最大信道长度并且可以提供一个或多个重定时器(例如,715、720)以扩展连接两个设备705、710的信道的物理长度。例如,在上游组件705与下游组件710之间提供重定时器715、720可以允许链路是在没有这些重定时器(例如,715、720)的情况下针对链路指定的最大长度的三倍,以及其他示例实现方式。

包含一个或多个重定时器的链路可以以与采用类似协议但没有重定时器的链路实现的数据速率相当的数据速率来形成两个或更多个单独的电子链路。例如,包括单个重定时器的链路可以形成具有两个单独的子链路的链路,每个子链路以8.0gt/s或更高的速率操作。图8a-8b示出了包括一个或多个重定时器的示例链路的简化框图800a-800b。例如,在图8a中,将第一组件805(例如,上游组件)连接到第二组件810(例如,下游组件)的链路可以包括单个重定时器815a。第一子链路820a可以将第一组件805连接到重定时器815a,并且第二子链路820b可以将重定时器815a连接到第二组件。如图8b所示,多个重定时器815a、815b可以用于扩展链路。可以通过两个重定时器815a、815b定义三个子链路820a-820c,其中第一子链路815a将第一组件连接到第一重定时器815a,第二子链路将第一重定时器815a连接到第二重定时器815b,以及第三子链路815c将第二重定时器815b连接到第二组件。

如图8a-8b的示例中所示,在一些实现方式中,重定时器可以包括两个伪端口,并且伪端口可以动态地确定其相应的下游/上游定向。每个重定时器815a、815b可以具有上游路径和下游路径。此外,重定时器815a、815b可以支持包括转发模式和执行模式的操作模式。在一些实例中,重定时器815a、815b可以对在子链路上接收的数据进行解码,并且对将在其另一个子链路上向下游转发的数据进行重新编码。在某些情况下,例如,当处理并转发有序集数据时,重定时器可以修改其接收的数据中的某些值。另外地,重定时器可以潜在地支持任何宽度选项作为其最大宽度,例如,由诸如pcie之类的规范定义的宽度选项的集合。

随着串行互连(例如,pcie、upi、usb等)的数据速率增加,重定时器越来越多地用于扩展信道范围。重定时器可以在重新生成并重新发送位流之前捕获所接收的位流。在一些情况下,重定时器可以是协议感知的并且具有完整的物理层或甚至协议栈,以允许重定时器参与链路协商(ltssm),包括发送器/接收器均衡化和其他链路训练活动。然而,在利用完整协议栈或完整物理层逻辑或链路层逻辑等实现重定时器的高速链路中,可能针对通过一个或多个重定时器连接两个或更多个设备的链路增加不可接受的延迟。实际上,随着外部接口的操作频率持续增加而同时信道改进以更适度的速度改进得更多,越来越多的应用可能利用重定时器或其他信道扩展设备。此外,许多应用要求更长的信道长度,例如,数据中心和服务器应用,其中互连信道可以跨越若干英寸,增大或超过新兴高速互连本机支持的最大信道长度。例如,设计为以16.0gt/s的频率操作的pci快速gen4可以提供特定的有限最大信道长度(例如,14”或更小)。对于其中信道长度可以典型地超过20英寸的服务器应用,可以寻求重定时器、重驱动器或其他中继器元件以扩展信道。类似地,对于超路径互连(upi)高速缓存一致接口,同样可以利用扩展设备从而以10.4gt/s支持更长长度平台,以及其他示例。

开发和实现用于高速接口的重定时器可能面临各种问题。例如,在诸如upi之类的高速缓存一致性协议中,信道可能对延迟极其敏感,使得由于通过(多个)重定时器引入的性能损失,增加的每个重定时器跳30nsec的附加延迟变得难以耐受。延迟也可能是诸如pcie之类的示例中的问题,例如,在存储器应用(例如,存储器驱动器和存储器服务处理器)中,并且随着下一代非易失性存储器(nvm)技术提供更高的带宽和更低的延迟从而与双倍数据速率(ddr)存储器(例如,ddr同步动态随机存取存储器(sdram))缩小差距,这些挑战预期只会恶化。

高速差分串行链路的速度持续增加。usb3.1具有10gt/s的链路速度并且pci快速4.0具有16gt/s的链路速度,其中未来标准应用和非标准应用的速度预期将进一步提高。尽管取得了这些进步,但是许多系统和设备的物理大小保持不变——使得对高速差分信道进行设计随着i/o速度的提高更具挑战性。现在许多信道设计要求诸如重定时器之类的有源扩展设备,并且要求扩展设备的信道设计的百分比正在增加。扩展设备可以包括诸如中继器、重驱动器和重定时器之类的示例。在这些示例中,重定时器提供了最大的扩展(每个重定时器100%)以及有保证的互操作性。然而,与更简单的仅模拟重驱动器扩展设备相比,重定时器也有一些缺点,包括增加的成本、延迟和功率。由于重定时器增加的延迟在使用计时架构的系统中尤为显著,在该系统中发送器和接收器使用包含低频扩频调制(ssc)的单独/独立参考时钟来帮助通过发射测试。作为示例,在pci快速中,可以采用计时架构:具有独立ssc的扩频(或sris)。usb3.0/3.1中也采用了这种计时架构。在一些情况下,可以采用这些计时架构,使得链路符合无线电通信规则和标准(例如,联邦通信委员会标准)以及其他原因。其他互连的其他计时架构可能存在类似的问题。

在许多协议中,重定时器的任务是在不丢弃或添加除符号之外的任何符号的情况下转发所有符号。在一些实现方式中,频率失配可能在由重定时器连接的端点之间出现。这种失配可能是以通过链路连接的端点的时钟应用调制方案的直接结果。在一些实现方式中,可以定义专用数据符号,可以从其中移除位或者可以向其中添加位以便于解决频率失配。例如,可以(例如,在pcie和usb中)定义skip或skp有序集(os),其被设计为被修改以补偿在链路的两端处的位速率之间的频率差异。另外地,可以提供弹性缓冲以执行该补偿。在一些实现方式中,可以在链路上连接的端点的接收器的物理层逻辑中提供弹性缓冲器。同样,重定时器也可以配备有弹性缓冲器以处理端点之间频率差异的周期性补偿。

在一些实现方式中,重定时器的弹性缓冲器可以被设计为在名义上保持半满,并且用于防止当独立的发送时钟和接收时钟具有速率差异时(例如,由于独立参考时钟和扩频调制)数据流中的下溢或溢出。在该示例中,每当缓冲器变得大于半满时,重定时器将skp符号从下一个skp有序集中移除,并且每当缓冲器变得小于半满时,重定时器将skp符号添加到下一个skp有序集。对于一些示例协议(例如,pci快速和usb),重定时器的弹性缓冲器的大小可以是以下因素的函数:例如,skp有序集被发送的速率(例如,基于sris(或另一时钟调制方案)是否应用于时钟)、链路宽度(形成链路的通道的数量)和最大数据分组大小(例如,因为在某些示例中这些协议可能不允许在数据分组的中间发送skp有序集(但是这些skp有序集将被缓冲,从而导致在完成长数据分组之后发送多个skp有序集)),以及其他示例。

在一个说明性示例中,在利用应用sris计时的时钟的系统中,当链路宽度是x1并且最大分组有效载荷大小是最大值(例如,4096字节)时,利用sris计时架构可能发生最坏情况延迟。考虑到在链路生命周期期间可能发生这种情况的可能性,传统的重定时器实现有弹性缓冲器,该弹性缓冲器被调整大小以潜在地处理最坏的情况(例如,xl链路和4096字节的最大分组大小)以避免由于弹性缓冲器溢出而引起的关键错误。然而,由于对重定时器弹性缓冲器进行大小调整以适应链路上的最坏情况条件,弹性缓冲器可能引入相当大的延迟,从而影响引入重定时器的链路的性能。

在一些情况下,链路的链路宽度和最大分组大小可以动态地确定,甚至可以动态地改变(例如,根据例如在pcie中的协议定义)。在一些实现方式中,可以为重定时器提供增强的功能以检测链路宽度、最大分组大小和其他链路属性,并且基于这些属性动态地适配其弹性缓冲器的大小,以及因此使通过重定时器的弹性缓冲器引入的延迟降低。例如,增强的重定时器可以基于对链路宽度、最大分组大小、时钟调制模式的改变来动态地更新其弹性缓冲器大小,以及其他示例。这可以导致重定时器延迟的显著减少,以及其他示例优点。

转到图9,示出了说明增强的重定时器的示例实现方式的简化框图900,该增强的重定时器配备有用于使得重定时器910能够对由重定时器910使用的缓冲器(例如,930)的大小进行动态地调节从而导致对链路特性的动态改变的逻辑。可以提供一个或多个重定时器设备910以扩展连接诸如处理器设备和端点设备、两个处理器设备等之类的两个设备(例如,905、915)的链路。在该示例中,(多个)重定时器910可以各自包括(例如,以硬件电路、硬件逻辑、固件和/或软件实现的)重定时器逻辑920、协议逻辑925、弹性缓冲器930和缓冲器管理器935逻辑以确定对链路特性的改变,并且基于对链路的这些改变来自动地调节弹性缓冲器930的大小。在该示例中,示出了与多通道链路的单个通道相对应的重定时器逻辑。因此,针对由重定时器910支持(以及在重定时器的每一侧)的多个通道中的每一个,可以复制图9中(以及本文其他示例中)所示出的组件(例如,在其两个接收器(例如,上游接收端口和下游接收端口)中的每一个处,每个通道具有单独的弹性缓冲器)。

在一个示例中,重定时器910的重定时器逻辑920可以促进重定时器910的标准重定时器功能,包括在重定时器的接收器(rx)端口中的一个处接收数据并且重新生成数据以便在重定时器的发送器(tx)端口中的对应的一个上发送。重定时器910可以另外地拥有协议逻辑925,以使得重定时器910能够支持并且在一些情况下参与针对一个或多个互连协议定义的链路训练、适配和/或其他功能。协议逻辑925可以包含少于完整协议栈的整体,相反,协议逻辑925可以是在不中断如在互连协议中定义的链路的正常初始化和操作的情况下允许重定时器910被插入到链路中的最小功能集。在一些实例中,协议逻辑925可以限于支持单个互连协议(给予重定时器910协议特定的设计)。在其他情况下,协议逻辑925可以被提供有针对多个不同互连协议的协议逻辑,并且可以(例如,在与重定时器910相对应的寄存器中)设置一个位(或多个位)以指示将在特定链路上启用协议逻辑925的什么子集(例如,使得仅启用协议逻辑中的单个协议逻辑),以及其他示例。

可以在重定时器910上提供协议逻辑925以增强基本重定时器逻辑920并且允许重定时器910支持符合特定互连规范(例如,pcie、usb、sata、upi等)的链路的活动。例如,重定时器可以包括用于支持或知晓诸如电气闲置退出/进入、速度改变、链路宽度协商和改变、均衡化以及在对应的互连规范中定义的其他特征之类的活动的逻辑。例如,在pcie中,可以由在pcie链路上连接的设备中的一个请求数据速率(或“速度”)改变。例如,设备的下游端口可以通过均衡化(eq)训练序列1(ts1)有序集(os)来请求速度改变,以通知另一设备的上游端口。例如,可以发送定义的有序集序列,其各自有一个或多个位(例如,pciets1或ts2有序集中的速度改变位)被设置以指示速度改变。接收设备可以通过向请求设备发送对应的有序集序列来响应以确认或拒绝改变速度的请求。如果请求被确认,则可以(使用其他有序序列的序列)重新训练链路从而以新速度操作。类似地,可以根据规范定义的参数和/或利用特定os位来发送有序集(例如,ts1和/或ts2)的模式,该特定os位被编码以指示要在链路内应用的链路宽度、改变链路宽度的请求(以及随后的确认)、时钟调制模式的改变(例如,启用或禁用扩频调制),以及其他示例。此外,不是将重定时器配备有完整协议栈或协议层,而是增强的重定时器的实现方式可以仅配备有(在重定时器处)处理诸如动态速度改变、发送器均衡化、用于功率状态改变的电气闲置进入、时钟调制改变、链路宽度改变和(例如,用于热插拔的)接收器检测之类的某些特征所要求的协议特定逻辑的特定部分,以及潜在的其他附加或可替代的示例。

可以提供重定时器的弹性缓冲器930以补偿链路的两端(例如,905、915)处的位速率之间的频率差异。可以扩展弹性缓冲器930,以便能够保持足够的符号以处理最坏情况频率差异和可以用于速率补偿的符号(例如,skpos)之间的最坏情况间隔。在该实现方式中,可以对弹性缓冲器的深度动态地进行大小重新调整,但是弹性缓冲器的最大大小可以根据针对由重定时器910支持的特定协议识别的最坏情况。逻辑(例如,重定时器的控制弹性缓冲器930的物理层逻辑)可以负责从专用数据序列(例如,skpos、align、其他os等)插入或移除符号,该专用数据序列被指定或设计用于在缓冲器930处增加或减少以便避免弹性缓冲器的溢出或下溢。例如,协议逻辑925可以包括逻辑(例如,逻辑phy逻辑)以监视所接收的数据流,并且确定何时接收到这些专用数据序列,从而为弹性缓冲器提供添加或移除符号的机会以尝试将缓冲器930的容量保持在特定水平(例如,尽可能接近半满)。然而,该目标容量可以与由于重定时器弹性缓冲器930而将引入的平均延迟相对应。因此,可能期望使弹性缓冲器的(有效)大小最小化以便减少链路上的延迟,同时仍然管理频率失配并且防止缓冲器溢出/下溢。

弹性缓冲器930的大小可以由重定时器910的缓冲器管理器935组件管理,以便动态地且自主地管理由弹性缓冲器930引入的延迟。在一个示例中,缓冲器管理器935可以包括(例如,以硬件电路、硬件逻辑、固件和/或软件实现的)链路改变检测逻辑940、改变映射逻辑945和缓冲器大小改变逻辑950,以及其他模块和子组件。在一个示例中,链路改变检测940逻辑可以配备有用于识别对重定时器910在其上实现的链路的特性的各种类型的改变的功能。这些特性可以包括可能影响弹性缓冲器930为了避免溢出或下溢所需要的最大大小的那些特性,例如,链路的链路宽度、是否在链路端点(例如,905、910)的时钟处应用计时调制(以及哪种类型的计时调制)、在链路上发送专用数据序列(例如,skpos)的间隔(从而提供机会以当弹性缓冲器930接近下溢条件时(通过向接收的专用数据序列添加位或符号)或当弹性缓冲器930接近溢出条件时(通过从接收的专用数据序列移除位或符号)补偿弹性缓冲器930中的容量)、链路的速度、有效载荷或分组大小(例如,因为可能只允许专用数据序列在分组之间发送),以及其他示例。

在一些情况下,链路改变检测逻辑940可以与协议逻辑925相互操作或者与协议逻辑925组合,并且识别由端点905、915通过重定时器发送的数据流中的请求、序列和其他信息,以便于不仅检测对这些链路特性中的一个的改变正在发生或即将发生,而且还检测改变的性质或程度(例如,在链路宽度改变中添加的通道的量、应用的时钟调制的类型、速度改变量、有效载荷大小改变量)。对这种改变的消息传递可以是协议定义的,并且协议逻辑925可以实现对在设备905、915之间的这种消息传递/信令的检测和恰当解释。缓冲器管理器910可以另外地配备有逻辑945以将链路改变的类型(和程度)映射到弹性缓冲器大小的对应改变。例如,改变链路宽度可以影响弹性缓冲器的大小的成反比的改变。作为示例,将链路的链路宽度从x4(即,4通道)链路向上配置到x16(即,16通道)链路可以允许弹性缓冲器930的大小减小75%。另外地,禁用特定时钟调制方案(例如,sris)可以(通过改变映射模块945)映射到弹性缓冲器中的特定减少(例如,由于通过移除特定时钟调制而导致预期的ppm减少),以及链路上采用的最大有效载荷大小的改变(增加或减少)(其可以由改变映射模块945映射到可以对弹性缓冲器930的深度进行的对应增加或减少)。实质上,改变映射模块945可以对弹性缓冲器930的大小可以响应于检测到对链路特性的改变的特定类型(和程度)而增加或减少的量进行量化。缓冲器改变模块950可以利用该信息以使得弹性缓冲器930的大小改变使用链路改变检测940和改变映射模块945所确定的量。

在一些实现方式中,对弹性缓冲器930的大小的改变(通过缓冲器管理器逻辑935)可以限于链路的某些状态或操作模式。在一个示例中,改变重定时器的弹性缓冲器930的大小可能潜在地导致发送到重定时器910用于重定时的数据丢失、改变或损坏。这在操作传输状态中是不可接受的,其中关键应用或系统管理数据通过重定时器910在设备之间发送(例如,在不能容忍这种程度的潜在位或分组丢失的链路状态(例如,l0)中)。因此,在一个示例中,对弹性缓冲器930的大小的改变可以限于容忍在对弹性缓冲器进行大小重新调整时可能要求的符号丢弃的链路训练状态。

在一个示例中,重定时器对在链路上(以及通过重定时器)发送的训练集进行监视,以识别何时将发生对链路的属性的改变,例如,动态链路宽度改变。然后,增强的重定时器可以通过在(重新)训练中的某个点丢弃或添加训练集来动态地调节弹性缓冲器大小。在一个实现方式中,链路训练可以涉及两步过程,其中第一步专用于建立位锁定、符号/块对齐、设置序列加扰逻辑(例如,线性反馈移位寄存器(lfsr)),以及以其他方式使得链路进入可操作状态。例如,pcie中的训练可以涉及一个端点设备发送特定(例如,ts1)有序集,并且可以在其已经完成第一步时切换到ts2有序集(例如,以指示到第二训练步骤的转换)。此外,在一些实现方式中,链路可以容忍对训练阶段中的使得链路进入可操作状态的(ts1)有序集的任何添加/删除。然而,一旦链路被带到该点,链路就可能对添加或删除数据更加敏感(甚至禁止)。例如,在pcie中,一旦设备开始发送ts2有序集,该链路就不具备在两个方向上处理ts2有序集中的任意错误的特征。因此,在一个示例中,可以在链路的操作状态之前发生的训练阶段期间(例如,在链路训练的ts1阶段期间)对重定时器缓冲器大小进行改变。在一些实例中,重定时器甚至可以用于扩展该训练阶段以便利用该窗口并且“争取时间”以基于链路的特性适当地设置其弹性缓冲器的深度。例如,重定时器可以人为地继续在上游方向和下游方向两者上发送ts1以扩展ts1训练阶段,并且允许其链路伙伴(例如,905、915)处理随弹性缓冲器的改变而发生的任何符号丢失/添加。

在一些实现方式中,其中可以允许重定时器弹性缓冲器大小改变的链路训练阶段也可以方便地是这样的链路训练阶段:其中将检测到作为弹性缓冲器大小重新调整的基础的对应的链路特性改变中的一个或多个。例如,在pcie中,链路宽度改变和对sris模式的改变可以在链路训练阶段期间通过消息传递发生,在该链路阶段中发送ts1os并且可以执行弹性缓冲器大小重新调整。在其他实例中,某些类型的链路特性改变可能在这些允许状态之外发生。例如,最大有效载荷大小的改变可以由设备(例如,905和915)在链路训练阶段或其中允许重定时器弹性缓冲器大小重新调整的其他链路状态(由于在该大小重新调整期间丢弃或添加符号的可能性)之外来启动。因此,在一个示例中,在(例如,使用链路改变检测模块940)识别出某些类型的链路特性改变并且识别出该改变发生在链路的允许对弹性缓冲器930进行大小重新调整的可操作条件之外时,缓冲器管理器935可以响应于这样的链路特性改变而尝试强制链路进入链路训练阶段或在其中进行大小重新调整是可能的其他状态(例如,恢复或配置状态)。例如,在符合pcie的链路和重定时器的示例中,响应于检测到对改变链路上支持的最大有效载荷大小的尝试,缓冲器管理器935可以通过使用以下机制来强制进入pcie恢复阶段:例如,以128b/130b编码翻转同步报头或以8b/10b编码发送tsl,以及强制链路进入恢复并为缓冲器管理器935提供机会以基于最大有效载荷大小改变来调节弹性缓冲器大小的其他技术,以及其他示例。

在一些实现方式中,可能无法从协议的常规带内数据流中(例如,通过协议逻辑925)检测到某些链路特性改变。这可能是由于驻留在重定时器上(例如,并且由诸如链路改变检测模块940之类的组件使用)的最小化或以其他方式简化的协议栈逻辑。在一些情况下,为了支持对某些类型的链路特性改变的检测并由此促进对应的重定时器弹性缓冲器大小调节,可以定义专用消息传递分组,通过该专用消息传递分组,端点(例如,905、915)中的一个或两个可以将对相关链路特性(例如,sris模式或最大有效载荷大小等)的即将发生的或未决的改变通知重定时器910。在其他示例中,可以在重定时器910上定义一个或多个边带端口,以支持与其链路伙伴(例如,905、915)中的一个或两个的边带信道(例如,955),通过该边带信道可以将带外提示、信号和消息从设备中的一个(例如,905)发送到重定时器910,并且传送潜在地影响重定时器的弹性缓冲器930大小的对链路特性的即将发生的或未决的改变。在基于符合pcie的系统的一个特定示例中,(例如,在设备905上的)主机控制器可以将最大有效载荷大小(或对最大有效载荷大小的改变)和/或是否通过边带机制(例如,系统管理总线(smbus)、联合测试行动组(jtag)等)或替代的带内机制(例如,通过在增强的skpos的最后三个符号中提供供应商定义的管理命令)在链路伙伴时钟上启用sris通知重定时器910,以及其他示例实现方式。

在一个示例实现方式中,可以结合在重定时器上实现的用于pci快速的物理接口(pipe)逻辑来提供上面所描述的增强特征。pipe可以在mac/控制器与互连的phy之间提供标准接口。在基于pipe的实现方式的一个示例中,pipemac/控制器可以用这样的逻辑来增强:当控制器基于检测到的事件(例如,链路宽度改变、速度改变、ppm差异改变(例如,来自时钟架构的改变)或最大有效载荷大小的改变)识别出发生动态弹性缓冲器大小调节是安全的时候(例如,因为链路业务正在发送和接收ts1有序集),更新针对弹性缓冲器大小的信号。phy更新弹性缓冲器并在更新完成时用信号通知。在一个示例中,pipe接口中用于指示大小改变以及大小改变何时完成的信号可以是更新的寄存器或指示大小的信号的集合。此外,phy用于指示完成的状态信号可以是由phy更新的信号/线或寄存器。可以增强phy以快速地实现动态弹性缓冲器改变,而不会导致任何数据损坏(仅丢失或重复日期插入)。例如,phy(或其他缓冲器改变逻辑(例如,930))可以通过减小其读取缓冲器指针与写入缓冲器指针之间的距离以及在旧的读取指针位置与新的读取指针位置之间静默地丢弃数据来实现弹性缓冲器的大小的减小,以及其他潜在的实现方式。在一个示例中,为了增加弹性缓冲器的大小,phy(或其他缓冲器改变逻辑(例如,930))可以增加读取指针与写入指针之间的距离并添加重复条目以填充新的读取指针与写入指针之间增加的缓冲器范围,以及其他示例实现方式。

继续基于pipe的实现方式的示例,重定时器910中的mac可以负责在条件合适(例如,最大有效载荷大小、链路宽度、ppm差异、速度改变的改变)时改变弹性缓冲器深度,同时tsl仍在交换。即使mac在其(与重定时器910的任一子链路连接的)上游端口上的接收器中接收ts2,mac也可以使得有效ts1替代地被生成并在重定时器发送器上发送出去。mac(或其他示例逻辑)可以继续确保由其下游链路伙伴接收ts1以保留动态重定时器弹性缓冲器大小重新调整完成的机会。mac可以确保这样做直到它确定弹性缓冲器深度已经成功更新并且确认在(与其接收器中的每一个相对应的)两个弹性缓冲器的输出处正在接收分组。在一个示例中,mac可以继续发送ts1,直到已经发送了(例如,在pcie中)一个或多个eieos(电气闲置退出有序集)以确保在弹性缓冲器深度改变之后移动到ts2之前恢复块对齐。当mac切换到对从弹性缓冲器发送tsl进行控制时,它可以确保维持相同的块边界。然而,当mac必须切换回重新开始发送弹性缓冲器的内容时,可以保留或可以不保留该边界。mac可以确保它继续发送具有新的块边界对齐的ts1(即使它正在接收ts2)并且可以继续这样做直到它传递至少一个eieos。这确保链路伙伴(例如,905、915)可以再次获得它们的块对齐并且继续链路训练。

如上面所指出的,在一些实现方式中,建议弹性缓冲器大小重新调整的事件可以在允许发生这种弹性缓冲器大小重新调整的相同的链路训练阶段期间发生。如果在确定相关链路特性正在改变(或已经改变)时链路处于可操作或活动状态(例如,l0状态),则mac可以负责作为响应而将链路强制进入恢复状态。这可以操作以确保到其链路伙伴(例如,905、915)看到ts2时,已经成功地改变弹性缓冲器深度以反映可靠地操作链路所需要的最低延迟。

转到图10,示出了说明用于动态地对链路上的增强的重定时器的弹性缓冲器进行大小重新调整的示例技术的流程图1000。可以在增强的重定时器上提供逻辑以(在1005处)确定是否已经检测到链路的特性的改变,包括诸如链路速度、频率改变(例如,根据对计时架构和/或模式的改变的ppm)、链路宽度和最大有效载荷大小之类的示例。当检测到可能影响最佳弹性缓冲器大小(或“深度”)的链路特性改变时,重定时器可以参考缓冲器深度表,该缓冲器深度表定义检测到的特性改变的类型和程度与这种改变可能对需要由重定时器支持的最大弹性缓冲器大小造成的潜在影响之间的映射。在某些情况下,改变可能表明任何改变都不是必要的。在其他情况下,在重定时器处参考(1010)缓冲器深度表可以(在1015处)使得重定时器逻辑确定应当根据缓冲器深度表的映射来修改当前弹性缓冲器深度。

重定时器接近其弹性缓冲器深度的修改的方式可以基于链路特性改变的类型。例如,对于(在1020处)链路速度改变,(在1025处)重定时器可以停止在处于电气闲置的通道上转发并且执行缓冲器深度大小重新调整。在(在1050处)确定已经成功完成任何缓冲器深度改变之后,重定时器然后可以在活动通道(在链路宽度改变的情况下,其可以比缓冲器深度改变之前包括更少或更多的通道)上的链路上重新开始转发数据(1055),并且针对任何其他改变对链路进行监视。对于(在1030处)链路宽度改变或在链路训练期间检测到的其他改变(例如,ppm改变),可以在能够处理由重定时器与缓冲器大小重新调整相结合地丢弃或添加的符号的链路训练的阶段期间(根据1010中的发现)对缓冲器深度进行大小重新调整(1035)。缓冲器大小重新调整的程度可以取决于链路宽度改变的程度(例如,链路宽度从x4改变为x8可能使得弹性缓冲器大小减小一半,而链路宽度从x16改变为x4可能使得弹性缓冲器大小变为四倍,以及其他示例)、在链路特性改变中增加或减少的ppm量等。

在一些情况下,(在1005处)对链路特性改变的检测可以在链路处于活动状态(例如,l0)时或在对在弹性缓冲器大小重新调整期间潜在地引入的符号丢失(或添加)敏感的训练阶段中发生。例如,对于(在1005处)在l0期间在重定时器处(例如,经由边带消息传递)检测到的对最大有效载荷大小的改变,重定时器可以首先(例如,通过有意地将错误引入到其重定时并向下游转发的数据中)强制链路进入恢复状态改变(1045),以使得链路进入允许对重定时器的弹性缓冲器进行大小重新调整的训练阶段。此时,重定时器可以在由(在1045处)强制链路恢复导致的链路训练期间对缓冲器深度进行适当地修改(1035)(例如,与有效载荷大小增加的或减小的长度相当)。然后,重定时器可以(在1005处)针对任何进一步的链路特性改变对链路进行监视(例如,在训练或活动状态期间),以及其他示例。

图11a-11e示出了说明对示例重定时器910的示例弹性缓冲器的深度进行动态大小重新调整的示例的一系列简化框图1100a-1100e。在框图1100a-1100e的每个图示中,示出了示例重定时器910用于扩展两个计算设备(例如,905、915)之间的链路连接。重定时器弹性缓冲器(例如,930a-930e)被示出以说明在增强的重定时器910检测到对链路特性的各种改变时,该重定时器弹性缓冲器可以经历的大小的动态调节。例如,在图11a的示例中,重定时器910被示出为,其弹性缓冲器930a根据链路特性的最坏情况组合来调整大小。在图11a-11e的表示中,重定时器弹性缓冲器的暗化部分表示弹性缓冲器的“活动”部分,或者被配置用于缓冲数据的部分。随着重定时器被重新调整大小,缓冲器的未使用部分可以在图11a-11e中表示为弹性缓冲器的亮化部分。因此,在图11a中,重定时器910可以最初将其弹性缓冲器930a的大小设置为默认大小(例如,其最大大小(如完全变黑的重定时器930a所示))。弹性缓冲器的最大大小可以与用于处理与链路上可能的ppm失配、skp间隔、链路速度、链路宽度、最大分组有效载荷大小等有关的最坏情况场景所需要的大小相对应。弹性缓冲器可以被设计为通过从在重定时器910处接收并且缓冲到弹性缓冲器中的skpos中添加或减去符号来保持容量尽可能接近半满。在图11a的示例中,重定时器910可以被配置为保持弹性缓冲器填充其最大容量的一半。该初始或默认大小可以根据系统或系统的链路的初始引导或启动,以及其他示例。

继续图11a的示例,数据流1105可以由设备a(905)生成并发送到设备b(915),其中重定时器910负责重定时(或重新生成和转发)数据以扩展链路。设备b可以同样地生成将通过重定时器915发送并转发到设备a上的数据。在该特定示例中,重定时器910可以接收数据1105(并且在弹性缓冲器930a中缓冲数据),并且可以在尝试检测对链路的各种特性的改变时(例如,使用协议感知逻辑)检查数据,弹性缓冲器的大小最终可以基于该改变,例如,ppm改变、链路宽度改变、对最大分组或有效载荷大小的改变等。在该示例中,重定时器910可以确定这样的改变,例如,链路宽度增加(其中闲置可用通道被激活并用于链路上的数据传输)。例如,在pcie中,支持的链路宽度可以包括x1、x2、x4、x8、x16和x32,并且在链路的生命期间(例如,在该示例中,在设备a的请求下)可以发生改变。如图11b所反映的,响应于检测到链路宽度增加(根据数据1105),重定时器910可以动态地改变弹性缓冲器的有效大小,在这种情况下将弹性缓冲器的大小减小(如930b所示)与链路宽度增加的量级相对应的量级。

继续上面的示例,可以在对弹性缓冲器大小的改变之后(即,在图11a和11b之间)接收附加数据1110,并且重定时器910可以识别对链路的特性的又一个改变。在图11b的示例中,可以由重定时器910在数据1110中检测在设备a和b的相应的时钟处应用的对sris模式的改变,在这种情况下,禁用sris调制。如在图11c中所示的更新的弹性缓冲器表示930c中所反映的,重定时器910可以再次动态地对其弹性缓冲器进行大小重新调整,从而导致对检测到的链路特性的改变,在这种情况下,进一步减小弹性缓冲器的大小以反映由设备(例如,905、915)的时钟架构导致的ppm的减小。

虽然上面的示例讨论了可以由增强的重定时器检测到以导致重定时器的弹性缓冲器大小的减小的对链路特性的改变,但是其他链路特性修改可以导致弹性缓冲器大小的增加。例如,在基于数据1110减小图11c中的弹性缓冲器大小时,当发送标识对(不同或相同的)链路特性的又一修改的另一数据流(例如,1115)时,链路和重定时器可以重新开始操作。重定时器910可以同样检测并恰当地解释包括在数据流1115中的数据(例如,ts或其他有序集)以确定该链路特性改变并进一步确定该改变(例如,链路宽度的减小、sris调制特征的重新启用、最大有效载荷大小的增加等)与弹性缓冲器的大小的增加(如图11d中的更新的弹性缓冲器930d所反映的)相关。此外,尽管图11a-11c的示例可以被解释为表明设备a是由数据1105、1110、1115表示的链路特性修改的发起者,但是重定时器910的其他链路伙伴(设备b)可以同样地能够发起或发信号通知对一个或多个链路特性的改变。例如,重定时器910可以解析数据1120以检测另一个链路特性改变并且作为响应再次减小其弹性缓冲器的大小(如图11e中的弹性缓冲器930e的表示所反映的)。

在一些情况下(例如,在链路训练期间),通过重定时器910发送的数据流可以指示多个相关链路特性修改。此外,检测特定链路特性修改可以不仅仅基于来自重定时器的链路伙伴中的一个(例如,设备a)的数据流,而且可以(基于协议定义)基于从两个链路伙伴(例如,设备a和b)接收的数据流,例如,通过检测指示对所建议的链路特性修改的请求和确认两者的握手,以及其他示例。在这个意义上,重定时器的逻辑虽然至少部分地基于每个通道实现,但是可以与在其下游接收器端口和上游接收器端口两者处检测到的合并数据耦合,并且基于这些发现做出弹性缓冲器大小重新调整决策。另外地,尽管可以直接从带内数据流中检测到一些链路特性修改,但是也可以利用带外消息传递来向重定时器910传送或指示链路特性改变(例如,对最大有效载荷大小的改变),从而允许重定时器相应地对其弹性缓冲器进行大小重新调整,以及其他示例。

图12是示出涉及重定时器的示例技术的流程图1200,该重定时器被配置为基于对使用重定时器扩展并且连接两个设备的链路的特性的修改来动态调节其弹性缓冲器的大小。可以由重定时器接收1205数据流,如由两个设备中的一个生成的数据流。在一些情况下,数据流可以包括从两个设备中的一个设备发送到另一个设备的(例如,在下游方向上的)数据,以及作为响应发送的(例如,在上游方向上的)数据。重定时器可以扫描其接收并且将重新生成以用于转发到链路上以检测1210(例如,根据有序集、训练序列、握手、编码或数据流中的其他信令)对链路的特性集中的一个或多个的修改的数据。感兴趣的特性集可以包括用作对重定时器的弹性缓冲器进行最坏情况大小调整的基础的那些特性。可以由重定时器处理对这些链路特性中的一个的改变(或对实际值或状态的指定)的检测,以确定对弹性缓冲器的大小重新调整,以便于减少弹性缓冲器在链路上引入的延迟。例如,重定时器可以确定链路特性修改的类型和范围,并且查询表或其他映射来计算、识别或以其他方式确定1215基于链路特性修改,弹性缓冲器大小可以被修改(即,增加或减少)的量。此外,响应于检测1210到链路特性修改,重定时器可以基于链路特性修改自动地且动态地将其弹性缓冲器的大小改变1220所确定1215的量,以更准确地反映更新的“最坏情况”,以及其他示例。

注意,上面所描述的装置、方法和系统可以在前述的任何电子设备或系统中实现。作为具体说明,以下附图提供了用于利用如本文所描述的本发明的示例性系统。由于更详细地描述了以下系统,因此根据上面的讨论公开、描述和重新考虑了许多不同的互连。并且显而易见的是,上面所描述的改进可以应用于那些互连、结构或架构中的任何一个。

参考图13,描绘了包括多核心处理器的计算系统的框图的实施例。处理器1300包括任何处理器或处理设备,例如,微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、手持处理器、应用处理器、协处理器、片上系统(soc)或用于执行代码的其他设备。在一个实施例中,处理器1300包括至少两个核心——核心1301和1302,其可以包括不对称核心或对称核心(所示实施例)。然而,处理器1300可以包括任何数量的处理元件,这些处理元件可以是对称或不对称的。

在一个实施例中,处理元件指代用于支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、进程单元、上下文、上下文单元、逻辑处理器、硬件线程、核心和/或能够保持处理器的状态(例如,执行状态或架构状态)的任何其他元件。换言之,在一个实施例中,处理元件指代能够独立地与代码(例如,软件线程、操作系统、应用程序或其他代码)相关联的任何硬件。物理处理器(或处理器插座)典型地指代集成电路,其潜在地包括任何数量的其他处理元件,例如,核心或硬件线程。

核心通常指代位于集成电路上的能够维持独立架构状态的逻辑,其中每个独立地维持的架构状态与至少一些专用执行资源相关联。与核心不同,硬件线程典型地指代位于集成电路上的能够维持独立架构状态的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如可以看出的,当某些资源是共享的并且其他资源专用于架构状态时,硬件线程和核心的命名法之间的界限重叠。然而通常地,核心和硬件线程被操作系统视为单独的逻辑处理器,其中操作系统能够单独地调度每个逻辑处理器上的操作。

如图13所示,物理处理器1300包括两个核心——核心1301和1302。这里,核心1301和1302被认为是对称核心,即具有相同配置、功能单元和/或逻辑的核心。在另一实施例中,核心1301包括乱序处理器核心,而核心1302包括有序处理器核心。然而,核心1301和1302可以从任何类型的核心中单独选择,例如,本机核心、软件管理核心、适合于执行本机指令集架构(isa)的核心、适合于执行转换指令集架构(isa)的核心、共同设计的核心或其他已知核心。在异构核心环境(即,非对称核心)中,可以利用某种形式的转换(例如,二进制转换)以在一个或两个核心上调度或执行代码。然而,为了进一步讨论,核心1301中示出的功能单元在下面进一步详细描述,因为核心1302中的单元在所描绘的实施例中以类似的方式操作。

如所描绘的,核心1301包括两个硬件线程1301a和1301b,它们也可以称为硬件线程槽1301a和1301b。因此,在一个实施例中,诸如操作系统之类的软件实体潜在地将处理器1300视为四个单独的处理器,即,能够同时执行四个软件线程的四个逻辑处理器或处理元件。如上面所提到的,第一线程与架构状态寄存器1301a相关联,第二线程与架构状态寄存器1301b相关联,第三线程可以与架构状态寄存器1302a相关联,并且第四线程可以与架构状态寄存器1302b相关联。这里,如上面所描述的,架构状态寄存器(1301a、1301b、1302a和1302b)中的每一个可以被称为处理元件、线程槽或线程单元。如所示的,架构状态寄存器1301a在架构状态寄存器1301b中被复制,因此能够针对逻辑处理器1301a和逻辑处理器1301b存储单独的架构状态/上下文。在核心1301中,还可以针对线程1301a和1301b复制其他较小的资源,例如,分配器和重命名器块1330中的指令指针和重命名逻辑。可以通过分区来共享一些资源,例如,重新排序/引退单元1335中的重新排序缓冲器、iltb1320、加载/存储缓冲器和队列。其他资源(例如,通用内部寄存器、(多个)页表基址寄存器、低级别数据高速缓存和数据tlb1315、(多个)执行单元1340以及乱序单元1335的部分)是潜在地完全共享的。

处理器1300通常包括其他资源,这些资源可以是完全共享的、通过分区共享的或由处理元件专用/专用于处理元件的。在图13中,示出了具有处理器的说明性逻辑单元/资源的纯示例性处理器的实施例。注意,处理器可以包括或省略这些功能单元中的任何一个,以及包括未描绘出的任何其他已知功能单元、逻辑或固件。如所示的,核心1301包括简化的、代表性的乱序(ooo)处理器核心。但是可以在不同的实施例中利用有序处理器。ooo核心包括用于预测要执行/采用的分支的分支目标缓冲器1320和用于存储用于指令的地址转换条目的指令转换缓冲器(i-tlb)1320。

核心1301还包括解码模块1325,其与获取单元1320耦合以对所获取的元素解码。在一个实施例中,获取逻辑包括分别与线程槽1301a、1301b相关联的单独的定序器。通常,核心1301与第一isa相关联,该第一isa定义/指定在处理器1300上可执行的指令。通常,作为第一isa的一部分的机器代码指令包括指令的一部分(称为操作码),其引用/指定要执行的指令或操作。解码逻辑1325包括从其操作码识别这些指令并在流水线中传递经解码的指令以便进行由第一isa定义的处理的电路。例如,如下面更详细讨论的,在一个实施例中,解码器1325包括被设计为或适合于识别特定指令(例如,事务指令)的逻辑。由于解码器1325进行的识别,架构或核心1301采取特定的预定义动作来执行与适当指令相关联的任务。重要的是要注意,可以响应于单个或多个指令来执行本文所描述的任务、块、操作和方法中的任何一个;其中一些指令可能是新的或旧的指令。注意,在一个实施例中,解码器1326识别相同的isa(或其子集)。可替代地,在异构核心环境中,解码器1326识别第二isa(第一isa的子集或不同的isa)。

在一个示例中,分配器和重命名器块1330包括用于保留资源(例如,用于存储指令处理结果的寄存器文件)的分配器。然而,线程1301a和1301b潜在地能够乱序执行,其中分配器和重命名器块1330还保留其他资源,例如,用于跟踪指令结果的重新排序缓冲器。单元1330还可以包括寄存器重命名器,以将程序/指令参考寄存器重命名为处理器1300内部的其他寄存器。重新排序/引退单元1335包括诸如上面提到的重新排序缓冲器、加载缓冲器和存储缓冲器之类的组件以支持乱序执行和乱序执行的指令的稍后有序引退。

在一个实施例中,(多个)调度器和执行单元块1340包括调度器单元,该调度器单元用于调度执行单元上的指令/操作。例如,浮点指令在具有可用的浮点执行单元的执行单元的端口上被调度。还包括与执行单元相关联的寄存器文件以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元和其他已知的执行单元。

较低级别数据高速缓存和数据转换缓冲器(d-tlb)1350与(多个)执行单元1340耦合。数据高速缓存用于存储最近使用/操作的元素,例如,数据操作数,其潜在地保持在存储器一致性状态中。d-tlb用于存储最近的虚拟/线性到物理地址转换。作为特定示例,处理器可以包括页表结构以将物理存储器分成多个虚拟页面。

这里,核心1301和1302共享对更高级别或更远的高速缓存的访问,例如,与片上接口1310相关联的第二级高速缓存。注意,更高级别或更远指代高速缓存级别增加或从(多个)执行单元进一步远离。在一个实施例中,更高级别高速缓存是最后一级数据高速缓存——处理器1300上的存储器层级中的最后高速缓存——例如,第二或第三级数据高速缓存。然而,更高级别高速缓存不限于此,因为它可以与指令高速缓存相关联或包括指令高速缓存。迹线高速缓存——一种类型的指令高速缓存——相反可以在解码器1325之后耦合以存储最近解码的迹线。这里,指令潜在地指代宏指令(即,由解码器识别的通用指令),其可以解码为多个微指令(微操作)。

在所描绘的配置中,处理器1300还包括片上接口模块1310。历史上,下面更详细描述的存储器控制器已经被包括在处理器1300外部的计算系统中。在这种场景中,片上接口1310用于与处理器1300外部的设备(例如,系统存储器1375、芯片组(通常包括用于连接存储器1375的存储器控制器中心和用于连接外围设备的i/o控制器中心)、存储器控制器中心、北桥或其他集成电路)进行通信。并且在这种场景中,总线1305可以包括任何已知的互连,例如,多点总线、点对点互连、串行互连、并行总线、一致(例如,高速缓存一致)总线、分层协议架构、差分总线和gtl总线。

存储器1375可以专用于处理器1300或者与系统中的其他设备共享。存储器1375类型的常见示例包括dram、sram、非易失性存储器(nv存储器)和其他已知的存储设备。注意,设备1380可以包括图形加速器、与存储器控制器中心耦合的处理器或卡、与i/o控制器中心耦合的数据存储装置、无线收发器、闪存设备、音频控制器、网络控制器或其他已知的设备。

然而,最近,随着更多逻辑和设备被集成在诸如soc之类的单个管芯上,这些设备中的每一个可以合并在处理器1300上。例如,在一个实施例中,存储器控制器中心与处理器1300在同一封装和/或管芯上。这里,核心的一部分(核心上部分)1310包括一个或多个控制器,用于与诸如存储器1375或图形设备1380之类的其他设备相接合。包括用于与这些设备相接合的互连和控制器的配置通常被称为核心上(或非核心配置)。作为示例,片上接口1310包括用于片上通信的环形互连和用于片外通信的高速串行点对点链路1305。然而,在soc环境中,甚至更多的设备(例如,网络接口、协处理器、存储器1375、图形处理器1380和任何其他已知的计算机设备/接口)可以集成在单个管芯或集成电路上以提供具有高功能和低功耗的小形状因子。

在一个实施例中,处理器1300能够执行编译器、优化和/或转换器代码1377以编译、转换和/或优化应用代码1376以支持本文所描述的装置和方法或与其相接合。编译器通常包括用于将源文本/代码转换成目标文本/代码的程序或程序集。通常,使用编译器编译程序/应用代码是在多个阶段和多遍中完成的,以将高级编程语言代码转换为低级机器或汇编语言代码。然而,单遍编译器仍然可以用于简单编译。编译器可以利用任何已知的编译技术并且执行任何已知的编译器操作,例如,词法分析、预处理、解析、语义分析、代码生成、代码转换和代码优化。

较大的编译器通常包括多个阶段,但是大多数情况下这些阶段包括在两个一般阶段中:(1)前端,即通常在该处可以进行句法处理、语义处理和一些变换/优化,以及(2)后端,即通常在该处进行分析、转换、优化和代码生成。一些编译器指代中间部分,其说明了编译器的前端和后端之间的界定的模糊处。因此,对编译器的插入、关联、生成或其他操作的引用可以在前述阶段或遍中的任何一个以及编译器的任何其他已知阶段或遍中发生。作为说明性示例,编译器潜在地在编译的一个或多个阶段中插入操作、调用、函数等,例如,在编译的前端阶段插入调用/操作,然后在转换阶段期间将调用/操作转换为更低级别的代码。注意,在动态编译期间,编译器代码或动态优化代码可以插入此类操作/调用,以及优化代码以便在运行时期间执行。作为特定说明性示例,可以在运行时期间动态地优化二进制代码(已编译的代码)。这里,程序代码可以包括动态优化代码、二进制代码或其组合。

与编译器类似,转换器(例如,二进制转换器)静态地或动态地转换代码以优化和/或转换代码。因此,对代码、应用代码、程序代码或其他软件环境的执行的引用可以指代:(1)动态地或静态地执行(多个)编译器程序、优化代码优化器或转换器以编译程序代码、维持软件结构、执行其他操作、优化代码、或转换代码;(2)执行包括操作/调用的主程序代码,例如,已经优化/编译的应用代码;(3)执行与主程序代码相关联的其他程序代码(例如,库),以维持软件结构、执行其他软件相关操作或优化代码;或(4)其组合。

现在参考图14,示出了根据本发明的实施例的第二系统1400的框图。如图14所示,多处理器系统1400是点对点互连系统,并且包括经由点对点互连1450耦合的第一处理器1470和第二处理器1480。处理器1470和1480中的每一个可以是处理器的某个版本。在一个实施例中,1452和1454是串行点对点一致互连结构的一部分,例如,高性能架构。因此,本发明可以在qpi架构内实现。

虽然仅示出了具有两个处理器1470、1480,但是应该理解的是,本发明的范围不限于此。在其他实施例中,一个或多个附加处理器可以存在于给定处理器中。

处理器1470和1480被示出为分别包括集成存储器控制器单元1472和1482。处理器1470还包括作为其总线控制器单元的一部分的点对点(p-p)接口1476和1478;类似地,第二处理器1480包括p-p接口1486和1488。处理器1470、1480可以使用p-p接口电路1478、1488经由点对点(p-p)接口1450交换信息。如图14所示,imc1472和1482将处理器与相应的存储器(即,存储器1432和存储器1434)耦合,这些存储器可以是本地附接到相应处理器的主存储器的一部分。

处理器1470、1480各自利用点对点接口电路1476、1494、1486、1498经由单独的p-p接口1452、1454与芯片组1490交换信息。芯片组1490还经由接口电路1492沿着高性能图形互连1439与高性能图形电路1438交换信息。

共享高速缓存(未示出)可以包括在任一处理器中或两个处理器外部;而经由p-p互连与处理器连接,使得如果处理器被置于低功率模式,则任一处理器或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。

芯片组1490可以经由接口1496与第一总线1416耦合。在一个实施例中,第一总线1416可以是外围组件互连(pci)总线,或者诸如pci快速总线或另一第三代i/o互连总线之类的总线,但本发明的范围不限于此。

如图14所示,各种i/o设备1414连同将第一总线1416耦合到第二总线1420的总线桥1418一起与第一总线1416耦合。在一个实施例中,第二总线1420包括低引脚计数(lpc)总线。在一个实施例中,各种设备与第二总线1420耦合,包括例如,键盘和/或鼠标1422、通信设备1427和存储单元1428(例如,磁盘驱动器或其他大容量存储设备,其通常包括指令/代码和数据1430)。此外,音频i/o1424被显示为与第二总线1420耦合。注意,其他架构是可能的,其中所包括的组件和互连架构不同。例如,除了图14的点对点架构,系统可以实现多点分支总线或其他这样的架构。

尽管已经关于有限数量的实施例描述了本发明,但是本领域技术人员将理解由此产生的许多修改和变型。所附权利要求旨在覆盖落入本发明的真实精神和范围内的所有这些修改和变化。

设计可以经历从创建到仿真到制造的各个阶段。表示设计的数据可以以多种方式表示设计。首先,如在仿真中有用,可以使用硬件描述语言或另一种功能描述语言来表示硬件。另外地,可以在设计过程的某些阶段产生具有逻辑和/或晶体管栅极的电路级模型。此外,大多数设计在某个阶段达到表示各种设备在硬件模型中的物理放置的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定对于用于制造集成电路的掩模而言在不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。存储器或诸如磁盘之类的磁或光存储装置可以是用于存储经由光波或电波发送的信息的机器可读介质,该光波或电波被调制或以其他方式生成以发送这样的信息。当发送指示或运载代码或设计的电载波时,在执行对电信号的复制、缓冲或重传的程度上,制作新的副本。因此,通信提供商或网络提供商可以将体现本发明的实施例的技术的诸如编码到载波中的信息之类的制品至少临时地存储在有形的机器可读介质上。

如本文所使用的模块指代硬件、软件和/或固件的任何组合。作为示例,模块包括硬件(例如,微控制器),其与用于存储适合于由微控制器执行的代码的非暂时性介质相关联。因此,在一个实施例中,对模块的引用指代特别地被配置用于识别和/或执行要保持在非暂时性介质上的代码的硬件。此外,在另一实施例中,对模块的使用指代包括特别适合于由微控制器执行以执行预定操作的代码的非暂时性介质。并且,如可以推断的,在又一实施例中,术语模块(在该示例中)可以指代微控制器和非暂时性介质的组合。通常,示出为分离的模块界限通常变化并且潜在地重叠。例如,第一模块和第二模块可以共享硬件、软件、固件或其组合,同时潜在地保留一些独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用包括硬件,例如,晶体管、寄存器或其他硬件(例如,可编程逻辑器件)。

在一个实施例中,对短语“被配置为”的使用指代对装置、硬件、逻辑或元件进行布置、放在一起、制造、提供以售卖、导入和/或设计以执行指定或确定的任务。在该示例中,没有进行操作的装置或其元件仍“被配置为”如果其被设计、耦合和/或互连以执行指定任务则执行所述指定任务。作为纯粹说明性的示例,逻辑门可以在操作期间提供0或1。但是“被配置为”向时钟提供使能信号的逻辑门不包括可以提供1或0的每一个潜在的逻辑门。相反,逻辑门是以在操作期间1或0输出用于启用时钟的某种方式耦合的逻辑门。再次注意,对术语“被配置为”的使用不要求操作,而是集中于装置、硬件和/或元件的潜在状态,其中在潜在状态下,装置、硬件和/或元件被设计为当装置、硬件和/或元件正在操作时执行特定任务。

此外,在一个实施例中,对短语“用于”、“能够/能够用于”和/或“可操作用于”的使用是指以这样的方式被设计为使得能够以指定方式使用装置、逻辑、硬件和/或元件的某种装置、逻辑、硬件和/或元件。如上文所提到的,在一个实施例中,对用于、能够用于或可操作用于的使用指代装置、逻辑、硬件和/或元件的潜在状态,其中装置、逻辑、硬件和/或元件没有在操作,但是以这样的方式被设计为使得能够以指定方式使用装置。

如本文所使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,对逻辑电平、逻辑值(logicvalue)或逻辑上的值(logicalvalue)的使用还称为对1和0的使用,其简单地表示二进制逻辑状态。例如,1指代高逻辑电平,并且0指代低逻辑电平。在一个实施例中,诸如晶体管或闪存单元之类的存储单元能够保持单个逻辑值或多个逻辑值。然而,已经使用了计算机系统中的值的其他表示。例如,十进制数十也可以表示为二进制值1010和十六进制字母a。因此,值包括能够保持在计算机系统中的信息的任何表示。

此外,状态可以由值或值的部分表示。作为示例,诸如逻辑1之类的第一值可以表示默认或初始状态,而诸如逻辑0之类的第二值可以表示非默认状态。另外,在一个实施例中,术语重置和设置分别指代默认值或状态和更新后的值或状态。例如,默认值潜在地包括高逻辑值(即,重置),而更新后的值潜在地包括低逻辑值(即,设置)。注意,值的任何组合可以用于表示任意数量的状态。

上面所阐述的方法、硬件、软件、固件或代码的实施例可以经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的、能够由处理元件执行的指令或代码来实现。非暂时性机器可访问/可读介质包括以诸如计算机或电子系统之类的机器可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非暂时性机器可访问介质包括随机存取存储器(ram)(例如,静态ram(sram)或动态ram(dram));rom;磁或光存储介质;闪速存储器设备;电存储设备;光存储设备;声学存储设备;用于保持从暂时(传播)信号(例如,载波、红外信号、数字信号)接收到的信息的其他形式的存储设备(其用于区别于可以从其接收信息的非暂时性介质);等等。

用于对逻辑进行编程以执行本发明的实施例的指令可以存储在系统中的存储器(例如,dram、高速缓存、闪速存储器或其他存储装置)内。此外,可以经由网络或通过其他计算机可读介质的方式来分发指令。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,但不限于软盘、光盘、压缩盘只读存储器(cd-rom)和磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪速存储器,或用于经由电、光、声学或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传输信息的有形的机器可读存储装置。因此,计算机可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。

以下示例涉及根据本说明书的实施例。示例1是一种装置,其包括重定时器,该重定时器包括弹性缓冲器、缓冲器逻辑、接收器和控制器。缓冲器逻辑可以在弹性缓冲器中添加或减去数据,以补偿要通过链路连接的两个设备的不同位速率,其中重定时器在链路上位于两个设备之间。接收器可以接收要在链路上在两个设备之间发送的数据流。控制器可以根据数据流确定对链路的一个或多个特性的修改,并且基于修改使得弹性缓冲器的大小从第一大小改变为第二大小。

示例2可以包括示例1的主题,其中一个或多个特性包括链路的链路宽度。

示例3可以包括示例2的主题,其中弹性缓冲器的大小响应于链路宽度的增加而减小,并且响应于链路宽度的减小而减小。

示例4可以包括示例1-3中任一项的主题,其中修改包括对在两个设备的时钟处应用的计时模式的改变。

示例5可以包括示例4的主题,其中对计时模式的改变包括在时钟处启用或禁用扩频调制。

示例6可以包括示例1-5中任一项的主题,其中控制器还用于基于从两个设备中的一个发送到重定时器的边带消息来确定对链路的另一特性的第二修改;并且基于第二修改导致对弹性缓冲器的大小的另一改变。

示例7可以包括示例6的主题,其中第二修改包括对链路上支持的最大分组大小的修改。

示例8可以包括示例1-7中任一项的主题,其中弹性缓冲器的大小要在链路的链路训练阶段中被改变。

示例9可以包括示例8的主题,其中在链路训练阶段期间接收数据流,数据流包括一个或多个有序集,并且根据一个或多个有序集确定修改。

示例10可以包括示例8的主题,其中在链路的活动链路状态期间接收数据流,并且使得弹性缓冲器的大小从第一大小改变为第二大小包括强制进行对链路的重置以导致链路训练阶段,并且在链路训练阶段期间完成对弹性缓冲器的大小的改变。

示例11可以包括示例10的主题,其中强制进行对链路的重置包括将从两个设备中的第一设备接收的数据流中的特定数据改变为特定值;并且将改变后的特定数据发送到两个设备中的第二设备,其中特定值人为地导致链路上的错误条件。

示例12可以包括示例1-11中任一项的主题,其中缓冲器逻辑用于从在数据流中循环发送并且在弹性缓冲器处缓冲的特定有序集添加或减去数据。

示例13可以包括示例12的主题,其中根据特定协议规范来定义特定有序集,以用于补偿链路上的设备的不同位速率。

示例14可以包括示例13的主题,其中特定有序集包括skp有序集。

示例15可以包括示例13-14中任一项的主题,其中特定协议规范包括基于通用串行总线(usb)的协议或基于外围组件互连快速(pcie)的协议中的一个的规范。

示例16可以包括示例1-15中任一项的主题,其中第一大小包括与链路的最坏情况弹性缓冲器大小相对应的大小。

示例17是一种方法,包括:在重定时器处接收数据流,其中数据流将在链路上连接的两个设备之间被发送,重定时器在链路上位于两个设备之间,并且重定时器包括弹性缓冲器,其用于在弹性缓冲器中添加或减去数据以补偿两个设备的时钟之间的时钟频率变化;在数据流中检测对链路的一个或多个特性的修改的指示;基于修改确定要对弹性缓冲器的大小做出的改变的特定量;并且将弹性缓冲器的大小改变该特定量。

示例18可以包括示例17的主题,其中一个或多个特性包括链路的链路宽度。

示例19可以包括示例18的主题,其中弹性缓冲器的大小响应于链路宽度的增加而减小,并且响应于链路宽度的减小而减小。

示例20可以包括示例17-19中任一项的主题,其中修改包括对在两个设备的时钟处应用的计时模式的改变。

示例21可以包括示例20的主题,其中对计时模式的改变包括在时钟处启用或禁用扩频调制。

示例22可以包括示例17-21中任一项的主题,还包括:基于从两个设备中的一个发送到重定时器的边带消息来确定对链路的另一特性的第二修改;并且基于第二修改导致对弹性缓冲器的大小的另一改变。

示例23可以包括示例22的主题,其中第二修改包括对链路上支持的最大分组大小的修改。

示例24可以包括示例17-23中任一项的主题,其中弹性缓冲器的大小要在链路的链路训练阶段中被改变。

示例25可以包括示例24的主题,其中在链路训练阶段期间接收数据流,数据流包括一个或多个有序集,并且根据一个或多个有序集确定修改。

示例26可以包括示例24的主题,其中在链路的活动链路状态期间接收数据流,以及使得弹性缓冲器的大小从第一大小改变为第二大小包括:强制进行对链路的重置以导致链路训练阶段;并且在链路训练阶段期间完成对弹性缓冲器的大小的改变。

示例27可以包括示例26的主题,其中强制进行对链路的重置包括:将从两个设备中的第一设备接收的数据流中的特定数据改变为特定值;并且将改变后的特定数据发送到两个设备中的第二设备,其中特定值人为地导致链路上的错误条件。

示例28可以包括示例17-27中任一项的主题,其中弹性缓冲器用于从在数据流中循环发送并且在弹性缓冲器处缓冲的特定有序集添加或减去数据。

示例29可以包括示例28的主题,其中根据特定协议规范来定义特定有序集,以用于补偿链路上的设备的不同位速率。

示例30可以包括示例29的主题,其中特定有序集包括skp有序集。

示例31可以包括示例29-30中任一项的主题,其中特定协议规范包括基于通用串行总线(usb)的协议或基于外围组件互连快速(pcie)协议中的一个的规范。

示例32可以包括示例17-31中任一项的主题,其中第一大小包括与链路的最坏情况弹性缓冲器大小相对应的大小。

示例33是一种系统,其包括用于执行示例17-32中任一项的方法的模块。

示例34是一种其上存储有指令的机器可访问存储介质,其中指令当在机器上执行时使得机器:在由重定时器接收的数据流中检测对链路的一个或多个特性的修改的指示,其中数据流将在链路上连接的两个设备之间被发送,重定时器在链路上位于两个设备之间,并且重定时器包括弹性缓冲器,其用于在弹性缓冲器中添加或减去数据以补偿两个设备的时钟之间的时钟频率变化;基于修改确定要对弹性缓冲器的大小做出的改变的特定量;并且使得弹性缓冲器的大小改变该特定量。

示例35可以包括示例34的主题,其中一个或多个特性包括链路的链路宽度。

示例36可以包括示例35的主题,其中弹性缓冲器的大小响应于链路宽度的增加而减小,并且响应于链路宽度的减小而减小。

示例37可以包括示例34-36中任一项的主题,其中修改包括对在两个设备的时钟处应用的计时模式的改变。

示例38可以包括示例37的主题,其中对计时模式的改变包括在时钟处启用或禁用扩频调制。

示例39可以包括示例34-38中任一项的主题,其中指令当被执行时还使得机器基于从两个设备中的一个发送到重定时器的边带消息来确定对链路的另一特性的第二修改,并且基于第二修改导致对弹性缓冲器的大小的另一改变。

示例40可以包括示例39的主题,其中第二修改包括对链路上支持的最大分组大小的修改。

示例41可以包括示例34-40中任一项的主题,其中弹性缓冲器的大小要在链路的链路训练阶段中被改变。

示例42可以包括示例41的主题,其中在链路训练阶段期间接收数据流,数据流包括一个或多个有序集,并且根据一个或多个有序集确定修改。

示例43可以包括示例41的主题,其中在链路的活动链路状态期间接收数据流,以及使得弹性缓冲器的大小从第一大小改变为第二大小包括强制进行对链路的重置以导致链路训练阶段,并且在链路训练阶段期间完成弹性缓冲器的大小的改变。

示例44可以包括示例43的主题,其中强制进行对链路的重置包括将从两个设备中的第一设备接收的数据流中的特定数据改变为特定值,并且将改变后的特定数据发送到两个设备中的第二设备,其中特定值人为地导致链路上的错误条件。

示例45可以包括示例34-44中任一项的主题,其中弹性缓冲器用于从在数据流中循环发送并且在弹性缓冲器处缓冲的特定有序集添加或减去数据。

示例46可以包括示例45的主题,其中根据特定协议规范来定义特定有序集,以用于补偿链路上的设备的不同位速率。

示例47可以包括示例46的主题,其中特定有序集包括skp有序集。

示例48可以包括示例46-47中任一项的主题,其中特定协议规范包括基于通用串行总线(usb)的协议或基于外围组件互连快速(pcie)协议中的一个的规范。

示例49可以包括示例34-48中任一项的主题,其中第一大小包括与链路的最坏情况弹性缓冲器大小相对应的大小。

示例50是一种系统,其包括:包括第一时钟的第一设备;包括第二时钟的第二设备,其中第一设备通过链路连接到第二设备;以及重定时器设备,其在链路上位于第一设备与第二设备之间。重定时器包括:弹性缓冲器,其用于添加或减去在弹性缓冲器中缓冲的特定数据以补偿第一时钟和第二时钟的不同频率;接收器,其用于接收要在链路上在从第一设备到第二设备之间发送的数据流,以及控制器。控制器可以根据数据流确定对链路特性的修改,并且基于修改使得弹性缓冲器的大小改变。

示例51可以包括示例50的主题,其中重定时器设备还包括重定时器逻辑,其用于重新生成从第一设备接收的数据流,并且将重新生成的数据流发送到第二设备。

示例52可以包括示例50-51中任一项的主题,其中控制器包括根据基于用于pci快速的物理接口(pipe)的接口的控制器。

示例53可以包括示例50-52中任一项的主题,其中该特性包括链路的链路宽度。

示例54可以包括示例53的主题,其中弹性缓冲器的大小响应于链路宽度的增加而减小,并且响应于链路宽度的减小而减小。

示例55可以包括示例50-52中任一项的主题,其中特性包括对在两个设备的时钟处应用的计时模式的改变。

示例56可以包括示例55的主题,其中对计时模式的改变包括在时钟处启用或禁用扩频调制。

示例57可以包括示例50-56中任一项的主题,其中控制器还用于基于从两个设备中的一个发送到重定时器的边带消息来确定对链路的另一特性的第二修改,并且基于第二修改导致对弹性缓冲器的大小的另一改变。

示例58可以包括示例57的主题,其中第二修改包括对链路上支持的最大分组大小的修改。

示例59可以包括示例50-58中任一项的主题,其中弹性缓冲器的大小要在链路的链路训练阶段中被改变。

示例60可以包括示例59的主题,其中在链路训练阶段期间接收数据流,数据流包括一个或多个有序集,并且根据一个或多个有序集确定修改。

示例61可以包括示例59的主题,其中在链路的活动链路状态期间接收数据流,以及使得弹性缓冲器的大小从第一大小改变为第二大小包括强制进行对链路的重置以导致链路训练阶段,并且在链路训练阶段期间完成对弹性缓冲器的大小的改变。

示例62可以包括示例61的主题,其中强制进行对链路的重置包括将从两个设备中的第一设备接收的数据流中的特定数据改变为特定值,并且将改变后的特定数据发送到两个设备中的第二设备,其中特定值人为地导致链路上的错误条件。

示例63可以包括示例50-62中任一项的主题,其中弹性缓冲器用于从在数据流中循环发送并且在弹性缓冲器处缓冲的特定有序集添加或减去数据。

示例64可以包括示例63的主题,其中根据特定协议规范来定义特定有序集,以用于补偿链路上的设备的不同位速率。

示例65可以包括示例64的主题,其中特定有序集包括skp有序集。

示例66可以包括示例64-65中任一项的主题,其中特定协议规范包括基于通用串行总线(usb)的协议或基于外围组件互连快速(pcie)协议中的一个的规范。

示例67可以包括示例50-66中任一项的主题,其中第一大小包括与链路的最坏情况弹性缓冲器大小相对应的大小。

贯穿本说明书对“一个实施例”或“实施例”的引用表示结合该实施例描述的特定的特征、结构或特性包括在本发明的至少一个实施例中。因此,贯穿本说明书各处出现的短语“在一个实施例中”或“在实施例中”不一定指代同一实施例。此外,特定的特征、结构或特性可以以任何适合的方式组合在一个或多个实施例中。

在前述说明书中,已经参考具体的示例性实施例进行了详细描述。然而,将显而易见的是,在不偏离如所附权利要求书中阐述的本发明的更宽泛的精神和范围的情况下,可以对其进行各种修改和改变。说明书和附图因此应被视为说明意义而非限制意义的。此外,对实施例和其他示范性语言的前述使用不一定指代同一实施例或同一示例,而是可以指代不同且独特的实施例以及潜在地指代同一实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1