【AMBA】AXI总线中的AXLEN、AXSIZE、AXBURST和4K边界

AXI传输层级概念

在手册的术语表中,与 AXI 传输相关的有三个概念,分别是 transfer(beat)、burst、transaction。用一句话串联就是:

在 AXI 传输事务(Transaction)中,数据以突发传输(Burst)的形式组织。一次突发传输中可以包含一至多个数据(Transfer)。每个 transfer 因为使用一个周期,又被称为一拍数据(Beat)。
再展开一层,两个 AXI 组件为了传输一组数据而进行的所有交互称为 AXI Transaction,AXI 传输事务(所以会有写事务和读事务),包括所有 5 个通道上的交互。

  • AXI传输事务Transaction
    • AXI突发 Burst
      • AXI传输 Transfer / Beat(使用一个周期)

AXI 是一个 burst-based 协议,AXI 传输事务中的数据传输以 burst 形式组织,称为 AXI Burst。每个传输事务包括一至多个 Burst。每个 Burst 中传输一至多个数据,每个数据传输称为 AXI Transfer。双方握手信号就绪后,每个周期完成一次数据传输,因此 AXI Transfer 又被称为 AXI beat,一拍数据。不严谨地说

AXI Transaction =M*AXI Burst ,M >= 1
AXI Burst = N * AXI Transfer(AXI beat) ,N >= 1

和上述概念相关的信号是AXLEN、AXSIZE、AXBURST。这三个信号均由主设备发出。

AXLEN[7:0]定义突发传输长度

表示一次突发传输(Burst)中包含的数据传输(transfer)数量。

协议中的 AxLen 信号从零开始表示,实际的长度值为 AxLen + 1

突发传输长度在不同的模式(burst type ,将在后文中讨论)下有一些限制,包括:

  • 对于 WRAP 模式,突发传输长度仅能为2,4,8,16
  • 在一次突发传输中,地址不能跨越一个 4KB 分区
  • 一次突发传输不能在完成所有数据传输前提前结束(early termination)

协议中多次强调,通信双方都不能在传输事务的所有 Transfer 完成前提前结束。哪怕发生错误,也得含泪走完整个传输事务的流程。

但是主机也有办法减少传输的数据。在写传输事务中,发送方可以通过置低所有的写有效位,使写数据无效。在读传输事务中,主机可以直接丢弃读取到的数据。

AXSIZE[2:0]定义突发传输transfer的位宽

表示每个周期传输数据的字节数/每拍传的数据位宽
在这里插入图片描述
每拍传的数据位宽 = 2 AXSIZE

AXBURST[1:0]定义突发传输类型

在这里插入图片描述
FIXED 类型中, burst 中所有数据都使用起始地址。该模式适合对某个固定地址进行多次数据更新,比如读写一个 fifo 时,读写地址就是固定的。

INCR 类型最为常用,后续数据的地址在初始地址的基础上进行递增,递增幅度与传输宽度相同。适合对于 RAM 等通过地址映射(mapped memory)的存储介质进行读写操作。

WRAP 类型比较特殊,首先根据起始地址得到绕回边界地址(wrap boundary)与最高地址。当前地址小于最高地址时,WRAP 与 INCR 类型完全相同,地址递增。但到递增后的地址到达最高地址后,地址直接回到绕回边界地址,再进行递增,就这样循环往复(通常用在cache的访问中)。最高地址由绕回边界地址计算得到:wrap boundary + (N_bytes x burst_len)

Wrap突发传输不支持AXI非对齐传输。

Wrap的特点:

  • 起始地址必须与数据总大小对齐
  • 突发传输长度仅能为2,4,8,16

数据总大小:一次突发中传输的数据总量 = 传输次数(AXLEN) * 单次传输大小(AXSIZE)
对齐:起始地址是数据总大小的整数倍

4K边界

要求一次AXI突发(Burst)传输不能跨越4K字节的地址边界,“4K边界”对应的是 低12bit为0的地址,例如32’h00001000, 32’h00002000…

4K对齐最大原因是系统中定义一个标准页大小是4K字节。这是因为许多系统中,物理内存被划分为4K字节大小的页。

如果一个突发跨越了4K边界,即从一个4K页面的末尾跳转到另一个页面的开始,那么它可能会尝试同时访问两个不同的slave设备,这会导致协议冲突和数据不一致性。(假如一个burst交易访问了两个slave A 和B(A在前B在后),那么只有A收到了地址和控制信息,而B不会收到地址和控制信息,因此只有A响应B并无响应,这就会导致此笔burst交易无法完成(B无法返回最后一笔transfer)。)

以32位地址为例,[31:12]相等的地址都是同一个page,没有跨4K边界。 即[11:0] 可以为0~0xFFF. 例如0x1000和0x2000就是在不同的page,跨了4K边界。0x1000和0x1FFF则是在同一个page,没有跨4K边界。同理,0x1FFF和0x2000则跨了4K边界,虽然他们是相邻的byte。 再说到一次burst没有4K大小,但是如果起始地址是0x1FFC, INCR模式,也会出现跨边界的情况。

参考文章:
https://blog.csdn.net/hit_shaoqi/article/details/53245521
https://zhuanlan.zhihu.com/p/46538028

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值