数字IC设计入门篇:APB总线协议学习心得

声明:本文章是本人学习AMBA  APB协议的一些个人理解,仅用于学习交流之用。本人学习APB协议时参考的是ARM公司官方的APB协议技术规范文档(编号:IHI0024D)。受限于本人的知识水平,本文章可能缺漏和错误之处,欢迎大家批评指正。

1. APB 协议介绍

        APB协议属于AMBA总线协议的一种,是一种低成本,低功耗,结构简单的低速通信总线,通常通过APB桥与AHB总线或者AXI总线连接构成芯片的通信总线系统。APB总线通信有主从设备之分,APB主设备通常是APB桥,从设备通常是一些低速的外设,例如:RTC,TIMER,WDT等。

        APB总线是一种低速的,同步总线,不支持流水线操作,每次传输都至少要花费两个时钟周期,第一个周期为设置周期,第二个或者之后几个周期为数据周期。在设置周期当中,APB总线进行地址的传输操作;在数据周期当中,APB总线执行数据的读写操作。

2. APB总线的端口信号描述

        在介绍APB端口信号之前,先来看一下图1所示的端口信号连接图以便更好地理解APB的端口信号。按照参考文档中的描述,我把APB主设备称为“Requester”,把从设备称为“Completer”。除了PCLK和PRESETn信号是由系统提供的时钟复位信号,其余信号都用于APB主从设备之间的通信。

图1 APB端口信号连接图

        下面表1罗列了各种信号及其功能描述。没有标颜色的是APB3.0支持的端口信号,标蓝的是APB4.0新增的端口信号,标黄的是APB5.0新增的端口信号:

        在APB4.0协议中,新增了PSTRB信号和PPROT信号。PSTRB信号是写数据有效位指示信号,用于指示哪些数据位有效,通常用在数据位宽与总线位宽不对齐的情况。PPROT信号用来指示数据传输的优先级和安全传输。一般在公司当中只用到APB4.0协议。

        在APB5.0协议当中新增了一系列的用户自定义数据信号,但是即使是在ARM公司官方的技术文档当中也并不建议大家使用这些信号因为没有相应的功能函数支持这些信号。

表1:APB端口信号表
信号名称信号源信号位宽描述
PCLKClock1APB总线的时钟信号
PRESETnSystem bus reset1APB总线的复位信号,低电平有效,通常与系统总线的reset信号连接在一起。
PADDRRequesterADDR_WIDTH

APB的地址总线,位宽可以自定义,最大为32比特

PSEL

Requester

1

APB从设备片选信号,用于使能相应的从设备

PENABLE

Requester

1

APB的使能信号,用于指示第二个或者之后几个周期的信号传输

PWRITE

Requester

1

APB读写信号,用于指示一次传输的类型,高写低读

PWDATA

Requester

DATA_WIDTH

APB写数据总线,用于写入数据,位宽可选,最大为32比特

PREADY

Completer

1

从设备的ready信号,可用来拓展信号传输

PRDATA

Completer

DATA_WIDTH

APB读数据总线,用于读出数据,位宽可选,最大为32比特

PSLVERR

Completer

1

APB错误指示信号,用来指示传输错误

PSTRB

Requester

DATA_WIDTH/8

APB写数据有效位指示信号

PPROT

Requester

3

APB保护信号,用于指示优先传输和安全传输

PWAKEUP

Requester

1

用于指示与APB端口有关的所有操作

PAUSER

Requester

USER_REQ_WIDTH

用户自定义的请求信号

PWUSER

Requester

USER_DATA_WIDTH

用户自定义的写数据总线

PRUSER

Completer

USER_DATA_WIDTH

用户自定义的读数据总线

PBUSER

Completer

USER_RESP_WIDTH

用户自定义的响应信号总线

3. 信号传输

        APB总线的信号传输可分为写传输读传输,由PWRITE信号来指示,当PWRITE信号为1时表明这是一次写传输,当PWRITE信号为0时表明这是一次读传输。写传输和读传输分别有独立的数据总线,但是这两种传输不能同时进行。

        写传输可分为无等待的写传输和有等待的写传输。读传输也分为无等待的读传输和有等待的读传输。是否有等待由PREADY信号指示。

        一次无等待的写传输时序图如图2所示,T1时刻到T2时刻之间为设置周期,T2到T3时刻之间是数据周期,由于这是无等待的写传输,所以只需要2个周期就可以完成传输。T1时刻后PSEL信号变为高电平表示传输开始,PWRITE为1表示这是一次写传输,PENABLE信号在第一个周期为0表示数据还未写入,但是在这一周期APB从设备需要将地址信号读取进来,即在T2时刻将地址读取进来。第二个周期PREADY信号为1说明从设备准备好接收数据,T3时刻数据正确写入,一次无等待写传输结束。

图2:一次无等待的写传输时序图

        一次有等待写传输时序图如图3所示,T1到T2时刻之间为设置周期,T2到T5时刻之间为3个数据周期,设置周期的信号波形与无等待传输时一致,不同的是在第二个周期和第三个PREADY信号为0,从设备没有准备好接收数据,因此需要将数据信号拓展2个周期,其余信号保持不变。在第四个周期,PREADY信号变为1,数据在T5时刻正确写入,传输结束,本次传输花费了4个时钟周期。值得注意的是,PREADY可以在多个周期持续为0,这样就需要花费更多的时钟周期完成传输。 

图3:一次有等待的写传输时序图

         一次无等待的读传输时序图如图4所示,T1时刻到T2时刻之间为设置周期,T2到T3时刻之间是数据周期,由于这是无等待的读传输,所以只需要2个周期就可以完成传输。T1时刻后PSEL信号变为高电平表示传输开始,PWRITE为0表示这是一次读传输,PENABLE信号在第一个周期为0表示数据还未读出。第二个周期PREADY信号为1说明从设备准备好发送数据,T3时刻数据正确读出,一次读传输结束。

图4:一次无等待的读传输时序图

         一次有等待读传输时序图如图5所示,T1到T2时刻之间为设置周期,T2到T5时刻之间为3个数据周期,设置周期的信号波形与无等待传输时一致,不同的是在第二个周期和第三个周期PREADY信号为0,从设备没有准备好发送数据,因此需要等待2个周期,其余信号保持不变。在第四个周期,PREADY信号变为1,数据在T5时刻正确读出,传输结束,本次传输花费了4个时钟周期。

图5:一次有等待的读传输时序图

         有时候数据传输可能会发生错误,这时就需要PSLVERR信号来指示错误发生。一次有错误的写传输时序图如图6所示,这是一次有等待的写传输,共花费了3个时钟周期,但是在最后一个周期PSLVERR信号为1说明此次传输发生了错误。

图6: 一次有错误的写传输时序图

         一次有错误的读传输时序图如图7所示,这是一次有等待的读传输,共花费了3个时钟周期,但是在最后一个周期PSLVERR信号为1说明此次传输发生了错误,数据没有被正确读出。

图7: 一次有错误的读传输时序图

 4. 状态机

        APB的状态转换图如图8所示,没有传输发生时APB总线处于IDLE状态,当有传输发生时,跳到SETUP状态执行设置周期所需要执行的操作,SETUP状态结束后跳到ACCESS状态执行数据周期所需要执行的操作。如果PREADY信号为0则将一直维持在ACCESS状态直到PREADY信号为1。PREADY信号变为1后,如果接下来还有传输则跳回SETUP状态开始进行下一次传输,否则跳回IDLE状态。

图8:APB状态转换图

 5. 端口校验保护

        APB可以通过一些校验信号来确保端口信号的正确传输,APB的校验信号罗列如下,原则上1位校验信号可覆盖需要校验的端口信号的8位,但是有些端口信号位宽不是8的倍数,这就允许校验信号的最高位覆盖端口信号高有效位的数量可以少于8。校验信号只在APB5.0协议才支持。

表2:APB的校验信号

校验信号

覆盖的端口信号

位宽

校验使能

PADDRCHK

PADDR

ADDR_WIDTH/8

PSEL

PCTRLCHK

PPROT,PWRITE

1

PSEL

PSELxCHK

PSELx

1

PRESETn

PENABLECHK

PENABLE

1

PSEL

PWDATACHK

PWDATA

DATA_WIDTH/8

PSEL&PWRITE

PSTRBCHK

PSTRB

1

PSEL&PWRITE

PREADYCHK

PREADY

1

PSEL&PENABLE

PRDATACHK

PRDATA

DATA_WIDTH/8

PSEL&PENABLE&PREADY&!PWRITE

PSLVERRCHK

PSLVERR

1

PSEL&PENABLE&PREADY

PWAKEUPCHK

PWAKEUP

1

PRESETn

PAUSERCHK

PAUSER

USER_REQ_WIDTH/8

PSEL

PWUSERCHK

PWUSER

USER_DATA_WIDTH/8

PSEL&PWRITE

PRUSERCHK

PRUSER

USER_DATA_WIDTH/8

PSEL&PENABLE&PREADY&!PWRITE

PBUSERCHK

PBUSER

USER_RESP_WIDTH/8

PSEL&PENABLE&PREADY

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值