AMBA AHB协议的burst termination简析

接口/总线/驱动

1143人已加入

描述

前言

在AMBA AHB协议中,AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。Burst传输中支持incrementing和wrapping。

  • Incrementing burst用于访问顺序的memory地址,burst中每个拍的地址都是前一拍地址的增量,增量大小取决于HSIZE。
  • Wrapping burst在跨越地址边界时会卷绕回去。地址边界值是由burst中的拍数和每拍传输大小的乘积得来的。Burst传输的拍数是受HBURST控制,每拍传输大小是受HSIZE控制。举个例子:如果1笔burst传输的HBURST为INCR4(传输4拍),HSIZE为3’b010(传输大小为Word),那么它的地址边界值为16Byte(4*4=16)。因此,假如这笔burst传输的起始地址是0x14,那么它4拍的地址将是:0x14, 0x18, 0x1c, 0x10。

那么burst传输允许没发完全部的beat就终止(termination)吗?答案是满足一定的条件就可以提前终止,不过AXI是无法提前终止的。

Burst termination场景1

对于未定义长度(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的时序图示例为:

AMBA协议

未定义长度burst传输从INCR回到NONSEQUENTIAL的时序图示例为:

AMBA协议

另外需要注意的是,AHB协议不允许其它有固定长度的burst传输以BUSY拍结束的,它们必须以SEQ拍结束。固定长度的burst传输有:INCR4, INCR8, INCR16, WRAP4, WRAP8, WRAP16。

对于单次传输(HBURST为SINGLE),它的下一拍只能是IDLE或者NONSEQUENTIAL,也就是不可能是BUSY。

总结这个场景,AHB中想要从BUSY拍直接结束的传输只可能是未定义长度的burst传输,不可能是其它传输的。

Burst termination场景2

在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通常要先去处理下,那么之后未发送的拍是可以省掉的。

AMBA协议

Burst termination场景3

在多层互联总线和多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发出的请求。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分