本节介绍了链接层信用证(L-Credit)机制。信息通过使用L-Credit在接口通道传输。要将一个flit从 Transmitter传输到Receiver,Transmitter必须获得L-Credit。
通过将LCRDV信号置起,Receiver将L-Credit发给Transmitter。每个通道都有一个LCRDV信号(上篇文章有描述)。每个flit的传输都将消耗一个L-Credit。
一个接收机的L-Credit最小值为1,最大值为15。
接收机必须保证有接收它发出L-Credits的所有flit。
当链路被激活时,接收方必须及时提供L-Credits,而不需要发射机部分采取任何行动。
注意L-Credit不能在收到的当个时钟周期使用。
本节介绍用于增强接口的低功耗操作的信令。有几个不同级别的操作:
Flit Level Clock Gating:
该技术用于提供每个接口通道 cycle-by-cycle的激活指示。对于每个通道,提供一个额外的信号(即:flitpend)来指示在接下来的周期中是否可能发生传输。此信令允许对与该接口相关联的某些寄存器进行本地时钟门控。
Link Activation :
支持链路激活和停用,以允许接口进入安全状态,以便接口的两侧都可以进入低功率状态,允许它们进行时钟门控或功率门控。
Protocol Activity Indication:
组件使用Protocol Activity Indication(即:SACTIVE)来指示是否有正在进行的事务。协议层活动指示可以用来影响使用其他低功率技术的决策。
每个通道增加额外的信号 FLITPEND,用于指示下个时钟周期是否有有效的flit准备发送。
使用 FLITPEND要以下要求:
提供了一种机制,以便整个接口在完全运行运行状态和低功率状态之间移动。当在操作状态之间移动时,包括从重置中退出时,L-Credit的交换是很重要的。Link flit交换要小心以避免丢失flit或者L-Credit。
在退出重置或移动到完全运行的操作状态时,接口以空闲状态开始,只有在交换了 L-Credits后才可以开始flit传输。L-Credit只有在信用发送方知道接收方准备好接收信用时才能交换。
采用了一种双信号、四相位的握手机制。这两个信号接口用于在同一方向上移动的所有信道,而不是需要为每个单独的信道。整个接口总共使用四个信号,两个信号用于所有发送信道,两个信号用于所有接收信道。
REQ和ACK信号命名为: LINKACTIVEREQ、 LINKACTIVEACK
对于单个通道,或一组沿同一方向移动的通道,下图显示了 Payload、 Credit、LINKACTIVEREQ、 LINKACTIVEACK 之间的关系。
如图14-2所示,在正常运行期间,发送有效payload flit的发射机需要credit才能发送flit。当接收方有可用资源接收flit时,接收方发出Credit:
为接口操作定义了四种状态:
RUN
发送和接收两个组件之间正在进行着flit和credit的交换。
STOP
接口处在低功耗状态,不能进行操作。
所有的信用证保存在Receiver,并且Transmitter不允许发送flit。
ACTIVATE
STOP移动到RUN的中间态。
DEACTIVATE
RUN移动到STOP 的中间态。
RUN和STOP是稳定状态。当进入其中一个状态时,信道可以一直保持这种状态。ACTIVATE和DEACTIVATE都是临时状态。当进入其中一个状态时,一个通道会在相对较短的时间内移动到下一个稳定状态。图14-3显示了这四种状态之间的关系。
下表描述了这四种状态的单个链路的发射器和接收器的行为:
状态 |
Transmitter行为 |
Receiver行为 |
STOP |
|
|
ACTIVATE (ACT) |
|
|
RUN |
|
|
DEACTIVATE (DEACT) |
|
|
下表是各状态的行为汇总:
State |
Transmitter |
Receiver |
STOP |
|
|
ACT |
|
|
RUN |
|
|
DEACT |
|
|
(注:有些要求是为了系统的健壮性,比如DEACT状态既要求Receiver必须停止发出credit,但还是要求Transmitter必须接收credit )
Determining when to move to ACTIVATE or DEACTIVATE
对于给定的通道或相同方向的一组通道,发射机始终负责启动从RUN到STOP或从STOP到RUN的状态更改。
发射器本身可以确定是否需要更改状态。这可以通过各种机制发生。以下为一些示例,但并不详尽:
同方向的多个通道:
有关LINKACTIVEREQ和LINKACTIVEACK之间关系的规则必须适当地应用于所有通道:
单个组件有各种不同的通道,其中一些是输入,另一些是输出。对于单个组件:
这需要TXLINK和RXLINK的激活和失活是协调的。当TXLINK和RXLINK都处于稳定的STOP状态时:
当TXLINK和RXLINK都处于稳定运行的RUN状态时:
当TXLINK和RXLINK改变状态时,可以独立考虑每个链接的发送和接收信用和flit的规则。
下图显示了Tx和Rx状态机之间允许的关系。
下图是期望的状态转换:
下图是没有竞争的状态转换:
(这部分还不熟悉,先放几张图,待更新)
SACTIVE信号表示有正在进行的事务。
TXSACTIVE是由接口置位的一个输出信号,表示有正在进行或即将启动的事务:
这意味着在接口上的TXSACTIVE的取消断言意味着组件已经完成了所有正在进行的事务,并且不需要发送或接收任何更多的flit。
一个被给予RetryAck响应的事务被认为是正在进行中的。
RXSACTIVE是一个输入信号,它表明接口的另一边具有正在进行的协议层活动。当声明RXSACTIVE时,组件必须及时响应协议层活动。
SACTIVE信号必须与CLK同步。
以下规则适用于TXSACTIVE信号:
注意:为确保有效的断电序列,建议不要在链路停用序列期间去拉高已拉低的TXSACTIVE信号。
下图显示了TXSACTIVE断言在一个事务生命周期的要求:
TXSACTIVE signaling from a Request Node
在启动新的事务时,RN必须在同一周期中或在断言TXREQFLITV之前声明TXSACTIVE,并且必须保持其断言,直到发送或接收事务的最终完成之后。
完成由RN发起的事务的flit的类型取决于事务类型和事务进行的方式。例如,ReadNoSnp事务通常可以在收到最后一个CompData flit时完成,但同样可以通过ReadReceipt完成,如果这比收到最后一个CompData flit晚。
当Snoop事务正在进行时,RN-F或RN-D组件还必须断言TXSACTIVE。
TXSACTIVE必须在收到初始化snoop或SnpDVMOp flit后断言,并且不得迟于发送第一个响应flit。它必须保持TXSACTIVE断言,直到为所有Snoop事务发送最终完成的flit之后为止。PrefetchTgt的生命周期是一个单一的flit。
对于一个RN-F或RN-D,TXSACTIVE输出是请求接口和Snoop接口需求的逻辑或。
TXSACTIVE signaling from a Subordinate Node
下级节点不能启动新的事务,并且只需要在处理正在进行的事务时断言TXSACTIVE。它必须在接收到事务启动flit后断言TXSACTIVE,并且必须在发送其第一个响应flit之前或在同一周期中断言。它必须保持TXSACTIVE断言,直到发送或接收到最终完成的flit之后。
TXSACTIVE signaling from an interconnect interface to a Request Node
互连接口到RN,必须在以下两种情况下断言TXSACTIVE:
TXSACTIVE signaling from an interconnect interface to a Subordinate Node
互连接口到SN,必须在发送其初始请求flit之前或在同一周期中断言TXSACTIVE。它必须保持TXSACTIVE断言,直到发送或接收到最终完成的flit之后。
当断言RXSACTIVE时,接收方必须及时响应链路激活请求。当RXSACTIVE被取消声明时,允许接收器延迟响应链接激活请求。
注意:RXSACTIVE的取消断言并不表示所有的协议层活动都已完成。接收器可以接收一个协议flit,它对应于在取消声明RXSACTIVE时正在进行的事务。
RXSACTIVE可以与正在进行的事务的声明结合使用,这将由组件TXSACTIVE输出表示,以表示不需要进一步的事务。这可用于控制进入到一个低功耗状态。
SACTIVE是协议层活动的一个指示。当同时取消断言TXSACTIVE和RXSACTIVE时,可以认为一个节点处于非活跃状态。
LINKACTIVE状态是链接层活动的指示。当发射器处于TxStop状态且接收器处于RxStop状态时,可以认为节点或互连处的链路层处于非活跃状态。
节点或互连只能在其协议层和链接层都不活跃时启用高级时钟门控和低功耗优化。