当前位置:网站首页>【手撕AHB-APB Bridge】~ AMBA总线 之 AHB
【手撕AHB-APB Bridge】~ AMBA总线 之 AHB
2022-08-04 23:11:00 【IC二舅】
本章目录:
一. 引入
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
边栏推荐
猜你喜欢
MySQL基础篇【子查询】
MySQL的JSON 数据类型2
ffplay视频播放原理分析
[Cultivation of internal skills of string functions] strcpy + strcat + strcmp (1)
为何越来越多人选择进入软件测试行业?深度剖析软件测试的优势...
Literature reading ten - Detect Rumors on Twitter by Promoting Information Campaigns with Generative Adversarial Learn
web3.js
「津津乐道播客」#397 厂长来了:怎样用科技给法律赋能?
中国的顶级黑客在国际上是一个什么样的水平?
养殖虚拟仿真软件提供高沉浸式的虚拟场景互动操作体验学习
随机推荐
One trick to cure pycharm DEBUG error UnicodeDecodeError: 'utf-8' codec can't decode
Kernel函数解析之kernel_restart
使用代理对象执行实现类目标方法异常
The Go Programming Language (Introduction)
CS8416国产替代DP8416 数字音频接收器
话题 | 雾计算和边缘计算有什么区别?
【内存操作函数内功修炼】memcpy + memmove + memcmp + memset(四)
The Record of Reminding myself
【字符串函数内功修炼】strcpy + strcat + strcmp(一)
Shell编程之循环语句与函数的使用
typeScript-promise
[Cultivation of internal skills of string functions] strlen + strstr + strtok + strerror (3)
2022/8/4 树上差分+线段树
特征工程资料汇总
Web安全开发 | 青训营笔记
今天又做了三个梦,其中一个梦梦里的我还有意识会思考?
一点点读懂regulator(二)
亿流量大考(3):不加机器,如何抗住每天百亿级高并发流量?
加解密在线工具和进制转化在线工具
3年,从3K涨薪到20k?真是麻雀啄了牛屁股 — 雀食牛逼呀