共享存储器链路中的低功率进入的制作方法_4

文档序号:9929479阅读:来源:国知局
信号发送数据流的结束,并隐含着有序集块将跟在其后,如同图9的例子中的情 况。发送同步报头940,其被编码成0lb以指示将发送有序集块。在该情况下,发送PCIe SKP 有序集。可以周期性地或者根据设定的间隔或窗口来发送这些有序集,使得可以执行各种 PHY层级任务和协调,其包括:初始化比特对齐,初始化符号对齐,交换PHY参数,补偿两个通 信端口的不同比特速率,等等其它示例。在一些情况下,可以发送托管的有序集,以通过相 应的SMI3 STP令牌来中断针对SMI3微片数据所指定的规定窗口或数据块。
[0091] 虽然在图9的例子中没有显式地示出,但也可以使用STP令牌来将该链路上的SMI3 微片数据转换成PCIe TLP数据。例如,在规定的SMI3窗口结束之后,可以发送PCIe STP令牌 (例如,类似于令牌920)以指示下一个窗口用于发送指定数量的PCIe TLP数据。
[0092]在一些实施例中,存储器访问微片(例如,SMI3微片)可以在大小上变化,其使得很 难针对存储器访问有效载荷,先验地预测有多少数据保存在相应的STP令牌(例如,SMI3 STP令牌)中。举例而言,如图9中所示,SMI3 STP 925可以具有指示在SMI3 STP 925之后预 期将有244字节的SMI3数据的长度字段。但是,在该例子中,仅仅十个微片(例如,SMI3微片 0-9)准备在该窗口期间进行发送,且这十个SMI3微片只使用244个字节中的240个。因此,剩 下了四个(4)字节的空带宽,且利用IDL令牌来填充这些字节。当PCIe TLP数据进行排队并 等待SMI3窗口关闭时,这可能是特别不理想的。在其它情况下,为了发送SMI3微片所提供的 窗口可能不足够用于发送已为该通道准备好的SMI3数据的量。可以使用仲裁技术来确定如 何在链路上共存的SMI3和PCIe TLP数据之间进行仲裁。此外,在一些实现方式中,可以动态 地修改SMI3窗口的长度,以有助于该链路的更高效使用。例如,仲裁或其它逻辑单元可以监 测如何充分利用规定的SMI3窗口,来判断是否可以针对该通道所预期的SMI3的量(以及与 PCIe TLP业务进行竞争),对规定的窗口长度进行更佳的优化。因此,在这些实现方式中,可 以根据应当向SMI3微片数据分配的链路带宽的量(例如,相对于包括TLP、DLLP和有序集数 据的其它PCI e数据),动态地调整SMI3 STP令牌的长度字段值(例如,在不同的值之间),等 等其它不例。
[0093] 串行输入/输出(I/O)操作可能在操作时消耗大量的功率。因此,当在链路的两个 方向中没有未决的业务时,期望使链路进入低功率或者空闲状态(例如,L1状态)。这对于 PCIe或SML模式操作中的任意一个或二者来说都是成立的。此外,在SML模式中使用的存储 器访问协议可以规定进入和退出低功率模式,其与主机PHY层协议中(例如,在PCIe中)规定 的不同。此外,该存储器访问协议所使用的状态机也与管理物理层的其它协议中使用的状 态机不同。
[0094] 举例说明,在存储器访问协议的一种实现方式中,存储器访问协议的链路层可以 提供用于物理层执行控制任务的机会,这些控制任务可以包括从发送链路状态(TLS)转换 到低功率或者L1状态。例如,当在涉及使用外部协议的PHY的SML上下文之外使用时,存储器 访问协议可以提供控制状态(LOc)、或者阻塞链路状态、可以在其中发送物理层请求和响应 的窗口。举例而言,可以提供控制状态LOc,以有助于与这些控制任务有关的消息传送。可以 将LOc状态提供成TLS中的周期性窗口,以便允许在使用链路层发送的微片流之间发送物理 层控制消息。例如,如图10中所示出的例子里所表示的,可以将L0状态细分成LOc间隔。每一 个LOc间隔以LOc状态或窗口(例如,1005)开始,在此期间可以发送物理层控制代码和其它 数据。LOc间隔的剩余部分(例如,1010)可以专用于发送微片。可以通过例如一个或多个设 备的BIOS或者另一个基于软件的控制器等等其它示例,对LOc间隔的长度和每一个间隔中 的LOc状态进行编程性地规定。与LOc间隔的剩余部分相比,LOc状态可以指数级别地更短。 例如,举一个例子,LOc可以是8UI,而LOc间隔的剩余部分是4KUI的量级等等其它示例。这允 许在基本无需扰乱或者浪费链路数据带宽的情况下,在其中发送相对较短的、预先规定的 消息的窗口。
[0095] LOc状态消息可以在物理层层级传送多种状况。举一个例子,一个设备可以发起链 路或通道的重置(例如,基于超过特定的阈值量的比特错误或者其它错误)。还可以在LOc窗 口(例如,在先的LOc窗口)中传送这些错误。还可以利用LOc状态来实现其它带内信令,例 如,用于辅助或者触发其它链路状态之间的转换的信令。举一个例子,可以利用LOc消息来 将链路从活动L0状态转换成待机或低功率状态(例如,L1状态)。如图11A的简化流程图 1100a中所示,可以使用特定的LOc状态来传送L1进入请求(例如,1110)。当设备(或者设备 上的代理)等待该请求1110的确认时,可以发送另外的微片(例如,1120、1130)。该链路上的 另一设备可以发送该确认(例如,1140)。在一些示例中,还可以在LOc窗口中发送该确认。在 一些实例中,可以在L1请求1110的接收/发送之后的下一个LOc窗口中发送该确认。可以利 用定时器来同步每一个设备处的LOc间隔,请求设备可以基于确认1140在下一个LOc窗口时 发送的标识,将确认1140识别为请求1110的确认(例如,而不是独立的L1进入请求)等等其 它示例。在一些实例中,可以通过与L1进入请求1110中所使用的代码不同的LOc代码,来传 送确认。在其它实例中,确认1140可以包括在请求1110中使用的L1进入请求代码的回应等 等其它示例。此外,在替代的示例中,例如图11B中所示,可以在LOc窗口中传送非确认信号 或者NAK 1145,其造成尽管L1进入请求1110,该链路仍然处于链路发送状态。
[0096]图10、11A和图11B的例子只是根据SML的实现方式所使用的存储器访问协议或其 它协议的低功率转换握手的一个例子。在其它实施例中,可以利用其它机制来实现从活动 状态向低功率或空闲状态的转换。但是,在存储器访问协议覆盖在另一种协议的物理层之 上的实例中(例如,在SML的实现中,此时,存储器访问协议(如,SMI3)覆盖在诸如PCIe的另 一种串行互连协议之上),可能并不支持这些机制。事实上,PHY所使用的主机协议可以不同 地实现从活动状态向低功率状态的转换,其使存储器访问协议的发起转换到低功率状态的 能力复杂化。在静态地实现SML的实施方式中,这可能是特别麻烦(即,其是其它协议的物理 层上的唯一业务)。
[0097]为了说明这些潜在的差别,将图10、11A和11B中所示出的用于进入低功率状态的 机制与PCIe中的进入到低功率L1状态的表示(图12中)进行比较。例如,第一(上游)部件 1205可以向下游部件1210发送配置写请求1215。下游部件1210可以基于接收到该配置写请 求1215,开始从发送链路状态转换到(例如,在1220处)低功率状态(L1)的处理。下游部件 1210可以发送针对该配置写请求的完成1225,并累积新的事务层分组(TLP)的块调度和最 小信用度(在1230处)。下游部件1210可以进行等待(在1235处),以便接收针对最后TLP的确 认(ACK)。一旦下游部件的所有TLP都被确认,则下游部件可以开始发送1240 Enter_Ll数据 链路层分组(DLLP)(以指示进入到L1状态),直到其从上游部件1205接收到响应。
[0098] 在接收到Enter_Ll DLLP时,上游部件1205可以(在1245处)阻塞新的TLP传输的调 度。随后,上游部件1205可以进行等待,直到其接收到其先前已发送的最后TLP的链路层确 认。下游部件1210可以(在1250处)等待针对所发送的Enter_Ll DLLP的确认DLLP(例如, Request_ACK)。当上游部件1205(在1255处)接收到针对其最后TLP的ACK时,上游部件1205 可以响应于所接收的Enter_Ll DLLP,重复地发送Request_ACK DLLP 1260。一旦下游部件 1210已在其接收通道上捕捉到该Request_ACK DLLP(其用信号表明上游部件1205对转换到 L1请求进行了确认),则其随后(在1265处)禁用DLLP传输,并使上游针对的物理链路进入电 子空闲状态。此外,随着上游部件1205上的接收通道进入电子空闲状态,上游部件1205停止 发送Request_ACK DLLP,(在1270处)禁用DLLP传输,并将其发送通道带入电子空闲,从而完 成该链路向L1的转换。在一些实例中,链路的另一端的部件可以退出L1。
[0099]如上所述,可期望提供主机协议或者SML协议,以便用于发起转换到低功率链路状 态。但是,在一些实现方式中,SML所使用的存储器访问协议可能不能向PHY层委托进入低功 率状态的协商,例如,在图10、11A和图11B的例子中所示出和描述的。因此,在SML的一些实 现方式中,可以提供L1进入方案,该方案允许在用于促进SML的令牌中,对用于进入低功率 状态的存储器访问协议的本机编码进行隧道化。例如,举一个例子,SML所使用的存储器访 问协议可以在阻塞链路状态中或者控制窗口中,发送链路状态转换请求(以及确认)。可以 将这些相同的编码包括在该令牌的保留或未使用字段中,使得在不影响主机(例如,PCIe) 协议或者分层栈的情况下,将它们传送给下游部件。在一种实现方式中,可以利用指示进入 低功率状态的请求(或ACK/NAK)的数据值,对STP令牌(例如,SML令牌)的字段进行编码。
[0100] 转到图13,示出了STP令牌1305的表示。STP令牌1305可以包括几个字段,其包括 TLP序列号字段1310、以及标识在该STP之后的存储器访问协议(例如,SMI3)有效载荷的长 度(根据微片的数量)的长度字段1315。如上所述,在一些实现方式中,可以使用该长度字段 来指示后面的数据是根据主机互连协议(例如,PCIe)还是根据存储器访问协议(例如, SMI3)。例如,可以针对TLP数据,规定一个或多个标准有效载荷长度。在一些实现方式中,可 以对SMI3数据进行规定以包括固定数量的微片,或者在其它情况下,SMI3数据可以具有可 变数量的微片,在后一情况下,针对SMI3微片的数量的长度字段变成可以忽视的长度。此 外,可以将针对SMI3 STP的长度字段,规定成不同于所规定的TLP有效载荷长度其中之一的 长度。因此,举一个例子,可以基于在STP长度字段中存在的非TLP长度值,来识别SMI3 STP。
[0101] 继续图13的例子,当STP是SML STP令牌时,可以保留TLP序列号字段1310(或者不 使用)。可以对TLP序列号字段1310进行编码,以指示请求转换到L1,指示针对进入到L1的请 求的ACK或NAK,或者指示在SML STP令牌中不包括操作,以及等等其它可能的编码方式。例 如,在一种示例性实现方式中,可以规定一组值,以便用于存储器访问协议的本机版本中的 控制窗口中,可以在SML STP令牌的保留字段中,对这些相同的值进行编码。例如,在一种实 现方式中,使用SMI3作为存储器访问协议。
[0102] 表1
[0104] 继续表1的例子,可以规定一种握手,使得在SML STP令牌中编码的进入L1的请求, 可以利用编码以进行回应的SML STP令牌来进行应答,并对进入L1的请求(例如,QL1)进行 确认,或者利用否定确认消息(例如,QLln)进行应答。在后一情况下,可以周期性地重复该 过程,直到实现确认握手。SML STP令牌中的没有被编码成用于指示进入L1的请求(或响应) 或者响应的指定字段,可以利用替代的编码方式或者无操作编码方式来进行编码,等等其 它示例。
[0105] 图14是根据至少一个例子,示出进入L1的握手的例子的流程图。在该例子中,垫层 850可以用于促进对PCIe上的存储器访问协议的低功率状态进入请求进行隧道化。例如,功 率管理代理(PMA) 1401、1402可以异步地启用(例如,在1405、1415处)相应的链路层以进入 低功率。随后,(在1410、1420处)相应的链路层(LL)810a、810b可以与垫层(分别805a、805b) 进行通信,以发起进入到低功率状态(例如,L1)。例如,垫层805a、805b可以根据存储器访问 协议来接收L1进入信号1410、1420。垫层805a、805b可以包括用于根据存储器访问协议,识 另IJEL lc数据是进入低功率状态L1的请求的逻辑单元。垫层805b可以利用在存储器访问协 议中规定的低功率进入请求编码方式,对PCIe令牌的字段(例如,基于PCIe的STP令牌的TLP 序列号字段)进行编码。例如,存储器访问协议可以使用阻塞链路状态(LOc)来发送这些编 码,并且垫层805a、b可以用于利用基于PCIe的令牌字段,对LOc低功率进入握手进行隧道化 (在1425处)。因此,当垫层805a接收到编码的令牌时,其可以向链路层810a发送信号(在 1430处)以进入L1。垫层805a还可以发送L1进入请求的确认(在1425处),并且在垫层805b接 收到ACK时,其可以(在1435处)向其链路层810b发送信号以进入L1。此外,在接收到该确认 时,垫层805b还可以(在1440处)向物理层815b发送信号,以发起PCIe物理层L1进入握手。因 此,PHY 815b可以发送一个或多个电子空闲有序集(EIE0S),且PHY 815a进行回应以造成 PCIe物理层进入电子空闲1450。可以通过信号1455、1460,针对相应的垫层805a、805b进行 相同的确认。
[0106]继续图14的例子,在链路进入到L1之后的一些实例,链路层810b(如通过软件所提 示的)可以发起从低功率L1状态中退出,以重新进入发送链路状态(例如,L0或LOp)。例如, 可以将L1退出信号1465发送给垫层805b并由其进行解码,且垫层805b可以(在1470处)向 PHY 815b发送信号以退出低功率状态,并开始将该链路配置成发送链路状态。例如,为了对 链路进行去抖动、同步和配置,可以(在1475处)交换有序集(0S)和训练序列(TS)。在链路训 练结束之后(例如,通过1475),垫层805a、805b可以识别该物理层正处于发送状态L0。随后, 垫层805a、805b可以向链路层810a、810b通知已进入L0。在一些情况下,当垫层805a、805b在 PCIe物理层上提供存储器访问协议数据和PCIe数据的动态复用时,垫层805a、805b可以向 存储器访问协议和PCIe链路层两者传送进入到L0(或L1),等等其它示例。
[0107] 在GPI0协议的物理层上,支持通用I/0(GPI0)协议(如,PCIe)和存储器访问协议 (如,SMI3)之间的动态切换的实现方式中,垫层可以在向公共物理层发送信号以进入电子 空闲之前,确定两个协议栈准备好进入低功率链路状态(例如,L1)。例如,GPI0协议链路层 (在带宽的其一部分期间)或者存储器访问协议可以(根据其相应的协议)独立地请求进入 低功率链路状态。但是,当一个列尝试进入低功率状态时,另一列可能具有等待在活动链路 上发送的数据。在一些实现方式中,动态垫层可以具有在栈之间仲裁带宽需求的能力。因 此,在一些实现方式中,当对来自两个不同的协议栈的数据进行复用时,垫层可以对这两个 列进行监测,以便在同意其它列的进入低功率状态的请求之前,确保这些列其中之一在即 将到来的带宽划分中没有数据要发送(例如,在STP令牌之后)。在一些实现方式中,垫层可 以将PHY已进入L1的确认合成到请求进入L1的列,同时抑制向该PHY进行将触发实际进入到 L1的请求,直到垫层确定这样做将不会影响等待从另一列发送的数据。例如,在另一第二列 已请求进入L1,并认为链路实际处于L1之后,可以准许第一列使用物理链路。在这些实例 中,只要第一列完成发送数据,垫层就可以向物理层发送信号以使得该链路进入空闲。在其 它实例中,当该链路保持活动时,第二列的链路层可以重新唤醒,并尝试重新激活已经活动 的链路(即,其用于发送另一列的数据)。在这些实例中,垫层可以从第二列的链路层接收数 据,以发起该链路的激活。在这些实例中,垫层可以将链路的重新唤醒的确认,合成到链路 层第二列中。在实践中,由于该链路已经进行了训练并是可操作的,因此不执行如与物理层 相关的动作,且垫层可以响应于来自第二列的链路层的用于使该链路"退出"低功率状态的 信号,简单地向第二列发送该链路是活动的确认信号。在这些实例中,不仅在两个不同的协 议的数据之间可以共享信号物理链路的带宽,而且还可以支持这些不同协议的低功率状态 进入范式。
[0108] 应当注意的是,虽然有时在诸如PCIe和SMI3之类的某些协议的背景下,描述上面 的原理和示例中的大部分。但是,应当理解的是,这些协议仅仅只是作为例子,在SML的实现 时可以使用任何串行GPI0协议和存储器访问协议。事实上,本文所描述的原理、解决方案和
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1