当前位置:网站首页>【手撕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
边栏推荐
猜你喜欢
随机推荐
一点点读懂regulator(三)
kernel问题定位手段总结
特征工程资料汇总
node中package解析、npm 命令行npm详解,node中的common模块化,npm、nrm两种方式查看源和切换镜像
Qt中的常用控件
赶紧进来!!!教你C语言实现扫雷小游戏(文章最后有源码!!!)
仪表板展示 | DataEase看中国:数据呈现中国资本市场
一点点读懂regulator(四)
JVM memory configuration parameter GC log
typeScript-闭包函数的使用
golang打开文件和读写文件
【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)
加解密在线工具和进制转化在线工具
从“草原牛”到“数字牛”:蒙牛的数字化转型之道
未上市就“一举成名”,空间媲美途昂,安全、舒适一个不落
质量管理大师爱德华·戴明博士经典的质量管理14条原则
轮播图动态渲染
Community Sharing|Tencent Overseas Games builds game security operation capabilities based on JumpServer
【SSR服务端渲染+CSR客户端渲染+post请求+get请求+总结】
xss总结