APB总线协议是一种低成本接口,为最低功耗做了优化,并减少接口复杂度。APB不支持pipeline,是一种简单的同步协议,每次传输最少消耗2个时钟周期。

1.接口定义(Signal Descriptions)

Signal Source Width Description
PCLK Clock 1 时钟信号
PRESETn System bus reset 1 复位信号
PADDR Requester ADDR_WIDTH 读写地址信号,最高32bit位宽
PSELx Requester 1 片选信号
PWRITE Requester 1 方向信号,1:写,0:读
PENABLE Requester 1 使能信号,声明传输的第二个周期
PWDATA Requester DATA_WIDTH 写数据信号,支持8、16、32bit位宽
PSTRB Requester DATA_WIDTH/8 总线byte选择信号,高有效
PREADY Completer 1 表明completer将会完成一次传输
PRDATA Completer DATA_WIDTH 读数据信号,支持8、16、32bit位宽
PSLVERR Completer 1 错误信号,表明一次传输错误
PPROT Requester 3 保护等级信号
PNSE Requester 1 保护等级的扩展信号
PWAKEUP Requester 1 唤醒信号
PAUSER Requester USER_REQ_WIDTH 用户请求属性,最高128bits
PWUSER Requester USER_DATA_WIDTH 用户写数据属性,最高DATA_WIDTH/2
PRUSER Completer USER_DATA_WIDTH 用户读数据属性,最高DATA_WIDTH/2
PBUSER Completer USER_RESP_WIDTH 用户回应属性,最高16bits

以上信号可以分为以下几类:

首先,以下几类可以完成核心的读写功能:

  • 全局信号:PCLK,PRESETn;
  • 传输第一周期核心信号:PADDR,PSELx,PWRITE,PWDATA,PRDATA;
  • 传输第二周期核心信号:PENABLE,PREADY;

此外,还存在一些读写辅助信号:

  • 传输第一周期辅助信号:PSTRB,PPROT,PNST,PWAKEUP​​​
  • 传输第二周期辅助信号:PSLVERR

最后,存在一些非必要用户定义信号:

  • 用户自定义信号:PAUSER,PWUSER,PRUSER,PBUSER

2.读写时序(Transfer)

1) write transfer with no wait states

T1时刻:requester发起写请求,需要将要写的数据和地址输入到总线,拉高PWRITE指明数据方向,以及通过PSEL选择数据接收方。

T2时刻:requester在transfer的第二个时钟周期开始拉高PENABLE;同时,completer由于检测到PSEL和PWRITE,拉高PREADY信号回应requester的写请求。

T3时刻:completer检测到PENABLE信号为高,完成数据接收,并将PREADY拉低;同时,requester检测到PREADY为高,认定此次write操作已经完成,最终将上述所有信号拉低,完成一次transfer。

2) write transfer with wait states

T1时刻:同上。

T2时刻:requester在transfer的第二个时钟周期开始拉高PENABLE;同时,completer由于检测到PSEL和PWRITE,本应拉高PREADY信号回应requester的写请求,但由于本身未处于IDLE状态,无法完成数据接收,所以继续保持PREADY信号为低,以让requester保持本次transfer等待后续处理。

T3时刻:completer继续保持PREADY为低;同时,requester检测到PREADY为低,等待此次write操作完成,并保持上述信号。

T4时刻:completer进入IDLE状态,拉高PREADY;同时,requester仍检测到PREADY为低,等待此次write操作完成,并保持上述信号。

T5时刻:completer完成数据接收,拉低PREADY;同时,requester终于检测到PREADY为高,认为此次write操作已经完成,对上述信号进行释放。

以下信号需要在PREADY拉低的过程中保持不变:

  • Address signal, PADDR
  • Direction signal, PWRITE
  • Select signal, PSELx
  • Enable signal, PENABLE
  • Write data signal, PWDATA
  • Write strobe signal, PSTRB
  • Protection type signal, PPROT
  • User request attribute, PAUSER
  • User write data attribute, PWUSER
3) read transfer with no wait states

T1时刻:requester发起写请求,需要将要读的地址输入到总线,拉低PWRITE指明数据方向,并通过PSEL选择数据接收方。

T2时刻:requester在transfer的第二个时钟周期开始拉高PENABLE;同时,completer由于检测到PSEL和PWRITE,拉高PREADY信号并将读数据驱动到总线上,回应requester的读请求。

T3时刻:completer检测到PENABLE信号为高,认为此次read操作已经完成,所以将PREADY拉低;同时,requester检测到PREADY为高,同样认定此次read操作已经完成,最终将上述所有信号拉低,完成本次transfer。

4) read transfer with wait states

T1时刻:requester发起写请求,需要将要读的地址输入到总线,拉低PWRITE指明数据方向,并通过PSEL选择数据接收方。

T2时刻:requester在transfer的第二个时钟周期开始拉高PENABLE;同时,completer由于检测到PSEL和PWRITE,但由于此时处于非IDLE状态,所以需要拉低PREADY信号,以阻塞本次操作。

T3时刻:completer由于处于非IDLE状态,需要继续拉低PREADY信号;而completer在检测到PREADY信号为低时,需要保持上述信号不变,继续等待completer处于ready状态。

T4时刻:completer在退出IDLE状态后,拉高PREADY并将读数据驱动到PRDATA;requester则继续等待PREADY信号拉高。

T5时刻:completer检测到PENABLE信号为高,认为此次read操作已经完成,所以将PREADY拉低;同时,requester检测到PREADY为高,同样认定此次read操作已经完成,最终将上述所有信号拉低,完成本次transfer。

以下信号需要在PREADY信号拉低过程中保持不变:

  • Address signal, PADDR
  • Direction signal, PWRITE
  • Select signal, PSEL
  • Enable signal, PENABLE
  • Protection signal, PPROT
  • User signal, PAUSER

3.操作状态(Operating States)

IDLE :transfer的默认状态;

SETUP : 当一个transfer的请求发起时,状态机将从IDEL跳转到SETUP状态。该状态只会维持一个时钟周期,然后跳转到ACCESS状态。在本状态下,将通过拉高对应的PSELx来选择completer,并保持PENABLE为0。

ACCESS:在该状态下,requester将检测PREADY的情况,并拉高PENABLE。如果PREADY为0,则保持在该状态下;如果PREADY为1,则根据是否具有下一笔transfer到来,而选择进入SETUP或者IDLE状态。

  • PADDR •
  • PPROT •
  • PWRITE •
  • PWDATA, only for write transactions •
  • PSTRB •
  • PAUSER •
  • PWUSER

4.其它功能

1) write strobe

PSTRB支持写数据总线上的稀疏数据传输。每个PSTRB对应于写数据总线的1个字节。当断言为高时,PSTRB表示写数据总线的相应字节通道包含有效信息。

PSTRB[n] = PWDATA[(8n + 7):(8n)]

PSTRB是一个可选信号,所以并不是所有的requesterer和completer都具有这个信号,以下为该信号的兼容情况:

2) Error Respones

PSLVERR可用于指示APB读写传输上的错误情况,该信号由completer进行驱动,但completer并没有规定必须支持该功能。

PSLVERR仅在APB传输的最后一个周期内有效,即PSEL、PENABLE和PREADY都为高时,同PREADY信号同时拉高。当PSEL、PENABLE或PREADY为低时,PSLVERR被推荐设置为0,但 并没有硬性要求。

当一个write transfer过程中,requester收到一个error,也并不一定表明外围设备的寄存器没有被写入。

当一个read transfer过程中,requester收到一个error,可能仍然会使用总线上的数据,且无法阻止总线上的读数据。

当APB与AXI或AHB接口进行连接时,需要一定映射关系:

        APB的PSLVERR,可以连接到AXI的读命令RRESP和写命令BRESP;

        APB的PSLVERR,可以连接到AHB的读写命令HRESP;       

3)Protection unit support 

复杂的系统设计中,需要为系统内的设备和互联提供保护,来防止出现非法的数据传输。而APB总线使用PPROT[2:0],来实现以上保护功能。

PPROT Protection Description Comments
PPROT[0] Normal or Privileged Privileged具有访问的更高优先级

LOW - Normal

HIGH - Privileged

PPROT[1] Secure or Non-secure 用于区分处理模式

LOW - Secure

HIGH - Non-secure

PPROT[2] Data or Instruction 声明该transaction为数据或指令

LOW - DATA

HIGH - Instruction

兼容性:

PPROT Completer: signal not present Completer: signal present
Requester: signal not present Compatible

Not Compatible

保护信号需要连接固定信号

Requester: signal present

Compatible

保护信号可以被忽略

Compatible
4)User signaling

APB协议的用户在设计过程中,有可能会面临需要一些额外的接口信号,来实现APB总线之外的功能。User signals就是用来解决这些问题,所以这些信号的用途并没有定义。但是在通常上,这些用户接口并不推荐使用,因为不同的组件可能定义不同功能,这就导致了系统兼容性问题。

APB的一些其它功能,可以参考ARM官网的spec。以上如有理解错误,欢迎指正!
​​​​

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐