【ARM AMBA AXI 入门 3 - AXI 协议中的 Outstanding transfer 】

文章目录

    • 1.1 Outstanding Transfer(超前传输)
      • 1.1.1 什么是 Outstanding?
      • 1.1.2 AXI Outstanding Depth(超前传输深度)
      • 1.1.3 AXI Outstanding 场景

1.1 Outstanding Transfer(超前传输)

AXI协议上写了一句:the axi protocal supports multiple outstanding transactions.
那么应该怎么理解这个“未解决的”outstanding ?

对 Outstanding 字面上的理解为: “正在进行中的”,“未完成的”,形象地说就是 “在路上”。

首先应该记住 Outstanding 是对地址而言的,AXI 协议中的关键思想:地址和数据分离

以一次完整的写传输事物(transaction)为例:

  • 首先写地址信号握手,即 awvalidawready握手成功,同时将写地址awaddr传输给 slave
  • 其次,根据地址突发类型和突发长度,主机给从机发对应数量的数据信号,传输方式同样是 wvliadwready 握手成功的同时,传输数据。

本质上,一次完整的传输事物过程中,地址握手成功后再传输数据,也就是地址和数据传输是分离的。

1.1.1 什么是 Outstanding?

从应用角度来思考这个问题:
比如传输一段数据,假设没有 outstanding,必须要等到地址握手成功了才可以传输数据,而每一次握手过程中都不能保证主从机此刻都准备好,那这样在数据传输过程中就难免会有气泡,难以实现真正的全流水和满性能。所以从设计的角度,我们就有多发几个地址的需求,比如我们可以发出去10个地址,尽管我们还没给数据,但是可以让从机知道,我们接下来要向这些地址写数据,这样就可以不用刻板地遵循,每次都要写地址握手成功再写数据。

所以,outstanding 就是发出去的地址数量,未处理的地址可以先存放在 AXI 总线的缓存里,等完成一次传输事物之后,无需再握手传输地址,即可立即进行下一次的数据传输,所 以outstanding 本质上是为了实现数据传输的 pipeline。

没有 outstanding(或者 outstanding 能力为 1),总线 Master 的行为如下:

  • 读操作:读地址命令 -> 等待读数据返回 -> 读地址命令 -> 等待读数据返回 -> ...
  • 写操作:写地址命令->写数据->等待写响应返回->写地址命令->写数据->等待写响应返回...(如果支持out-of-order,对于AXI3,写命令和写数据不一定有先后顺序且 ID 顺序不一定相同,AXI4 因为已经没有WID信号,所以写数据的顺序要和写地址的顺序一样)

AHB 总线没有 outstanding 能力

AXI 从机也可选性地支持 outstanding transfer,假设从机不支持outstanding transfer,只需要在接收到主机发过来的地址及控制信息后,置低 AxREADY 信号,阻止主机 outstanding transfer。在返回读数据后,再置高 AxREADY 信号,接收下一事务。

1.1.2 AXI Outstanding Depth(超前传输深度)

衡量一个主机 Outstanding transfer 的能力,表示主机正在进行中的(在路上)事务数量。更大的Outstanding transfer 深度需要主机准备更大的缓存区用于保存在途事务的信息,并接收缓存读数据。通过较大的Outstanding transfer 深度能够提高系统的性能。

1.1.3 AXI Outstanding 场景

如果 outstanding depth 为 N>1 ,则:

读操作:可以连续发 N 个读地址命令,这期间:

  • 如果读数据没有返回,则需要等待读数据返回;
  • 如果有读数据返回,则返回了几个,那么仍然可以接着发几个。

也就是说,“在路上” 的读命令(或者读数据)最多可以是 N,如果数据返回得比较慢,那么 IP 需要等待,效率就会比较低,因此,为了提高效率,有必要提高 outstanding 能力,以弥补”路上“(总线)引入的延时。但是也不能无限制地发,否则有可能会引起总线拥塞,把其它 IP 给堵住。

写操作:可以连续发出 N 组写地址(写数据)命令,这期间如果写响应没有返回,则必须等待写响应返回才能接着发写地址(写数据)命令,如果有写响应返回,则返回了几个,那么仍然可以接着发几组。也就是说,“在路上” 的写响应最多可以是 N。

写 outstanding 也是一样,不需要等待前一笔的写完成就可以发送下一笔传输。系统设计上需要注意 outstanding 对应的缓存的需求,否则无法接受master发送的数据出现系统的反压。

推荐阅读
https://blog.csdn.net/tbzj_2000/article/details/88042890
https://zhuanlan.zhihu.com/p/376525373

你可能感兴趣的:(#,ARM,Bus,Introduction,网络)