接口/总线/驱动
在AMBA AHB协议中,AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。Burst传输中支持incrementing和wrapping。
那么burst传输允许没发完全部的beat就终止(termination)吗?答案是满足一定的条件就可以提前终止,不过AXI是无法提前终止的。
对于未定义长度(undefined length)的burst传输(HBURST为INCR),AHB master如果需要更多时间才能送出INCR Burst的下一拍数据传输,那么它会先插入BUSY拍,表示master处于忙状态。但如果AHB master最终发现自己不需要下一拍数据了,那么它可以直接结束当前的INCR burst传输,回到IDLE或者发起另一个burst传输了。要回到IDLE的话,下一拍的HTRANS将是IDLE,要发起另一个burst传输的话,下一拍的HTRANS将是NONSEQUENTIAL。
未定义长度burst传输从INCR回到IDLE的时序图示例为:
未定义长度burst传输从INCR回到NONSEQUENTIAL的时序图示例为:
另外需要注意的是,AHB协议不允许其它有固定长度的burst传输以BUSY拍结束的,它们必须以SEQ拍结束。固定长度的burst传输有:INCR4, INCR8, INCR16, WRAP4, WRAP8, WRAP16。
对于单次传输(HBURST为SINGLE),它的下一拍只能是IDLE或者NONSEQUENTIAL,也就是不可能是BUSY。
总结这个场景,AHB中想要从BUSY拍直接结束的传输只可能是未定义长度的burst传输,不可能是其它传输的。
在Burst传输过程中,如果AHB slave返回错误的响应,那么Burst传输也是可以终止的。
如果AHB slave返回ERROR响应,那么AHB master是可以取消burst传输中还未发出的拍,不过这也不是一个严格要求,AHB master仍然可以继续把剩下的拍都发送完。举个例子:在WRAP8的burst传输中,如果AHB master在收到slave的ERROR响应时,才完成了2拍,那么协议允许剩下的6拍不必发给AHB slave了。这样对AHB的性能提升和节省功耗还是有些帮助的,因为前面出现EROOR响应,AHB master通常要先去处理下,那么之后未发送的拍是可以省掉的。
在多层互联总线和多AHB master情况下,也可能存在burst提前终止。
尽管AHB master不允许无缘无故提前终止burst传输,但是AHB slave必须设计成允许burst提前终止。当多层互联总线用于多个AHB master系统的场景中,当前互联总线正在burst访问1个slave,如果其它master来了个新请求,互联总线中的仲裁逻辑会决定新请求是否优先于当前的burts访问。如果不是,那么就等当前burst传输完之后,排序传输新来的请求。如果是,那么它可以提前终止当前的burst传输,以便给优先级更高的请求腾出总线去访问AHB slave。因此AHB slave必须终止原来burst传输,然后去处理新AHB master发出的请求。
全部0条评论
快来发表一下你的评论吧 !