深入理解AXI协议中Narrow burst

乐活   2024-11-07 11:59   北京  

——————————————————————————————

版权声明:

本文作者:烓围玮未。主要从事ISP/MIPI/SOC/车规芯片设计/SOC架构设计

首发于知乎专栏:芯片设计进阶之路

微信公众号:芯片设计进阶之路(x_chip)

转发必须授权,同时保留这段声明,盗版必究!

——————————————————————————————

Narrow Burst (AXI 协议称为Narrow Transfer)虽然在实际的设计中使用的比较少,但是它对系统总线的设计却有比较大的影响,对应支持Narrow Burst的Master IP,系统一定要妥善的支持,否则就会导致功能不正确。所以对这个概念还是必须有非常准确的理解。下面我们总结一下Narrow Transfer。

  1. AXI Burst

虽然ARM 把AMBA协议写的很精简,能不多说一个字就不浪费任何的单词,而且能不画图说明的一定不给你画图解释,但是协议的定义还是比较严谨和准确的。我们在理解概念的时候,还是以协议的原文为准,不懂就多读几次。

AXI通过AxBurst信号来区分,定义了三种burst类型,从AXI3~AXI5这个类型一直没变过:

  1. FIXED:这种突发类型用于对同一位置的重复访问,例如加载或清空FIFO时。

    1. 在整个突发传输中,每个传输的地址都相同。

    2. 同一个burst内的每一个beats的byte lanes数目保持一致,但可以通过WSTRB选择每个beat的哪些byteLane是有效bytes。

    3. Burst长度最多可以等于16。

注意:Fixed类型的burst基本只有一个应用场景,那就是FIFO的读写。另外,虽然AXI4增加了burst length的最大值,但是Fiexed的最大burst length并没有增加,仍然是16.

  1. INCR: 这种突发类型中,每个传输的地址都是前一个传输地址的增量。

    1. 增量值取决于事务的大小。例如,对于一个4字节大小的对齐起始地址,每次传输的地址是前一个地址加4。

    2. 这种突发类型用于访问DDR等。

INCR类型的burst是最常见的burst。由于现代大部分SOC都是以DDR为中心的,所以很多master主要支持INCR类型的burst,其他的两种可能都不支持。

这里重点强调一下:AXI的transcation之间是独立的!

比如下这个读传输,burst=4,INCR类型:

请问,第一个绿色的transcation和第二个蓝色的transcation之间是什么关系?答案是:没有关系

AXI的一个transcation就是一个独立的,完整的传输。Slave在接受到命令的时候,是不用依赖前一个或者后一个transcation信息就能完整处理当前transcation的所有操作。比如,你只发一个transcation,难道slave就不能接受吗?

所以:burst类型以transcation为边界的,也就是定义的是transcation内部的规则。

那么这里为什么transcation1和transcation2看起来这么连续,非常符合INCR连续递增的特点呢?这是因为实际使用中,单个transcation并不能传输完Master需要的数据,而Master需要的数据往往是一大块连续的地址,所以几个连续的transcation看起来地址是连续的,这和协议没有任何关系。

比如下面这种传输是不是INCR? 仍然是的,只是实际使用这么发的比较少而已。

  1. WRAP:这种突发类型与INCR类似,但如果达到了一个上限地址,地址会回绕到一个较低的地址。

  • 最低地址是对齐到要传输数据的总大小的,即大小 * 长度。这个地址被称为Wrap Boundary。

  • 每次传输后,地址的增量与INCR突发相同。然而,如果这个增量后的地址是(包装边界 + (大小*长度)),那么地址会回绕到Wrap Boundary。

  • 事务中的第一个传输可以使用高于Wrap Boundary的地址,但受到WRAP事务限制条件的约束。当第一个地址高于Wrap Boundary时,地址会回绕。

  • 起始地址必须与每个transfer的大小对齐。

  • Burst的长度必须是2、4、8或16个传输。

  1. 以下是一些限制条件:

  2. WRAP事务的行为如下:

  3. 这种Burst类型用于缓存行访问。

WARP类型属于三种里面最难理解的,首先是限制:

  1. 起始地址必须与每个transfer的大小对齐。transfer大小就是数据位宽,比如32bit就是4byte,地址都是按照byte为最小单位的。所以WRAP类型的起始地址和AXI位宽的对应关系如下:

AXI 位宽32bit -------------------------WRAP 起始地址对齐到4:0x0,0x4,0x8,0xc, 不能出现0x2,0x6这些;

AXI 位宽64bit -------------------------WRAP 起始地址对齐到8:0x0,0x8 不能出现0x2,0x4,0x6这些;

AXI 位宽128bit -----------------------WRAP 起始地址对齐到16:0x00,0x10,最低位不能出现非0地址;

AXI 位宽256bit -----------------------WRAP 起始地址对齐到32:0x00,0x20,0x20的倍数;

  1. Burst长度不能是1, 只能是2,4,8,16其中一个。

而WRAP burst的应用场景主要就是Cache line的访问,所以一般都是带cache的CPU和GPU等IP来使用,其他的IP很少用到。

当发生cache miss时,从memory读回来的是整个cache line。如果不支持WRAP Burst那么就必须从cache line的起始地址开始读数据:

如上图,CPU需要的数据是D06,但是CPU不支持WRAP Burst,所以必须从D00开始读,那么如果CPU不支持乱序执行,那么CPU就必须停止执行,等D00~D05读完,拿到D06后再继续执行。这样对CPU的性能影响是非常大的。

如果支持WRAP Burst,就可以第一个访问D06,CPU继续执行,不会影响CPU性能。

WRAP地址的上下界的计算大家可以去看一下协议,很多文章说明过,这里就不展开了。

  1. Narrow Transfer

AXI 协议定义的Narrow Transfer如下:

也就是如果传输的transfer的实际有些的数据位宽小于实际的data channel的位宽,则为Narrow Transfer。在Narrow Transfer中,AXI总线的某些数据位宽不会被使用,因此需要通过写使能信号(WSTRB)来指示哪些字节通道是有效的。

注意,只有写通道有STRB信号,也就是Narrow Transfer只是会发生在写通道。这也很好理解,读数据是slave返回的, 使用STRB信号并不会带来任何收益,需要的带宽不会减少,而且还需要增加一个信号,更好的方式是把数据都读回来,master需要用哪些自己来决定。

注意:WSTRB并不是Narrow transfer的充分必要条件,也就是说出现了WSTRB并不代表这个tranfer就是Narrow Transfer. 在非对齐的传输中,也会用到WSTRB,而且协议并没有规定WSTRB是连续的。

协议规定的Narrow Tansfer分为两种不同情况:

1.如果是INCR 或者 WRAP Burst,那么每个transfer(beat)使用不同的byteLane;

2.如果是FIXED Burst,那么每个transfer(beat)使用相同的byteLane;

如下图中起始地址是0,INCR Burst Len=5, 总线宽度是32bit,transfer是8bit,传输情况如下:

那么这种情况下,AWSIZE是多少呢?

可以看到,SIZE表明的是每个传输中最大的byte数,这里需要注意是最大。所以这里AWSIZE=0b00;

那么对于下面的BURST=2, 数据位宽是32bit的传输属于Narrow transfer吗?

显然这里不符合每个transfer(beat)使用不同的byteLane的条件,所以不是Narrow Transfer。这种传输在实际的Master里面还是比较常见的。

另外这里的AWSIZE=0b010 (4byte per transfer)

所以协议虽然没有明确说明,但是从协议的规定可以看到:

1.如果burst length =1,有WSTB就可以认为是Narrow transfer,也可以认为是非Narrow tranfer,对传输无影响,slave通过WSTB来解析数据就可以。

2.如果burst length >1,那么Narrow Transfer的burst的AWSIZE必须小于数据位宽能传输的最大byte数,也就是每个tranfer的数据量都必须小于数据通道的位宽才行,而且必须满足每个transfer(beat)使用不同的byteLane。

后记

技术很重要,技术背后的思想更重要!

技术背后的某些思想就是你解决以后问题的钥匙。我的文章可能一篇中知识点不太多,但是力求让你能深入理解,为你进阶打下基础。如果有一点点收获,也算是我对中国芯片行业的一点点贡献吧。

赠人玫瑰,手有余香。如果你有所收获,麻烦花一秒时间帮我点个赞和在看吧,谢谢!

知乎专栏:芯片设计进阶之路

微信公众号:芯片设计进阶之路 x_chip

——————————————————————————————



芯时代青年
专心数字前端全流程,芯时代有为青年的自我修养
 最新文章