【手撕AHB-APB Bridge】~ AMBA总线 之 AHB
本章目录:
- 一. 引入
- 二. AHB总览
- 1. AHB的组成部分
- 2. AHB的信号
- 3. AHB传输的两个阶段
- 4. AHB的传输
- 4.1 AHB的基本传输
- 4.2 AHB的Pipeline传输
- 4.3 AHB的Burst传输
- 5. AHB的时序分析
- 声明
- 下期预告:
一. 引入
AHB(Advanced High performance Bus)总线在AMBA2中就已经定义,AHB总线一开始主要是作为系统高速总线使用,适用于高性能,低功耗的系统设计。目前因为AXI总线作为高速总线的优势更加明显,AHB会用在相对低速的系统设计中。基本排序就是APB适用于低速设计,AXI适用于高速设计,AHB则介于两者之间。
在AMBA协议中,AHB一开始主要面向系统级高带宽高性能的系统互联设计,支持多master,多slave的互联模式。但是随着系统的发展,AHB更多用于支持简单的数据传输,因此后来对AHB协议做了简化设计,定义了AHB-Lite协议,简化之后的协议主要用在单master数据访问中,不需要支持Split与Retry。
以AHB2APB为例,BRIDGE左侧的部分就是AHB总线,可以挂载很多,比如CPU,RAM、DMA以及高带宽的外部存储接口,如下图所示:
二. AHB总览
AHB支持多master,多slave的互联模式,如上图所示。Master就是就是挂载到AHB总线上的一些外设,Slave就是我们上一节讲到的APB。AHB中最重要的就是需要掌握以下几点:
a. AHB的组成部分?
b. AHB有哪些信号?
c. AHB传输的两个阶段是什么?
d. AHB的传输?
e. AHB的时序分析举例?
1. AHB的组成部分
AHB支持多master,多slave的互联模式,如上图所示,master和slave要想通信,那肯定需要有 先后顺序 和寻找地址 来完成,那这时候就有了arbiter 和 decoder。
因此,AHB由四个部分组成:Master、Slave、Arbiter和Decoder。
当我们只有一个Master的时候,此时我们还需要仲裁哪个Master的优先级要高吗?
答案是完全不需要,因此,引出了AHB-Lite,其可以说是一款轻量级的总线,结构图如下:
由上图可见,没有了Arbiter,也就是不用仲裁哪个master优先级高了,变成了一对多的模式。
2. AHB的信号
HCLK和HRESETn表示的是 Global 变量,不论在AHB还是APB中都有的,以下几个信号是AHB的信号:
3. AHB传输的两个阶段
4. AHB的传输
4.1 AHB的基本传输
基本传输又包括两种传输类型:一次无需等待状态的简单传输、需要两个等待周期的简单传输
- 一次无需等待状态的简单传输
我们上边说过,AHB传输有两个阶段:Address Phase 和 Data Phase。第一个阶段,Master把地址和控制信号扔到总线上;第二个阶段,Slave去拿做出响应。如上图所示,两个阶段之间是没有空闲的,也就是说没有等待的,再往底层说就是Slave给Master的反馈信号HREADY拉高了,就说,哥们,我准备好了,操作我吧!!! - 需要两个等待周期的简单传输
唉,这个为什么第二个阶段持续了这么久呢?原因就在于第一个阶段完事之后,我master已经把地址和控制信号扔到总线上了,而你slave不给我面子啊,你的反馈信号HREADY迟迟不肯拉高,那只能和你干耗着了(注意:这里持续最长周期不能超过12个,这是协议中规定的)!!!直到你HREADY拉高之后,完成一次操作。
这样的基本传输有一个很重要的问题,那就是一次传输至少需要2个时钟周期,甚至要三四个,这效率也太低了吧!!!怎么解决?这就引入了Pipeline传输!!!
4.2 AHB的Pipeline传输
如上图所示,在第一阶段传一个地址进去,第二个阶段传数据,在传数据的同时,你传地址不是空闲的嘛?那我指定不能让你闲着呀,你给我传下一个操作的地址,就这样,它很快就被榨干了,啊,不对,很快就把效率提升起来了,哈哈哈!!!
那么又有问题了,尽管提高了效率,但是你还是single传输啊,也就是说每次传输都有一个新的地址,此时就需要重新decode,decode需要时间等待处理,那如何减少等待时间呢?这就引入了burst传输。
4.3 AHB的Burst传输
Burst传输一次可以发送多个地址传输,那么又有问题了,你这个地址是怎么操作的呢?你怎么知道每次是增加1呢?还是增加4呢?此时就有了burst type,其中包括single transfer、INCR、Wrap 4、8、16.
到这里又有问题了,那就是如果在burst传输的时候,如果slave没有准备好,有hready=0,那如果你是master没有准备好,咋办?此时就引入了HTRANS了,是一个两位的信号,有四种结果:00IDLE、01BUSY、10NOSEQ、11SEQ。
5. AHB的时序分析
很简单,第一次传输HTRANS就是NONSEQ,其余的一般是SEQ,可以是BUSY、IDLE;还应当注意的是HREADY保持高才有效,低电平保持到直到拉高信号。
- INCR8 BURST
- WRAP8 BURST
- INCR4 BURST
- WRAP4 Burst
- 未定义长度的BURST传输
好了,今天就写到这里吧,有问题可以评论区或者加群寻求他人帮助,拜拜!!!
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得点赞+收藏+评论!!!
下期预告:
大家有想看的吗?可以告诉我。
没有的话,下期直接上代码吧!!!
全网各平台同名===> “IC二舅”
下一期如果有大家想看的或者哪块不懂想学习的,可以私聊或在群里提问都可以,“二舅”肯定是知无不言言无不尽!!!
“二舅”博客:
https://blog.csdn.net/qq_40549426?spm=1019.2139.3001.5343
“二舅”精神内耗学习群:878501676
【手撕AHB-APB Bridge】~ AMBA总线 之 AHB相关推荐
- AMBA总线协议AHB、APB
一.什么是AMBA总线 AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus).ASB (Advanced ...
- AMBA总线概述——AHB、APB、AXI
参考:https://blog.csdn.net/burningCky/article/details/109630018 https://blog.csdn.net/bleauchat/articl ...
- AMBA总线协议AHB、APB、AXI对比分析
一.AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance B ...
- AMBA总线协议-ahb总线互联结构结合协议的理解
总线互联结构(以4*4的总线互联结构为例,其中对于master来说优先级3>2>0>1 ,其中2是dummy master,1是defalult master):1.结构中最多可以有 ...
- 【手撕AHB-APB Bridge】~ AMBA总线 之 APB
本章目录: 前言 一. 引入 二. APB总览 1. APB信号 2. APB的读写时序图 2.1 APB写操作的时序图 2.2 APB读操作的时序图 三. 地址映射关系 四.实现方式 五. 数据流向 ...
- AMBA总线—APB总线协议详解
文章目录 一.APB总线介绍 1.1.什么是APB总线 1.2.典型的基于 AMBA 总线的系统架构 1.3.APB信号列表(重点) 二.APB总线传输(时序) 2.1.APB 状态机 2.2.写操作 ...
- AMBA总线协议(一)——一文看懂APB总线协议
0.AMBA总线概括 AMBA AHB 总线协议介绍请点击以下链接: AMBA总线协议(二)一文看懂AMBA2 AHB2与AMBA3 AHB-Lite总线协议的区别 AMBA总线协议(三)--一文看懂 ...
- AMBA:AXI/AHB/APB学习笔记
AMBA.AXI.AHB.APB学习笔记 AMBA总线:各模块之间的连接 AHB 特性: 组成部分: AXI APB AMBA总线:各模块之间的连接 advanced microcontroller ...
- 数字IC设计----AMBA总线协议(来自英文原版)
第一章 AMBA总线介绍 1.AMBA总线协议总览 AMBA(Advanced Microcontroller Bus Architecture)总线协议是一种面向高性能嵌入式微控制器设计的片上联接 ...
最新文章
- python使用matplotlib可视化、使用英文单次或者缩写指定使用的颜色、使用16进制的RGB字符串指定颜色、使用RGB或者RGBA数字元组指定颜色
- eclipse的怪问题。background indexer crash recovery .java.lang.OutOfMemoryError: Java heap space
- map()和zip()操作
- 基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]
- linux中的变量文件路径,Linux库文件和Shell可执行程序命令文件搜索路径变量的设置...
- Linux统一编程接口,restful接口设计规范总结
- python中int和float的区别_Python学习(四)数据结构 —— int float
- jdk8 lambda表达式
- M3 Build6801 Discovery support Virtual Hard Disks
- 如何快速将一个lista集合中的部分字段值组合成新的的listb部分*
- devgis分享 只分享有价值的东西!http://download.csdn.net/user/devgis
- PDCA循环的四个阶段八个步骤,你知道么?
- 浏览班级为计算机的同学记录的命令,2011年全国计算机等级考试二级VFP笔记(4)...
- 英语在计算机上的应用研究,计算机在英语教学中的应用
- CM108AH和DP108/DP108T的区别
- Centos7 网卡做 bond 以及 team
- 数据结构查找-7-7 词典 (15 分)
- 概率论与统计学的关系是什么?
- [vue]开源一个精致完整的Vue项目(豆瓣)
- 如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响