【AMBA】APB总线的个人学习记录(一):理论知识

精通APB (Advanced Peripheral Bus) 总线设计通常意味着你不仅理解其基础概念,而且能够在实际的硬件设计中灵活运用APB总线,解决复杂问题,并优化设计。以下是一些关键点,当你掌握这些方面时,可以说你对APB总线设计有了深入的理解:

  1. 理论知识

    • 理解APB总线的基本原理和架构。
    • 熟悉APB总线的信号定义,包括地址、数据、控制和握手信号。
    • 了解APB总线的时序要求和协议规范。
  2. 设计能力

    • 能够设计APB主控器(通常是APB桥接器)和APB从设备。
    • 熟练使用Verilog、VHDL或其他硬件描述语言实现APB接口。
    • 能够集成APB总线到系统级芯片(SoC)设计中。
  3. 验证技能

    • 掌握APB总线的验证方法,能够创建测试用例并执行功能验证。
    • 使用形式验证或模拟来确保APB接口的正确性。
  4. 调试技巧

    • 能够使用逻辑分析仪或波形查看器调试APB总线上的问题。
    • 理解如何定位和解决时序和数据完整性问题。
  5. 优化与分析

    • 理解APB总线的性能瓶颈,并知道如何优化设计以提高效率。
    • 能够进行功耗分析,确保设计符合低功耗目标。
  6. 标准与兼容性

    • 理解APB总线与其他AMBA总线(如AHB、AXI)的交互。
    • 确保设计遵循ARM AMBA APB规范。
  7. 实践经验

    • 拥有多个成功的APB总线设计和集成经验。
    • 能够处理跨芯片设计的复杂性。
  8. 持续学习

    • 关注APB总线和AMBA架构的发展趋势,保持更新知识。

精通任何技术都需要时间和实践,对于APB总线设计而言,这同样适用。你需要通过阅读官方文档、参考设计、参与项目和不断实践来积累经验。同时,加入相关的技术论坛和社区,与同行交流,也是提高技能的好方法。

总线会有按照协议规定的一组信号,除此之外,总线所连接的从设备也会有独立的时钟与复位信号,不会和总线用相同的时钟,所以两者之间传输的数据和信号会要做跨时钟处理。

目录

    • 基本原理
    • 架构
    • 信号定义
    • 时序要求
      • 无需等待的写操作
      • 有等待的写操作
      • 无需等待的读操作
      • 需要等待的读操作
    • 错误响应
    • 保护单元支持

基本原理

高级外设总线(APB:Advanced Peripheral Bus)是高级微控制器总线体系结构(AMBA:Advanced Microcontroller Bus Architecture)协议系列的一部分。它定义了一个低成本的接口,优化了最小的功耗和降低的接口复杂性。

APB是非流水结构,所以它主要用在不需要用到高性能总线(AXI)的低带宽外围设备上。

特点:

  • 成本低
  • 功耗小
  • 接口简单
  • 非流水结构

常见用法:使用APB总线来访问外围设备的可编程控制寄存器。

架构

Alt

信号定义

信号方向
(对主设备)
位宽信号描述
PCLK输入系统时钟源1bit时钟信号,APB协议中所有信号只和时钟上升沿有关
(同步APB总线上的所有操作)
PRESETn输入系统复位1bit复位信号,低电平有效
PADDR输出APB桥32bit地址总线,指示要访问的寄存器地址
PWRITE输出APB桥1bit方向信号,指示当前传输的是读操作还是写操作
高电平写,低电平读
PSEL输出APB桥根据系统需求片选信号,指示选择的从设备
每个从设备都有一个对应的PSEL信号
PENABLE输出APB桥1bit使能信号,在传输的第二个和后续时钟周期有效,
它表明数据传输已经开始,但尚未完成
PWDATA输出APB桥32bit写数据总线,用于从主设备向从设备传输数据。
在写操作期间,数据在PENABLE的上升沿锁存
PSTRB输出APB桥4bit字节选通信号,用于指示哪些字节应当被写入。
PSTRB中的一位对应写数据总线中的一个字节
PRDATA输入从设备32bit读数据总线,用于从设备向主设备传输数据。
在读操作期间,数据在PENABLE的上升沿采样
PREADY输入从设备1bit准备信号,用于告知主设备从设备是否准备好接收或发送数据。
在传输过程中,如果从设备需要更多时间来准备数据,它可以延迟PREADY信号,从而延长传输周期
PPROT输出APB桥3bit保护类型。指示事务的正常、特权或安全保护级别,
以及该事务是数据访问还是指令访问

时序要求

无需等待的写操作

无需等待的写操作

  1. 在T0阶段,所有总线处于IDLE状态。
  2. 在T1阶段,PADDR、PWRITE、PWDATA和PSEL在时钟的上升沿被寄存,即主设备APB桥把这些数据发送到总线上。此时处在Setup状态。
  3. 在T2阶段,PENABLE拉高,指示传输开始,与此同时从设备已经接收到主设备发送过来的地址和写控制命令,知道主设备要准备发数据过来,于是拉高PREADY表示已经做好准备。此时处在Access状态。
  4. T3时刻,PADDR和PWRITE会一直保持有效直到传输结束(T3时刻)。表示传输结束的时钟上升沿到来后,PENABLE和PSEL拉低。

PREADY有效就表示从设备可以在下一个时钟上升沿完成传输。

有等待的写操作

只有当从设备准备好接收数据后,PREADY信号才会拉高,传输才得以开始。因此当从设备没准备好的时候,可以保持PREADY的低电平,来延长传输。

传输被延长的时候,PADDR,PWRITE,PSEL,PENABLE,PWDATA,PSTRB和PPROT会一直保持原来的值。
需要等待的写操作

无需等待的读操作

无等待的读操作和写操作唯一的区别在于此时的PWRITE是低电平,从设备需要在读操作结束前将数据传输到总线上。
在这里插入图片描述

需要等待的读操作

在读操作中同样可以使用PREADY来延长传输。
在这里插入图片描述
注意的是,在读操作中,PSTRB所有位必须设置为低电平。


Note:
传输过程中可以一直保持地址PADDR和读写操作PWRITE信号的不变,直到开始新一轮的传输,这有助于系统节省功耗。


错误响应

PSLVERR用于指示APB传输时读写操作中出现的错误情况。

  • 当PSEL、PENABLE和PREADY都为高电平时,会出现错误状态。
  • 出现错误状态后,PSLVERR会在传输的最后一个时钟周期内保持有效。

APB外围设备不要求必须支持PSLVERR引脚,当不使用该引脚时,应被置低。

failing write transfer
failing read transfer
映射关系:

  • AXI -> APB RRESP[1]/BRESP[1] = PSLVEER
  • AHB -> APB HRESP[0] = PSLVERR

保护单元支持

protection encoding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《昇思25天学习打卡营第6天|onereal》

Vision Transformer(ViT)简介 近些年,随着基于自注意(Self-Attention)结构的模型的发展,特别是Transformer模型的提出,极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩…

[OtterCTF 2018]Bit 4 Bit

我们已经发现这个恶意软件是一个勒索软件。查找攻击者的比特币地址。** 勒索软件总喜欢把勒索标志丢在显眼的地方,所以搜索桌面的记录 volatility.exe -f .\OtterCTF.vmem --profileWin7SP1x64 filescan | Select-String “Desktop” 0x000000007d660500 2 0 -W-r-…

数据库系统概论(第5版教材)

第一章 绪论 1、数据(Data)是描述事物的符号记录; 2、数据库系统的构成:数据库 、数据库管理系统(及其开发工具) 、应用程序和数据库管理员; 3、数据库是长期存储在计算机内、有组织、可共享的大量数据的集合&…

带上作弊器,我不得起飞

前言 过去,我们对人工智能既期待又害怕.人类的惰性希望人工智能可以帮助大家从大部分繁重的工作中解放出来,但又害怕它失控. 智能系统的好处 工作方面 自动化与效率提升:可以自动执行许多重复性和低技能的任务,如制造业中的装配、数据输入和办公室的客户…

原子变量原理剖析

一、原子操作 原子操作保证指令以原子的方式执行,执行过程不被打断。先看一个实例,如下所示,如果thread_func_a和thread_func_b同时运行,执行完成后,i的值是多少? // test.c static int i 0;void thread…

多表执行嵌套查询,减少笛卡尔积,防止内存溢出

问题:当涉及四个表的查询时,会产生大量的笛卡尔积导致内存溢出。 解决办法 :可以使用嵌套查询将多表的联合查询拆分为单个表的查询,使用resultmap中的association(适合一对一) 或 collection(一…

医院消防设施设备管理系统

医院为人员密集场所,且多为各类病患及其陪护人员,一旦发生火灾,人员疏散逃生困难,容易造成较严重的生命与财产损失。为规范医院的消防设施设备管理,通过凡尔码系统对医院消防设施设备进行信息化管理,提高医…

MapReduce学习

目录 7.3 MapReduce工作流程 7.3.1 工作流程概述 7.3.2 MapReduce各个执行阶段 7.3.3 Shuffle过程详解 1. Shuffle过程简介(过程分为Map端的操作和Reduce端的操作) 2、Map端的Shuffle过程: 3、在Reduce端的Shuffle过程 7.4 实例分析&am…

使用supportFragmentManager管理多个fragment切换

android studio创建的项目就没有一个简单点的框架,生成的代码都是繁琐而复杂,并且不实用。 国内的页面一般都是TAB页面的比较多,老外更喜欢侧边菜单。 如果我们使用一个activity来创建程序,来用占位符管理多个fragment切换&…

五、Spring IoCDI ★ ✔

5. Spring IoC&DI 1. IoC & DI ⼊⻔1.1 Spring 是什么?★ (Spring 是包含了众多⼯具⽅法的 IoC 容器)1.1.1 什么是容器?1.1.2 什么是 IoC?★ (IoC: Inversion of Control (控制反转))总…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符: and or not 1.案例一 需求: 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求: # 1. 获取用户输入的用户名和密码 # 2. 判断…

【折腾笔记】兰空图床使用Redis做缓存

前言 最近发现我部署在群晖NAS上的兰空图床程序在高并发的情况下会导致图片加载缓慢或出现图片加载失败的情况,于是我查阅了官方文档资料并进行了一系列的测试,发现兰空图床如果开启了原图保护功能,会非常的吃CPU的性能,尤其是在…

【Python游戏】猫和老鼠

本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结一、前言 本文介绍如何使用Python的海龟画图工具turtle,开发猫和老鼠游戏。 什么是Python? Python是由荷兰人吉多范…

【限免】线性调频信号的脉冲压缩及二维分离SAR成像算法【附MATLAB代码】

文章来源:微信公众号:EW Frontier QQ交流群:949444104 程序一 对线性调频信号进行仿真,输出其时频域的相关信息,并模拟回波信号, 对其进行脉冲压缩和加窗处理。 实验记录: 1.线性调频信号时…

从0构建一个录制UI测试工具

很多UI自动化测试工具都具备录制UI自动化测试的能力,例如playwright,可以通过playwright vscode插件完成录制,如下图所示,当选择录制脚本时,会打开一个浏览器,在浏览器中输入被测应用url,用户在…

C++:enum枚举共用体union

enum枚举 C继承C的枚举用法 (1)典型枚举类型定义,枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突: 举例1宏定义,举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色,默认值…

昇思25天学习打卡营第11天|SSD目标检测

1. 学习内容复盘 模型简介 SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上,SSD对于输入尺寸300x300的网络,达到74.3%mAP(mean Average Precision)…

JAVA毕业设计145—基于Java+Springboot+vue+uniapp的驾校预约小程序(源代码+数据库+15000字论文)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的驾校预约小程序(源代码数据库15000字论文)145 一、系统介绍 本项目前后端分离,分为用户、教练、管理员三种角色 1、用户: …

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述🔍3.解决方法🐡4.结果预览🤔 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述🔍 今天发现更新conda之后&#xff0…

Redisson(分布式锁、限流)

注意Redisson是基于Redis的&#xff0c;所以必须先引入Redis配置&#xff08;参考SpringBoot集成Redis文章&#xff09; 1. 集成Redisson 引入依赖 <!-- 二选一,区别是第一个自动配置&#xff0c;第二个还需要手动配置也就是第二步自定义配置&#xff0c;注意版本号&…