目录
四、几中AMBA总线AHB、AXI、APB相关性能的区别与联系
一、传说中的AMBA总线是什么?
IoT(物联网)Internet of Things
下图是一个典型的AMBA系统。
典型AMBA系统
大多数挂在总线上的模块(包括处理器)只是单一属性的功能模块:主模块或者从模块。主模块是向从模块发出读写操作的模块,如CPU,DSP等;从模块是接受命令并做出反应的模块,如片上的RAM,AHB/APB 桥等。
另外,还有一些模块同时具有两种属性,例如直接存储器存取(DMA)在被编程时是从模块,但在系统读传输数据时必须是主模块。如果总线上存在多个主模块,就需要仲裁器来决定如何控制各种主模块对总线的访问。
虽然仲裁规范是AMBA总线规范中的一部分,但具体使用的算法由RTL设计工程师决定,其中两个最常用的算法是固定优先级算法和循环制算法。AHB总线上最多可以有16个主模块和任意多个从模块,如果主模块数目大于16,则需再加一层结构(具体参阅ARM公司推出的Multi-layer AHB规范)。APB 桥既是APB总线上唯一的主模块,也是AHB系统总线上的从模块。其主要功能是锁存来自AHB系统总线的地址、数据和控制信号,并提供二级译码以产生APB外围设备的选择信号,从而实现AHB协议到APB协议的转换。
AMBA AHB循环级建模标准是完全公开和免费的。
二、为什么要使用AMBA总线
三、AXI主要特点
1.分离的读写通道
2.支持outstanding交易
3.地址与数据操作之间没有严格的时序关系
4.支持未对齐传输
5.支持乱序交易
四、几中AMBA总线AHB、AXI、APB相关性能的区别与联系
AHB增量burst地址每一拍都会给,实际快速传输响应的比如一拍传输只关心是不是NONSEQ和SEQ。
AXI增量burst传输只需要给首地址就能继续后续传输。
HADDR没有分读和写的ADDR?
AHB不是全双工的,读写是不可以同时进行的。所以性能上比AXI一般来讲是要弱的。
AHB:主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。
APB:主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。
AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。
总线 | AXI | AHB | APB |
总线宽度 | 8, 16, 32, 64, 128, 256, 512, 1024 | 32, 64, 128, 256 | 8, 16, 32 |
地址宽度 | 32 | 32 | 32 |
通道特性 | 读写地址通道、读写数据通道均独立 | 读写地址通道共用读写数据通道 | 读写地址通道共用读写数据通道 |
体系结构 | 多主/从设备 | 多主/从设备 | 单主设备(桥)/多从设备 |
数据协议 | 支持流水/分裂传输 | 支持流水/分裂传输 | 一次读/写传输占两个时钟周期 |
传输方式 | 支持读写并行操作 | 不支持读写并行操作 | 不支持读写并行操作 |
时序 | 同步 | 同步 | 同步 |
互联 | 多路 | 多路 | 无定义 |
总结
AXI突发式读写的地址必须以4KB对齐。1024Byte(字节)=1KB
AXI协议中之所以规定一个burst不能跨越4K边界是为了避免一笔burst交易访问两个slave(每个slave的地址空间是4K/1K对齐的)。假如一个burst交易访问了两个slave A 和B(A在前B在后),那么只有A收到了地址和控制信息,而B不会收到地址和控制信息,因此只有A响应B并无响应,这就会导致此笔burst交易无法完成(B无法返回最后一笔transfer)。因此如果你必须确定系统中所有slave中地址空间最小的那一个,假设是1M,这样你的burst边界可以大于4K至1M。
所谓的4K边界是指低12bit为0的地址,例如32'h00001000, 32'h00002000... 这些特殊的地址我们称之为4k边界;同理1k边界是指低10bit为0的地址,例如32'h00000400,32'h00000800...
4K对齐最大原因是系统中定义一个page大小是4K。所以,为了更好的设定每个slave的访问attribue,就给一个slave划分4K空间。 4K对齐,以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模式,会跨边界吧? 1K对齐,就是说 [31:10]相等的地址都是在一个1K对齐的空间内。 至于真的跨越了,就拆分。例如处理器load多个数据,就是跨页访问,到了接口控制模块,也会把这一个访问拆分成两个访问。在interfere上的都是符合协议的transaction。例如,core要访问0x1FF0-0x200C共32byte的数据(每次beat 4B)。系统会自动给拆分成0x1FF0-0x1FFC和0x2000-0x200C两个transaction。
ARM对AHB burst这样设计的目的是在于,SLAVE的地址访问空间基本都是以1KB为单位的,当AHB以burst方式传输时,为了避免错误的访问到其他的Slave空间而造成系统致命错误,因此在burst传输时限制1KB,若需要跨1KB边界时,需要重新initial一个新的传输。
在AHB划分系统时,最小的地址空间为1KB,即slave至少地址空间是1k,或者2K,或者1M等。这样,当AHB访问地址空间时,因为地址空间对其的原因,就不会恶意的访问到其他的地址空间。
cpu发出这样的请求时,AHB会自动的将其转换为1KB,1KB的传输格式,可以根据其地址区间是否跨越对齐的000来判断。
AHB突发式读写的Master,BURST传输不能跨越1K边界,比如到3xC 不能跨越到400地址,用NONSEQ重新开始一个新的传输,slave最小是1k,或者是1k的倍数。