AHB协议
一、AHB 总线的介绍
1、AHB 总线的核心优势:
- 能连接 微控制器(CPU)
- 高带宽片上 RAM
- 高带宽外部存储接口
- DMA 总线 master
- 以及各种拥有 AHB 接口的控制器
这些组件通过 AHB 互连起来,可以组成一个完整的 SoC 系统骨架。
除此之外,还可以通过 AHB-APB Bridge 将 AHB 系统连接到 APB 总线,再挂载一些 低带宽外设。

2、AHB 总线的四个组成部分
-
AHB 主设备 Master
发起一次读/写操作。
任意时刻只允许一个主设备使用总线。
-
AHB 从设备 Slave
响应一次读/写操作。
通过地址映射决定选用哪个从设备。
-
AHB 仲裁器 Arbiter
当有多个 Master 请求总线时,仲裁器决定谁获得总线控制权。
-
AHB 译码器 Decoder
根据地址译码,选择具体的从设备。

3、AHB操作概述
1.3.1获得总线的 Master 开始 AHB 传输,步骤如下:
-
地址阶段:Master 先发出 地址和控制信号(包括地址、传输方向、数据宽度、burst 类型)。
-
地址译码:Decoder 根据地址和控制信号选择对应的 Slave。
-
数据阶段:通过数据总线完成数据传输:
写传输:Master → Slave
读传输:Slave → Master
1.3.2传输周期
- 每笔传输包含:
- 1 个地址与控制周期
- 1 个或多个数据周期
- 地址与控制周期不能扩展(必须 1 周期内完成)。
- 数据周期可以通过 HREADY 信号插入等待周期(Wait state)。
- Slave 来不及准备好数据时拉低 HREADY。
- Slave 还可用 HRESP 信号返回失败信息。
1.3.3Burst 传输
- AHB 支持 burst 模式,即一连串地址连续的数据传输:
- 常见类型:INCR(递增)、WRAP(回绕)。
- Burst 的好处:提高吞吐率,减少握手开销。
- 仲裁策略:
- 一般情况下,仲裁器会等当前 Master 完成整个 burst 后再切换给其他 Master。
- 为了避免长时间延迟,仲裁器也可能中断 burst,把总线切换给别的 Master。
1.3.4 hready_out和hready_in
为什么有两个 HREADY?
hready_out(输出):由 Slave 输出,告诉总线“我这次传输准备好了没”。
-
- 如果 Slave 太慢 → 拉低 hready_out,延长当前数据传输周期。
- 如果准备好了 → hready_out=1,数据传输完成。
- hready_in(输入):作为 Slave 的输入,告诉 Slave “前一笔传输是否已经完成”。
- 因为 AHB 是流水线结构,地址阶段和数据阶段重叠。
- Slave 在接收新的地址之前,必须知道前一笔数据传输是否结束 → 通过 hready_in 来判断。
流水线操作(Pipeline)的关键
- 在 AHB 总线里:
- 本周期的数据阶段 = 下一周期的地址阶段。
- 所以 Slave 在处理本次传输时,还要确认上一次传输是否完成。
- 举例:
- Master 发起一次写操作,Slave 还没准备好 → hready_out=0。
- 下一拍 Master 又发了一个新地址,但 Slave 必须先看 hready_in,判断“前一拍的数据是否完成”。
- 如果 hready_in=0(表示上次没完成),当前新地址就不能真正生效,需要等待。
二、基本AHB传输
1、零等待传输

2.1.1零等待传输 (No wait state transfer) 时序解析
- 第一个周期上升沿
- Master 驱动地址和控制信号。
- 第二个周期上升沿
- Slave 采样地址和控制信号,并把 HREADY 拉高。
- 如果是写操作:Master 在这一拍同时把数据送出。
- 如果是读操作:Slave 在这一拍通过 HREADY 高电平把数据送上总线。
- 第三个周期上升沿
- 如果是写操作:Master 看到 HREADY=1,表示写入成功。
- 如果是读操作:Master 看到 HREADY=1,说明数据有效并采样下来,读操作完成。
2.1.2注意事项
- 数据有效性:HREADY 必须为高电平时,读出的数据才是有效的。
- 流水线操作:AHB 支持流水线,Master 在接收前一笔数据时,可以同时发出下一笔地址。
- 时钟关系:
- M 在 HCLK 上升沿发出地址和控制信号;
- S 在下一个 HCLK 上升沿采样地址和控制信号;
- M 在第二个 HCLK 上升沿采样响应信号(HREADY、HRDATA)。
2、有等待传输的AHB传输
当 Slave 太慢,不能在一个时钟周期内完成对 Master 请求的响应时,会通过 将 HREADY 拉低 来插入等待周期。
这样地址与数据的传输都会被延迟,直到 HREADY 再次拉高,Master 才能继续。
2.2.1时序解析
- 第 1 个周期
- Master 驱动地址与控制信号。
- 第 2、3 个周期
- Slave 拉低 HREADY(=0),表示自己还没有准备好。
- Master 必须保持地址、控制信号以及写数据(若有写操作)不变。
- 数据阶段处于“等待”状态。
- 第 4 个周期
- Slave 将 HREADY 拉高(=1),表示传输完成。
- Master 在这一周期采样有效数据(读操作),或确认写操作完成(写操作)。
2.2.2注意事项
- 写操作:
Master 在等待期间要保持写数据不变,直到 HREADY 拉高,传输才算完成。 - 读操作:
Slave 不需要一开始就提供数据,只有在 HREADY 拉高的那个周期,才把有效数据输出到 HRDATA。
三、控制信号
1、HTRANS[1:0] 传送状态定义
在 AHB 总线上,Master 的传送状态由 HTRANS[1:0] 表示,含义如下:
1. 00 —— IDLE(空闲状态)
- 表示 Master 没有数据传输请求。
- Slave 必须忽略这次传输(地址和控制信号无效)。
- 等效于“零等待的 OKAY 响应”,对 Master 无影响。
2. 01 —— BUSY(忙状态)
- Master 表示自己正在处理数据,本周期不进行有效传输。
- Slave 需要响应 OKAY(零等待特性状态)。
- 常见于 突发(burst)传输 中:
- Master 可以在突发中途插入 BUSY 状态,表示暂时无法继续传输。
- 此时的地址/控制信号必须反映“无效传输”。
- Slave 忽略此次传输,只发 OKAY,不影响 Master。
3. 10 —— NONSEQ(非连续状态)
- 表示一个 新的有效传输的开始,通常是单次传输或者突发传输的第一笔。
- 此时地址与控制信号独立于前一拍,完全有效。
- 常用于:
- 单笔数据传输
- 或者突发传输的起始传输
4. 11 —— SEQ(连续状态)
- 表示一次 突发传输中的后续数据传输。
- 地址和控制信号与上一笔传输相关联(即顺序地址)。
- 地址通常等于前一笔地址 + HSIZE(传输宽度)。
总结规律
- 无效传输:IDLE(00)、BUSY(01),Slave 忽略即可。
- 有效传输:NONSEQ(10)、SEQ(11),Slave 必须正常处理。
- 关键作用:
- NONSEQ 用来启动一次传输/突发;
- SEQ 用来维持突发传输的连续性;
- BUSY/IDLE 用来“插空”或不传输。
一句话总结:
HTRANS 决定了当前 Master 发出的传输是无效(IDLE/BUSY),还是有效(NONSEQ/SEQ),并区分是突发起始还是连续传输。
2、批量传送 (HBURST[2:0])
批量传送是以“群组”为单位的数据传送方式,依靠地址生成方式来区分:
- 递增传送 (Incrementing burst)
- 每次传送地址依次递增。
- 可变长度,不定长传输。
- 回绕传送 (Wrapping burst)
- 地址在固定边界范围内循环。
- 例如回绕长度=4,每 4 个字节必须对齐到 16 字节范围内:
- 若起始地址=0x64,则传送顺序为 0x64、0x68、0x6C、0x60。
| 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 个数据的递增方式批量传送 |
3、HWRITE:传送方向
作用:表示当前传输是 读操作 还是 写操作,由 Master 控制。
情况一:HWRITE = 1 (高电平,写操作)
- Master 必须初始化写入操作。
- 数据由 Master 放到 HWDATA[31:0] 总线上。
情况二:HWRITE = 0 (低电平,读操作)
- Master 初始化读取操作。
- 被寻址到的 Slave 将数据放到 HRDATA[31:0] 总线上。
4、HSIZE[2:0]:传送大小
- 作用:表示每次传送的数据宽度(字节数)。
- 控制者:由 Master 发出,决定一拍内传输多少位数据。
| HSIZE[2:0] | 大小 | 描述 |
|---|---|---|
000 | 8 位 | 字节 |
001 | 16 位 | 半字 |
010 | 32 位 | 字 |
011 | 64 位 | - |
100 | 128 位 | 4-字数据线 |
101 | 256 位 | 8-字数据线 |
110 | 512 位 | - |
111 | 1024 位 | - |
HSIZE 与 HBURST 的关系
- HSIZE 决定 每次传送的数据宽度。
- HBURST 决定 传送次数 / 批量长度。
- 两者结合可以算出 总传输范围,并确定回绕地址的对齐边界。
举例
- 如果 HSIZE = 32 位(4 字节),HBURST = 4(INCR4),
→ 总传输长度 = 4 × 4 字节 = 16 字节,
→ 回绕地址必须对齐到 16 字节边界。
5、HPROT[3:0] —— 保护控制信号
含义
- HPROT[3:0]:总线协议中的“保护信号”,用来定义一次存取(访问)的 类型和特性。
- 用于标识访问的属性,例如:
- 特权访问 / 用户访问
- 缓存able / 不可缓存
- 可缓冲 / 不可缓冲
- 代码 / 数据
特点
- 并非所有 Master 都会用到 HPROT[3:0]。
- 如果 Slave 不关心访问属性,就会直接忽略这个信号。
- 在实际设计里,这个信号 用得比较少。
总结
- HPROT[3:0] = 访问保护/属性信息,用于区分访问类型(特权、缓存、代码/数据等)。
- 大多数情况不用,只有在某些需要区分存取属性的 Slave 里才会用到。
| 位编号 | 名称/属性 | 含义说明 |
|---|---|---|
| HPROT[0] | 数据/指令 (Data/Instruction) | 0 = 数据访问,1 = 指令访问(一般区分 code fetch 和 data load/store)。 |
| HPROT[1] | 特权/用户 (Privileged/User) | 0 = 用户模式访问,1 = 特权模式访问(通常与 CPU 模式挂钩)。 |
| HPROT[2] | 缓存/非缓存 (Cacheable/Non-cacheable) | 0 = 不可缓存的访问,1 = 可缓存的访问(决定是否能放入 Cache)。 |
| HPROT[3] | 可缓冲/不可缓冲 (Bufferable/Non-bufferable) | 0 = 不可缓冲,1 = 可缓冲(可在写 buffer 里先存储、延后写回)。 |
6、AHB 响应信号机制
1. 概念
- Master 发起一笔传输后,Slave 决定传输进程(是否完成/延迟/错误),Master 不能撤销。
- Slave 通过:
- HREADY → 表示传输是否完成
- HRESP[1:0] → 表示传输的状态类型
2. 传输完成标志 HREADY
- HREADY=1(高) → 传输完成,Master 可以继续下一笔。
- HREADY=0(低) → 传输未完成,需要插入等待周期。
3. 传输响应标志 HRESP[1:0]
| HRESP[1:0] | 状态 | 含义说明 |
|---|---|---|
00 | OKAY | 正常完成传输 |
01 | ERROR | 传输出错,Master 接收到错误响应 |
10 | RETRY | 传输未完成,请求 Master 重新发起传输;仲裁器可继续保持优先级 |
11 | SPLIT | 传输未完成,请求 Master 暂时退出总线,仲裁器可调度其他 Master,提高总线利用率 |
4. 地址译码与选择信号 HSELx
- 地址译码器为总线上每个 Slave 生成 选择信号 HSELx。
- 只有当前传输完成(HREADY=1)后,Slave 才会采样地址、控制信号和 HSELx。
- 特殊情况:可能出现 HSELx 有效,但 HREADY=0,表示 Slave 被选中,但传输还没准备好。
总结
- HREADY:决定传输是否结束(完成/等待)。
- HRESP:决定传输的结果(OKAY/ERROR/RETRY/SPLIT)。
- HSELx:由地址译码器生成,决定哪个 Slave 被选中响应。
四、时钟和复位
1. 时钟 (HCLK)
- 所有模块使用同一个时钟信号 HCLK。
- 所有输出信号必须在 HCLK 的上升沿 发生变化。
2. 复位 (HRESETn)
- HRESETn 是 AHB 协议中唯一的 低电平有效复位信号。
- 这是整个总线的主要复位信号。
- 复位可以是 异步置位,但必须在 HCLK 上升沿同步释放。
3. 复位期间的要求
- 所有 主设备 (Master) 必须确保:
- 地址和控制信号处于有效电平;
HTRANS[1:0] = IDLE。
- 所有 从设备 (Slave) 必须确保:
中响应。
四、时钟和复位
1. 时钟 (HCLK)
- 所有模块使用同一个时钟信号 HCLK。
- 所有输出信号必须在 HCLK 的上升沿 发生变化。
2. 复位 (HRESETn)
- HRESETn 是 AHB 协议中唯一的 低电平有效复位信号。
- 这是整个总线的主要复位信号。
- 复位可以是 异步置位,但必须在 HCLK 上升沿同步释放。
3. 复位期间的要求
- 所有 主设备 (Master) 必须确保:
- 地址和控制信号处于有效电平;
HTRANS[1:0] = IDLE。
- 所有 从设备 (Slave) 必须确保:
- HREADYOUT = 高电平(表示“空闲就绪”)。

5696

被折叠的 条评论
为什么被折叠?



