注:这里还是以APB 3协议为基础介绍。截止2021年8月,目前APB4进行更新,新增了两个信号(PPROT 和 PSTRB),APB5版本也做了一些小的变动。
简介
AMBA高级处理器总线架构,不同的速率要求构成了高性能SOC设计的通信标准:
- AHB高级高性能总线
- APB高级外围总线
- AXI高级可拓展接口
AHB:主要是针对高速率、高频宽及快速系统模块所设计的总线,可以连接在如微处理器、芯片上或芯片外的内存模块和DMA等高效率总线;
APB:主要应用在低速且低频率的外围,可针对外围设备做功率消耗及复杂接口的最佳化;APB在AHB和低带宽的外围设备之间提供了通信桥梁,所以APB是AHB的耳机拓展总线;
AXI:高速度、高带宽、管道化互联、单向通道,只需要首地址、读写并行、支持乱序、支持非对齐操作、
APB的特点:
- 主要应用在低带宽的外设上,如UART、I2C,它的架构不像AHB总线是多主设备的结构;
- APB总线的唯一主设备是APB桥(与AXI或AHB相连),因此不需要仲裁一些request、grant信号。
- APB协议不是流水操作,两个周期完成一次读或写的操作;
- APB的支持最大32-bit的数据位宽。
- APB有两个独立的数据通道:读通道和写通道。由于APB的两个通道没有自己的握手信号(vaild/ ready),因此两个通道不会同时使用,即不支持读写并行操作 。
- APB 3根据PREADY信号是否拉高,决定传输是否具有等待周期。
注意:
- 主设备:APB Bridge。锁存所有的地址、数据和控制信号;进行二级译码来产生APB Slave选择信号
- 从设备:其他模块都是APB Slave,比如I2C、URAT等
基本信号
信号 | 来源 | 描述 |
---|---|---|
PCLK | 时钟源 | 时钟信号 |
PRESETN | 系统总线 | APB接口异步复位信号,但必须等待PCLK的上升沿 |
PADDR | APB桥 (master) | 地址线 |
PWRITE | APB桥(master) | 读写操作线,为1时写,为0时读; |
PSELx | APB桥的译码器 | APB外围片选信号,抬高后进入SETUP状态,检查地址和控制信号,至少保持2个时钟周期 |
PENABLE | APB桥 (master) | 允许读写操作信号线; |
PWDATA | APB桥(master) | master通过PWDATA线将数据写到slave,数据最大支持32bit |
PRDATA | Slave | master通过PRDATA线将数据从slave读取回来,数据最大支持32bit |
PREADY | Slave | APB slave的响应信号,使能信号PENABLE,会 在ACCESS状态中置位 |
PSLVERR | Slave | 若拉高,则表示APB数据传输失败。 APB的外围设备可以不使用这根线 |
注意:
- APB 3版本增加了PREADY和PSLVERR(即slave error)两个信号控制;
- APB 4版本增加了PPORT(protect singal)和PSTRB( strobe signal)信号;
具体可以看文档中的描述:
APB桥将系统总线传送转换成APB方式的传送,它具备一些这些功能:
-
锁存地址:在传送过程中保持地址有效,锁存读写控制信号;
-
对锁存的地址进行译码,产生APB Slave选择信号(PSELx),在传送过程中只有一个选择信号可以被激活。也就是选择出唯一的一个APB从设备以进行读写动作;
-
产生时序选通信号PENABLE作为数据传递时的启动信号,但是注意APB3是需要PENABLE为高的同时PREADY也为高,才能开始传输。
-
APB 没有仲裁器及复杂的译码电路,APB 进行写操作时,从设备相应PREADY信号可以决定:
- 在 PCLK 上升沿触发,且 PSEL 为高时锁存数据
- 在 PENABLE 上升沿,且 PSEL 为高时锁存数据
-
写操作时,PADDR信号决定了哪个寄存器会被写操作更新;
-
在读操作(PWRITE =0)的时候,数据可以在 PSELx 和 PENABLE为高的时候被送到总线上,而PADDR 用于决定哪个寄存器会被读操作更新。
传输时序图
传输状态如下:
- 系统初始化为IDLE状态,此时没有传输操作,也没有选中任何模块;
- 当有传输要进行时,PSELx 拉高,但PENABLE为低,系统进入SETUP状态,并且会在SETUP状态停留一个周期。
- 当PCLK的下一个上升沿到来时,系统会进入ACCESS状态;
- 系统进入ENABLE状态时,SETUP状态的PADDR、PSELx、PWRITE不变,将PENABLE信号拉高。传输只会在ACCESS状态维持一个周期。
- 之后若是还有传输进行,就进入SETUP状态;若没有,则进入IDLE 状态。
APB3协议增加了PREADY信号控制:
在传输从SETUP状态到ACCESS状态转变的过程中address, write, select和write data信号必须保持不变。从ACCESS状态退出,由从器件的PREADY 信号控制:
- PREADY 为低,保持ACCESS状态。
- PREADY 为高,则退出ACCESS状态,如果此时没有其它传输请求,总线返回IDLE状态,否则进入SETUP状态。
写操作
1. 没有等待的写操作
当进入access状态时,如果PREADY信号为高,那么传输就不会等待,会立即在PENABLE拉高的周期内完成传输。
注意:
- 写数据线(PWDATA)是同写信号线变化(PWRITE)的,而不是同PENABLE信号线变化(区别于读操作);
- PENABLE在写操作周期结束后,会同PSEL一同拉低;
- 协议规定,传输结束后PADDR和PWRITE信号线可以不用立即拉低,知道下一个传输到来再改变,这样可以省点。
2. 有等待的写操作
pready 信号可以延长传输的周期。当总线进入ACCESS状态时,也就是PENABLE拉高时,PREADY为低,那么此时传输的周期会拉长。直到PENABLE拉高,在一个周期时间内完成传输。
注意:
在ACCESS状态下,当PREADY为低,此时其他信号线(addr、write、sel、enable和wdata)要保持不变。
读操作
1.无等待的读
同上面写操作一样,当总线为ACCESS状态时,如果PREADY保持为高,传输会立即进行,在一个时钟周期内完成传输。
注意:
- 读数据信号线是在PENABLE信号线跳变后,在短暂的延时后跳变的。所以,注意在验证APB总线协议时,读操作在PENABLE跳变后,加上短暂的延时(如100ps),再读取数据;
2.有等待的读
同有等待的写操作一样,直到PREADY拉高,才能开始传输,并在一个时钟周期内完成传输。