AHB总线协议

2023-11-09

1. 简介

        AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计采用,它规定了AHB (Advanced High-performance Bus)、ASB (Advanced System Bus)、APB (Advanced Peripheral Bus)。AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。ASB是AHB的一种替代方案。

1.1 AHB总线的架构

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


1.2 AHB基本特性

  • Burst传输
  • Split事务处理
  • 单周期master移交
  • 单一时钟沿操作
  • 无三态
  • 更宽的数据总线配置(64/128)
  • 流水线操作
  • 可支持多个总线主设备(最多16个)

2. AHB总线的组成

        AHB总线由Master、Slave和Infrastructure构成。Infrastructure由arbiter、数据多路、地址控制多路、译码器构成。
  • 主设备Master
发起一次读/写操作
某一时刻只允许一个主设备使用总线
  • 从设备Slave
响应一次读/写操作
通过地址映射来选择使用哪一个从设备
  • 仲裁器arbiter
允许某一个主设备控制总线
  • 译码器decoder
通过地址译码决定选择哪一个从设备
  • 总线可以分为三组
        写数据总线(HWDATA)
        读数据总线(HRDATA)
        地址控制总线(HADDR)

3. 信号描述

Name Source To Description
HCLK clock source 各module 总线时钟,上升沿采样
HRESETn reset controller 各module 总线复位,低电平有效
HADDR[31:0] Master decoder
mux to slave
arbiter
32位系统地址总线
HTRANS[1:0] Master mux to slave 当前传输类型NONSEQ, SEQ, IDLE, BUSY
HWRITE Master mux to slave 1为写,0为读
HSIZE[2:0] Master mux to slave 每一个transfer传输的数据大小,以字节为单位,最高支持1024位
HBURST[2:0] Master mux to slave burst类型,支持4、8、16 burst,incrementing/wrapping
HPROT[3:0] Master mux to slave 保护控制信号,需要slave带保护功能,一般不用
HWDATA[31:0] Master mux to slave 写数据总线,Master到Slave
HRDATA[31:0] Slave mux to master 读数据总线,Slave到Master
HREADY Slave mux to master
arbiter
高:Slave指出传输结束
低:Slave需延长传输周期
HRESP[1:0] Slave mux to master
arbiter
Slave发给Master的总线传输状态OKAY, ERROR, RETRY, SPLIT
HSELx Decoder slave slave选择信号

AHB仲裁信号
Name Source To Description
HBUSREQx Master arbiter master给仲裁器的请求获得总线使用权的请求信号,最多支持16个master
HLOCKx Master arbiter 如果一个master希望自己在传输期间不希望丢掉总线,则需要向仲裁器发送这个锁定信号
HGRANTx arbiter master 授权信号,当前bus master x的优先级最高。当HREADY和HGRANTx同时为高时,master获取系统总线的权利
HMASTER [3:0] arbiter 具有split功能的slave 仲裁器为每一个master分配的ID,指出哪个主设备正在进行传输,提供进行split的信息
HMASTLOCK arbiter 具有split功能的slave 表示当前的master正在执行Locked操作。这个信号和HMASTER有这相同的时序
HSPLITx[15:0] slave arbiter 从设备用这个信号告诉仲裁器哪个主设备运行重新尝试一次split传输,每一位对应一个主设备

4. 总线操作

        有需要占用总线的Master向arbiter发出请求,arbiter授权给指定的master。任一时间周期只有一个master可以接入总线,对其指定的slave进行读写操作。
        获得授权的总线开始AHB传输,首先发出地址和控制信号,提供地址信息、传输方向、带宽和burst类型。总线统一规划slave的地址,译码器根据地址和控制信号确定哪个slave与master进行数据通信。数据传输通过数据总线完成。为避免出现三态总线,AHB将读写总线分开,写数据总线用于从master到slave的数据传输,读数据总线用于从slave到master的数据传输。每笔传输包括一个地址和控制周期,一个或多个数据周期。地址和控制周期不能被扩展,因此slave必须在一个周期内采样地址信号。数据周期可以通过HREADY信号扩展,但HREADY为低时给传输加入一个等待状态以使slave获得额外的时间来提供或采样数据,另外slave通过响应信号HRESP反映传输状态。
        一般情况下master完成完整的burst传输,arbiter才会授权给其他的master接入总线,然而为避免过大的判决延迟,arbiter也可能打断burst传输。在这种情况下master必须再次接入总线以进行中断的burst剩余部分的传输。

5. 基本传输

        一笔传输由如下两部分组成:
        地址阶段:一个周期
        数据阶段:一个或多个周期,由HBURST信号决定需要几个有效周期,可以由HREADY发出请求延长一个周期。

5.1 没有等待状态的single transfer

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

5.2 slave插入等待状态的single transfer

        slave可以及时处理master请求,但也可能存在slave太慢不能立即处理的情况。这时需要让master稍微等一等,需要slave插入一些等待的状态。如下图所示,HREADY信号在第二和第三周期拉低,意在告诉master,slave不能立即处理,需要master等待2个周期。在这里需要注意2点:
        如果是写操作,master需要在等待期间保持写数据不变,直到本次传输完成;
        如果是读操作,slave不需要一开始就给出数据,仅当HREADY拉高后才给出有效数据。

5.3 多个single transfer的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才能发起操作。

5.4 递增burst

        T1,master传入地址和控制信号,因为是新的burst开始,transfer的类型是NONSEQ;
        T2,由于master不能在第二个周期里处理第二拍,所以master使用BUSY transfer来为自己延长一个周期的时间。注意,虽然是延长了一个周期,但是master需要给出第二个transfer的地址和控制信号;
        T3,slave采集到了master发来的BUSY,知道master需要等待一拍,所以slave会忽略这个BUSY transfer;
        T3,master发起了第二个transfer,因为是同一个burst的第二个transfer,所以transfer的类型是SEQ;
        T5,slave将HREADY信号拉低,告诉master需要等待一个周期;
        T8时刻完成最后一个transfer。
        需要注意的 虽然slave会忽略掉BUSY transfer,但是master也需要给出下一拍的地址和控制信号。

5.5 wrapping 4-beat burst

        跟之前唯一的区别在于地址的不同,在0x3C地址之后,根据回环的地址边界,第三拍的地址变为0x30。一共四拍,4个地址,每个地址各不相同,这四个地址是一个回环范围。起始地址决定了回环操作的回环范围。

5.6 递增4拍burst

        和上面的基本一致,只不过地址在0x30并不回环,而是递增。

6.控制信号

HTRANS[1:0]
传输类型
Description
00 IDLE 主设备占用总线,但没进行传输
两次burst传输中间主设备可发IDLE
此时就算slave被使能,也不会从总线上获取任何的数据信号。如果此时salve被选中,那么每一个IDLE周期slave都要通过HRESP[1:0]返回一个OKAY响应
01 BUSY 主设备占用总线,但是在burst传输过程中还没有准备好进行下一次传输
一次burst传输中间主设备可发BUSY
这时slave不会从总线上收取数据而是等待,并且通过HRESP[1:0]返回一个OKAY响应。需要注意的是,这个transfer需要给出下一拍的地址和控制信号,尽管slave不会去采样。
10 NONSEQ 表明一次单个数据的传输或者一次burst传输的第一个数据
地址和控制信号与上一次传输无关
11 SEQ burst传输接下来的数据
地址和上一次传输的地址是相关的,这时总线上的控制信号应当与之前的保持一致,地址视情况递增或者回环。

HSIZE[2:0] Size Description
000 8 bits Byte
001 16 bits Halfword
010 32 bits Word
011 64 bits -
100 128 bits 4-word line
101 256 bits 8-word line
110 512 bits -
111 1024 bits -

  • Burst传输类型
        burst不能超过1K地址边界。

HBURST[2:0] 类型 Description
000 SINGLE Single transfer
001 INCR Incrementing burst of unspecified length
010 WRAP4 4-beat wrapping burst
011 INCR4 4-beat increment burst
100 WRAP8 8-beat wrapping burst
101 INCR8 8-beat increment burst
110 WRAP16 16-beat wrapping burst
111 INCR16 16-beat increment burst

  • 响应信号
        master发起一笔传输后,slave可以决定这笔传输的进程,而master不能取消已经发出的传输。slave通过HREADY信号反映传输是否完成,通过HRESP[1:0]反映传输的状态。
        slave可以如下方式完成一笔传输:
    • 立即完成一笔传输;
    • 延迟一个或几个周期完成传输;
    • 传输失败返回error;
    • 延迟传输,释放总线。
  • 传输完成HREADY
        为高时传输完成,为低时传输需要延迟。
        传输响应HRESP[1:0]
        00: OKAY
        01: ERROR
        10: RETRY
         传输未完成,请求主设备重新开始一个传输,arbiter会继续使用通常的优先级
        11: SPLIT
         传输未完成,请求主设备分离一次传输,arbiter会调整优先级方案以便其他请求总线的主设备可以访问总线
  • 地址译码
        地址译码器用于为总线上每个slave提供选择信号HSELx,选择信号是通过组合逻辑对地址码译码产生的。只有当前的数据传输完成后(HREADY为高),slave才会采样地址和控制信号以及HSELx。在一定条件下可能会出现这样的情况:产生HSELx信号而HREADY为低,在当前传输后slave会改变。
        每个slave最小的地址空间为1KB,所有的master的burst传输上限也是1KB,如此设计保证了不会出现地址越界问题。当一个设计不会用到所有的地址空间时,可能出现访问到一个不存在的地址的情况,这就需要增加一个附加的默认slave来为上面的情况提供一个响应。当SEQ或NONSEQ传输访问到一个不存在的地址,默认slave应该提供ERROR响应;当IDLE或BUSY传输访问到一个不存在的地址,默认slave会响应OKAY。地址译码器会带有实现默认slave的功能。
  • 仲裁
        仲裁机制保证了任意时刻只有一个master可以接入总线。arbiter决定哪个发出接入请求的master可以接入总线,这通过优先级算法实现。AHB规范并没有给出优先级算法,设计者需要根据具体的系统要求定义。一般情况下arbiter不会中断一个burst传输,将总线接入权让给其他master。当然未定义长度的burst传输是可以打断的,这要看优先级算法是如何规定的。如果一笔burst被打断,master再度获得接入权限时,会传递剩余的部分。如一笔长度为INCR8的传输在传递3 beat后被打断,master再次获得接入授权后,会继续传输剩余的5 beat,剩余部分可以由一个SINGLE和一个INCR4组成,或者一个INCR。
        HBUSREQx:master向arbiter发出接入请求的信号。
        HLOCKx:指示是否要进行不可中断的传输,这一信号与HBUSREQx同时由master向arbiter发出。
        HGRANTx:arbiter产生指示master获得授权,当HGRANTx信号为高同时HREADY为高时,master可以向总线传输地址信号。
        HMASTER[3:0]:arbiter产生指示哪个master获得授权,这一信号用于地址控制多路来选择哪个master接入总线。
        HMASTERLOCK:arbiter产生指示当前传输是否为锁定序列传输。
        HSPLIT:供支持SPLIT传输使用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AHB总线协议 的相关文章

  • 实训笔记

    2018 12 17 上午 大数据概述 前置要求 java SE的基本变成 了解LINUX常用基本命令 使用工具 linux版本 CentOS 6 4 Hadoop CDH 5 7 TB PB EB 大数据在技术架构上带来的挑战 对现有数据
  • ML算法——Support Vector Machine随笔【机器学习】

    文章目录 4 Support Vector Machine SVM 4 1 理论部分 4 1 1 更优的决策边界 4 1 2 解决低维不可分问题 4 2 sklearn 实现 4 2 1 SVM 分类 SVC 4 2 2 SVM回归 SVR
  • c++与java的枚举

    Java枚举和C 枚举的主要区别为两点 一是C 中的枚举中只能定义常量 主要用于switch子句 二是C 中的枚举常量可以直接和数值型变量进行各种数学运算 java的枚举 枚举的是在Java 1 5SE 中开始支持的 以下为Java枚举的基
  • SpringBoot 提示:java.lang.IllegalStateException: No primary or default constructor found for interface

    SpringBoot集成MyBatis Plus 实现HTPP POST提交实体对象提示如下错误片段 c c c c a BaseControllerExceptionHandler 运行时异常 java lang IllegalState
  • spring cloud 常用的核心组件以及作用

    1 spring cloud 常用的核心组件 服务注册与发现 Netflix Eureka 客户端负载均衡 Netflix Ribbon 服务熔断器 Netflix Hystrix 服务网关 Netflix Zuul 服务接口调用 Netf
  • glUniform详解

    glUniform详解 glUniform API官方文档解释 Name glUniform Specify the value of a uniform variable for the current program object C
  • uniapp 引入 Vant 从零开始

    第一步 1 这里创建uniapp的项目 本人选择的是Vue2的 第二步 打开 Vant 官网 这里是使用Vant2的 切记别选择Vant3 不知道的可以点击 这里进入 Vant官网 点击上面的 微信小程序版本 进入这个界面后 点击 快速上手
  • LeetCode-重建二叉树

    先利用前序遍历找根节点 前序遍历的第一个数 就是根节点的值 在中序遍历中找到根节点的位置 k 则 k 左边是左子树的中序遍历 右边是右子树的中序遍历 假设左子树的中序遍历的长度是 l 则在前序遍历中 根节点后面的 l 个数 是左子树的前序遍
  • 51单片机点灯实验(含程序+仿真+硬件实验)

    一 实验原理 LED发光二极管核心为PN结 单向导电 有阴极和阳极 两极均可以控制 需要亮起来 电流不能过大和过小 过大 烧坏二极管 过小 电光效应弱 发光不明显 引入 限流电路 为减少I O引脚的消耗 一般控制一极 有阳极控制法和阴极控制
  • 【精华】搭建个人Web服务器_LAMP

    目录 项目名称 搭建个人Web服务器 LAMP 1 搭建模式 2 搭建步骤 3 常见问题解决方案 项目名称 搭建个人Web服务器 LAMP 1 搭建模式 LAMP 即Linux系统 Apache服务器 MySQL PHP 2 搭建步骤 第一
  • 计算机保存图片找不到桌面,保存的图片在桌面但是找不到。怎么办?

    1win7保存文件找不到桌面 文件有可能被隐藏 2win7保存文件找不到桌面 组策略发生异常 3win7保存文件找不到桌面 保存路径错误 4win7保存文件找不到桌面 explorerwin7保存文件找不到桌面 exe故障 调出 隐藏 文件
  • 设计模式-2.2类之间的6种关系

    1 继承关系 2 实现关系 3 依赖关系 4 关联关系 5 聚合关系 6 组合关系 7 类图建模步骤 1 继承 extends 泛化 在UML中用带空心三角形的实线表示 指向父类 2 实现 implements 类实现接口 可多个 虚线空心
  • 第8章 Stata主成分分析与因子分析

    目录 8 1主成分分析 8 2因子分析 1 主成因子法 2 主因子法 3 迭代公因子方差的主因子法 4 最大似然因子法 在进行数据统计分析时 还往往会遇见变量特别多的情况 而且很多时候这些变量之间还存在着很强的相关关系或者说变量之间存在着很

随机推荐

  • 万字长文深入浅出理解ChatGPT工作原理

    本文转自 原创 万字长文深入浅出理解ChatGPT工作原理 qq com AIGC简要介绍 AIGC是什么 AIGC AI Generated Content AI生成内容 对应我们的过去的主要是 UGC User Generated Co
  • 如何通过Anaconda创建虚拟环境

    做深度学习的同学们应该都受到配置环境的困扰 我也是饱受摧残 本文介绍几个踩过的坑 在anaconda下创建一个虚拟环境 文件名为 pytorch python版本是 3 8 conda create n pytorch python 3 8
  • 【GIT 使用教程 linux 环境】

    1 GIT基本使用 1 linux环境下安装GIT sudo apt get install git 2 全局账号配置 git config global user name yourname git config global user
  • vue v-for循环

    vue v for循环中通过一个变量控制不同的下拉框 默认是全部展开 当点击每个表格的下拉图标 就会显示或隐藏 刚开始做的时候就通过一个变量进行控制 导致点击一个下拉图标就会控制所有有的表格下拉 所以应该是给每个表格对应的集合中加一条属性来
  • autojs常见报错及解决

    autojs常见报错及解决 期待大家在下面评论补充 更多基础加autojs交流群553908361喽 一键加群 点击加群 1 需要在ui模式下运行才能使用该函数 file android asset modules ui js 15 Err
  • Antv/G2 柱状图

    Antv G2 教程 G2 是一套基于图形语法理论的可视化底层引擎 以数据驱动 提供图形语法与交互语法 具有高度的易用性和扩展性 使用 G2 无需关注图表各种繁琐的实现细节 一条语句即可使用 Canvas 或 SVG 构建出各种各样的可交互
  • MacbookPro M1芯片对“cp -r” 命令支持有误,慎重购买

    MacBook2021 M1 MAXPro电脑问题锦集 问题1 开启硬盘加密 开机闪屏 问题详述 在系统偏好设置中 打开安全与隐私 在弹出窗口中切换到第二个页签 文件保险箱 启用文件保险箱功能 然后关机重新启动电脑 在输入密码回车后进度条刚
  • 开发时写TestCase的一些经验

    今天修复完一个业务代码的 bug 手动测试没有问题 但写测试用例出错 在对代码很自信的情况下 因为手动测试过了 我干脆省略了这个步骤 然而偷懒的事情早晚会暴露出来 用 Git 提交到远程时在 Code Review 那里的系统集成测试老是失
  • 【SVM回归预测】基于支持向量机的数据回归预测(libsvm)附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信
  • 如何处理企业间的人际关系

    如何处理企业之间的人际关系呢 其实这个话题很多人一直都迷茫 包括我在内 我也还没有学会如何处理企业之间的人际关系 这是一门大学问 可惜真正写文章的人没有感受 会写文章的人表达不出来 所以都比较少看到诸类的文章 即使有类似的文章 可是以理论化
  • 说一说xgboost和lightgbm的区别是什么

    前面提到了 LightGBM是Xgboost的更高效实现 由微软发布 XGBoost的并行是在特征粒度上的 我们知道 决策树的学习最耗时的一个步骤就是对特征的值进行排序 因为要确定最佳分割点 XGBoost在训练之前 预先对数据进行了排序
  • JAVA 基础题

    1 面向对象有哪些特征 答 继承 封装 多态 2 JDK与JRE的区别是什么 答 JDK是java开发时所需环境 它包含了Java开发时需要用到的API JRE是Java的运行时环境 JDK包含了JRE 他们是包含关系 3 Java有哪几种
  • Umask的含义

    Umask的含义 umask 022中 022 是八进制的写法 如果换成二进制是000010010 在unix中文件权限是三类用户 三种权限 三类用户分别是文件所有者user u 文件所有者所在主群组group g 其它用户others o
  • Vue脚手架安装和初次使用

    1 安装淘宝镜像 npm config set registry https registry npm taobao org 2 全局安装脚手架 npm install g vue cli 3 切到要创建项目的目录 创建项目 本例选择目录为
  • windows DHCP服务器部署

    目录 一 关于windows dhcp服务器 1 1 关于dhcp 1 2 DHCP续约 二 DHCP服务器部署 2 1 关于DHCP服务器 2 2部署DHCP服务器 2 3 保留特定IP地址 2 4 相关dos命令使用 2 5 多个地址池
  • 如何在Mac OS上从Photoshop 2020作为插件访问Topaz DeNoise AI?

    TopazDeNoise AI for mac是Topaz系列中的一款AI图像降噪软件 topaz denoise ai破解版提供了数百万个噪声 清晰图像的算法 可以快速消除图像中噪音并且保留原始图像细节 人工智能降噪Topaz DeNoi
  • [Python从零到壹] 六十七.图像识别及经典案例篇之基于卷积神经网络的MNIST图像分类

    七月太忙 还是写一篇吧 欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给
  • 如何从RNN起步,一步一步通俗理解LSTM

    转自 https blog csdn net v july v article details 89894058 如何从RNN起步 一步一步通俗理解LSTM 前言 提到LSTM 之前学过的同学可能最先想到的是ChristopherOlah的
  • Flask 扩展 用户会话

    pip install flask login 接下来创建扩展对象实例 from flask import Flask from flask login import LoginManager app Flask name login ma
  • AHB总线协议

    1 简介 AHB总线规范是AMBA总线规范的一部分 AMBA总线规范是ARM公司提出的总线规范 被大多数SoC设计采用 它规定了AHB Advanced High performance Bus ASB Advanced System Bu