• 【手撕AHB-APB Bridge】~ AMBA总线 之 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
    在这里插入图片描述

  • 相关阅读:
    sklearn机器学习:决策树案例
    全方位监控基础设施,坚实守护您的业务稳定!
    本地任意markdown工具和文件中一键插入图像(用一种优雅的方式在本地markdown文件中插入网络图片文件)
    SpringBoot笔记之SpringSecurity
    【Linux从0-1 】之 - 什么是Linux?Linux与Unix有什么区别?Linux的几个主流发行版本
    【opencv-c++】图像对象的赋值,拷贝和创建
    [附源码]计算机毕业设计基于springboot的低碳生活记录网站
    centos7安装mariadb
    基于Php的服装鞋子商城的设计与实现
    Pytorch:张量的索引操作
  • 原文地址:https://blog.csdn.net/qq_40549426/article/details/126159916