当前位置: 首页 > ai >正文

【ARM AMBA AHB 入门 3 -- AHB 总线介绍】


请阅读【ARM AMBA 总线 文章专栏导读】

文章目录

    • AHB Bus 简介
    • AHB Bus 构成
    • AHB BUS 工作机制
      • AHB 传输阶段
    • AHB Interfaces
      • AHB仲裁信号
    • AHB 数据访问
      • 零等待传输(no waitstatetransfer)
      • 等待传输(transfers with wait states)
      • 多重传送(multipletransfer)--Pipeline
    • AHB 控制信号

AHB Bus 简介

AHB 总线的强大之处在于它可以将微控制器(CPU)、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线Master、各种拥有AHB接口的控制器等等连接起来构成一个独立的完整的SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统

AHB 可以成为一个完整独立的SOC芯片的骨架。
在这里插入图片描述

AHB Bus 构成

完整的 AHB 总线由四个部分组成:

  • AHB 主设备 Master: 发起一次读/写操作;某一时刻只允许一个主设备使用总线
  • AHB 从设备 Slave: 响应一次读/写操作;通过地址映射来选择使用哪一个从设备;
  • AHB 仲裁器 Arbiter: 允许某一个主设备控制总线;
  • AHB 译码器 Decoder: 通过地址译码来决定选择哪一个从设备。

    在这里插入图片描述

AHB BUS 可以分为三组

  • 写数据总线(HWDATA)
  • 读数据总线(HRDATA)
  • 地址控制总线(HADDR)

AHB BUS 工作机制

有需要占用总线的 Master向 Arbiter 发出请求, Arbiter授权给指定的Master。任一时间周期只有一个 Master 可以接入总线,对其指定的 Slave 进行读写操作。

获得总线授权的 Master开始 AHB 传输, 首先发出地址和控制信号, 提供地址信息、传输方向、带宽和burst类型。总线统一规划 Slave 的地址, 译码器根据地址和控制信号确定哪个 Slave 与Master进行数据通信。数据传输通过数据总线完成。

为避免出现三态总线 AHB 将读写总线分开, 写数据总线用于从 Master 到 Slave 的数据传输, 读数据总线用于从 Slave 到 Master 的数据传输。

每笔传输包括一个地址和控制周期, 一个或多个数据周期。地址和控制周期不能被扩展, 因此 Slave 必须在一个周期内采样地址信号

数据周期可以通过 HREADY 信号扩展, 但 HREADY 为低时给传输加入一个等待状态以使 Slave获得额外的时间来提供或采样数据, 另外 Slave 通过响应信号 HRESP 反映传输状态。

AHB支 持批量式数据传送, 可以自动递增地址。递增地址方式分为: 持续递增与回绕传送。

一般情况下 Master 完成完整的 burst 传输, Arbiter 才会授权给其他的 Master 接入总线, 然而为避免过大的判决延迟, Arbiter也可能打断断burst传输。在这种情况下Master 必须再次接入总线以进行中断的 burst 剩余部分的传输。

AHB 传输阶段

AHB的传送模式包含二个阶段。第一阶段为地址的传递, 另一阶段为数据的传递。

  • 地址传输阶段: (address phase):一个时钟周期
  • 数据传输阶段: (data phase):一个或多个时钟周期(以HREADY信号控制周期数目)

AHB Interfaces

在这里插入图片描述
在实际的传输过程中,一般作为 AHB 总线的 Slave 设备都有 2 根 hrready信号, 一个为 input 类型(hready_in), 另一个为 outpute 型 (hready_out)。在 AHB 总线协议中,如果 Master 设备发起读写操作的时候,Slave设备不能及时响应的话,由Slave设备把 hready_out 信号拉低来拖延 Data Phaze 周期。

但是在Pipeline操作的时候,本次操作 data phaze是下一次操作的 address phaze, 所以作为 Slave设备在响应Master设备的时候, 必须先判断一下Master设备对上一次其它Slave设备的操作是否已经完成。如果完成,则响应主设备的操作;如果没有有完成,则等待完成, 然后才响应操作。hready_in 就是 Slave 设备用来判断Masteer设备是否对其它Slave设备的操作已经完成的信号。

AHB仲裁信号

在这里插入图片描述

AHB 数据访问

零等待传输(no waitstatetransfer)

在这里插入图片描述

  • 第一个周期的上升沿, master 驱动地址和控制信号;
  • 第二个周期的上升沿, slave 采样地址和控制信号,并将 HREADY 拉高;
    • 如果是写操作, master 会在第二个周期的上升沿传输要写入的数据;
    • 如果是读操作, slave 会在 HREADY 信号拉高后将读取的数据写写入总线;
  • 第三个周期的上升沿,
    • 如果是写操作, master获取 HREADY 高信号,表明slave已成功接收数据,操作成功;
    • 如果是读操作, master 获取 HREADY 高信号,表明此时的读数据有效并且接收下来,操作成功。
      需要注意,HREADY信号在数据有效期间必须为高, 并且延续到第三个周期的上升沿之后, 确保 master 的正确采样。

等待传输(transfers with wait states)

传送完成时间因等待而延迟,这是由于寻址到较慢的S单元所造/成。当HREADY被S拉低时,会发生等待状态。需要延迟传送的周期时, 就会在数据期间将HREADY拉低,此时地址与数据都必须延伸。有等待状态的AHB传递,下图中可看到在数据草式时, 时序必须多花二个周期的延迟等待时间(HREADY为0), S才能正常的接收收到M写的数据或准备好M欲读取的数据。
在这里插入图片描述
slave 可以及时处理 master 请求,但也可能存在 slave太慢不能立即处理的情况。这时需要让master 稍微等一等, 需要 slave 插入一些等待的状态。如上图所示, HREADY 信号在第二和第三周期拉低,意在告诉 master, slave 不能立即处理,需要 master等待2个周期。在这
里需要注意2点:

  • 如果是写操作, master需要在等待期间保持写数据不变, 直到本次传输完成;
  • 如果是读操作, slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

多重传送(multipletransfer)–Pipeline

一次完整的数据传送会有多个传送周期, 如下图下一笔地址可与上一笔数据同时在总线上, 时序图的说明如下:
在这里插入图片描述
下图是对上图的补充:
在这里插入图片描述
扩展数据周期的一个负效应是必需延长相应的下一笔传输的地址周期。A和C为零等待传输,B加入了一个等待周期,因此相应的C地址期要进行扩展。

  • 第一个周期,master发起一个操作A,并驱动地址和控制信号;
  • 第二个周期,slave收到了来自总线的请求,将HREADY信号拉高;
  • 第二个周期上升沿后,master发现有操作B需要执行,并且检查到上一周期的HREADY为高,则发起第二个操作B;
  • 第三个周期,master获取HREADY信号为高,表示操作A已经经完成
  • 第三个周期上升沿后,master发现有操作C需要执行,并且检查到上一周期的HREADY为高,则发起第三个操作C;
  • 第三个周期上升沿后,slave由于繁忙插入了一个等待状态,将HREADY拉低;
  • 第四个周期,master获取HREADY信号为低,知道slave希望等待于是master保持和上一拍一样的信号;
  • 第四个周期,slave处理完了事务,将HREADY信号拉高,表示可以继续处理;
  • 第五个周期,master获取HREADY信号为高,知道slave已经可以处理B操作;
  • 第五个周期上升沿后,B操作完成;
  • 第六个周期上升沿后,C操作完成。

注意:
HREADY在一定程度上表示了slave的pipeline能力,在AHB中是2个pipe,也就是总线上最多存在2个未处理完的transfer。只有当总线上
未完成的transfer少于2个时,master才能发起操作。

AHB 控制信号

见下篇文章:【ARM AMBA AHB 入门 3.1 – AHB控制信号】

推荐阅读
https://blog.csdn.net/weixin_46022434/article/details/104987905

http://www.xdnf.cn/news/4441.html

相关文章:

  • Postman中https和http的区别是什么?
  • Linux 下MySql主从数据库的环境搭建
  • 什么是回调 钩子 Hook机制 钩子函数 异步编程
  • 【Prometheus】业务指标与基础指标的标签来源差异及设计解析
  • 4大主流行业CRM需求精解:精准匹配业务痛点与选型策略
  • 数据结构与算法-单链表的应用
  • C语言学习之字符函数和字符串函数
  • 【Python】让Selenium 像Beautifulsoup一样,用解析HTML 结构的方式提取元素!
  • Spark 之 YarnCoarseGrainedExecutorBackend
  • Linux基本操作——网络操作文件下载
  • 1、RocketMQ 核心架构拆解
  • $在R语言中的作用
  • mdadm 报错: buffer overflow detected
  • 数字电子技术基础(五十五)——D触发器
  • 5月13日观测云发布会:这一次,我们不只是发布产品
  • 项目改 pnpm 并使用 Monorepo 发布至 npm 上
  • ChatGPT-4o:临床医学科研与工作的创新引擎
  • SQL 子查询
  • 深入浅出理解常见的分布式ID解决方案
  • 理解网站导航文件:robots.txt、sitemap.xml与LLMs.txt的全面解析
  • 控制mac地址表端口安全
  • 前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件
  • 【免费】2003-2018年全国各地级市进出口总额数据
  • Nginx 性能调优与深度监测全攻略
  • AI——认知科学中的认知架构建立步骤与方法
  • 【Prometheus】业务指标与基础指标的标签来源差异及设计解析(扩展版)
  • oracle 数据库sql 语句处理过程
  • LeetCode 热题 100_最长回文子串(93_5_中等_C++)(暴力破解法;动态规划)
  • LLaMA-Factory微调DeepSeek-R1-Distill-Qwen-7B
  • 2025年数字藏品行业DDoS攻防指南:技术升级与合规防御双轨制