AMBA(Advanced Microcontroller Bus Architecture,高级微控制器总线架构)是ARM公司提出的片上总线标准,定义了SoC(System on Chip)内部各个模块之间的互联与通信规范。经过多年的演进,AMBA已经成为业界事实上的片上互联标准,广泛应用于手机处理器、汽车电子、AI芯片等各类SoC设计中。
AMBA协议家族
| 协议 | 提出版本 | 定位 | 核心特点 |
|---|---|---|---|
| APB | AMBA 1.0 | 低功耗外设总线 | 简单、低速,用于外设寄存器配置 |
| AHB | AMBA 2.0 | 高性能系统总线 | 高带宽、流水线、burst传输、多主机仲裁 |
| AXI | AMBA 3.0 | 高性能互联总线 | 独立读写通道、outstanding、乱序传输 |
| AXI4-Lite | AMBA 4.0 | AXI简化版 | 去除burst,用于寄存器配置 |
| AXI4-Stream | AMBA 4.0 | 流式数据传输 | 无地址通道,适合连续数据流 |
| CHI | AMBA 5.0 | 一致性总线 | 面向多核Cache一致性互联 |
AMBA演进
- AMBA 1.0(1996):定义ASB和APB,解决片上模块互联的基础问题;
- AMBA 2.0(1999):引入AHB,支持更高时钟频率与带宽需求;
- AMBA 3.0(2003):引入AXI3、APB3与ATB,AXI支持独立读写通道与乱序传输;
- AMBA 4.0(2010):新增AXI4、AXI4-Lite、AXI4-Stream以及ACE(一致性扩展);
- AMBA 5.0(2013):新增AXI5、ACE5与CHI,进一步提升互联效率与Cache一致性支持。
三种总线的定位
在实际SoC中,三种总线各司其职,通过转换桥(AXI2APB、AXI2AHB等)组成层次化的总线架构:
- AXI:连接CPU、GPU、DDR控制器等高性能主设备,承担主要的数据吞吐;
- AHB:连接DMA、外部存储器接口等中等带宽模块;
- APB:连接低速外设(I2C、UART、SPI、GPIO等),一般通过桥接挂在AXI/AHB之下。
AHB协议
AHB(Advanced High-performance Bus)是AMBA 2.0定义的高性能系统总线,面向高时钟频率、高带宽的系统模块互联。
AHB特点
- 流水线传输:一次传输分为地址阶段和数据阶段,地址在当前时钟周期发出,数据在下一个时钟周期传输,地址与数据阶段重叠,提高总线利用率;
- Burst传输:支持SINGLE、INCR、WRAP等突发传输,一次发起可连续传输多个数据;
- 多主机仲裁:支持多个master,由仲裁器根据请求与优先级分配总线使用权;
- 宽数据位:支持32/64/128位数据总线;
- 响应与错误处理:slave通过HRESP返回OKAY、ERROR、RETRY、SPLIT四种响应。
AHB信号
| 信号 | 方向 | 描述 |
|---|---|---|
| HCLK | - | 总线时钟 |
| HRESETn | - | 复位信号,低有效 |
| HADDR[31:0] | master | 地址总线 |
| HTRANS[1:0] | master | 传输类型:IDLE/BUSY/NONSEQ/SEQ |
| HWRITE | master | 写使能,高电平表示写 |
| HSIZE[2:0] | master | 传输大小:byte/halfword/word等 |
| HBURST[2:0] | master | 突发类型:SINGLE/INCR/WRAP等 |
| HPROT[3:0] | master | 保护控制:数据/指令、特权/用户、可缓存等 |
| HWDATA | master | 写数据总线 |
| HRDATA | slave | 读数据总线 |
| HSELx | 译码器 | 从设备选择信号 |
| HREADY | slave | 传输完成信号,低电平插入等待周期 |
| HRESP[1:0] | slave | 传输响应:OKAY/ERROR/RETRY/SPLIT |
| HBUSREQx | master | 总线请求,用于仲裁 |
| HLOCKx | master | 总线锁定请求 |
| HGRANTx | 仲裁器 | 总线授权 |
| HMASTER[3:0] | 仲裁器 | 当前总线主机编号 |
AHB传输过程
AHB采用流水线方式,一次基本传输分为:
- 地址阶段:master在时钟上升沿后输出地址和传输类型(HTRANS),完成地址建立;
- 数据阶段:下一个时钟周期,slave通过HREADY表示是否准备好数据。HREADY为低时插入等待周期(wait state),HREADY拉高表示传输完成。
与APB不同,AHB每次传输至少需要两个时钟周期(地址+数据),但由于流水线作用,连续传输时地址和数据阶段重叠,平均每个时钟周期可完成一次数据传输。
HTRANS传输类型:
- IDLE(00):空闲传输,无实际数据传输;
- BUSY(01):master插入空闲周期,burst中表示间隔;
- NONSEQ(10):一次新突发传输的第一个传输,地址与上一次无关;
- SEQ(11):突发传输的后续传输,地址与上一次相关。
AHB Burst传输
| HBURST | 类型 | 说明 |
|---|---|---|
| SINGLE | 单次传输 | 只传输一个数据 |
| INCR | 不定长递增 | 递增地址,长度未知 |
| WRAP4/8/16 | 回卷突发 | 递增到边界后回卷,传输4/8/16个数据 |
| INCR4/8/16 | 定长递增 | 递增地址,传输4/8/16个数据 |
AHB响应
slave通过HRESP和HREADY给出响应:
- OKAY:传输成功完成;
- ERROR:传输发生错误,需要终止;
- RETRY:slave暂时无法完成传输,master需要重试,但地址保持不变;
- SPLIT:slave告知仲裁器该传输被拆分,仲裁器可授权给其他master,传输稍后继续。
多主机仲裁
当系统存在多个master时,仲裁器根据请求与优先级决定总线归属:
- master拉高HBUSREQx请求总线;
- 仲裁器通过HGRANTx授权给其中一个master;
- 获得授权的master开始传输;
- 若master发起HLOCKx锁定传输,仲裁器将保持该master占用总线,直到锁定传输结束。
从AHB3开始,AHB增加了HMASTER、HSPLIT等信号支持拆分成(Split)传输,减少低优先级master对总线的占用时间。
AXI协议
AXI(Advanced eXtensible Interface)是AMBA 3.0引入的高性能互联协议,广泛用于高性能SoC中CPU与DDR、GPU等高速模块的互联。
AXI特点
- 独立读写通道:读和写拥有各自独立的地址/数据通道,支持全双工通信;
- 5个通道:读地址(AR)、读数据(R)、写地址(AW)、写数据(W)、写响应(B);
- 基于握手的传输:所有通道都采用VALID/READY握手,可实现全速传输或插入等待;
- Burst传输:支持FIXED/INCR/WRAP三种突发类型;
- Outstanding与乱序:master可以一次发出多个未完成事务,通过ID标识实现乱序返回,提高吞吐率;
- 字节使能:写数据通道提供WSTRB字节选通信号,支持部分写入。
AXI五个通道
| 通道 | 信号前缀 | 作用 |
|---|---|---|
| 写地址通道 | AW* | 传输写事务的地址与控制信息 |
| 写数据通道 | W* | 传输写数据,带WSTRB字节使能 |
| 写响应通道 | B* | slave返回写事务响应(BRESP) |
| 读地址通道 | AR* | 传输读事务的地址与控制信息 |
| 读数据通道 | R* | slave返回读数据与响应(RRESP) |
AXI信号详解
写地址通道(AW*)
| 信号 | 位宽 | 描述 |
|---|---|---|
| AWID | x | 写事务ID,用于区分事务 |
| AWADDR | 32 | 写地址 |
| AWLEN | 4/8 | 突发长度,AXI3为4bit(1~16),AXI4为8bit(1~256) |
| AWSIZE | 3 | 每次传输的数据字节数(2^AWSIZE) |
| AWBURST | 2 | 突发类型:FIXED/INCR/WRAP |
| AWLOCK | 1 | 锁定传输(AXI3),AXI4中必须为0 |
| AWCACHE | 4 | 缓存属性 |
| AWPROT | 3 | 保护属性 |
| AWQOS | 4 | QoS服务质量 |
| AWVALID | 1 | 地址有效握手信号 |
| AWREADY | 1 | slave可以接收地址 |
写数据通道(W*)
| 信号 | 位宽 | 描述 |
|---|---|---|
| WDATA | 32/64/128 | 写数据 |
| WSTRB | 4/8/16 | 字节选通,指示每个字节是否有效 |
| WLAST | 1 | 标识最后一个写数据 |
| WVALID | 1 | 数据有效握手信号 |
| WREADY | 1 | slave可以接收数据 |
写响应通道(B*)
| 信号 | 位宽 | 描述 |
|---|---|---|
| BID | x | 响应ID,与写事务AWID对应 |
| BRESP | 2 | 写响应:OKAY/EXOKAY/SLVERR/DECERR |
| BVALID | 1 | 响应有效握手信号 |
| BREADY | 1 | master可以接收响应 |
读地址通道(AR*):信号与写地址通道一一对应,仅前缀由AW改为AR。
读数据通道(R*)
| 信号 | 位宽 | 描述 |
|---|---|---|
| RID | x | 读事务ID |
| RDATA | 32/64/128 | 读数据 |
| RRESP | 2 | 读响应:OKAY/EXOKAY/SLVERR/DECERR |
| RLAST | 1 | 标识最后一个读数据 |
| RVALID | 1 | 数据有效握手信号 |
| RREADY | 1 | master可以接收数据 |
AXI握手协议
AXI所有通道都使用VALID/READY握手:
- 当VALID为高,表示发送方的地址或数据有效,且必须保持到READY拉高;
- 当READY为高,表示接收方可以接收数据;
- 只有在VALID和READY同时为高的时钟上升沿,才完成一次握手传输。
典型的写事务流程:
- master发出AWADDR和AWVALID,slave拉高AWREADY完成写地址握手;
- master按burst长度依次发送W*数据,以WLAST标识最后一个数据;
- slave接收完所有数据后,通过BRESP返回写响应,完成整个写事务。
读事务流程:
- master发出ARADDR和ARVALID,slave拉高ARREADY完成读地址握手;
- slave将读数据通过R通道返回,RLAST标识最后一个数据;
- 每个数据都通过RVALID/RREADY握手完成传输。
AXI Burst类型
- FIXED:所有数据都使用同一个地址,适合FIFO等固定地址访问;
- INCR:地址逐次递增,是默认的突发类型,适合连续内存访问;
- WRAP:地址递增但到达边界后回卷,适合cache line的读取。
突发传输规则
- 地址计算:INCR/WRAP突发中,第N次传输的地址 = 起始地址 + N × 传输字节数(2^AWSIZE);
- 地址对齐:突发起始地址必须与传输大小对齐,即起始地址的低AWSIZE位必须为0;
- 4KB边界限制:INCR和WRAP突发不能跨越4KB地址边界,如果访问区域跨边界,需要拆分为多个突发;
- 窄传输(Narrow Transfer):当总线数据宽度大于单次传输字节数时,数据只在部分字节通道上有效,通过WSTRB指示有效字节的位置;
- WSTRB:WSTRB[n]对应WDATA[8n+7:8n]字节,WSTRB[n]=1表示该字节有效,仅写数据通道存在。
传输响应
slave通过BRESP/RRESP返回传输结果:
| 响应 | 编码 | 含义 |
|---|---|---|
| OKAY | 00 | 正常访问成功 |
| EXOKAY | 01 | 排他访问成功(AXI锁定/排他传输) |
| SLVERR | 10 | 从设备错误,如访问不支持的地址或内部错误 |
| DECERR | 11 | 解码错误,地址无法映射到任何从设备 |
缓存与保护属性
- AXCACHE(AWCACHE/ARCACHE):
- bit[0] Bufferable:允许缓冲写入,数据无需立即到达最终目的地;
- bit[1] Modifiable:允许修改访问属性,如读写合并;
- bit[2] Other Allocate:其他分配提示,用于一致性系统;
- bit[3] Cacheable:允许缓存访问。
- AXPROT(AWPROT/ARPROT):
- bit[0]:0=数据访问,1=指令访问;
- bit[1]:0=非特权,1=特权;
- bit[2]:0=安全访问,1=非安全访问。
- AXQOS(AWQOS/ARQOS):0~15的服务质量等级,供互联仲裁器参考,决定事务优先级。
Outstanding与乱序
AXI允许master在未收到上一次响应前继续发出多个事务(outstanding transaction)。多个未完成事务通过各自的ID区分,slave可以按任意顺序返回数据(相同ID的事务必须保持顺序),从而实现:
- 提高总线利用率,隐藏访存延迟;
- 支持不同ID事务并行处理与乱序返回。
顺序规则:
- 相同ID:事务必须按发出顺序返回数据,保证同一ID内的顺序一致性;
- 不同ID:事务可以乱序完成,也可以并行传输;
- 写交织(Write Interleaving):AXI3允许不同ID事务的写数据在W通道上交织传输,AXI4为保证实现简洁,W通道一次只能传输同一事务的数据;
- 读交织:读数据通道通过RID区分不同事务的数据,天然支持交织返回。
AXI4协议家族
- AXI4:完整版,支持高达256次burst,取消LOCK锁定传输;
- AXI4-Lite:简化版,无burst(单次传输),常用于寄存器配置,硬件开销小;
- AXI4-Stream:流式接口,无地址通道,面向视频、音频等连续数据流。
| 特性 | AXI3 | AXI4 | AXI4-Lite | AXI4-Stream |
|---|---|---|---|---|
| ID位宽 | 4bit | 可扩展 | - | - |
| 突发长度 | 1~16 | 1~256 | 固定1 | 无限制 |
| 窄传输 | 支持 | 支持 | 数据位宽=总线位宽 | - |
| 锁定传输 | 支持 | 不支持 | - | - |
| 写交织 | 支持 | 不支持 | - | - |
| 地址通道 | AW/AR | AW/AR | AW/AR | 无 |
| 数据通道 | W/R | W/R | W/R | TDATA/TVALID/TREADY |
| 典型用途 | 早期AMBA3系统 | 高性能互联 | 寄存器配置 | 音视频数据流 |
AXI低功耗接口
AXI4提供低功耗接口信号CSYSREQ/CSYSACK/CACTIVE,用于系统级时钟与电源管理,在系统空闲时关闭互联时钟,降低动态功耗。
APB协议
高级外设总线(Advanced Peripheral Bus,APB) 是AMBA协议之一,也是最基本的总线协议。按照ARM官方定义,APB是一种低成本的接口协议,可以实现低功耗以及精简的接口设计,降低接口设计的复杂度。
APB协议不支持流水线设计,它主要应用在低带宽设计需求的接口中,高性能带宽需求可以使用AXI总线。APB协议的实现与时钟沿对齐,以简化外设接口的设计。每次传输至少需要消耗两个时钟周期。
在SOC设计中,APB一般作为IP的配置接口,包括低速外设如I2C,UART,I2S等,也包括DDR,PCIe,Ethernet等高速IP,可以方便地实现CPU对外设IP的寄存器配置。系统中一般会实现一个AXI2APB或者AHB2APB的转换桥将APB口挂载在系统上。

APB协议的演进
最早的一版APB协议是在1998发布,目前的APB协议已经达到APB5的版本。

APB2协议主要定义了基本的总线接口,没有握手协议,只有基本的读写传输。
APB3增加了PREADY,PSLVERR信号。PREADY用于表示APB传输的完成,可以实现slave的等待功能。PSLVERR用以指示slave的错误状态。
APB4增加了PPROT,PSTRB。PPROT信号实现安全和非安全的数据传输,可实现系统在不同安全属性的控制传输,保证系统的安全性。PSTRB信号用于实现部分数据的写操作,可以指示一笔传输中的一部分数据有效。
APB5增加了wake-up,user,pairty等信号。wake-up用于实现低功耗的控制,通过控制时钟只在传输的时候开启,减少动态功耗的消耗。user则增加了基本信号之后的用户自定义信号。parity主要针对安全系统设计中的保护功能。
我们可以看到随着系统设计的升级,协议也是在不断的更新,来适应我们目前的系统需求。比如最新的协议都是支持安全传输与安全验证,这就是针对目前的安全设计,比如汽车电子,自动驾驶补充的一些标准。
APB信号

APB传输

- IDLE :APB的默认状态,此时没有数据传输,PSEL,PENABLE均为default 0
- SETUP:当需要进行一个传输的时候,APB 首先进入这个状态;PSELx 信号首先拉高;总线仅仅在 SETUP 状态停留一个时钟周期,然后接着在下一个时钟的上升沿进入 ACCESS 状态;
- ACCESS:在 SETUP 状态转换到 ACCESS,PENABLE 信号被拉高;在 SETUP 状态转换到 ACCESS 状态这段时间里,address,write,select 和 write data 信号必须保持稳定;
ACCESS状态的跳转取决于slave 输出的PREADY信号状态:
1)如果 PREADY 为 0,表示slave还没有准备接受传输的数据,或者没有准备好输出的数据,会让其继续处于 ACCESS 状态;
2)如果PREADY 为 1,表示slave已完成数据,可以跳转到其他状态。如果后面有连续的数据传输则直接跳转到 SETUP -> ACCESS ,如果没有传输,直接回到 IDLE;
with no wait states

T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR 和数据 PWDATA 准备好,拉高 PWRITE 表示进入写,同时拉高 PSEL,从 IDLE 进入 SETUP
T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS
T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经正确接收到数据,传输完成;PENABLE 拉低,PSEL 拉低 。
一直到T3时刻所有数据传输完成之前所有的信号PADDR,PWDATA以及控制信号需要保持不变。

T1 时刻 :在PCLK的上升沿,APB 将地址信息 PADDR ,此时 PWRITE 为低表示读操作,同时拉高 PSEL,从 IDLE 进入 SETUP
T2 时刻:也就是下一个时钟周期拉高 PENABLE,表示开始进行数据传输,状态进入 ACCESS
T3 时刻:检测到 PREADY 被拉高,也就是说 Slave 已经将PRDATA准备好,MASTER可以接收SLAVE的数据,然后PENABLE 拉低,PSEL 拉低 。
读操作是SLAVE将准备好的数据放到PRDATA总线上,然后通过PREADY通知MASTER。
注意:slave需要在T2时刻将需要读取的数据准备好
with wait states

slave可以通过pready拉低,来延长slave的响应时间。此时需要注意,其他信号需要保持不变。
Write strobes

通过PSTRB[n]控制PWDATA[(8*n+7):n]的数据写有效。可以方便的实现部分数据控制。
Error response
APB协议可以通过PSLVERR信号表示对应传输错误。只不过在APB协议中error只有1 bit表示所有的错误。具体的协议实现如下:

需要注意的是,PSLVERR是与ready信号同时返回的,只有这样master才能正确采样到错误信号。在slave内部处理之前需要将ready拉低以等待内部检测是否有错误发生。
APB新增属性
Protection transaction

PPROT可实现APB传输的保护控制。PPROT[0]表示不同优先级的传输,可实现slave对不同优先级数据的特殊处理操作。PPROT[1]表示对不同安全属性的数据传输,对Secure和Non-secure的数据进行数据处理,Non-secure不能更改secure属性的区域。PPROT[2]用来指示此时传输是数据传输还是指令传输。
APB的这个升级是集成的AHB与AXI的属性,也是为了更加符合现在系统设计的需求。
PWAKEUP SIGNAL
PWAKEUP用来指示本次传输是否有效,是随请求信号一块传输的。
设计上如果我们端口有pwakeup信号就一定要在传输的时候使能pwakeup信号,如果传输的时候pwakeup信号不使能,则slave会认为这一笔数据传输无效。
设计上建议pwakeup信号跟psel一块拉高或者先于psel拉高。也可以用pwakeup控制apb的时钟达到低功耗的目的。
USER SIGNAL
APB信号增加了USER信号,可针对地址,读写数据,响应增加USER信号,可以用来传输用户自定信号,增加协议的灵活性。
信号的有无,以及位宽可以用户自定义。

PARITY protection

在最新的APB协议中,增加了对协议的parity保护,可以针对地址,数据以及控制信号的保护传输。在Source侧可以针对要传输的信号增加parity generation模块产生校验码,同时也可以对返回的数据进行校验。在Destination侧可以增加Parity check模块对Source侧传过来的数据与校验码进行校验,从而覆盖从Source到Destination的整个通路的安全保护,实现端到端(E2E)的保护机制。
具体的实现机制与奇偶校验都可以自行选择实现。