什么是outstanding?
从字面理解,outstanding表示正在进行中的,未完成的意思,形象地说就是“在路上”。
比如现在需要传输一段数据,假设没有outstanding,必须等到地址握手成功才能传输数据,而每一次握手过程中都不能保证主从机此刻都准备好,那这样在数据传输过程中就难免会有气泡,难以实现真正的全流水和满性能。
所以从设计的角度,我们就有多发几个地址的需求,比如我们可以发出去10个地址,尽管我们还没给数据,但是可以让从机知道,我们接下来要向这些地址写数据,这样就可以不用刻板地遵循,每次都要写地址握手成功再写数据。
所以在这个例子中,outstanding就是发出去的地址数量,未处理的地址可以先存放在AXI总线的缓存里,等完成一次传输事物之后,无需再握手传输地址,即可立即进行下一次的数据传输,所以outstanding本质上是为了实现数据传输的pipeline。
简单讲,如果没有outstanding,或者说outstanding能力为1,则总线Master的行为如下(AHB总线就没有outstanding能力):
•1)读操作:读地址命令 -》 等待读数据返回 -》 读地址命令 -》 等待读数据返回
•2)写操作:写地址命令-》写数据-》等待写响应返回-》写地址命令-》写数据-》等待写响应返回
而如果outstanding能力为N》1的话,则:
•1)读操作:可以连续发N个读地址命令,这期间如果读数据没有返回,则需要等待读数据返回,如果有读数据返回,则返回了几个,那么仍然可以接着发几个。也就是说,“在路上”的读命令(或者读数据)最多可以是N。多说一点,可以看出,如果数据返回得比较慢,那么IP需要等待,效率就会比较低,因此,为了提高效率,有必要提高outstanding能力,以弥补”路上“(总线)引入的延时。但是也不能无限制地发,否则有可能会引起总线拥塞,把其他IP给堵住。
如何计算outstanding?
首先,对于AXI而言,outstanding能力分为读outstanding能力和写outstanding能力。
如何计算outstanding能力呢?
首先对一些概念进行类比:
•burst传输的长度为一列高铁的节数,8节高铁对应的burst length=8。
•一节高铁载的乘客数就是AXI的数据位宽,常见的AXI的数据位宽有64bit,128bit等等。
•高铁的速度就是AXI总线的时钟频率,好比AXI的频率有的是200MHz,有的是300MHz。
•从高铁站触发,到终点的线路长度就是AXI的总线延迟,即AXI的Master 到Slave的延迟拍数(Clock
Cycle)固定了,一节高铁可以等效为AXI的一个Cycle。
类比之后,以一段高铁线路为例,起点为A,终点为B,从A到B的高铁线路如果要达到最高效率,需要在线路上排满高铁,首尾相接。那么需要多少列高铁才能达到最大效率呢?
假设需要X列高铁,(1列有N节)
X=(高铁线路总长度2)/(N节高铁的长度),N节高铁的长度=1节高铁的长度N,
所以X可变换为((高铁线路总长度/1节高铁长度)*2)/N,其中(高铁线路总长度/1节高铁长度)为高铁总节数,因为一节高铁对应一个AXI的cycle,所以高铁总节数对应该线路的延迟Cycle总数。
X=线路延迟Cycle数目*2/N,
X即为AXI outstanding,其中线路延迟Cycle数目*2为Round Trip Latency(cycle)(往返总延迟),N为burst length。
(补充:最大传输带宽=AXI Clock Frequency x AXI Data Width)
-
数据
+关注
关注
8文章
6899浏览量
88842 -
总线
+关注
关注
10文章
2868浏览量
87995 -
AXI
+关注
关注
1文章
127浏览量
16598
发布评论请先 登录
相关推荐
评论