AMBA CHI总线使用credit流控机制,包含两种类型的credit。一种是协议层credit(protocol credit,P-credit),另一种是链路层credit(link layer credit,L-credit)。
1. protocol credit
协议层没有明确的机制来请求P-credit。只有获得RetryAck响应的事务暗含请求credit,Retry的事务流程如下:
请求者发出一个没有P-credit的请求(即AllowRetry字段为1)。
由于Completer不能接受请求,所以发出一个RetryAck响应,表明事务未被接受。
Completer返回PCrdGrant给请求者。通常情况下,PCrdGrant在RetryAck响应之后的一段时间才返回。但是,在非典型情况下,可以在RetryAck之前返回PCrdGrant。
请求者收到RetryAck和PCrdGrant之后,有两种选择来结束retry流程。一种是重新发送原始请求并带上credit(即AllowRetry字段为0,事务一定会被接受)。另一种是取消请求并退
retry机制最多支持16种不同的credit类型。例如,Completer可以为读事务使用一种credit类型,为写事务使用另一种credit类型。通过使用不同的credit类型,Completer可以有效地管理其资源。
2. link layer credit
链路层credit缩写为L-credit。要将一个Flit从发送方传送到接收方,发送方必须获得L-credit。
每个通道(REQ、SNP、RSP、DAT)都有一个LCRDV信号,通过在单个时钟周期内拉高LCRDV信号将L-Credit从接收方发送到发送方。
从发送方到接收方的每次Flit传输消耗1个L-Credit。接收方可以提供的L-Credit的最小数量是1,最大是15。接收方必须保证能接受它发送L-Credit的所有flit。当链路active时,接收方必须及时提供L-Credit,而不需要发送方采取任何行动。
REQ通道接口信号
Credit的信息通常是在每个CHI节点内部以credit counter计数器的形式来存储的。
需要注意:L-Credit不能在收到的同一个周期内就使用。
其实,credit机制相当于是一种提前反压;而AXI总线的ready和valid握手机制是一种当拍就反压的机制。对AXI的ready和valid打拍需要使用Register Slice的方式;而对CHI的flit和flitv则可以直接用ff打拍。
credit和ready/valid握手最大的一个区别是:ready和valid只有在完成握手之后才能发送/接收下一个, 而credit可以一次性发送/接收多笔事务。
因此,基于credit的CHI协议的流控机制更灵活,时序收敛和打拍更容易,适用于高性能、高吞吐量和可扩展性的复杂系统。参考:AMBA CHI Architecture Specification