APB总线简单介绍

APB(Advance Peripheral Bus)是AMBA总线的一部分,从1998年第一版至今共有3个版本。

AMBA 2 APB Specfication:定义最基本的信号interface, 读写transfer, APB bridge, APB slave.

AMBA 3 APB:增加定义信号PREADY, PSLVERR来完成对wait state和Error reporting的功能。

AMBA 4 APB:增加定义信号PPROT, PSTRB来支持secure, supervisor和sparse data transfer的功能。

APB简介

APB(Advanced Peripheral Bus),外围总线。APB属于AMBA 3 协议系列,它提供了一个低功耗的接口, 并降低了接口的复杂性。 APB接口用在低带宽和不需要高性能总线的外围设备上。 APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。APB可以与AMBA高级高性能总线(AHB-Lite) 和AMBA 高级可扩展接口 (AXI)连接。

​APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。APB上的传输可以用状态图来说明。

Operating states

a) 系统初始化为IDLE状态,此时没有传输操作,也没有选中任何从模块。

b) 当有传输要进行时,PSELx=1,PENABLE=0,系统进入SETUP状态,并只会在SETUP 状态停留一个周期。当PCLK的下一个上升沿时到来时,系统进入ENABLE 状态。

c) 系统进入ENABLE状态时,维持之前在SETUP 状态的PADDR、PSEL、PWRITE不变,并将PENABLE置为1。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。

信号描述

下表给出了APB的信号。APB的支持最大32-bit的数据位宽。APB协议有两个独立的数据通道,读通道和写通道,由于APB的两个通道没有自己的handshake信号(vaild/ ready),因此两个通道不会同时使用。

APB signal descriptions

除了上表的信号外,APB还有两个信号接口:

PPROT: 保护类型,分为 normal, privileged, secure, data/instruction 访问。

PSTRRB: 写选通信号,指示哪个字节是有效的数据,PSTRB与PWDATA之间的关系为PSTRB[n] <--> PWDATA[(8n+7):(8n)]​

传输

写传输

写传输包括两种类型:无等待状态和有等待状态

无等待状态

下图显示了一个基本的无等待状态的写传输。

Write transfer with no wait states

地址、写入数据、写入信号和选择信号都在时钟上升沿后改变。第一个时钟周期叫做Setup phase。 下一个时钟沿后使能信号PENABLE被置位,表示Access phase就位。地址、数据和控制信号在Access phase期间有效。传输在该周期后结束。使能信号PENABLE, 在传输结束后清空。 选择信号PSELx同样被置低,除非紧接着下一传输开始。

有等待状态

下图展示了 PREADY 信号是如何扩展了从器件的传输。

Write transfer with wait states

​在Access phase期间,当PENABLE为高,传输可以通过拉低PREADY来扩展传输。下述信号仍旧不变:• 地址: PADDR• 写信号: PWRITE• 选择信号: PSEL• 使能信号:PENABLE• 写入的数据: PWDATA.

 

读传输

读传输包括以下两种类型:无等待状态和有等待状态

​无等待状态

 

下图显示了一个读传输的无等待状态的时序图。从器件必须在读传输结束前提供数据。​

Read transfer with no wait states

有等待状态

下图显示了信号是如何扩展传输的。如果在Access phase期间PREADY信号拉低,则传输被扩展。但下述信号不变:• 地址: PADDR• 写信号: PWRITE• 选择信号: PSEL• 使能信号: PENABLE.

图中显示了如何使用PREADY信号来添加两个周期,你也可以添加数个周期。

 

 

Read transfer with wait states

​错误响应

使用PSLVERR来指示APB传输错误。当PSELPENABLE以及PREADY 都为高时,PSLVERR才在最后一个周期进行判断。 当任何一个PSELPENABLE或者PREADY为低时,你可以将PSLVERR拉低,这是推荐,并不是强制要求。 收到一个错误后,可能或不可能改变外围器件的状态。 APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低。

写传输失败的例子。

Example failing write transfer

读传输同样可以使用错误响应,下图便是一个错误响应的例子

 

PSLVERR映射:

AXI桥接到APB: AXI的RRESP/BRESP = APB的SLVERR(read: PSLVERR -> RRESP[1], write: PSLVERR -> BRESP[1])

AHB桥接到APBPSLVERR被映射到HRESP = ERROR(PSLVERR -> HRESP[0])

 

操作状态

下图给出了 APB的操作流程

State diagram

​状态机按照下面的状态执行:

IDLE 这是默认的APB状态

SETUP 当传输被请求时,总线进入SETUP状态,选择信号 PSELx,被置位。总线仅在SETUP 状态停留一个时钟周期,并在下一个时钟周期进入ACCESS状态

ACCESS 使能信号PENABLE, 在ACCESS状态中置位。在传输从SETUP状态到ACCESS状态转变的过程中address, write, select和write data信号必须保持不变。从ACCESS状态退出,由从器件的PREADY 信号控制:a) 如果PREADY 为低,保持ACCESS状态。b)如果PREADY 为高,则退出ACCESS状态,如果此时没有其它传输请求,总线返回IDLE状态,否则进入SETUP状态。

转载于:https://www.cnblogs.com/gujiangtaoFuture/articles/10137309.html

### APB总线协议及芯片设计中的应用 APB(Advanced Peripheral Bus)是AMBA(Advanced Microcontroller Bus Architecture)的一部分,主要用于低速外设的连接。其设计目标是简化低功耗、低性能需求的外设接口[^1]。 #### 1. APB总线的基本概念 APB是一种单主设备(Single Master)总线结构,其中唯一的主设备是APB桥(APB Bridge)。APB桥负责将来自高速总线(如AHB或AXI)的信号转换为适合低速外设使用的信号格式[^1]。由于APB总线的设计目标是支持低速外设,因此它不需要复杂的仲裁机制和高性能传输能力。 #### 2. APB总线的工作原理 APB总线的工作基于一个简单的读写协议,主要包括以下几个阶段: - **Setup Phase**:在这一阶段,主设备(APB桥)向从设备发送地址和控制信号。 - **Access Phase**:在这一阶段,数据被传输到从设备(写操作)或从从设备读取数据(读操作)。 APB总线的时序相对简单,通常只需要一个时钟周期完成一次访问。这种设计减少了硬件复杂度,并降低了功耗。 #### 3. APB总线在芯片设计中的应用 在现代SoC(System on Chip)设计中,APB总线广泛用于连接各种低速外设,例如UART、I2C控制器、SPI控制器、GPIO模块等。这些外设通常对带宽要求较低,但需要稳定的接口以确保可靠通信[^1]。 通过使用APB总线,SoC设计可以显著降低系统复杂性,同时优化功耗。此外,由于APB总线的架构简单,它还可以减少设计和验证的时间成本。 #### 4. 示例代码:APB总线简单仿真模型 以下是一个简单的Verilog代码示例,展示如何实现一个基本的APB从设备: ```verilog module apb_slave ( input wire clk, input wire reset_n, input wire [31:0] paddr, input wire penable, input wire psel, input wire pwrite, input wire [31:0] pwdata, output reg [31:0] prdata, output reg pready ); always @(posedge clk or negedge reset_n) begin if (!reset_n) begin pready <= 1'b0; prdata <= 32'h0; end else begin if (psel && !penable) begin pready <= 1'b0; // Setup phase end else if (psel && penable) begin if (pwrite) begin // Write operation // Handle write data based on paddr end else begin // Read operation prdata <= 32'hDEADBEEF; // Example read data end pready <= 1'b1; // Access phase complete end end end endmodule ``` 此代码展示了APB从设备的基本行为,包括地址解码、读写操作以及`pready`信号的生成。 ### 总结 APB总线作为AMBA架构的一部分,以其简单性和低功耗特性,在现代SoC设计中扮演着重要角色。通过APB桥与高速总线的连接,APB总线能够高效地管理低速外设,从而优化系统的整体性能和功耗。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值