AHB协议

AHB协议

一、AHB 总线的介绍

1、AHB 总线的核心优势

  • 能连接 微控制器(CPU)
  • 高带宽片上 RAM
  • 高带宽外部存储接口
  • DMA 总线 master
  • 以及各种拥有 AHB 接口的控制器

这些组件通过 AHB 互连起来,可以组成一个完整的 SoC 系统骨架

除此之外,还可以通过 AHB-APB Bridge 将 AHB 系统连接到 APB 总线,再挂载一些 低带宽外设

在这里插入图片描述

2、AHB 总线的四个组成部分

  1. AHB 主设备 Master

    发起一次读/写操作。

    任意时刻只允许一个主设备使用总线。

  2. AHB 从设备 Slave

    响应一次读/写操作。

    通过地址映射决定选用哪个从设备。

  3. AHB 仲裁器 Arbiter

    当有多个 Master 请求总线时,仲裁器决定谁获得总线控制权。

  4. AHB 译码器 Decoder

    根据地址译码,选择具体的从设备。

在这里插入图片描述

3、AHB操作概述

1.3.1获得总线的 Master 开始 AHB 传输,步骤如下:
  1. 地址阶段:Master 先发出 地址和控制信号(包括地址、传输方向、数据宽度、burst 类型)。

  2. 地址译码:Decoder 根据地址和控制信号选择对应的 Slave。

  3. 数据阶段:通过数据总线完成数据传输:

    写传输: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 在处理本次传输时,还要确认上一次传输是否完成。
  • 举例:
    1. Master 发起一次写操作,Slave 还没准备好 → hready_out=0。
    2. 下一拍 Master 又发了一个新地址,但 Slave 必须先看 hready_in,判断“前一拍的数据是否完成”。
    3. 如果 hready_in=0(表示上次没完成),当前新地址就不能真正生效,需要等待。

二、基本AHB传输

1、零等待传输

在这里插入图片描述

2.1.1零等待传输 (No wait state transfer) 时序解析
  1. 第一个周期上升沿
    • Master 驱动地址和控制信号。
  2. 第二个周期上升沿
    • Slave 采样地址和控制信号,并把 HREADY 拉高。
    • 如果是写操作:Master 在这一拍同时把数据送出。
    • 如果是读操作:Slave 在这一拍通过 HREADY 高电平把数据送上总线。
  3. 第三个周期上升沿
    • 如果是写操作: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. 第 1 个周期
    • Master 驱动地址与控制信号。
  2. 第 2、3 个周期
    • Slave 拉低 HREADY(=0),表示自己还没有准备好。
    • Master 必须保持地址、控制信号以及写数据(若有写操作)不变。
    • 数据阶段处于“等待”状态。
  3. 第 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])

批量传送是以“群组”为单位的数据传送方式,依靠地址生成方式来区分:

  1. 递增传送 (Incrementing burst)
    • 每次传送地址依次递增。
    • 可变长度,不定长传输。
  2. 回绕传送 (Wrapping burst)
    • 地址在固定边界范围内循环。
    • 例如回绕长度=4,每 4 个字节必须对齐到 16 字节范围内:
      • 若起始地址=0x64,则传送顺序为 0x64、0x68、0x6C、0x60。
HBURST[2:0]类型描述
000SINGLE单笔数据传送
001INCR不定长的递增方式批量传送
010WRAP44 个数据的回绕方式批量传送
011INCR44 个数据的递增方式批量传送
100WRAP88 个数据的回绕方式批量传送
101INCR88 个数据的递增方式批量传送
110WRAP1616 个数据的回绕方式批量传送
111INCR1616 个数据的递增方式批量传送

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]大小描述
0008 位字节
00116 位半字
01032 位
01164 位-
100128 位4-字数据线
101256 位8-字数据线
110512 位-
1111024 位-

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]状态含义说明
00OKAY正常完成传输
01ERROR传输出错,Master 接收到错误响应
10RETRY传输未完成,请求 Master 重新发起传输;仲裁器可继续保持优先级
11SPLIT传输未完成,请求 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 = 高电平(表示“空闲就绪”)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值