1.AHB概述
AHB总线是一种专为高性能同步传输设计的总线,层次高于APB总线,支持以下特性:
- 突发传输
- 拆分事务
- 主设备单时钟周期传输
- 单时钟沿操作
- 非三态实现
- 宽数据总线配置(64/128bit)
1.1.典型AHB系统
典型的AHB系统包括以下部分:
- 可支持高带宽传输的主干总线
- AHB主设备(如高性能CPU和DMA设备等)
- AHB从设备(存储器和APB桥等)
1.2.AHB互连
AHB的互连使用多路复用器策略,由以下几个部分组成:
- 主设备:发起通信,所有主设备将通行地址和数据发送到主设备多路复用器
- 从设备:回应通信,从主设备多路复用器获得通信地址和数据,将回应数据发送到从设备多路复用器
- 判决器:主设备多路复用器的控制器,控制哪一个主设备的通信数据可以被发送到从机
- 解码器:从设备多路复用器的控制器,控制哪一个从设备的通信数据可以被发送回主机
2.AHB信号
2.1.基本AHB信号
信号名 | 位宽 | 来源 | 描述 |
---|---|---|---|
HCLK | 1 | 系统时钟 | 传输系统的时钟 |
HRESETn | 1 | 复位系统 | 传输系统复位信号,低有效 |
HADDR | 32 | 主机 | 主机发送传输目标地址 |
HTRANS | 2 | 主机 | 当前发生的传输类型 |
HWRITE | 1 | 主机 | 读写信号:1-写操作;0-读操作 |
HSIZE | 3 | 主机 | 传输位宽,标记一次传输的位宽 |
HBURST | 3 | 主机 | 突发传输类型 |
HPROT | 4 | 主机 | 协议类型,标记传输使用协议的额外信息 |
HWDATA | 32 | 主机 | 发送数据,主机发送到从机的数据 |
HSELx | x | 解码器 | 标记哪一个从机被选中,由地址解码产生 |
HRDATA | 32 | 从机 | 接收数据,从机发送到主机的数据 |
HREADY | 1 | 从机 | 传输完成信号,高有效 |
HRESP | 2 | 从机 | 传输状态的额外标记 |
2.2.多主机传输信号
信号名 | 位宽 | 来源 | 描述 |
---|---|---|---|
HBUSREQx | x | 主机 | 主机x向判决器请求传输,最多支持16个主机 |
HLOCKx | x | 主机 | 主机x向判决器请求锁定传输,其他主机在锁定期内无法使用总线 |
HGRANTx | x | 判决器 | 主机x权限标记信号,当有效时(为高有效),主机x在AHB总线空闲时具有最高的控制权限 |
HMASTER | 4 | 判决器 | 主机标号,标记当前传输由哪个主机控制 |
HMASTLOCK | 1 | 判决器 | 锁定标记,标记当前总线被某个主机锁定 |
HSPLITx | 16x | 从机 | 事务分离标记,用于标记哪个主机应当重启事务 |
3.AHB传输
AHB传输分为以下几个部分:
- 主机获取总线使用权:主机向判决器发送总线请求信号,判决器发送应答后主机可以开始传输
- 数据传输:主机向从机传输数据,分为以下两个部分:
- 发送地址和控制信号:包括地址,位宽,突发类型(增量突发和回卷突发)等控制信号,仅一个时钟周期
- 数据传输:进行数据交换,一个或多个时钟周期
- 从机应答:从机通过HRESP和HREADY标记完成状态,对于HRESP,有以下状态:
- OKAY:标记传输完成,当HRESP为该状态且HREADY拉高时,传输完成
- ERROR:标记传输出错
- RETRY和SPLIT:标记传输未完成,主设备仍需要占用总线
关于突发传输,理论上进行突发传输的主设备应当一直占据总线,但是为了缩短等待时间,AHB允许打断突发传输,并在一段时间后重启该突发传输
3.1.基本传输
AHB的基本传输过程由两个部分组成:
- 地址/控制传输:传输地址信息和控制信息,仅占一个时钟周期
- 数据传输:可能需要多个时钟周期,由信号HREADY决定(拉高才结束数据传输)
3.1.1.无等待传输
无等待传输下,一个传输与三个时钟沿有关:
- 第一个时钟沿:第一个时钟沿后,主机将地址信息和控制信息发送到总线上
- 第二个时钟沿:第二个时钟沿上,从机采样主机的地址信息和控制信息。第二个时钟沿后,从机将响应信号和数据发送到总线上
- 第三个时钟沿:主机采样从机响应信号和数据,传输完成
3.1.2.有等待传输
有等待传输下,数据传输阶段可以扩展,即在HREADY拉高之前,数据传输阶段不结束。要求写数据在HREADY拉高前保持稳定,主机在HREADY拉高后采样读数据
3.1.3.流水线传输
AHB总线支持流水线传输,即将传输分为地址-数据两个部分流水进行,本次传输的地址必然在上一次地址之后,本次传输的数据必定紧跟在本次传输地址之后。因此,当上一次的数据传输阻塞导致传输周期增加时,下一传输的地址周期也会相应的变长:
- A1和C1为第一次传输的地址和控制信号
- WD1和RD1是第一次传输的数据,该传输为单时钟即无阻塞的传输,同时发送的还有下一次传输的地址和控制信号:A2和C2
- 第二次传输为多周期传输,因此WD2和RD2占据多个时钟周期,对应的,同时发送的第三次传输地址和控制信A3和C3也被延迟相同的时钟周期数
- WD3和RD3为第三次传输的数据
3.2.传输类型
传输类型使用端口HTRANS标记,有以下取值:
- IDLE(00):标志主机占有AHB总线,但是没有数据传输发生。从机需要使用OKAY状态回应该类型
- BUSY(01):标志主机占有AHB总线并在进行猝发传输,但下一个传输不能立刻发生。从机需要使用OKAY状态回应
- NONSEQ(10):标志主机当前发送的地址和控制信号与上一次传输无关(单次传输就是该状态)
- SEQ(11):标记主机处于猝发传输的中间部分,即当前发送的地址和控制信号与上一次地址和控制信号有关
例子如下图所示:
- 第一次传输,开启一次猝发传输,因此该地址与上一次传输无关,使用类型NONSEQ
- 第二次传输,无法立刻进行传输,因此使用BUSY标记延迟一个周期,延迟后可以进行传输,且处于猝发传输中,因此地址与上一次地址有关,使用SEQ标记
- 之后均为猝发传输,均使用SEQ类型
3.3.猝发传输
3.3.1.猝发类型
猝发传输分为两类:
- 增量猝发:传输过程中传输地址递增。下一次传输的地址是上一次地址加上一个增量
- 回卷猝发:猝发的地址范围被限制在一个固定范围之内,传输地址递增,若是超出则回到地址范围的开始的地址。例如从0x34进行增量为4,范围为16的回卷猝发,地址顺序为0x34、0x38、0x3c,0x30
猝发类型使用字段HBURST标记,含义如下表所示:
HBURST[2:0] | 类型 | 描述 |
---|---|---|
000 | SINGLE | 单个传输 |
001 | INCR | 无限制长度的增量猝发传输 |
010 | WRAP4 | 4拍回卷猝发 |
011 | INCR4 | 4拍增量猝发 |
100 | WRAP8 | 8拍回卷猝发 |
101 | INCR8 | 8拍增量猝发 |
110 | WRAP16 | 16拍回卷猝发 |
111 | INCR16 | 16拍增量猝发 |
注意一次猝发传输不能跨越1kB的地址区间,且传输的起始地址必须与数据类型对应,例如传输字数据的二进制起始地址必须满足后两位为00。
3.3.2.猝发终止
从机通过监控HTRANS发现猝发传输的终止:
- 若下一个HTRANS标记为BUSY或SEQ:猝发传输未终止
- 若下一个HTRANS标记为NONSEQ或IDLE:上一次猝发传输已经终止
若猝发传输是提前终止的,如总线控制权被剥夺,那么主机需要在可以进行传输时重建猝发传输。例如一个4拍传输仅发送了一拍就终止,主机需要使用INCR类型的猝发构建3拍传输以重建。
3.3.3.猝发切分传输
[暂时略过,需要使用时再补充]
3.4.数据总线
当传输位宽不同时,数据总线的使用情况如下所示(小端传输):
4.控制信号
4.1.控制总线
4.1.1.HSIZE
HSIZE控制传输的数据结构位数,如下表所示:
HSIZE(bit) | 位宽 | 描述 |
---|---|---|
000 | 8 | 字节传输(Byte) |
001 | 16 | 半字传输(Half word) |
010 | 32 | 字传输(Word) |
011 | 64 | - |
100 | 128 | 4字传输 |
101 | 256 | 8字传输 |
110 | 512 | - |
111 | 1024 | - |
4.1.2.HPROT
HPROT提供对传输协议的额外说明,如下所示:
- HPROT[3]:0-Cacheable;1-Not cacheable
- HPROT[2]:0-Bufferable;1-Not bufferable
- HPROT[1]:0-Privileged access;1-User access
- HPROT[0]:0-Opcode fetch;1-Data access
4.1.3.HSELx
HSELx由地址解码器产生,用于指示哪个从机被选中。从机当HREADY为高,即一次传输完成后锁存HSELx信号,若HSELx在HREADY为低时有效,将不会对本次传输产生影响。
4.1.4.HRESETn
HRESETn信号是复位信号,该信号是异步触发并同步释放的,当该信号有效时,所有主机均要将相关信号复位,包括将HTRANS置为IDLE。
4.2.响应信号
4.2.1.HREADY
HREADY信号标志传输是否完成:0-未完成,需要插入额外周期;1-已完成
4.2.2.HRESP
HRESP用于标记传输完成的状态:
- OKAY(00):传输完成
- ERROR(01):传输错误,例如协议错误或写入只读地址
- RETRY(10):传输未正常完成,需要重新尝试传输。该响应不会改变优先级
- SPLIT(11):传输未正常完成,需要从下一个地址重新启动传输。该响应可能改变优先级
4.3.总线仲裁
仲裁器保证一个时刻仅有一个主设备占有总线,因此当有多个主设备提出访问请求时,仲裁器通过仲裁信号仲裁哪一个主设备获得总线使用权
4.3.1.仲裁信号
仲裁信号见[2.2.多主机传输信号]
4.3.2.主机获取总线
主机获取总线控制权分为两个步骤:
- 主机分别通过HBUSREQx和HLOCKx分别向仲裁器申请获取或锁定总线控制权
- 仲裁器分配总线控制权
主机通过自己的HBUSREQx向仲裁器申请总线控制权,仲裁器在时钟上升沿采样该信号,并通过内置的优先级算法决定总线控制权归属。一般来说,仲裁器仅会在一次传输完成后分配总线控制权,即将HMASTER置为获取总线控制权的主机编号且在上一次突发传输的倒数第二个传输时改变HGRANTx,因此新HGRANTx可以在上一次突发传输的最后一次传输同时被采样。
但如果需要,仲裁器也可以通过打断传输的方式优先执行优先级更高的传输。若获取总线控制权的主机申请锁定总线,其他主机将无法获得总线控制权。
对于指定突发长度的突发传输,仲裁器根据突发长度判断需要总线控制权的时间,若结束后启动下一次突发传输,需要再次请求控制权。对于未指定长度的突发传输,主机需要在传输过程中一直保持请求信号拉高,否则将仲裁器无法判断何时收回总线控制权。
当无主机申请总线时,总线的控制权被交给默认的主机,即使该主机没有申请总线控制权。此时默认主机需要将HTRANS置为IDLE状态。