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反压机制,因此实际使用起来完全不一样,强行一起用会有巨大的坑。

APB的更多相关文章

  1. AHB总线和APB总线

    AHB主要用于高性能模块(如CPU.DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作:非三态的实现方式:支持突发传输:支持分段传输:支持多个主控制器:可配置 ...

  2. AHB/APB简介

    AHB AHB总线互联结构图 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的 ...

  3. AMBA总线协议AHB、APB

    一.什么是AMBA总线 AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus).ASB (Advanced ...

  4. AMBA总线协议AHB、APB、AXI对比分析【转】

    转自:https://blog.csdn.net/ivy_reny/article/details/56274412 一.AMBA概述    AMBA (Advanced Microcontrolle ...

  5. APB协议

    https://wenku.baidu.com/view/2663f629ef06eff9aef8941ea76e58fafab04592.html https://www.cnblogs.com/l ...

  6. [转]AMBA、AHB、APB、ASB总线简介

    [转]http://www.cnblogs.com/zhaozhong1989/articles/3092140.html 1.前言 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC ...

  7. AMBA APB总线

    前面分析了AHB总线协议.接下来分析APB总线协议. (一) APB总线接口: PCLK APB总线时钟. PRESETn APB总线复位.低有效. PADDR 地址总线. PSELx 从设备选择. ...

  8. APB总线

    APB(Advance Peripheral Bus)是AMBA总线的一部分,从1998年第一版至今共有3个版本. AMBA 2 APB Specfication:定义最基本的信号interface, ...

  9. ARM芯片stm32中的AHB和APB

    AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”.AHB主要用于高性能模块(如CPU.DMA和DSP等)之间的连接.AHB 系统由主 ...

  10. AHB接口转APB

    AHB接口转APB 情景 有一个以AHB接口时序设计的IP,现在需将其移至APB总线上,即将使用APB接口时序驱动该IP. 基本思路 将APB的接口信号映射到AHB的接口信号 要点 APB挂接在AHB ...

随机推荐

  1. 什么是 MySQL JDBC 连接池中最高效的连接检测语句?

    在回答这个问题之前,首先我们看看 MySQL 中有哪些常用的 JDBC 连接池: c3p0 DBCP Druid Tomcat JDBC Pool HikariCP 这些连接池中,c3p0 是一个老牌 ...

  2. 从零玩转Nginx

    01[熟悉]实际开发中的问题? 现在我们一个项目跑在一个tomcat里面 当一个tomcat无法支持高的并发量时.可以使用多个tomcat 那么这多个tomcat如何云分配请求 |-nginx 02[ ...

  3. 机器学习周刊03:如何学习深度学习?2024 年学习生成式 AI 路线图、如何构建高效的RAG系统、苹果 腾讯最新论文、阿里DreaMoving

    腾讯推出的 AppAgent,是一个多模态智能体,通过识别当前手机的界面和用户指令直接操作手机界面,能像真实用户一样操作手机! 机器学习周刊:关注Python.机器学习.深度学习.大模型等硬核技术 1 ...

  4. Java 中时间对象的序列化

    在 Java 应用程序中,时间对象是使用地比较频繁的对象,比如,记录某一条数据的修改时间,用户的登录时间等应用场景.在传统的 Java 编程中,大部分的程序员都会选择使用 java.uti.Date ...

  5. BlockCanary原理解析

    一.背景 为了解决应卡顿,分析耗时. 二.原理 Looper中的loop方法: public static void loop() { ... for (;;) { ... // This must ...

  6. Java中ArrayList的遍历与删除元素方式总结

    在Java编程中,我们经常需要对数据结构进行遍历操作,并根据业务需求删除部分元素.而数组列表(ArrayList)是集合类中的一种,它可以动态地添加和删除元素,非常适合在程序中使用.本篇博客将总结Ar ...

  7. Python中的@abstractmethod

      @abstractmethod 是 Python 中 abc 模块(Abstract Base Classes)提供的一个装饰器,用于声明抽象方法.抽象方法是指在抽象类中声明但没有提供具体实现的方 ...

  8. 鸿蒙轻内核M核源码分析:中断Hwi

    摘要:本文带领大家一起剖析了鸿蒙轻内核的中断模块的源代码,掌握中断相关的概念,中断初始化操作,中断创建.删除,开关中断操作等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列五 中断Hwi&g ...

  9. 项目基于 Solon 进行构建,一般都有到哪些东西?

    例如: 每个微服务工程是采用Solon开发. 基于Solon Cloud 实现微服务的配置.服务注册.事件总线. 其中,最重要的是实现了Solon Rpc接口与RESTful接口均可以注册至任何注册服 ...

  10. Intellij idea 生成带注释的get/set

    自带的 Alt+ Insert 中的 Getter and  Setter 生成的属性,不能将 private 字段中的注释带过去,比较尴尬.可以通过两种试. 1. 修改模板:这种方法不能得到 pri ...