AMBA总线协议(4)——AHB(二)

目录

一、前言

二、AHB操作概述

三、AHB 基本传输

1、简单传输        

2、带有等待的传输

3、多重传输

四、AHB传输类型

五、小结


一、前言

         在之前的文章中对于AMBA AHB做了一个简单的介绍,AHB 主要用于高性能模块(如 CPU、DMA 和 DSP 等)之间的连接,是Soc所经常采用的一种总线协议,AHB可以支持多主机多从机结构。设备之间的互联使用一个中央多路选择器互联方案。本文中我们将讲述AMBA AHB传输的详细操作。

二、AHB操作概述

        (1)在开始一个AMBA AHB传输前,主机必须得到访问总线的授权。主机向仲裁器发出请求信号,然后仲裁器会指示这个主机何时能够得到授权,开始对总线的访问。

        (2)主机得到访问授权后,驱动地址和控制信号,开始一次AHB传输。这些信号提供传送地址,传送方向,传送带宽,这次传送是否是 burst(猝发传输)传送等信息。AHB支持两种类型的猝发传输:增量猝发(地址递增)和回卷猝发(地址达到边界后回卷)。

        (3)在 AHB 上,一次传送包括给出地址、控制信号周期与数据周期。地址与控制信号周期最少需要一个周期,但是会因为数据的原因多出几个周期。数据周期可以通过 HREADY 信号来延迟。地址不长期有效,所以所有从机必须在传输地址时采样地址。然而,通过 HREADY 信号可以延长数据。当该信号为低时导致在传输中插入等待状态同时允许从机有额外的时间提供或者采样数据。

        (4)在传输中从机通过使用响应信号HRESP[1:0]来表示状态:

OKAY :OKAY 响应用来表示传输进展正常并且当 HREADY 变高时表示传输成功完成。

ERROR :ERROR 响应表示发生了一个传输错误并且传输失败。

RETRY 和 SPLIT: RETRY 和 SPLIT 两个传输响应都表示传输不能立刻完成,但是总线主机应该继续尝试传输。

        在正常操作下,在仲裁器授权其他主机访问总线前,允许一个主设备以一个特定的猝发方式完成所有的传输操作。然而,为了避免过多的仲裁延时,仲裁器可能会把一个猝发进行分解。在这种情况下,主机必须重新获得仲裁器授权。

三、AHB 基本传输

        一个AHB传输由2个不同的部分组成:

        (1)地址周期,持续一个时钟周期

        (2)数据周期,可能要求几个周期,通过使用 HREADY信号实现

1、简单传输        

        下图给出了一个简单传输的例子,没有等待状态:

​​​​​​​

       在读图的时候首先要注意:图中的HWDATA和HRDATA分别表示写数据总线和读数据总线,这两个信号出现在同一张图中,不是因为在一次传输中这两个信号同时起作用,这只是为了方便读者能在一张图中同时看到读操作和写操作,但是具体分析读操作和写操作时,应该忽略另一个信号的存在,基本AMBA所有的手册都有类似的性质。

        在一个无等待状态的简单传输中:

        (1)图中①处,在第一个HCLK的上升沿,进入地址周期(Address phase)主机会将地址和控制信息准备好,驱动到总线上。

        (2)图中②处,在第二个HCLK的上升沿,从机采样到地址和控制信息。此时进入数据模式,从机在完成地址和控制信息的采样后会驱动正确的响应信号。

        (3)图中③处,在第三个HCLK的上升沿,主机采样到从机给出的响应信号。

        这个简单的例子就说明了在不同的时钟周期,如何产生地址周期和时钟周期。实际上,任何传输的地址周期可以发生在前一个传输的数据周期。这就是我们常说的流水线结构,允许更高性能的操作,同时为一个从设备提供了充足的时间,用于对一个传输的响应。

2、带有等待的传输

        传送完成时间因等待而延迟,这是由于寻址到较慢的从机所造成。当 HREADY 被从机拉低时(也就是从机告知主机,自己还没有准备好)会发生等待状态。需要延迟传送的周期时,就会在数据期间将 HREADY 拉低,此时地址与数据都必须延伸。

        其实很好理解,在刚才的简单传输中,主机(也就是我们的数据传输的发起者)要向从机(数据传输的接收者)发送数据,主机给出地址和控制信号,双方一拍即合,从机很果断地收下了地址和控制信息,并迅速给主机回应了。一次愉快的传输结束了。

        在此时的等待传输过程中,主机给出了地址和控制信息,但是从机不乐意了,从机表示自己还有其他事情要忙,直接在自己大门上的挂上了暂停营业的信息(HREADY拉低),主机吃了闭门羹,但是又不想放弃这一次传输,那没办法只能等了,等从机忙完,终于撤下了暂停营业的信息(HREADY 拉高),给了主机需要的回应,一次有等待的传输就结束了。

        好了言归正传,我们来看一个有等待的传输具体是怎么进行的:

        (1) 图中①处,在第一个HCLK的上升沿,进入地址周期(Address phase)主机会将地址和控制信息准备好,驱动到总线上。

        (2)图中②处,在第二个HCLK的上升沿,从机采样到地址和控制信息。此时进入数据模式,但是从机并没有准备好数据,在紧连着的下一个HCLK的上升沿处,主机发现从机没有给出HREADY高的信息,所以只能进行等待。

        (3)图中③处,此时从机准备好了数据,拉高了HREADY信号,主机顺利拿到了想要的回应,传输结束。

        这里我们分别看以下读写操作,在进行写操作的时候,由于从机始终没有准备好,所以主机必须保持HWDATA数据是有效的。在读操作的时候,从机就比较随意了,自己准备好了就拉高HREADY信号,只要保证在主机第一次采样到HREADY高的那一个瞬间,自己的数据HRDATA有效就可以了,其他时间无所谓。

3、多重传输

        当传输以这样的方式扩展时,在随后传输的地址周期中有副作用。下图说明了传输3个无关的地址A,B,C。

        (1)传输地址A,C都是零等待状态 

        (2)传输地址B时一个等待周期

        (3)传输的数据周期扩展到地址B,传输的扩展地址周期影响到地址C

四、AHB传输类型

        AHB总共有4种不同的传输类型,用HTRAN[1:0]表示:

HTRAN[1:0]类型描述
00IDLE(空闲)
        表示没有数据传输的要求。此时主机得到了使用总线的授权,但是没有数据要进行传输。
        从机必须总是提供一个零等待状态 OKAY 来回应主机,并且该传输应该被从机忽略。
01BUSY(忙)
        忙传输类型。允许总线主机在突发传输中间插入空闲周期。这种传输类型表示总线主机正在连续执行一个猝发传输,但是下一次传输不能立即发生。当一个主机使用忙传输类型时地址和控制信号必须反映突发中的下一次传输。
        这种传输应该被从机忽略。从机必须总是提供一个零等待状态 OKAY 响应,和从机响应空闲传输一样的方式。
10NONSEQ(非连续)
        表示一次猝发的第一个传输或者一个单一传输。地址和控制信号和前一次传输无关。
        总线上的单一传输被视为(数据量为)一个猝发。因此传输类型是不连续的。
11SEQ(连续)
        在一个猝发中剩下的传输是连续传输并且地址是和前一次传输有关的。控制信息和前一次传输一样。地址等于前一次传输的地址加上传输大小(字节)。在回环突发的情况下传输地址在地址边界处回环,回环值等于传输大小乘以传输的次数(4 8 或者 16 其中之一)。
        (注:这里回环指从传输的结束地址边界跳回到传输的起始地址边界。)

         我们一直有反复提到一个词叫做猝发,这其实是应为burst的翻译,burst 传输是非常常见的,指的是一种连续传输,地址逐步递增(也有一种回环猝发:这里回环指从传输的结束地址边界跳回到传输的起始地址边界)。

五、小结

        本文中我们详细讲述了关于AHB的基本操作流程,主机要先从仲裁器获得授权,然后进行总线的访问,这样可以避免总线冲突,获得授权后,主机给出地址和控制信号,从机根据自身情况进行响应,可以分成有等待的情况和无等待的情况,这主要通过从机控制HREADY信号实现。AHB传输共分成4种类型,由主机通过HTRANS体现。在后面的文章中我们将讲述AHB的猝发传输,这也是AHB中广泛使用的一种情况。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dB(分贝)定义及其应用(音量 dB dBA 计算 调整)

一、dB的诞生背景 dB是英文“decibel”的简写,其中,deci表示十分之一,Bel表示“贝”。Decibel,分贝就是十分之一贝。“贝”是“贝尔”的简称,是以杰出科学家Alexander Graham Bell的名字来命名的单位。贝尔在1876年获…

Ubuntu服务器service版本初始化

下载 下载路径 官网:https://cn.ubuntu.com/ 下载路径:https://cn.ubuntu.com/download 服务器:https://cn.ubuntu.com/download/server/step1 点击下载(22.04.3):https://cn.ubuntu.com/download/server…

《知识图谱与大模型融合实践研究报告》发布,创邻科技参编

近期,第三届知识图谱产业发展论坛暨知识图谱与大模型融合研讨会在北京召开。会上,《知识图谱与大模型融合实践研究报告》正式发布! 该白皮书是由中国电子技术标准化研究院依托知识图谱产业推进方阵、全国信标委人工智能分委会知识图谱工作组…

如何准备软件开发项目成本估算?

软件开发的成本估算是出了名的困难。对于软件开发项目来说,预算超支反而是常态,而不是例外。 在开始估算之前,请从业务角度了解项目的战略目标和你的目标。你可能计划尽可能赚取更多利润,探索新技术,或者在项目可能亏…

【002】学习笔记之typescript的【任意类型】

任意类型 顶级类型:any类型和 unknown 类型 any类型 声明变量的时候没有指定任意类型默认为any任意类型都可以赋值给any,不需要检查类型。也是他的弊端如果使用any 就失去了TS类型检测的作用 unknown 类型 TypeScript 3.0中引入的 unknown 类型也被认为…

【图像去噪的滤波器】非局部均值滤波器的实现,用于鲁棒的图像去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

认识Junit

1. 前言 2. Junit注解 2.1. 常用的注解 2.1.1. Test 表示当前方法是一个测试方法(不需要main来执行) Test void Test01() throws InterruptedException {System.out.println("测试用例1");WebDriver webDriver new ChromeDriver();webDriver.get("https:/…

Web会话技术

会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,…

快速入门vue3新特性和新的状态管理库pinia

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Vue3.3新特性 defineOptions defineModel pinia 介绍 与 Vuex 3.x/4.x 的比较 安装 核心概念 定义…

ASP.NET实验室信息管理系统源码 LIMS成品源码

实验室信息管理系统(Laboratory Information Management System)简称LIMS系统,是指通过计算机对实验室的各种信息进行管理的计算机软、硬件系统,并将实验室的设备各种信息通过计算机网络连接起来,采用科学的管理思想和…

⛳ TCP 协议详解

目录 ⛳ TCP 协议详解🎨 一、TCP / IP 协议的分层模型🏓 1.1、应用层🧸 1.2、传输层🔮 1.3、网络层🎯 1.4、链路层 🏭 二、HTTP 报文传输原理🥅 2.1、HTTP 报文传输💎 2.2、封装和分…

贝锐蒲公英助力电子公交站牌联网远程运维,打造智慧出行新趋势

在现代城市公共交通系统中,我们随处可见电子公交站牌的身影。作为公共交通服务的核心之一,电子公交站牌的稳定运行至关重要,公交站台的实时公交状况、公共广告信息,是市民候车时关注的焦点。 某交通科技公司在承接某市智能电子站牌…

【Python】Web学习笔记_flask(6)——会话session对象

处理利用cookie来判断用户登录外,也可以使用session来判断用户是否登录 html代码和cookie对象的设置相同 from flask import Flask,request,render_template,make_response,session,url_for,redirectappFlask(__name__) app.secret_keyps1234567890 app.route(/) …

SpringBoot + Mybatis多数据源

一、配置文件 spring: # datasource: # username: root # password: 123456 # url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncodingutf-8&serverTimezoneUTC # driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 数据源1onedata:jdbc-url: j…

基于X86六轮差速移动机器人运动控制器设计与实现(一)软件与硬件架构

本文研究的六轮差速移动机器人 (Six-Wheeled Differential Mobile Robot , SWDMR) 为了满足资源站到资源站点对点的物资运输,对机器人的跨越障碍能力 有较高的要求。对比传统的四轮移动机器人,六轮移动机器人能够提供更强的驱动 力&#…

【TypeScript】元组

元组(Tuple)是 TypeScript 中的一种特殊数据类型,它允许你定义一个固定数量和类型的元素组合。元组可以包含不同类型的数据,每个数据的类型在元组中都是固定的。以下是 TypeScript 中元组的基本用法和特点: // 声明一…

企微配置回调服务

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …

Linux系统下检验Tensorflow 2.xx版本和1.xx版本是否安装成功

目录 版本问题Tensorflow 1.xx的测试代码:Tensorflow 2.xx的测试代码:Tensorflow 2.6版本实际的测验结果 总结 版本问题 查询资料发现,多数检验Tensorflow是否安装成功的方法,多数方法都是1.xx版本的,直接使用1.xx版本…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…