1、典型的AMBA 2.0系统
2、总线互联
AMBA AHB总线协议设计使用一个中央多路选择器来选择互联,使用这个方案的所有总线主机设备按照输出地址和控制信号在输出的同时仲裁连通到哪个从机。在此基础上需要一个译码器来控制读取数据和响应多路选择器。图中显示了多路选择器互联:
三种信号分别是地址、读数据、写数据,图中有多个master和读个slave,但是总线每时每刻只能有一个mater访问一个slave,所以需要arbiter进行仲裁。具体过程就是master传输信号,包含HADDR和HWDATA,方向是从master传向slave,图中的mux通过arbiter的仲裁选择某一个master上的信号传输到相应的slave,因为每个slave的地址是唯一的所以能进行对应;HRDATA信号的传输方向是由slave到master,通过Decoder来选择某个slave的HRDATA,Decoder会做译码,返回到相应的master中。
3、AMBA AHB操作概括
前提:AMBA AHB传输开始之前master必须被授予访问总线,这个过程开始于master向仲裁器断言一个请求信号,仲裁器指示master何时能够被授予使用总线。
master:授权之后,通过驱动地址和控制信号发起AMBA AHB传输,信号包含内容为:地址、方向、传输宽度、传输类型。
slave:将数据从slave传输到master中,包含内容:地址、控制周期、数据周期,地址不长期有效,所以slave必须在传输地址时采样地址,可以通过HREADY信号延长采样数据的周期,为时候,允许从机有额外的时间进行采样。从机有以下四种响应信号表示状态
OKAY | 传输正常 |
ERROR | 发生传输错误,传输失败 |
RETRY | 传输没有完成,重新尝试 |
SPLIT | 传输没有完成,重新分段传输 |
4、AHB组成部分
AHB 主设备(master) :发起一次读/写操作 某一时刻只允许一个主设备使用总线
AHB从设备(slave) :响应一次读/写操作 通过地址映射来选择使用哪一个从设备
AHB仲裁器(arbiter) :允许某一个主设备控制总线 在AMBA协议中没有定义仲裁算法
AHB译码器(decoder) :通过地址译码来决定选择哪一个从设备
4、AHB信号
信号的功能:
高速总线,高性能 流水线操作
可支持多个总线主设备(最多16个)
支持burst传输 总线带宽:8、16、32、64、128bits
上升沿触发操作
5、基本传输
AHB传输包含两个部分:地址相位,只持续一个周期;数据周期,一个或者多个周期,通过HREADY信号实现。下图是最简单的传输不包含等待,有等待的状态,HREADY信号会拉低相应的部分,让信号多维持几个周期。下图是一次无需等待状态的简单传输:
需要两个等待周期的简单传输:
流水线传输:
6、传输类型
数据类型由HTRANS信号来表示。
HTRANS[1:0] 表示当前传输状态:IDEL、BUSY 、NOSEQ 、SEQ(后两个不做区分,合并用) | ||
00 | IDLE | 主设备占用总线,但没进行传输 两次burst传输中间主设备可发IDLE |
01 | BUSY | 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输 一次burst传输中间主设备可发BUSY |
10 | NOSEQ | 表明一个单数据传输,或者一次burst传输的第一个数据 |
11 | SEQ | 表明burst传输接下里的数据 |
第一个传输是一次突发的开始所以传输类型为非连续; ,主机不能立刻执行突发的第二次传输所以主机使用了忙传输来延时下一次传输的 开始。在这个例子中主机在它准备还突发的下一次传输之前仅请求了一个忙周期, 下一次传输的完成没有等状态; ,主机立刻执行突发的第三次传输,但是这时从机不能完成(传输)并用HREADY来插入一个等待状态; 突发的最后一个传输以无等待状态完成。
7、Burst 操作
Burst 操作支持4 beat(4*4Byte=16Byte)、4 beat、4 beat 、单个字节传输 、未定义字节长度传输,支持increasing和wrapping两种burst传输。下图中需要着重关注的是INCR。
Incrementing burst : 地址是上一次的传输地址加1个传输单位
Wrapping burst : 例:4beat的wrapping burst 字传输(4byte): 0x34 -> 0x38 -> 0x3c -> 0x30 应用场合:Cache填充
根据HSUZE和HBURST进行地址计算,计入起始地址是0x48,HSIZE=010(32bits)
INCR4
WRAP4
Undefined-length bursts
8、地址译码
对于每个总线上的从机来说使用一个中央地址译码器提供选择信号--HSELx。需要注意的是从机只能在HREADY信号为高时进行采样地址和控制信号以及HSELx,IHISELx为高表示 当前传输已经完成。
能够分配给单个从机的最小地址空间是IKB。所有总线主机必须被设计为不能执行超 过1KB地址边界的增量传输,因此确保了一个burst绝不会超过地址译码的边界。
从设备响应
master发起传输以后,slave决定传输该怎么进行。访问的slave必须响应这次传输,AHB是一个握手机制,slave必须发送响应信号HRESP来提供传输状态。
OKAY | 传输正常 |
ERROR | 发生传输错误,传输失败 |
RETRY | 传输没有完成,重新尝试 |
SPLIT | 传输没有完成,重新分段传输 |
HREADY信号用来扩展一次AHB 传输的数据部分。当HREADY信号为低时表示传输 将被扩展而当其为高时表示传输完成。
双周期响应
仅有OKAY响应可以在单个周期里给出。ERROR、SPLIT和RETRY响应需要至少两个周期。
为了完成这些响应中的任意一个,那么在倒数第二个(最后一个的前一个)周期从机驱动HRESP[1:0]以表示ERROR、RETRY或者SPLIT并同时驱动HREAD为低以给传 输扩展一个额外的周期。在最后一个周期HREADY被驱动为高电平以结束传输,同时 IRESPI1:0保持驱动以表示ERROR、RETRY或者SPLIT。图中是带retry响应的传输:
如果从机需要两个以上的周期以提供ERROR、SPLIT或者RETRY响应那么额外的等待状态可能会在传输开始时被插入。在这段时间IREAD信号将为低电平同时响应必须被 设为OKAY。
RETRY和SPLIT的不同
主要区别在于仲裁的方式。RETRY:arbiter会继续使用通常的优先级;SPLIT:arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线。
9、数据总线
为了不使用三态驱动而又允许执行AHB系统所以要求分开读和写数据总线。最小的数据宽度规定为32位,但是总线宽度却可以增加。
HWDATA[31:0]
写数据总线在写传期间由总线主机驱动,如果传输是扩展的那么总线主机必须保持数据有效直到传输完成,由HREADY为高表示。
HRDATA[31:0]
读数据总线在读传期间有合适的从机驱动,如果从机通过HREADY扩展读传输,那么从机只需要在传输的最后一个周期提供有效数据即可,由HREADY拉高表示。
32位小端数据总线的有效字节通道
32位大端数据总线的有效字节通道
10、仲裁器
仲裁机制被用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成SPLIT传输的请求。
HBUSERQx | Master | Master发起总线请求 |
HLOCKx | Master | Master锁定总线传输 |
HGRANTx | Aibiter | Aibiter回复给Master的请求结果 |
HMASTER[3:0] | Aibiter | Master的数量,[3:0]的最大值为16,但不意味着只能有16个Master,可以通过修改位宽增加Master |
HMASTLOCK | Aibiter | Master申请lock以后Aibiter的反馈 |
HSPLITx[15:0] | Slave | Slave发起Split信号以后,根据Split去调整Master之间的优先级 |
无等待状态访问授予,所有传输都为零等待状态,并且HREADY信号为高时候的处理过程。