电子产业一站式赋能平台

PCB联盟网

搜索
查看: 71|回复: 0
收起左侧

深入理解AXI协议中Narrow burst

[复制链接]
匿名  发表于 2024-11-7 11:59:00 |阅读模式
——————————————————————————————
版权声明:
本文作者:烓围玮未。主要从事ISP/MIPI/SOC/车规芯片设计/SOC架构设计
首发于知乎专栏:芯片设计进阶之路
微信公众号:芯片设计进阶之路(x_chip)
转发必须授权,同时保留这段声明,盗版必究!
——————————————————————————————
Narrow Burst (AXI 协议称为Narrow Transfer)虽然在实际的设计中使用的比较少,但是它对系统总线的设计却有比较大的影响,对应支持Narrow Burst的Master IP,系统一定要妥善的支持,否则就会导致功能不正确。所以对这个概念还是必须有非常准确的理解。下面我们总结一下Narrow Transfer。
AXI Burst[/ol]虽然ARM 把AMBA协议写的很精简,能不多说一个字就不浪费任何的单词,而且能不画图说明的一定不给你画图解释,但是协议的定义还是比较严谨和准确的。我们在理解概念的时候,还是以协议的原文为准,不懂就多读几次。
AXI通过AxBurst信号来区分,定义了三种burst类型,从AXI3~AXI5这个类型一直没变过:

FIXED:这种突发类型用于对同一位置的重复访问,例如加载或清空FIFO时。
在整个突发传输中,每个传输的地址都相同。
  • 同一个burst内的每一个beats的byte lanes数目保持一致,但可以通过WSTRB选择每个beat的哪些byteLane是有效bytes。
    Burst长度最多可以等于16。
    [/ol][/ol]注意:Fixed类型的burst基本只有一个应用场景,那就是FIFO的读写。另外,虽然AXI4增加了burst length的最大值,但是Fiexed的最大burst length并没有增加,仍然是16.
    INCR: 这种突发类型中,每个传输的地址都是前一个传输地址的增量。
    增量值取决于事务的大小。例如,对于一个4字节大小的对齐起始地址,每次传输的地址是前一个地址加4。
    这种突发类型用于访问DDR等。
    [/ol][/ol]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? 仍然是的,只是实际使用这么发的比较少而已。

    WRAP:这种突发类型与INCR类似,但如果达到了一个上限地址,地址会回绕到一个较低的地址。
    最低地址是对齐到要传输数据的总大小的,即大小 * 长度。这个地址被称为Wrap Boundary。
    每次传输后,地址的增量与INCR突发相同。然而,如果这个增量后的地址是(包装边界 + (大小*长度)),那么地址会回绕到Wrap Boundary。
    事务中的第一个传输可以使用高于Wrap Boundary的地址,但受到WRAP事务限制条件的约束。当第一个地址高于Wrap Boundary时,地址会回绕。
    起始地址必须与每个transfer的大小对齐。
    Burst的长度必须是2、4、8或16个传输。
    以下是一些限制条件:
    WRAP事务的行为如下:
    这种Burst类型用于缓存行访问。
    [/ol][/ol]WARP类型属于三种里面最难理解的,首先是限制:
  • 起始地址必须与每个transfer的大小对齐。transfer大小就是数据位宽,比如32bit就是4byte,地址都是按照byte为最小单位的。所以WRAP类型的起始地址和AXI位宽的对应关系如下:
    [/ol]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的倍数;
  • Burst长度不能是1, 只能是2,4,8,16其中一个。
    [/ol]而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地址的上下界的计算大家可以去看一下协议,很多文章说明过,这里就不展开了。
    Narrow Transfer[/ol]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
    ——————————————————————————————
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表