APB

APB Usage

  • APB主要用于寄存器和外设(GPIO\TIMER\UART)的访问
  • CPU 通过AXI接口发出transaction访问外设,AXI-based interconnect接收到AXI transaction,然后通过DRAMC接收到axi访问的请求,访问DRAM数据
  • DRAMC中含有寄存器,其中寄存器的值是通过APB进行访问的,所以在AXI-based interconnect中有axi2apb_bridge,进行协议的转化
  • CPU访问DMA中的寄存器也是通过APB总线访问
  • ARM系统中有CoreSight debug&trace subsystem,调试模块,其于CPU的交互也是通过APB总线

The advantage of APB

  • 协议简单
  • 频率比较低,功耗低
  • 性能比较差

APB2 signals

APB Write Timing

APB read timing

  • 一次读写操作需要两个周期,penable为低的时候,处于setup stage,当penable为高的时候处于access stage

Question-1


如果没有penable,是否可以? 在设计APB slave的时候,只要使用psel的第二个时钟上升沿返回数据即可,不需要penable(前提是有clk存在)

Question-2

  • APB2只定义两个cycle的读写操作?两个cycle是否真的满足APB slave数据的响应?

  • 对于外设而言是由寄存器构成的,通过APB对于外设进行访问和操作,通常是通过寄存器进行的;通常先要program control register,使能外设;查询状态寄存器,状态寄存器满足条件,对相应的数据寄存器进行访问,对于寄存器操作,两个cycle就够了

  • 对于外设内部操作而言,对于如果两个周期没有完成操作,会反应到status register,对于CPU而言,会一直查询status register,状态寄存器满足条件,才能对于数据寄存器进行访问和操作,对于APB而言都是操作寄存器,所以两个cycle是足够的

  • 系统通过软件的方式不断查询外设的状态寄存器,查询外设是不是ready,如果ready执行下一步操作(软件的操作)

AHB3 signal

APB3 write cycle with wait states

APB3 read cycle with slave error


  • 当PSEL、PENABLE或PREADY为低电平时,建议但不是必须将PSLVERR驱动为低电平。
  • 读传输也可能以错误响应结束,这表明没有有效的读数据可用。上图显示读取传输完成,并有一个错误响应。

APB3 write error

APB4 signals



为什么需要APB4

  • cpu可以工作在user mode下或者是privilege mode(IRQ\FIQ\Supervisor\System)下
  • 对于支持trustzone的cpu而言,cpu可以工作在Normal World下,也可以工作在Secure World下,对于CPU而言,不同secure状态下,发送出去的transaction是不同的
  • user mode下发出的transaction就是normal access
  • IRQ\FIQ mode发出的是privilege access

  • 写数据总线的每8位有一个PSTRB,因此PSTRB[n]对应于PWDATA[(8n + 7):(8n)]**

APB3和APB4 compatibility

  • 如果将APB3 BUS总线连接到APB4 slave,只需要将WSTRB信号置为1,表示数据有效即可(WSTRB AP3不支持,APB四支持)

  • PPROT信号取决于APB4的信号是如何设计的,如果APB4 slave只支持privilege mode的访问,PPROT[0]就要置位特权模式下访问的值;如果APB4 slave只支持secure mode的访问,PPROT[1]就要置位secure mode模式下访问的值

  • 如果将APB4 BUS总线连接到APB3 slave,AHB4 BUS支持WSTRB信号,WDATA中有部分有效的数据,有部分无效的数据,但是APB3 slave是不支持的,所以需要设计一个Bridge,先读取APB3 slave地址空间的数据然后把有效的byte写到APB3 slave中

  • 以APB4的slave和APB3的master为例,这个时候应该把PSTRB信号固定为全1,PPROT信号则取决于Slave是如何使用该信号的,根据不同的场景固定为不同的值。

  • 而APB3的slave和APB4的master相连接,这个时候实际上需要一个转接桥,因为本身可能只想写某一个字节,而slave此时不支持也不知道,那就需要一个中间逻辑将pwdata变成想要的值。(比如读回来时32'h2345,想将最高字节改写为6,此时只写一个32'h6000,PSTRB为1000,标志别的字节不要动。这个时候就需要一个中间逻辑将写的数据变成32'h6345)。实际上写起来也很麻烦,因此此时最好将APB3的slave改成APB4协议。

  • 至于APB3和APB2不建议一起用,因为APB2没有PREADY反压机制,因此实际使用起来完全不一样,强行一起用会有巨大的坑。

posted @ 2024-01-08 22:59  Icer_Newer  阅读(124)  评论(0编辑  收藏  举报