1.学习笔记
转自月见樽github文章
转自Paul安
接口与协议学习笔记-AMBA片上通信协议_APB_AHB_AXI_AXI4不同版本(二)
关于AHB,也可参考第3章给出的本人转载文章,讲的也是非常之详细。
如果有AXI/APB的基础,可以只看第2.3节即可了解AHB的基本时序
2.AXI/AHB/APB差别
2.1.性能和架构
APB如果不考虑ready信号的话 即非等待模式下读写都需要2个周期,如果考虑ready,读写都需要slave的ready拉高。只有一个master
AXI性能可以达到one transfer per cycle,支持多mst,多slv互联
AHB在无反压的时候性能页可以达到one transfer per cycle,支持多mst,多slv互联
需要注意的是AHB的地址和控制信号至少早于wdata/rdata一次时钟周期
----这里应该是考虑读传输slv侧 要先接收addr,最快下一拍回数据
2.2.通道和burst传输
AHB的读写地址总线是共用一根的,共3个通道,AHB的传输可以被打断,本来需要Burst4只传了burst1被打断,后续需要重新取得总线控制权,传输剩下的burst3,这个就是transfer之间可以支持interleaving。支持Burst传输
AHB即使发送Burst传输,无论是读还是写,都要求每个transfer都发送地址和控制信号
2.3.握手和outs的区别
apb是psel/penable和pready握手,不支持outs,或者说outs=1。slv可以通过pready反压,但是mst不会反压总线。
axi是valid和ready握手,支持outs。mst和slv都可以通过自己的ready反压总线
ahb是htrans可以表示transfer的地址和控制信号有效,用htrans和hready握手,可以采样地址和控制信号。Htrans可以表示地址和控制信号的有效性
但是数据信号是没有握手的,那怎么知道读写数据的有效性呢?分两种情况考虑:
1.slv没有反压的时候,也即Hready一直为1,对于读和写,数据比地址和控制信号晚一拍
2.当slv有反压的时候,直到Hready=1的当拍数据对应于前一次Hready=1时对应的地址和控制信号
换句话说,数据与地址/控制信号的时序关系就是,Hready=1时的数据和前一拍Hready=1的地址/控制信号对应【没有握手靠的是和HADDR/HTRANS的约定时序】
所以AHB是不支持outs的,或者说outs=1.
如上图所示,在HREADY=1 采样A3/C3/RD2或者WD2,WD2/RD2对应的地址和控制信号在前一拍HREADY=1的时刻,对应A2/C2
2.3.1. AHB的 Htrans
传输类型使用端口HTRANS标记,有以下取值:
- IDLE(00):标志主机占有AHB总线,但是没有数据传输发生。从机需要使用OKAY状态回应该类型
- BUSY(01):标志主机占有AHB总线并在进行猝发传输,但下一个传输不能立刻发生。从机需要使用OKAY状态回应
- NONSEQ(10):标志主机当前发送的地址和控制信号与上一次传输无关(单次传输就是该状态)
- SEQ(11):标记主机处于猝发传输的中间部分,即当前发送的地址和控制信号与上一次地址和控制信号有关
例子如下图所示:
- 第一次传输,开启一次猝发传输,因此该地址与上一次传输无关,使用类型NONSEQ
- 第二次传输,无法立刻进行传输,因此使用BUSY标记延迟一个周期,延迟后可以进行传输,且处于猝发传输中,因此地址与上一次地址有关,使用SEQ标记
- 之后均为猝发传输,均使用SEQ类型
- BUSY时HADDR保持不变
类比AXI的last信号,NONSEQ下一拍Hready拉高的时候对应的数据就是当前transaction的最后一笔transfer。
上图的时序再次印证了2.3节的AHB时序。
2.4. AHB/AXI/APB的互联结构
APB只支持单mst,多slv。仲裁比较简单,就是通过对地址译码,来产生对应slv的psel信号即可
下面分别给出AXI和AHB的 interconnect结构
2.5.应用场景上的区别
转自arm社区APB, AHB, AXI 3, AXI 4 的区别是什么?
APB是双cycle设计,只有一半的cycle在传数据,设计简单,一般用来连接吞吐量需求较低配置端口,不过在ARM总线内部都会转成AXI来传输。AHB算是三通道协议,分别是读写数据和地址通道,读写共用一个地址通道,所以吞吐量也不是很理想,但是设计简单,cortex m0就是ahb的,还有很多legacy device采用ahb,ahb在ARM总线内部也是转成AXI传输和仲裁。AXI的是5通道设计的,读写地址分开,吞吐量大,第一个版本叫AXI3,后来更新到AXI4,支持最多256beat的long burst和QoS。AMBA 4之后ARM还发布了AMBA CHI,以便更多处理器通过环形总线互联,实现环形总线上的数据传输。
APB一般用来连接配置接口,AHB和AXI多用来接数据传输接口,从性能和设计复杂度来看 APB < AHB < AXI。
APB (Advanced Peripherals Bus)是低带宽的总线,主要用来连接外设,比如系统外设的寄存器接口。它的信号要少的多,但必须支持32位
AHB(Advanced High-performance Bus)是AMBA2里定义的总线协议。它支持单边时钟协议,单周期总线权限交接,64/128位总线带宽等特性。速度比AHB高
AXI(Advanced eXtensible Interface)是最初AMBA3定义的总线标准。目标服务高性能和高时钟频率的系统设计。它提供单独的地址/控制和数据周期,支持非对齐的数据传输,爆发(burst)型总线事务等特性。AXI3和AXI4就是AMBA3和AMBA4定义的高速总线标准。
APB和AHB用在ARM7, ARM9和Cortex-M的ARM处理器中。AXI3应用比较广泛,比如Cortex-A9,Cortex-R5/F。AXI4在最新的Cortex-A7和Cortex-A15使用。
2.6 AHB-lite
AHB-lite和AHB的最大区别就是lite只支持单mst
3.AHB协议详解
详见本人转载的文章:
这篇文章详细介绍了AHB的时序,互联和各种信号
同时给了AHB5.0上的Hready_in和Hready_out的使用