深入理解AMBA总线(十六)AXI设计的关键问题(一)

简介: 深入理解AMBA总线(十六)AXI设计的关键问题

前面的文章中,我们已经完成了整个AXI3文档的学习,相信大家对AXI已经有了一定的了解,但之前的文章包括AXI的文档本身,主要都是在讲协议本身。具体如何实现,怎么实现好,并没有怎么提及,因此我将花两篇文章和大家讲解一下AXI设计中的一些关键问题。AXI的设计思想,即便大家不用到该协议,也可以进行学习。里面很多设计理念用在自己的设计上也是非常好的。

1、设计AXI接口IP的考虑

1.1、AXI Feature回顾

首先我们看一下针对AXI接口的IP设计,在介绍之前我们先回顾一下AXI所具有的一些feature

首先是Cache相关的问题,Cache是提高系统Performance的一种很好的方式,AXI通过AxCache信号来决定是否可以访问Cache,是否可以分配Cache。

然后是原子操作,原子操作我专门花了一篇文章进行讲解,大家使用的时候尽量只使用Exclusive Access,Locked Access会阻塞总线,导致带宽无法充分利用,对系统性能影响较大。其实诸如此类的设计,对性能及吞吐量敏感的地方都应该避免使用,我们称为阻塞性xxx。为了支持Exclusive Access,我们自然需要Exclusive Monitor,来满足协议的要求,如何进行设计之前的文章也有提及,不再细说。

然后我们看一下AXI是如何提高性能的,这也是面试比较喜欢问的。如上面的图所示,主要有三种方式,我称之为提高AXI性能的三板斧,排名分先后。

Outstanding对性能影响最显著,尤其是主从之间通讯需要多拍的时候,它充分利用了这段时间发起别的传输。其实就是通过这些操作去掩盖原本的访存延时。

然后是乱序(Out of Order),这个提高性能主要体现在Slave无法及时响应,就可以让后发起的请求先完成。就比如你去超市买菜,你前面的人刚好手机没电了,你是等他充好电还是先让你付款?

最后是Interleave,即交织读写,这个其实就是在空闲的Cycle中(气泡Cycle)插入读写事务,其实有点像乱序,可以理解成更加细粒度的乱序。当然粒度这么细,导致设计很复杂,所以在AXI4中写交织就被移除了

最后是Memory Type的不同,基于Memory类型的不同,可以决定你的读写是否可以Bufferable或者Cacheable。比如某些外设寄存器,你写完是希望直接改变系统当前的运行状态的,希望即刻生效,这种当然几不可以Cacheable也不可以Bufferable。而有些外设寄存器,比如写Flash Controller的寄存器,你写完以后,稍微延迟一些Cycle或者有乱序是可以接受的,这种情况就可以Bufferable。

1.2、Ordering consideration

首先我们看一下Write Channel和Read Channel之间的一个Order,AXI协议并没有对它们之间的Order有一个约束,如果想要实现该机制,就应该在之前的transaction收到最后的response以后才允许发起新的transaction。

你可以通过配置某个寄存器,来开启该功能。这个设计起来不是很复杂。如果你使用的是ARM或者X86或者主流的商用CPU,你可以使用memory barrier指令来确保这个顺序。


然后我们看一下对于Master而言,对于来自Slave的Response,是可以乱序的,通过ID来区分好就行。此外对于Read response而言,是可以Interleave的。读交织如下图所示。

而对于同一ID而言,即Master发出的同一AWID/ARID而言,相应的数据必须是顺序的,如果不是顺序的,怎么知道哪个数据对应于哪一个地址?

我们看一下Slave的实现,Slave想实现Order Model,比Master要复杂的多。我们想象一下这样的一个例子,一个Master去访问一个Slave,而这个Slave有很多不同的Memory Type,比如既有访问较快的寄存器,也有相对慢一点的SRAM,甚至还有DDR/FLASH。比如你去写一个DDR Controller,你去写它的配置寄存器,很快,你去写DDR,其实也要走这个DDR Controller,这样一次访问就非常非常的慢。但是,由于是同一个Master的访问,其ID是相同的,相同ID要保序,那难不成每次写DDR,都要等着数据回来?显然非常的不合理,那么在其内部就可以做一个转换表,如下图所示,来的时候是同样的ID,但Slave可以将其转换成不同的ID,这样就可以Outstanding了,也可以乱序了,非常的Amazing啊。注意,Slave内部是可以Out of Order返回的,但你返回给Master还是得顺序的。需要一块额外的存储空间来缓存这些需要返回的数据及相关信息,当来了,你就返回给Master。

我们再看一下Master的实现,当Master有多个Engine,比如DMA。每个DMA发出的ID是不一样的,当发出多个Outstanding的请求,Slave也相应的根据请求把数据拿回来了。相应的准备若干个Queue,当ID为0的返回的时候送给Queue0,当ID为0的最后一笔返回的时候即RLAST拉高的时候,做相应的处理返回给发出请求的Engine。其实就是需要一定的缓冲机制,来避免接不到数据等情况。

  • Master需要数据queue来支持out of order;
  • Master需要buffer来支持outstading;

目录
相关文章
|
8月前
|
芯片 SoC
深入理解AMBA总线(零)绪论
深入理解AMBA总线(零)绪论
115 0
|
7月前
|
存储 Go 芯片
单片机外围模块漫谈之四,USB总线基本概念。
单片机外围模块漫谈之四,USB总线基本概念。
|
7月前
|
监控 芯片
单片机外围模块漫谈之三,CAN总线
单片机外围模块漫谈之三,CAN总线
|
8月前
|
SoC
深入理解AMBA总线(十六)AXI设计的关键问题(二)
深入理解AMBA总线(十六)AXI设计的关键问题(二)
290 0
深入理解AMBA总线(十六)AXI设计的关键问题(二)
|
8月前
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
434 1
|
8月前
|
vr&ar 内存技术
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
214 0
|
8月前
|
SoC
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
219 0
深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言
|
8月前
|
存储 SoC
深入理解AMBA总线(十一)AXI协议导论
深入理解AMBA总线(十一)AXI协议导论
464 0
|
8月前
|
监控 Scala 虚拟化
深入理解AMBA总线(十三)AXI原子访问机制和AXI响应
深入理解AMBA总线(十三)AXI原子访问机制和AXI响应
221 0
|
8月前
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
263 0