3、经典总线协议入门:AMBA AHB、APB、AXI的基本架构、信号定义、传输类型与典型应用场景
AMBA(Advanced Microcontroller Bus Architecture)是由ARM公司定义的片上总线家族,经过近三十年的演进,已从早期的ASB/APB发展为当前SoC设计中事实标准的互连规范。本章聚焦于AMBA家族中三个最具代表性的协议——AHB(Advanced High-performance Bus)、APB(Advanced Peripheral Bus)和AXI(Advanced eXtensible Interface),从架构分层、信号语义、传输机制和工程选型四个维度展开,帮助读者建立从协议文本到硅片实现之间的完整映射。理解这三者之间的差异,是后续学习NoC(Network-on-Chip)互连、多主多从仲裁、低功耗设计以及Cache一致性协议的基础。
上图展示了典型SoC中AMBA总线的分层结构。CPU和DMA等高性能主设备通过AXI接口直接连接到互连矩阵,而低速外设则通过AHB桥和APB桥逐级降速接入。这种分层设计并非随意为之,而是基于带宽、延迟和功耗的综合权衡——高性能主设备需要高带宽低延迟的通道,而UART、GPIO等外设对带宽要求极低,若全部使用AXI接口,不仅浪费布线资源,还会增加功耗和时序收敛难度。
3.1 AHB总线:高性能单周期突发传输
核心原理与架构
AHB(Advanced High-performance Bus)是AMBA 2.0引入的高性能同步总线,设计目标是在单一时钟周期内完成地址/控制阶段的流水线操作,并支持突发传输(Burst)。AHB的架构由主设备(Master)、从设备(Slave)、仲裁器(Arbiter)和译码器(Decoder)四类组件构成。主设备发起读写请求,从设备响应请求,仲裁器解决多个主设备同时访问的冲突,译码器负责将地址映射到对应的从设备选择信号。
AHB的流水线特性体现在:当前传输的地址阶段与上一传输的数据阶段重叠执行。这意味着当地址A被驱动到总线时,前一个地址A-1对应的数据正在数据阶段传输。这种设计使得总线利用率接近100%,但代价是主设备必须提前一个周期准备好地址,且从设备需要在一个周期内完成响应(通过HREADY信号插入等待状态)。
| 信号名称 | 方向 | 位宽 | 功能描述 |
|---|---|---|---|
| HCLK | 全局 | 1 | 总线时钟,所有信号在上升沿采样 |
| HRESETn | 全局 | 1 | 异步复位,低有效 |
| HADDR[31:0] | 主→从 | 32 | 地址总线,按字节寻址 |
| HTRANS[1:0] | 主→从 | 2 | 传输类型:IDLE/BUSY/NONSEQ/SEQ |
| HWRITE | 主→从 | 1 | 写/读指示,1为写,0为读 |
| HSIZE[2:0] | 主→从 | 3 | 传输大小:字节/半字/字/双字等 |
| HBURST[2:0] | 主→从 | 3 | 突发类型:SINGLE/INCR/WRAP等 |
| HWDATA[31:0] | 主→从 | 32 | 写数据总线 |
| HRDATA[31:0] | 从→主 | 32 | 读数据总线 |
| HREADY | 从→主 | 1 | 从设备就绪信号,低电平插入等待 |
| HRESP[1:0] | 从→主 | 2 | 响应类型:OKAY/ERROR/RETRY/SPLIT |
| HSELx | 译码→从 | 1 | 从设备选择信号 |
传输类型与仲裁机制
AHB定义了四种传输类型,由HTRANS信号编码:IDLE(00)表示主设备不发起传输;BUSY(01)表示主设备在突发传输中插入空闲周期,但地址和控制信号无效;NONSEQ(10)表示突发传输的第一个传输或单次传输;SEQ(11)表示突发传输的后续传输。仲裁器通过HBUSREQ和HLOCK信号进行仲裁,优先级策略通常为固定优先级或轮转(Round-Robin)。从设备可以通过HREADY拉低来插入等待状态,也可以通过HRESP返回ERROR、RETRY或SPLIT响应。
典型应用场景与案例
AHB的典型应用包括:中等性能的SRAM控制器、DMA控制器(当系统未使用AXI时)、以及需要较高带宽但不需要乱序完成的外设。以一个双主设备AHB系统为例——CPU和DMA同时访问片上SRAM:CPU优先级设为高,DMA为低。当DMA正在执行长突发传输时,CPU发起访问请求,仲裁器在下一个周期将总线授权切换给CPU,DMA的突发被中断(通过HTRANS=BUSY保持)。这种抢占式仲裁保证了CPU的实时响应,但DMA的突发效率会下降。
3.2 APB总线:低功耗外设接入的简单之道
核心原理与状态机
APB(Advanced Peripheral Bus)是AMBA家族中最简单的协议,专为低功耗、低速外设设计。APB没有突发传输、没有流水线、没有仲裁器,只有一个主设备(通常是APB桥)和多个从设备。其状态机仅包含三个状态:IDLE、SETUP和ACCESS。在IDLE状态,总线空闲;当有传输请求时进入SETUP状态,此时PENABLE拉低,地址和控制信号有效;下一个周期进入ACCESS状态,PENABLE拉高,传输在ACCESS状态结束时完成。
APB的写传输需要两个周期(SETUP+ACCESS),读传输同样需要两个周期。这种简单的两周期协议使得APB从设备的设计极其容易——不需要考虑等待状态、突发中断或错误响应。APB的功耗优势在于:地址和数据总线仅在传输期间翻转,且总线位宽通常为32位,但实际数据位宽可以配置为8/16/32位。
| 信号名称 | 方向 | 功能描述 |
|---|---|---|
| PCLK | 全局 | 外设时钟,通常为AHB时钟的分频 |
| PRESETn | 全局 | 异步复位,低有效 |
| PADDR[31:0] | 桥→从 | 地址总线 |
| PSELx | 桥→从 | 从设备选择,每个从设备一个 |
| PENABLE | 桥→从 | 使能信号,ACCESS状态为高 |
| PWRITE | 桥→从 | 写/读指示 |
| PWDATA[31:0] | 桥→从 | 写数据 |
| PRDATA[31:0] | 从→桥 | 读数据 |
| PREADY | 从→桥 | 从设备就绪,可插入等待(APB4新增) |
| PSLVERR | 从→桥 | 传输错误指示(APB4新增) |
APB4增强与桥接设计
APB4协议在原有基础上增加了PREADY和PSLVERR信号,允许从设备插入等待周期并报告错误。这使得APB可以连接需要多个周期完成访问的外设(如带内部FIFO的UART)。APB桥的设计要点包括:地址译码(将AHB/AXI地址映射到PSELx)、写数据锁存(在SETUP阶段锁存PWDATA)、读数据多路选择(根据PSELx选择对应的PRDATA)、以及状态机控制(确保PENABLE的时序正确)。
典型应用场景
APB几乎覆盖了所有低速控制外设:UART、SPI、I2C、GPIO、Timer、Watchdog、RTC、中断控制器、电源管理单元(PMU)等。这些外设的寄存器访问频率低(通常在KHz到MHz级别),对延迟不敏感,且不需要高带宽。将这类外设挂在APB上,可以显著降低布线复杂度和动态功耗。以一个典型IoT SoC为例,其APB外设域包含8个UART、4个SPI、6个I2C、32个GPIO和多个定时器,APB时钟频率为50MHz,而AXI时钟为400MHz,APB域的功耗仅占整个芯片数字逻辑功耗的3%左右。
3.3 AXI总线:高性能SoC的互连基石
架构与通道独立性
AXI(Advanced eXtensible Interface)是AMBA 3.0引入的里程碑式协议,其核心设计理念是通道分离。AXI定义了五个独立通道:读地址通道(AR)、读数据通道(R)、写地址通道(AW)、写数据通道(W)和写响应通道(B)。每个通道都是单向的,且使用独立的VALID/READY握手协议。这种架构允许读和写并行执行,也允许不同地址的传输乱序完成。
AXI的关键特性包括:支持outstanding传输(主设备可以在未收到前一个响应前发起多个传输)、支持乱序完成(从设备可以按任意顺序返回数据)、支持数据交织(通过WSTRB信号实现字节级写选通)、以及支持突发传输(固定长度,最大256拍)。AXI的地址和数据通道分离,使得地址可以提前发送,数据随后跟上,这对于高延迟的DDR控制器尤为重要。
| 特性 | AHB | APB | AXI |
|---|---|---|---|
| 通道数 | 1(地址/数据复用) | 1(地址/数据复用) | 5(独立通道) |
| 流水线 | 地址/数据流水 | 无 | 全通道流水 |
| 突发长度 | 1-16拍 | 1拍 | 1-256拍 |
| 乱序完成 | 不支持 | 不支持 | 支持 |
| Outstanding | 不支持 | 不支持 | 支持(深度可配) |
| 数据选通 | 无 | 无 | WSTRB字节选通 |
| 响应类型 | OKAY/ERROR/RETRY/SPLIT | OKAY/ERROR | OKAY/EXOKAY/SLVERR/DECERR |
| 典型频率 | 200-400MHz | 50-100MHz | 400MHz-2GHz+ |
握手协议与传输流程
AXI的每个通道使用VALID/READY握手。VALID表示发送方已准备好数据,READY表示接收方可以接收数据。传输发生在VALID和READY同时为高的时钟上升沿。协议规定:发送方在VALID拉高后不能等待READY而撤销VALID(除非发生复位);接收方可以在VALID拉高前拉高READY,也可以在VALID拉高后拉高READY。这种双向握手机制允许发送方和接收方独立控制节奏,从而实现背压(Backpressure)管理。
一个典型的AXI写传输流程如下:主设备在AW通道发送地址和控制信息(AWVALID拉高),从设备在准备好接收时拉高AWREADY,握手完成后地址传输完成。随后主设备在W通道发送写数据(WVALID拉高,WLAST在最后一拍拉高),从设备通过WREADY接收数据。所有数据接收完毕后,从设备在B通道发送写响应(BVALID拉高),主设备以BREADY接收。读传输类似,但数据在R通道返回,RLAST标记最后一拍。
// AXI 写通道握手时序示例(Verilog 伪代码)
always @(posedge ACLK) begin
if (AWVALID && AWREADY) begin
// 地址握手完成,锁存地址
aw_addr <= AWADDR;
aw_len <= AWLEN;
end
end
always @(posedge ACLK) begin
if (WVALID && WREADY) begin
// 数据握手完成,写入FIFO
if (WLAST) w_done <= 1'b1;
end
end
AXI的典型应用与工程实践
AXI广泛应用于需要高带宽、低延迟和并发访问的场景:CPU到DDR控制器的路径、GPU/VPU等多媒体引擎的互连、PCIe控制器、以及多核SoC的缓存一致性互连(如CCI/CMN)。在实际工程中,AXI互连的设计需要关注以下问题:
- Outstanding深度配置:过深的outstanding会增加互连缓冲区的面积和功耗,过浅则无法充分利用DDR的bank级并行。通常CPU侧配置8-16,DMA侧配置4-8。
- 乱序窗口大小:互连矩阵需要为每个主设备维护乱序窗口,窗口越大,硬件开销越高。建议根据实际延迟需求配置。
- 数据宽度匹配:AXI支持32/64/128/256/512/1024位数据总线。当主设备位宽小于从设备位宽时,互连需要处理数据对齐和字节选通转换。
- QoS信号:AXI4增加了AXQOS信号(4位),用于表示传输的服务质量等级。互连可以根据QOS进行仲裁权重调整,确保实时性要求高的传输优先。
3.4 总线选型与桥接策略
选型决策框架
在实际SoC设计中,选择哪种总线协议取决于三个核心维度:带宽需求、延迟敏感度和设计复杂度预算。带宽需求可以通过计算峰值传输速率得出——例如,一个4K@60fps视频解码器需要约12GB/s的读带宽和8GB/s的写带宽,这必须使用AXI-256位@500MHz(理论带宽16GB/s)才能满足。延迟敏感度方面,CPU的Cache Miss处理路径要求极低延迟(通常<100ns),而UART的寄存器访问延迟即使达到1μs也无感知。设计复杂度预算则涉及验证成本、时序收敛难度和面积开销。
桥接设计要点
AXI到AHB桥、AHB到APB桥是SoC中常见的桥接结构。桥接设计需要处理以下问题:
- 协议转换:AXI的突发长度(最大256)与AHB的突发长度(最大16)不匹配,桥需要将长突发拆分为多个短突发。
- Outstanding管理:AXI侧允许outstanding传输,但AHB侧不支持。桥需要实现一个FIFO来缓存AXI侧的多个传输请求,并按顺序转发到AHB侧。
- 响应映射:AXI的SLVERR/DECERR需要映射到AHB的ERROR响应,同时AXI的ID需要保留以支持乱序返回。
- 时钟域转换:如果AXI和AHB工作在不同时钟域,桥内需要加入异步FIFO进行同步。
总结与复盘
AMBA总线家族的设计哲学是"合适的工具用于合适的场景":AXI提供极致的性能和灵活性,适用于数据通路密集的模块;AHB提供平衡的性能和复杂度,适用于中等带宽需求;APB以极简的协议换取最低的功耗和面积,适用于控制平面。在SoC架构设计中,建议采用"AXI为主干、AHB为分支、APB为叶节点"的分层结构,并通过桥接器实现协议转换。同时,需要关注协议转换带来的额外延迟和面积开销,在性能敏感路径上尽量避免桥接。