本文描述CHI的一些信号用于控制interface的低功耗操作,有几个不同级别的操作方式:
- FLit level Clock Gating:该技术用于提供interface的每个channel的周期级活动状态指示。对于每个channel,提供了一个额外的信号用于指示是否一笔传输将在下一个周期发生。该信号允许与interface相关的某些寄存器的本地时钟门控;
- Link Activation:link层建断链允许interface进入一个安全状态,这样两边interface都可以进入低功耗状态,可以允许它们被要不时钟门控或功耗门控;
- Protocol Activity Indication:component可以用协议层活动状态去指示是否有正在进行的transactions,可以用于和其它低功耗技术相配合;
下面会将分别进行讨论这些技术。
一、时钟复位与初始化
1.1 Clock
CHI协议要求全局的时钟和复位信号。CHI协议没有定义特定的时钟架构,但是建议所有的device、ICN等包含一个或多个可以被其它需要同步通讯的link layer functions控制的clock。在下面章节中,clock采用CLK来表达。
1.2 Reset
CHI协议没有定义特定的复位架构,但是建议所有device、ICN等包含一个可以被其它link layer functions控制的特定reset deassertion event。在下面章节中,reset采用RESETn来表达。
1.3 Initialization
在复位的时候,以下interface signals可以不置位:
- TX***LCRDV
- TX***FLITV
- TXLINKACTIVEREQ and RXLINKACTIVEACK
在RESETn变高后,在时钟CLK的上升沿,早期被reset复位的信号可以被驱动为高;
其它信号可以为任意值。
二、FLit level Clock Gating
每个通道中的FLITPEND信号用于指示在下一个周期是否可能有有效的flit要传输。对于FLITPEND信号有如下要求:
- 在一个flit发送的前一个周期必须置位;
- 当它置位时,允许下一个周期transmitter选择发不发flit;
- 当它不置位时,要求下一个周期transmitter不能发送flit;
- transmitter允许将该信号一直置位。但这样做可能无法提前知道一个flit将要发送;
- 在没有L-Credit时,也允许transmitter将该信号置位;
- 允许transmitter将该信号置位后再不置位,却没有发送flit;
下图1为使用FLITPEND信号的例子:
图1 FLITPEND indicating a valid flit in next cycle
三、Link Activation
CHI协议提供了机制,可以控制interface在full running operational state和low power state之间切换。在解复位之后,在operational states之间切换时,要注意L-Credit和Link flits的交换,防止丢失flits或credits。
当解复位后,或要从low power state转移到full running operational state,interface将从idle state开始,并且只有L-Credit已经交换之后,interface才会发送flits。L-Credit的发送者必须知道接收者能接收L-Credit后,才能发送。
CHI协议定义了两根信号来控制握手机制(四个相位周期)。两根信号是用于同一个方向的channels,而不是每个channel独自使用。因此,interface必须使用四根信号来保证所有的通道,两根用于transmit channels,两根用于receive channels。
3.1 Request and Acknowledge handshake
为了方便描述,Request和Acknowledge两根信号采用信号名LINKACTIVEREQ和LINKACTIVEACK来描述。本小结只描述单方向的建断链操作,至于transmit和receive channel两个方向的建断链在3.2节描述。
对于一个单通道或一组相同方向的多通道,图2为Payload、Credit和LINKACTIVEREQ和LINKACTIVEACK信号之间的关系。
图2 Relationship between Payload,Credit and LINKACTIVE signals
在interface转换中,定义了四个状态:
- RUN:两个组件(RX和TX)持续在交换flits和credits;
- STOP:interface处于低功耗状态,不工作。所有的credits都在receiver,并且transmitter不允许发送任何的flits;
- ACTIVATE:这个状态是从STOP state转到RUN state间的过渡态;
- DEACTIVATE:这是状态时RUN state转到STOP state间的过渡态;
ACTIVATE和DEACIVATE是中间态,CHI协议要求中间态是个暂态,但是这个暂态持续的时间是由实现具体决定的。
表1为LINKACTIVEREQ和LINKACTIVEACK的信号值与states的映射表
表2为各个state下,receiver和transmitter的行为
表3为在每个state下,transmitter和receiver行为的总结。
Race conditions
在interface的一侧在同一个接近时间内执行以下两个操作时,可能会出现两种竞争冒险:
- 改变LINKACITVEREQ或LINKACTIVEACK信号值来改变interface的值;
- 在state转换时发送响应的credit或flit;
这样会导致以下的race situations:
- 当receiver把LINKACTIVEACK置位将ACTIVATE变为RUN状态,此时也允许开始发送credit,会出现以下情形:1. 在LINKACTIVEACK信号置位指示state改变和credit的发送会存在竞争;2. 在之前的state和现在新的state下,transmitter都可以接收credit;3. 对于receiver,允许在同一拍将LINKACTIVEACK置位且发送credit;4. 对于transmitter,允许在LINKACTIVEACK置位前后接收credit;
- 当transmitter把LINKACTIVEREQ不置位将RUN变为DEACTIVATE状态,此时停止发送protocol flits,只能允许发送L-Credit flits,会出现以下情形:1. 在原先state改变前发送了一个flit,这个flit可能和LINKACTIVEREQ的不置位存在竞争;2. 在之前的state和现在新的state下,receiver都要求接收flits;3. 对于transmitter,在LINKACTIVEREQ置位的最后一拍允许发送flit;4. 对于receiver,在LINKACTIVEREQ不置位前后,都允许接收flits。
Response to new state
flits是由可以控制状态转换的transmitter发送的,因此transmitter可以控制在状态转换之后不再发送flits,但是仍可能存在竞争场景,即LINKACTIVEREQ不置位的最后一拍发送了个protocol flit;
credits是由不能控制状态转换的receiver发送的,因此receiver在收到新状态转换要求时可能要花一段时间来调整反应,但是仍可能存在竞争场景,即LINKACTIVEACK置位的同一拍也发送了一个credit;
Determining when to move to ACTIVATE or DEACTIVATE
对于一个通道或一组相同方向的通道,触发state从RUN切换到STOP,或从STOP切换到RUN的责任都是由transmitter来承担的。transmitter自身可以决定是否进行状态转换,是通过一系列机制来保证,以下是一些例子:
- transmitter判断有flits要发送,必须从STOP态切换到RUN态;
- transmitter判断在一段重要时间内没有活动,就可以从RUN态切换到STOP态;
- transmitter可以判断一根independent sideband信号来决定是否从RUN态切换到STOP态,或者从STOP态切换到RUN态;
- transmitter可以判断当前transaction还没有完全结束,因此interface必须保持在RUN态等待所有活动结束;
- transmitter可以判断对立方向的channels的状态转换来决定;
Multiple channels in the same direction
图3为多个具有相同传输方向的channels,一对LINKACTIVEREQ和LINKACTIVEACK信号用于这些通道。
图3 Example of multiple channel unidrectional interface
在这些通道中,LINKACTIVEREQ和LINKACTIVEACK信号应该遵循如下原则:
- 当一个状态转换要求transmitter要能接收credits,则必须全部channels都能接收credits;
- 当一个状态转换要求receiver能接收flits,则必须全部channels都能接收flits;
- 当状态转换之前需要停止发送flits,则必须停止所有通道的flits发送;
- 当状态转换之前需要停止发送credits,则必须停止所有通道的credits发送;
- 在同一个channel,一个credit只能和一个flit相关联;
3.2 Transmit and receive link Interaction
本节描述transmitter和receiver之间在建断链上的交互关联。一个组件有许多不同的channels,一些为input方向,一些为output方向。对于一个component:所有payload为输出的channels成为Transmit Link(TXLINK);所有payload为输入的channels成为Receive Link(RXLINK);
CHI协议要求TXLINK和RXLINK的建断链必须协调。
当TXLINK和RXLINK都处于稳定的STOP状态时:
- 受interface另一边的控制,如果RXLINK移动到ACTIVATE状态,那么要求TXLINK也要及时移动到ACTIVATE状态;
- 如果一个组件控制TXLINK移动到ACTIVATE状态,也要要求RXLINK及时移动到ACTIVATE状态;
当TXLINK和RXLINK都处于稳定的RUN状态时:
- 受到interface另一边的控制,如果RXLINK移动到DEACTIVATE状态,那么要求TXLINK也要及时移动到DEACTIVATE状态;
- 如果一个组件控制TXLINK移动DEACTIVATE状态,也要要求RXLINK也及时移动到DEACTIVATE状态;
当TXLINK和RXLINK在改变状态时,发送和接收credits和flits的功能可以认为是每个link独立的,即不同方向的channels在这方面不相关。
Tx and RX state machines
图4为Tx和Rx状态机允许的状态转换关系图。
图4 Combined Tx and Rx state machines
这个图的箭头、颜色、方框等的具体含义如下:
- 为了简单,使用了简化的状态名和信号名;
- 绿色箭头代表是local agent控制的transition;
- 蓝色箭头代表是interface另一边remote agent控制的transition;
- 黑色箭头代表是local agent和remote agent同时控制的transition;
- 在边沿处单独的Tx和Rx state,绿色和蓝色的箭头指示哪个agent控制transition,也指示了哪些信号的变化导致这些状态的变化;
- 垂直或水平的箭头是单独信号变化导致的状态跳转,即Tx或Rx状态机其中一个跳变,不是全部;
- 斜对角线箭头是两个箭头同时改变导致的状态转变。如果斜对角线箭头是绿色或蓝色的,那么agent是收两个同时改变的信号而改变的;有几个情况是由两个对立方向link的事件同时巧合发生而产生的,这些是在斜对角线方向且用黑色箭头表示;
- 用断线表示路径不通,且从该状态跳转不允许。断线的颜色代表是谁负责该路径不会发生;
- TxStop/RxStop和TxRun/RxRun states是期望的稳定状态,通常会在这些状态下长时间停留。这些状态用加粗的边框线显示标出。所有的其它状态组合都认为是瞬态,且必须及时退出来;
- 在底部中的灰色状态是赋值顶部左侧的,是为了使结构图对称;
- 黄色的状态可以在两个输入信号发生竞争时到达,进入到这些状态的标记为Async Input Race;
- 红色的状态是由两个输出信号的竞争引起的。两根输出信号的竞争时不允许在组件的边缘发生的,因此转到到这些的状态称为Banned Output Race,这些状态只能在两个组件的中间节点看到;
- 加粗的箭头用于指示期望的状态机转换方向,在下面会阐述;
- 箭头上带有Permitted字样的状态转换表明不是期望的,但CHI协议也允许发生;
有两个不同的TxSTOP/RxRUN和两个不同的TxRUN/RxSTOP状态,如何到达和允许退出这些状态机是不一样的,为了区分这些状态,用+号去标识这些状态机,标明Tx或Tx的正在到达的状态;
- TxStop/RxRun+指示Tx状态机仍处于之前Stop状态,Rx状态机刚到达下一个Run状态;
- TxStop+/RxRun指示Tx状态机刚到达下一个Stop状态,Rx状态机仍处于之前Stop状态;
Expected transitions
图5为期望的状态转换。
图5 Expected Tx and Rx state machines transitions
local Initiate为local agent触发从一个稳定态到另一个稳定态;
Remote Initiate为interface的另一边remote agent触发从一个稳定态到另一个稳定态;
图5用黑色的箭头把TxStop/RxStop到TxRun/RxRUN状态和TxRun/RxRUN到TxStop/RxStop状态的路线标识出来,这两者的主要区别是后者需要返还L-Credits。
表4为TxStop/RxStop到TxRun/RxRUN的可以的转换路径
表5为TxRun/RxRUN到TxStop/RxStop状态可以的转换的路径,link必须在DEACTIVE状态等待所有的L-Credit都已经返还。
Asynchronous race condition
为了防止出现asynchronous race condition情况,有以下几个约束是必须遵守的:
- RXACK的置位不能早于TXREQ;
- RXACK的不置位不能早于TXREQ的不置位;
- TXREQ的置位不能早于RXACK的不置位;
- TXREQ的不置位不能早于RXACK的置位;
图6为没有竞争情况的Tx和Rx状态转移图。
图6 Combined Tx and Rx state machines without race conditions
四、Protocol Activity Indication
本小节描述用于指示Protocol Layer activity的信号,SACTIVE信号用于指示是否有transactions仍然在进行。SACTIVE分为TXSACTIVE和RXSACTIVE。
TXSACTIVE:
TXSACTIVE信号是interface上的一根输出信号,如果它置位的话,表示有transactions要么在进行,要么正准备进行:
- TXSACTIVE必须在transaction要发送之前或同一个周期置位;
- TXSACTIVE必须保持置位,直到所有相关的transactions的最后一笔flit收到或发送完成;
以上这些说明interface上的TXSACTIVE不置位的话,意味着component应完成了所有正在进行的transactions,并且也不需要发送或接收any further flits;
一笔收到RetryAck的transaction被认为是正在进行中的,因此TXSACTIVE必须保持置位直到所有相关的credit已经提供被使用或返回;
RXSACTIVE:
RXSACTIVE是interface上的一根输入信号,指示另一边是否有正在传输的Protocol Layer activity。当RXSACTIVE置位的话,组件必须及时对Protocol layer activity响应;
下面将详细介绍SACTIVE这些内容:
4.1 TXSACTIVE signal
TXSACTIVE必须遵循如下规则:
- 当transmitter要发送flits,TXSACTIVE必须置位;
- 如果需要的话,component在置位TXSCACTIVE的时候,也必须触发建链流程,不能出现component将TXSACTIVE置位,但是确需要等待interface另一边的component来触发建链流程;
- TXSACTIVE必须保持直到所有transactions的最后一笔flit已发送或接收到了;
- 在断链过程中,传输link flits允许TXSACTIVE不置位;
注意:为了确保有效的下电流程,ARM建议在断链过程中不需要将TXSACTIVE置位。
图7为在一个transaction生命周期中,对于TXSACTIVE置位的要求。
图7 TXSACTIVE assertion during the life of a transaction
1、TXSACTIVE signaling from an RN
当RN产生新transactions时,它必须将TXSACTIVE在同周期或先于TXREQFLITV置位之前有效,并且要保持到transactions的最终完成响应收到或发送完;
RN产生的transaction的完成flit类型取决于transaction类型和transaction传输方式。例如,ReadNoSnp transaction的完成响应通常是CompData的最后一笔flit,但是如果ReadReceipt比CompData晚之后回来,也可能是ReadReceipt。表6为可以作为结束transaction最后一笔完成响应的flit type。PrefetchTgt transaction不包含明确的完成响应,因此该笔transaction认为发送完就完成了。
表6 RN completing flits for RN initiated transactions
当有一笔snoop transaction正在进行的时候,RN-F或RN-D必须将TXSACTIVE置位;在收到一笔Snoop或SnpDVMOp操作时,TXSACTIVE必须在发送第一笔response之前置位,且必须直到所有Snoop操作的最终响应已经完成之后才能解除置位。对于RN-F或RN-D,TXSACTIVE是request interface和snoop interface的逻辑或需求;
2、TXSACTIVE signaling from an SN
由于SN不能触发新的transactions,因此SN只需要在处理transactions的时候将TXSACTIVE置位就行。SN在收到transaction时,必须在回响应之前将TXSACTIVE置位直到最后一笔响应发送或接收完。
3、TXSACTIVE signaling from an ICN interface to an RN
ICN连接RN的接口在以下情况下必须将TXSACTIVE置位:
- 接收到一笔发起flit的transaction,必须在发送Response响应之前将TXSACTIVE置位直到最终的完成响应接收或发送完;
- 在发送发送Snoop或SnpDVMOp响应之前或同一拍,必须将TXSACTIVE置位,且必须等到snoop响应SnpResp或SnpRespData返回之后,才能解除置位。
4、TXSACTIVE signaling from an ICN interface to an SN
ICN连接SN的接口在发送request flit的同一拍或之前必须将TXSACTIVE置位,且必须等到最终完成响应收到或发送完才能解除置位。
4.2 RXSACTIVE signal
当RXSACTIVE置位时,receiver必须及时响应建链流程;当RXSACTIVE没有置位时,允许receiver延迟响应建链流程。个人理解就是RXSACTIVE没有置位表明没有传输要进行,允许不马上进行建链流程。
注意:RXSACTIVE没有置位不代表所有的Protocol layer activity已经完成。在RXSACTIVE没有置位后,receiver可能接收Protocol flit,相对于当RXSACTIVE置位时,相对于一笔transaction正在进行。
RXSACTIVE可以和其它用TXSACTIVE指示正在进行的transactions组合起来,一块用于指示没有further transactions,可以用于控制进入低功耗。
4.3 Relationship between SACTIVE and LINKACTIVE
SACTVIE用于指示Protocol layer activity,一个节点的TXSACTIVE和RXSACTIVE如果都没有置位,那么可以认为是inactive。
LINKACTIVE用于指示Link layer activity,Node或ICN的receiver处于RXSTOP,transmitter处于TxSTOP的话,表明Node或ICN的Link layer是inactive。
SACTIVE和LINKACTIVE是正交关系,即不相关,只有一个约束关系,就是RXACTIVATE中提到的,RXACTIVE如果不置位,receiver可以延迟响应建链请求。
只有在Protocol和Link layers都处于inactive态时,Node和ICN才能使能高电平时钟门控和低功耗优化。