1.Link layer Credit
本节介绍了链接层信用证(L-Credit)机制。信息通过使用L-Credit在接口通道传输。要将一个flit从 Transmitter传输到Receiver,Transmitter必须获得L-Credit。
1.1L-Credit flow control
通过将LCRDV信号置起,Receiver将L-Credit发给Transmitter。每个通道都有一个LCRDV信号(上篇文章有描述)。每个flit的传输都将消耗一个L-Credit。
一个接收机的L-Credit最小值为1,最大值为15。
接收机必须保证有接收它发出L-Credits的所有flit。
当链路被激活时,接收方必须及时提供L-Credits,而不需要发射机部分采取任何行动。
注意L-Credit不能在收到的当个时钟周期使用。
2.Low power signaling
本节介绍用于增强接口的低功耗操作的信令。有几个不同级别的操作:
Flit Level Clock Gating:
该技术用于提供每个接口通道 cycle-by-cycle的激活指示。对于每个通道,提供一个额外的信号(即:flitpend)来指示在接下来的周期中是否可能发生传输。此信令允许对与该接口相关联的某些寄存器进行本地时钟门控。
Link Activation :
支持链路激活和停用,以允许接口进入安全状态,以便接口的两侧都可以进入低功率状态,允许它们进行时钟门控或功率门控。
Protocol Activity Indication:
组件使用Protocol Activity Indication(即:SACTIVE)来指示是否有正在进行的事务。协议层活动指示可以用来影响使用其他低功率技术的决策。
3. Flit Level Clock Gating
每个通道增加额外的信号 FLITPEND,用于指示下个时钟周期是否有有效的flit准备发送。
使用 FLITPEND要以下要求:
- 在Transmitter发送一个flit之前,提前将FLITPEND拉起一个时钟周期。
- 当FLITPEND断言时,允许(但不要求)Transmitter在下个时钟周期发送一个flit。
- 当FLITPEND为低时,要求Transmitter在下个时钟周期不能发送flit。
- 允许(但不要求)Transmitter将FLITPEND一直保持为高。
- 允许(但不要求)Transmitter将FLITPEND拉高又释放后,没有发送flit。
4. Interface activation and deactivation
提供了一种机制,以便整个接口在完全运行运行状态和低功率状态之间移动。当在操作状态之间移动时,包括从重置中退出时,L-Credit的交换是很重要的。Link flit交换要小心以避免丢失flit或者L-Credit。
在退出重置或移动到完全运行的操作状态时,接口以空闲状态开始,只有在交换了 L-Credits后才可以开始flit传输。L-Credit只有在信用发送方知道接收方准备好接收信用时才能交换。
采用了一种双信号、四相位的握手机制。这两个信号接口用于在同一方向上移动的所有信道,而不是需要为每个单独的信道。整个接口总共使用四个信号,两个信号用于所有发送信道,两个信号用于所有接收信道。
4.1 Request and Acknowledge handshake
REQ和ACK信号命名为: LINKACTIVEREQ、 LINKACTIVEACK
对于单个通道,或一组沿同一方向移动的通道,下图显示了 Payload、 Credit、LINKACTIVEREQ、 LINKACTIVEACK 之间的关系。
如图14-2所示,在正常运行期间,发送有效payload flit的发射机需要credit才能发送flit。当接收方有可用资源接收flit时,接收方发出Credit:
- 在退出复位时,接收方持有信用,并且必须在flit传输开始之前传递给发射器。
- 在正常运行期间,在界面的两侧之间有一个持续的flit和credit交换。
- 在进入低功率状态之前,必须停止有效payload flit的发送,并必须将所有信用证返回给接收方。即将接口返回到复位后相同的状态。
为接口操作定义了四种状态:
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的状态更改。
发射器本身可以确定是否需要更改状态。这可以通过各种机制发生。以下为一些示例,但并不详尽:
- 发射机可以确定它是否有flit需要发送,所以必须从STOP移动到RUN。
- 发射机可以确定它在很长一段时间内没有执行任何活动,因此可以从RUN移动到STOP。
- 发射机可以观察一个独立的边带信号,该信号指示它应该从RUN到STOP,或从STOP到RUN。
- 发射机可以确定事务未完全完成,因此通道在所有活动完成之前应保持RUN状态。
同方向的多个通道:
有关LINKACTIVEREQ和LINKACTIVEACK之间关系的规则必须适当地应用于所有通道:
- 当状态变化要求发射机能够接受信用时,它必须能够接受所有通道上的信用。
- 当状态更改要求接收器能够接受flit时,它必须能够接受所有通道上的flit。
- 当发送必须停止时,发送必须在所有通道上停止。
- 当信用的发送必须在状态更改前停止时,必须在所有通道上停止发送信用。
- 信用只能与同一通道上的flit相关联。
5. Transmit and receive link Interaction
5.1 Introduction
单个组件有各种不同的通道,其中一些是输入,另一些是输出。对于单个组件:
- payload为输出的所有通道都被定义为transmit link(TXLINK)。
- payload是输入的所有通道都被定义为receive link(RXLINK)。
这需要TXLINK和RXLINK的激活和失活是协调的。当TXLINK和RXLINK都处于稳定的STOP状态时:
- 如果RXLINK移动到ACTIVATE状态,(它由接口另一边的组件控制),则要求TXLINK也及时移动到ACTIVATE状态。
- 如果一个组件将TXLINK移动到它控制的ACTIVATE状态,它可以期望RXLINK也及时移动到ACTIVATE状态。
当TXLINK和RXLINK都处于稳定运行的RUN状态时:
- 如果RXLINK移动到DEACTIVATE状态,(由接口另一边的组件控制),则要求TXLINK也及时移动到DEACTIVATE状态。
- 如果一个组件将TXLINK移动到它控制的DEACTIVATE状态,它可以期望RXLINK也及时移动到DEACTIVATE状态。
当TXLINK和RXLINK改变状态时,可以独立考虑每个链接的发送和接收信用和flit的规则。
5.2Tx and Rx state machines
下图显示了Tx和Rx状态机之间允许的关系。
下图是期望的状态转换:
下图是没有竞争的状态转换:
(这部分还不熟悉,先放几张图,待更新)
6. Protocol Activity Indication
6.1 Introduction
SACTIVE信号表示有正在进行的事务。
TXSACTIVE是由接口置位的一个输出信号,表示有正在进行或即将启动的事务:
- TXSACTIVE必须在发送与事务相关的第一个flit之前断言,或同一cycle。
- TXSACTIVE活动必须保持断言,直到发送或接收到与所有事务相关的最后一个flit。
这意味着在接口上的TXSACTIVE的取消断言意味着组件已经完成了所有正在进行的事务,并且不需要发送或接收任何更多的flit。
一个被给予RetryAck响应的事务被认为是正在进行中的。
RXSACTIVE是一个输入信号,它表明接口的另一边具有正在进行的协议层活动。当声明RXSACTIVE时,组件必须及时响应协议层活动。
SACTIVE信号必须与CLK同步。
6.2 TXSACTIVE信号
以下规则适用于TXSACTIVE信号:
- 当发射机需要发送flit时,必须断言TXSACTIVE。
- 断言TXSACTIVE的组件还必须启动链接激活序列。不允许组件断言TXSACTIVE信号,然后等待接口的另一边启动链路激活序列。
- TXSACTIVE活动必须保持断言,直到发送或接收与所有事务相关的最后一个flit。
- 允许但不要求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:
- 在接收到事务启动flit时,必须在发送第一个响应触发之前或在同一周期中断言。它必须保持TXSACTIVE断言,直到发送或接收到最终完成的flit之后。
- 在发送启动Snoop或SnpDVMOp flit之前或在同一周期中。它必须保持TXSACTIVE,直到最终完成的flit被发送,这将是SnpResp或SnpRespData。
TXSACTIVE signaling from an interconnect interface to a Subordinate Node
互连接口到SN,必须在发送其初始请求flit之前或在同一周期中断言TXSACTIVE。它必须保持TXSACTIVE断言,直到发送或接收到最终完成的flit之后。
6.3 RXSACTIVE signal
当断言RXSACTIVE时,接收方必须及时响应链路激活请求。当RXSACTIVE被取消声明时,允许接收器延迟响应链接激活请求。
注意:RXSACTIVE的取消断言并不表示所有的协议层活动都已完成。接收器可以接收一个协议flit,它对应于在取消声明RXSACTIVE时正在进行的事务。
RXSACTIVE可以与正在进行的事务的声明结合使用,这将由组件TXSACTIVE输出表示,以表示不需要进一步的事务。这可用于控制进入到一个低功耗状态。
6.4 Relationship between SACTIVE and LINKACTIVE
SACTIVE是协议层活动的一个指示。当同时取消断言TXSACTIVE和RXSACTIVE时,可以认为一个节点处于非活跃状态。
LINKACTIVE状态是链接层活动的指示。当发射器处于TxStop状态且接收器处于RxStop状态时,可以认为节点或互连处的链路层处于非活跃状态。
节点或互连只能在其协议层和链接层都不活跃时启用高级时钟门控和低功耗优化。