AMBA总线协议(7)——AHB(五):传输仲裁

news2025/1/12 20:42:25

一、前言

           在之前的文章中我们讨论了AHB的很多传输细节,主要有控制信号,地址信号的译码,从机的响应等,其中重点介绍了双周期响应,最后介绍了数据总线及端结构,在本文中我们将继续介绍AHB传输的仲裁机制。

        仲裁机制被用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成 SPLIT 传输的请求。

        任何没有能力执行 SPLIT 传输的从机不需要了解仲裁的过程,除非它们需要检测因为总线所有权改变而导致突发传输不能完成的情况。

二、信号描述

        以下给出对每个仲裁信号的简短描述:

1、HBUSREQx(总线请求信号)

        被总线主机用来请求访问总线的总线请求信号。每个总线主机都有自己的连接到仲裁器的 HBUSREQx 信号,并且任何一个系统中都可以有高达 16 个独立的总线主机。

2、HLOCKx(锁定信号)

        由主机在请求总线的同时确定锁定信号。这提示仲裁器主机正在执行一系列不可分割的传输,并且一旦锁定传输的第一个传输已经开始,仲裁器不能授予任何其他主机访问总线。在寻址到所用的地址之前,必须保证HLOCKx信号在一个周期内有效,以防止仲裁器改变授权信号。

3、HGRANTx(授予信号)

        授予信号由仲裁器产生,并且表示相关主机是当前请求总线的主机中优先级最高的主机,(优先)考虑锁定传输和 SPLIT 传输。主机在 HGRANTx 为高时获取地址总线的所有权,并且在 HCLK 的上升沿 HREADY 为高电平。

4、HMASTER[30]

        仲裁器使用 HMASTER[3 0] 信号表示哪一个主机当前被授予总线,并且该信号可被用来控制中央地址和控制多路选择器。有 SPLIT 传输能力的从机也可以请求主机的序号,以便它们能够提示仲裁器哪个主机能够完成一个 SPLIT 传输。

5、HMASTLOCK

        仲裁器通过生效 HMASTLOCK 信号指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。

6、HSPLIT[150]

        这是 16 位有完整分割能力的总线。被有分割( SPLIT )能力的从机用来指示哪个总线主机能够完成一个 SPLIT 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。

三、请求总线访问

        总线主机使用 HBUSREQx 信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求。然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。

        如果主机请求锁定访问(总线),那么主机也必须生效(assert,也有译作断言) HLOCKx 信号来提示仲裁器其他主机不应该被授予总线。

        当一个主机被授予总线,并且正在执行一个固定长度的猝发,那么就没有必要继续请求总线以便完成传输。仲裁器监视猝发的进程,并且使用 HBURST[2:0]信号来决定主机请求了多少个传输。如果主机希望在当前正在进行的传输之后执行另一个猝发,那么主机需要在猝发中重新生效请求信号。

        如果主机在一次猝发当中失去对总线的访问,那么它必须重新生效 HBUSREQx 请求线以重新获取访问总线。对未定长度的猝发,主机应该继续生效请求直到已经开始最后一次传输。

        在未定长度的猝发结束时,仲裁器不能预知何时改变仲裁。对于主机而言有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线,并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机并没请求访问总线,那么它驱动传输类型 HTRANS 来表示空闲传输显得很重要。  

四、授权总线访问

        仲裁器通过生效适当的 HGRANTx 信号来表示请求总线的主机中哪个是当前优先级最高的。当前传输完成(由 HREADY 为高时所表示),那么主机将被授予(总线)并且仲裁器将改变 HMASTER[30]信号来表示总线主机序号。

        下图表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程。

        下图表示在移交总线时等待状态的影响:

        数据总线的所有权延时在地址总线的所有权之后。一次传输无论何时完成(由HREADY为高时所表示),占有地址总线的主机才能使用数据总线,并且将继续占有数据总线直到传输完成。
        下图表示当在两个总线主机之间移交总线时数据总线的所有权是如何转移的:
        下图 表示一个仲裁器如何能在一次突发传输结束时移交总线的例子:

          仲裁器在倒数第二个(最后一个之前的)地址被采样时改变 HGRANTx 信号。新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样。 图 3.19表示了HGRANTx HMASTER信号是如何在系统中使用的:  

 五、猝发提前终止

        通常仲裁器在猝发传输结束之前不会将总线移交给一个新的主机。但是,如果仲裁器决定猝发必须被提前终止以防止过长的总线访问时间,那么它可能会在一个猝发完成之前将(总线)授予转移给另外一个总线主机。
        如果主机在猝发传输中间失去了对总线的所有权,那么它必须重新生效总线(请求)以完成猝发。主机必须确保 HBURST 和 HTRANS 信号都被更新,以反映主机不再执行一个完整的 4 8 或者 16 拍的猝发。
        例如,如果一个主机仅完成了一个 8 拍猝发的 3 个传输,那么当它重新获得总线时,必须使用一个合法的猝发编码来完成剩下的 5 个传输。主机可以使用任何合法组合,因此无论是5拍未定长度的突发或者是 4 拍固定长度的猝发,然后跟上一个单拍未定长度的猝发都是可以的。

六、锁定传输

         仲裁器必须监视来自各个主机的 HLOCKx 信号,以确定何时主机希望执行一个锁定连续传输。之后,仲裁器负责确保没有其他主机被授予总线,直到锁定传输完成。

        在一个连续锁定传输之后,仲裁器总是为一个附加传输保持主机被授予(总线),以确保锁定序列的最后一个传输成功完成,并且没有接收到 SPLIT 或者 RETRY 响应。因此,建议但不规定,主机在任何锁定连续传输之后插入一个空闲传输,以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。

        仲裁器也负责生效 HMASTLOCK 信号,HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的,因此必须在其他主机被授予总线之前被处理掉。

七、默认主机总线

        每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时,该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。

        如果没有请求总线,那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机。

        授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制,并且也是预先进入低功耗操作模式的有用步骤。

        如果其他所有主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。

 八、小结

        本文中,我们重点介绍了AHB传输的仲裁,首先介绍了仲裁相关的信号,然后分别介绍了请求总线访问,授权总线访问,猝发提前终止,锁定传输和默认主机总线,在后续文章中将继续介绍AHB的分割传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/915400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用大模型反馈故障的解决方案

背景 观测云有两个错误巡检脚本,RUM 错误巡检和 APM 错误巡检,代码均开源。 错误巡检的主要目的是发现新出现的错误消息(error stack),原有的巡检在上报了相应的事件报告后,只是定位了问题,并没有给出合适的解决方案。…

数据分析实战│价格预测挑战【文末赠书】

文本分析是指对文本信息的表示及特征项的选取,商品文本的描述能够反映特定立场、观点、价值和利益。考虑到网上海量的商品数量,对产品的定价难度很大,因此可以使用商品描述帮助商户定价。比如,服装具有较强的季节性价格趋势&#…

PHP 创业感悟交流平台系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 创业感悟交流平台系统(含论坛)是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载: https://download.csdn.…

C++中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点

C中cin >> str 和 string类的getline(cin, str) 用来读取用户输入的两种不同方式的不同点 在C中&#xff0c;string类是标准库提供的字符串类&#xff0c;它可以帮助我们处理和操作字符串。它在<string>头文件中定义。string类提供了一系列成员函数和操作符&#…

Numpy入门(5)—应用举例

NumPy应用举例 5.1 计算激活函数Sigmoid和ReLU 使用ndarray数组可以很方便的构建数学函数&#xff0c;并利用其底层的矢量计算能力快速实现计算。下面以神经网络中比较常用激活函数Sigmoid和ReLU为例&#xff0c;介绍代码实现过程。 计算Sigmoid激活函数 计算ReLU激活函数 使…

C++ vector模拟实现

建议将vector的模拟实现写在头文件中&#xff0c;测试使用部分写在.cpp文件中 vector是类模板&#xff0c;被封装在命名空间中 部分源码&#xff1a;&#xff08;删除某些内容后&#xff09; vector模拟实现的代码&#xff1a; #include<assert.h> namespace djx {tem…

【Git分支操作---讲解二】

Git分支操作---讲解二 查看分支创建分支切换分支修改分支切换分支合并分支合并分支【冲突】(只会修改主分支不会修改其他分支)什么时候会有冲突&#xff1f; 查看分支 创建分支 切换分支 修改分支 切换分支 合并分支 合并分支【冲突】(只会修改主分支不会修改其他分支) 什么时…

国产精品:讯飞星火最新大模型V2.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

FL Studio2023最新版本21.1中文水果音乐编曲工具

虚拟乐器和真实乐器的区别&#xff1f;真实乐器指的是现实中需要乐手演奏的乐器&#xff0c;而虚拟乐器是计算机音乐制作中编曲师使用的数字乐器。FL Studio虚拟乐器插件有哪些&#xff1f;下文将给大家介绍几款FL Studio自带的强大虚拟乐器。 一、虚拟乐器和真实乐器的区别 …

JDK21真的来了:虚拟线程正式发布及十多项新特性!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

Docker容器与虚拟化技术:Docker-Compose单机编排工具

目录 一、理论 1.Docker-Compose 二、实验 1. Docker Compose 安装部署 2.Docker Compose撰写nginx 镜像 3.Docker Compose撰写tomcat 镜像 三、问题 1.Docker Compose 和 Dockerfile 的区别 四、总结 一、理论 1.Docker-Compose &#xff08;1&#xff09;使用场景…

渗透率超90%!智能座舱赛道迎来「存量」替代升级大周期

智能座舱赛道&#xff0c;正在迎来新一轮芯片替代潮。 相比于智能驾驶领域&#xff0c;座舱主机芯片市场并不「性感」&#xff0c;但巨大的存量替代升级机会&#xff0c;也不容小视。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口&am…

通用语言模型蒸馏-GLMD

文章目录 GLMD一、PPT内容论文背景P1 BackgroundP2 Approach 相关知识P3 知识蒸馏P4 语言建模词预测逻辑 方法P5 两阶段词汇预测蒸馏P6P7 词汇压缩 实验结果P8 results 二、论文泛读2.1 论文要解决什么问题&#xff1f;2.2 论文采用了什么方法&#xff1f;2.4 论文达到什么效果…

C++学习笔记---- 引用

1、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…

关于Map的理解

Shuffle中进行了分组聚合,而Reduce对分组聚合后的数据进行重新计算. 切片对应的是MapTask 分区对应的是ReduceTask 也可以通过设定reduce数量来调整分区数 分区规则: 设定为1时, 根本不走自定义分区器,而是Hash 如果分区数大于规则 空 如果分区数小于规则(分区数不为1) 报错 …

《金字塔原理》(表达的逻辑)

前言&#xff1a;在思考和表达上&#xff0c;很多时候显得很混乱&#xff0c;源于不了解结构化思想、表达&#xff0c;如何让话讲得更有逻辑&#xff1f;事做得更有条理&#xff1f;接触到了一本书&#xff1a;《金字塔原理》&#xff0c;通过这本书的学习&#xff0c;希望可以…

数字化营销怎么做?数字化营销系统落地重点一览

如何抓住数字化机遇&#xff0c;企业取得营销突破&#xff1f;如果说数字是一种技术、工具或数据等无形的资源&#xff0c;那么数字化则代表了某种动态的过程、资源和能力&#xff0c;如同企业经营一样始终处于流动的过程之中。当前&#xff0c;由于科技水平的不断发展&#xf…

神经网络入门

前言 本文主要介绍最基础的神经网络&#xff0c;包括其结构&#xff0c;学习方法&#xff0c; C \texttt{C} C 的实现代码。 Python \texttt{Python} Python 的代码可以搜索互联网得到。 前排提示&#xff1a;本人涉及一丁点数学知识。 神经网络的结构 神经网络包括多个层…

【ARM】Day8 中断

1. 思维导图 2. 实验要求&#xff1a; 实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反 key1 ----> LED3灯状态取反 key2 ----> LED2灯状态取反 key3 ----> LED1灯状态取反 key3.h #ifndef __KEY3_H__ #define __KEY3_H__#in…

每日两题 203移除链表元素 104二叉树的最大深度

203 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入…