完整的AHB协议:1)可以多个master,并且需要外加一个Arbiter,和write multiplexor。为了保证每一时刻只有一个master拥有访问权。
2)为了增强pipeline的能力,允许Arbiter将一个未完成的burst中断,grant给另外一个transfer。所以还有两种
transfer;RETRY/SPLIT。
Arbitration:主要是确保每个时间点,都从master的req中选择一个priority最高的访问bus;
从slave端接收req,来完成SPLIT操作。
Arbitration signals:
HBUSREQ,从master到Arbitration的总线请求信号。
HLOCK,从master到Arbitration的原子操作请求,与AHB-Lite中的lock信号类似。为了保证transfer的完整性。
HGRANT,从Arbitration到master的总线应答信号。
HMASTER,4bit,由master驱动,表示当前拥有总线的master。方便支持SPLIT transfer的slave record此时的master。
HMASTLOCK,由Arbitration发送给slave的lock信号。
HSPLIT,16bit,由slave发出,表示要进行SPLIT transfer,通知Arbitration哪一个bus master要继续进行操作。
以下是一个Arbitration的响应过程。在GRANT和HREADY都为高时,才表示总线赋予成功.
HRESP信号,2bit,表示OKAY、ERROR外,还可以表示RETRY、SPLIT。同样的RETRY、SPLIT也是2-cycle response。
RETRY和SPLIT的主要区别是,RETRY只是表示这个transfer还没有结束,
但并不会改变Arbitration接下来的调度。
SPLIT会将当前transfer的优先级调低,在slave准备好之后,通过SPLIT信号通知Arbitration,
而后再将优先级调高。
RETRY和SPLIT的会增加slave和Arbitration的设计复杂性,但是对master并没有影响,master应该始终req bus。
SPLIT机制最大限度的利用AHB的总线带宽。却增加了slave和Arbitration的设计复杂性。