高级外围总线 5.0(Advanced Peripheral Bus, APB)

本文深入介绍了高级外围总线5.0(APB)协议,包括其功能、架构和时序。APB是用于低带宽、低速外设的简单同步接口,通常与AHB总线配合使用。文章详细解析了写传输和读传输的时序,如ACCESS phase的多种情况,以及写入选通和错误处理机制。


主要是对APB总线进行介绍

《IHI0024D_amba_apb5_protocol_spec》
APB总线协议
AHB APB 简单通讯架构 代码 APB_Bridge
APB桥时序
设计AHB2APB同步桥

1. 功能介绍

APB协议是一种低成本的接口,优化了功耗和接口复杂度。APB接口不是流水线操作,它是一个简单的同步协议,至少需要两个周期才能完成读或写,控制逻辑简单。

通信为一主多从模式,其中Slave 主要为在低带宽、低速、低功率的外设,例如UART、I2C,可针对外围设备作功率消耗及复杂接口的最佳化。

而Master经常是与高级高性能总线(Advanced High-performance Bus, AHB)构成的AHB2APB桥接器,而AHB又可连接多个aph master,如下图所示

在这里插入图片描述

也可将多个APB外设连接到高级可拓展接口(Advanced eXtensible Interface, AXI)内存系统。

2. 架构

APB常见接口如下

Source Signal Width(bits) Description
CLOCKPCLK1时钟
System bus resetPRESETn1低电平复位
Source Signal Width(bits) Description
MasterPADDRADDR_WIDTH最大32bit。允许非对齐地址,但结果不可预知
PSELx1拉高表示标号x的Completer被选中,要与其进行数据传输
PENABLE1表明进入APB的ENABLE状态,开始数据传输
PWRITE1高表示写,低表示读
PWDATADATA_WIDTH由APB桥接器Requester发起,可为8、16、32bits
PSTRBDATA_WIDTH/8表明PWDATA中哪个byte有效,用于稀疏传输
Source Signal Width(bits) Description
SlavePREADY1可延长APB传输的clk拍数
PRDATADATA_WIDTH可为8、16、32bits
PSLVERR1表明传输出现错误

参数描述

Parameter Units Description
ADDR_WIDTHbit地址宽度
DATA_WIDTHbit数据宽度

3. 时序

APB就已经给出每次传输的状态机,APB将传输过程分为了3个状态,IDLE、SETUP和ACCESS,如下图所示

在这里插入图片描述
IDLE:默认状态

SETUP:当requester需要数据传输时,会驱动某个Completer对应的PSELx拉高,PENABLE置0。且SETUP状态只持续一拍,下一拍必进入ACCESS状态

ACCESS:会驱动PENABLE拉高,注意要从SETUP到ACCESS的转换时保证以下信号不会发生变化

PADDR, PPROT, PWRITE, PWDATA, PSTRB,PAUSER, PWUSER

之后会采样Completer.PREAEDY信号,如果PREADY为低,则ACCESS状态持续一拍。 PREADY拉高,若Requester传送数据则再次进入SETUP状态,否则回到IDLE

详细时序可以看下节读写时序

3.1. 写传输

如下图所示,posedge PCLK为采样时刻,并画出驱动时刻与posedge PCLK之间的delta cycle

在这里插入图片描述
T0~T1:IDLE状态

T1~T2:为SETUP phase。T1时刻,requester要写数据,因此分别驱动了PADDR、PWDATA、PWRITE拉高、选择的completer对应的PSEL拉高、PENABLE拉低(表示下一拍实施写入)

T2~T3:为ACCESS phase。T2时刻,requester采集到有PSEL拉高、PENABLE拉低,因此驱动PENABLE拉高,表示该数据有效。

个人猜测这个PENABLE就类似于常说与data一起传输的valid信号,completer检测到PENABLE为高才认为PDATA数据有效

注意T2时刻,completer会采样到自己的PSEL拉高了,就明白requester要给自己写数据了,因此驱动PREADY拉高

T3~T4:退出ACCESS phase。T3时刻,requester采样到PREADY拉高知道completer可以接受数据,同时completer采样到PADDR、PDATA和PENABLE,将数据写入自身。

ACCESS phase 多于一个周期

ACCESS phase可能不会只持续一个周期,这个取决于completer的PREADY信号,如下图

在这里插入图片描述

T2~T3:依然为SETUP phase。T2时刻,completer采集到PSEL拉高了但自己并不能接收数据,就会使PREADY拉低而不是拉高。

此时requester就会一直等待completer的PREADY信号,此时以下信号将保持不变

PADDR, PPROT, PWRITE, PWDATA, PSTRB, PAUSER, PWUSER, PSELx, PENABLE, PAUSER, PWUSER

T4~T5:直到T4时刻completer才拉高PREADY

T5~T6:为ACCESS phase。T5时刻完成数据写入

写入选通 Requester.PSTRB

使用PSTRB对PWDATA的数据进行选通,即决定PWDATA中哪个byte能被写入。

注意到PSTRB的大小是PWDATA大小/8,所以PSTRB[n] == 1 则代表 PWDATA[(8n+7):8n]的数据有效,看图

在这里插入图片描述

读传输时,PSTRB必须全位拉低

写错误 Completer.PSLVERR

表示completer认为写传输错误,注意并不是写入之后completer才反馈写错误。

看时序图

在这里插入图片描述

T3~T4:T3时刻,completer可以接受数据,驱动PREADY。但是T3时刻,completer可能是采集PADDR、PWDATA等信号出现问题,所以认为写传输有错故驱动PSLVERR为高

T4~T5:T4时刻,requester采样到PENABLE、PSEL和PREADY均拉高,此时才会查看PSLVERR的值,发现其为高,知道写传输出错。

注意PSLVERR只是一个信号,至于completer如何针对该信号进行处理取决于它的内部逻辑

3.2. 读传输

读传输与写传输的时序类似,不多赘述

在这里插入图片描述

completer的PREADY拉低的情况

在这里插入图片描述

读错误 Completer.PSLVERR

读传输也可能出现错误,表明无可读数据

在这里插入图片描述

4. 接口设计

APB Slave端的RTL设计,包括寄存器读写、指令传输、FIFO读写

<think>我们正在讨论AdvancedPeripheral Bus(APB)协议,它是AMBA总线协议家族的一部分。APB是一种低功耗、低复杂度的接口,设计用于连接低带宽的外设。它通常与更高性能的总线(如AHB或AXI)桥接,以访问速度较慢的外围设备。根据引用[2]中提到的AMBA总线三部曲,我们知道AMBA包括AXI、AHB和APBAPB是最简单的一种,采用非流水线操作,通常用于寄存器访问。 APB协议的主要特点包括:-所有信号在时钟上升沿采样-每次传输至少需要两个时钟周期(SETUP和ACCESS阶段) -读写传输分开-不支持突发传输APB信号包括:- PCLK:时钟- PRESETn:复位(低有效)- PADDR:地址总线-PSELx:选择信号(表示当前传输是针对该从设备的)- PENABLE:使能信号(表示传输进入ACCESS阶段)- PWRITE:方向控制(1为写,0为读) -PWDATA:写数据总线(主到从)- PRDATA:读数据总线(从到主)- PREADY:从设备准备好信号(用于延长传输)- PSLVERR:错误指示(可选) 一个基本的APB写传输过程: 1. SETUP阶段:主设备设置PADDR、PWDATA、PWRITE=1(写)和PSELx有效。PENABLE为低。2.ACCESS阶段:主设备置位PENABLE,保持其他信号稳定。从设备在PENABLE和PSELx有效时,在时钟上升沿采样。如果从设备需要等待,则拉低PREADY,传输会延长ACCESS阶段直到PREADY为高。3.当PREADY为高时,传输完成,主设备可以开始下一次传输。 读传输类似,只是PWRITE=0,数据通过PRDATA返回。APB协议规范可以在ARM的官方网站上找到(需要注册下载)。目前最新的版本可能是APB5(属于AMBA5的一部分),但最广泛使用的是APB3(属于AMBA3)。使用场景:APB通常用于连接系统中的低速外设,如UART、SPI、I2C控制器、GPIO、定时器等。由于它简单,所以面积和功耗都很小。相关问题:1.APB协议有哪些版本?它们之间有什么区别?2.如何设计一个APB从设备接口? 3. APB协议中的PREADY和PSLVERR信号有什么作用?4.APB与其他AMBA总线(如AHB或AXI)如何桥接?5.在FPGA或ASIC设计中,如何验证APB模块?以上内容基于对AMBA总线的理解,特别是参考了引用[2]中关于AXI的讨论(因为APB是AMBA的一部分,所以背景知识相关)。具体规范请参考ARM官方文档。</think>### Advanced Peripheral Bus (APB) 协议详解 #### **1. APB协议概述** Advanced Peripheral Bus (APB) 是ARM AMBA总线协议家族中专为低功耗、低带宽外设设计的接口协议[^2]。作为AMBA中最简单的总线APB具有以下核心特性: - **非流水线操作**:每次传输至少需2个时钟周期(SETUP + ACCESS) - **低复杂度**:仅需少量控制信号(约10-15个信号) - **静态时序**:所有信号在时钟上升沿采样 - **典型应用**:连接UART、GPIO、定时器等低速外设 #### **2. 关键信号说明** APB接口信号可分为三类(以APB3为例): ```verilog // 系统信号 input PCLK, // 总线时钟 input PRESETn; // 异步复位(低有效) // 主设备→从设备 output [31:0] PADDR; // 地址总线 output PSEL; // 从设备选择 output PENABLE; // 传输使能 output PWRITE; // 写操作=1 / 读操作=0 output [31:0] PWDATA; // 写数据 // 从设备→主设备 input [31:0] PRDATA; // 读数据 input PREADY; // 传输完成标志 input PSLVERR; // 错误指示(可选) ``` #### **3. 传输时序(以写操作为例)** **Phase 1: SETUP阶段** - `T0`周期:主设备置位`PSEL`,设置`PADDR`/`PWDATA`,`PWRITE=1`,`PENABLE=0` - 从设备检测到`PSEL`有效后准备接收数据 **Phase 2: ACCESS阶段** - `T1`周期:主设备置位`PENABLE`,保持其他信号稳定 - 从设备在时钟上升沿采样`PWDATA`,并置位`PREADY` - 当`PREADY=1`且`PSEL=1`时传输完成 ```waveform CLK ___/‾‾‾\___/‾‾‾\___/‾‾‾\___ PADDR XXXXXXXXX< ADDR >XXXXXXXXXX PSEL ___________/‾‾‾‾‾‾‾\______ PENABLE _______________/‾‾‾‾‾\____ PWDATA XXXXXXXXX< DATA >XXXXXXXXX PREADY _________________/‾‾‾\____ ``` #### **4. APB版本演进** | 版本 | 关键改进 | 应用场景 | |--------|-----------------------------------|------------------------| | APB2 | 基础协议,无`PREADY`/`PSLVERR` | 极简外设 | | APB3 | 增加`PREADY`(流控制)`PSLVERR` | 主流低速外设 | | APB4 | 添加`PPROT`(保护位)`PDSTRB` | 安全敏感设备 | | APB5 | 支持64位地址/数据 | 高性能SoC | #### **5. 典型应用场景** 1. **寄存器配置** 通过APB访问外设控制寄存器,例如: $$ \text{UART\_CTRL[7:0]} = \text{PWDATA} \quad \text{when } \text{PADDR}=0\text{x4000\_0000} $$ 2. **状态监控** 读取外设状态寄存器,如: ```c uint32_t status = *((volatile uint32_t*)0x40001000); // APB读操作 ``` 3. **低功耗设计** 时钟门控技术:当无传输时关闭`PCLK`,实测功耗可降低40%[^1] #### **6. 设计实例:APB GPIO控制器** ```verilog module apb_gpio ( input PCLK, PRESETn, input PSEL, PENABLE, PWRITE, input [31:0] PADDR, PWDATA, output [31:0] PRDATA, output PREADY, inout [15:0] gpio_pins // 实际GPIO引脚 ); reg [15:0] data_reg; reg [15:0] dir_reg; // 0=input, 1=output always @(posedge PCLK or negedge PRESETn) if (!PRESETn) begin data_reg <= 16'h0; dir_reg <= 16'h0; end else if (PSEL && PENABLE && PWRITE) begin if (PADDR[2]) dir_reg <= PWDATA[15:0]; // 地址偏移0x04:方向寄存器 else data_reg <= PWDATA[15:0]; // 地址偏移0x00:数据寄存器 end assign PRDATA = (PADDR[2]) ? dir_reg : data_reg; assign PREADY = 1'b1; // 始终就绪 assign gpio_pins = dir_reg ? data_reg : 16'bz; endmodule ``` #### **7. 桥接高阶总线** APB通常通过**AXI-to-APB**或**AHB-to-APB**桥接器接入系统: ```mermaid graph LR A[AXI/AHB 主设备] --> B[AXI2APB Bridge] B --> C[APB UART] B --> D[APB Timer] B --> E[APB GPIO] ``` 桥接器实现协议转换: - 将AXI/AHB突发传输拆解为单次APB传输 - 地址映射到不同外设的`PSEL`信号 - 处理时钟域交叉(若需要)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值