十二 · 2023年06月30日

AMBA4——“无聊的”Narrow transfers

✎ 编 者 按 

    AMBA总线无论FPGA还是ASIC,应该都是比较常用的一组总线协议。对于其中的协议,有一种传输格式叫Narrow Transfers,颇有些“无聊”~

》AxSize

    在AXI4总线里,Aw通道以及Ar通道均存在一个size字段:

image.png
    这里面就有点儿意思了。比如说在FPGA里面常用的512总线位宽场景下,FPGA设计里一般也会直接固定死arsize、awsize为0x6,即每拍传输64Bytes,然而协议里面的设置也允许了axsize可以设置为0x0~0x6中的任一值,即每拍可以传输1、2、4、8、16、32、64中的任一情况。而这种不满位宽输出的场景,即为“Narrow Transfers”。

》传输规则

    在AXI4总线中,协议中规定了其传输规则:

  • Start_Addr:Master发起传输的起始地址。
  • Data_Bytes:总线数据位宽。
  • Aligned_Addr:地址对齐的起始地址
  • Address_N:第N拍的传输地址(1为第一拍)
  • Wrap_Boundary:Warp传输的相应低位地址
  • Lower_Byte_Lane:每拍传输的低位地址
  • Upper_Byte_Lane:每拍传输的高位地址
  • INT(x):X向下取整

    对于传输,定义:

Start\_Addr=AxADDR

Aligned\_Addr = INT(Start\_Addr / Size)* Size

    这里Aligned\_Addr就有点儿意思了,其采用的是Size(1<<AxSize),而非总线的位宽。也就意味着当总线位宽是512时,若axsize为6,则意味着:

Aligned\_Addr = INT(Start\_Addr / 64)* 64

    而若当axsize为5时,则意味着:

Aligned\_Addr = INT(Start\_Addr / 32)* 32

    对于第一拍传输,则:

Address\_1 = Start\_Addr

    对于INCR传输以及未回环的WARP传输:

Address\_N = Aligned\_Addr + (N - 1)* Size

        对于首拍,Lower\_Byte\_Lane和Upper\_Byte\_Lane采用:

Lower\_Byte\_Lane=Start\_Addr-(INT(Start\_Addr/Data\_Bytes)*Data\_Bytes)

Upper\_Byte\_Lane=Aligned\_Addr+(Size-1)-(INT(Start\_Addr/Data\_Bytes)* Data\_Bytes)

       除了首拍之外的其他拍则有:

Lower\_Byte\_Lane=Address\_N-(INT(Address\_N/Data\_Bytes)*Data\_Bytes)

Upper\_Byte\_Lane = Lower\_Byte\_Lane + Size - 1

          光看公式还是蛮无聊的,来具体举例看看。我们假定:

  • 总线位宽为8 Byte。
  • 起始地址是3,传输 16字节。

    对于AwSize为3,即8字节时,传输时序为:

image.png

    对于AwSize为2,即4字节时,传输时序为:

image.png

    对于awSize为1时,即2字节,传输时序为:

image.png

    仔细分析上面的这三张图,除了awsize为3的正常传输外,剩下的两个均是narrow transfer。

    如果你从下往上看,像俄罗斯方块那种从下往上堆叠,在地址不跨越总线位宽地址(8 Byte)的情况下,像俄罗斯方块那种模式,则会有:

image.png
image.png

    所以,所谓的narrow transfer,不过是正常的传输给拆分成按照(1<<awsize)为地址边界进行拆分。有效字节对应的位置是相同的,只不过是每次使能的字节位置不同:

image.png

    确实有点儿蛮“无聊”的是吧~

》实现考虑

    从逻辑实现的角度来考虑,对于Master实现,当满带宽的数据(总线位宽用满)进来后,我们所需要考虑的是数据需要停留几拍。而停留几拍数据,所需要考虑的是地址累加什么时候到达Data_Bytes的整数倍(或者数据全部送完)。然后再取下一拍送出即可,同时输出相应的STRB信号进行字节选取。而对于Slave端实现的角度,我们同样需要根据相应的规则选择停留合并合适的N拍后进行输出,比如写通道,则可以:

image.png

作者:玉骐
原文链接:Spinal FPGA
微信公众号:
 title=

推荐阅读

更多SpinalHDL技术干货请关注Spinal FPGA欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
1581
内容数
133
用SpinalHDL提升生产力
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息