DW_ahb_databook学习及部分AHB知识回顾

news2024/11/28 4:49:50

一、DW_ahb框图

Arbiter: 一次只允许一个master发起数据传输,同时可以选择slave

Optional Internal Decoder: 通过解码系统地址总线为AHB上的从机生成外设选择。每个slave都可以指定一个起始和结束地址,该地址必须与1kb边界对齐。

Optional External Decoder: 当选择此选项时,不包括内部解码器

Mulplexer: master的地址和控制信号是多路复用的,这取决于哪个master拥有系统数据总线。每个slave的所有数据都是多路复用的,这取决于哪个slave在前一个周期中被寻址。

二、特征

  • 可以配置15个masters和31个slaves
  • 数据总线宽度为8,16,32,64,128 or 256 bits ; 地址总线宽度为32bits和64bits
  • 可以通过外部输入选择大端序和小端序。 大端序 (Big-endian):高位字节存储在低地址,低位字节存储在高地址。小端序 (Little-endian):低位字节存储在低地址,高位字节存储在高地址。

大端序通常用于网络协议(如 TCP/IP),因为它具有更好的可读性和与人类理解的顺序一致性。小端序则更适合计算机的处理方式,尤其是在现代处理器中,处理低字节优先的操作更为高效。

  • 支持split, burst, and locked 传输
  • 从端内存的连续与非连续分配

三、Arbiter仲裁器

Arbiter最多支持16个优先级(0到15)——0是禁用的设置,1是最低优先级,15是最高优先级——这样每个master都可以被分配一个单独的优先级。

在DW_ahb中,优先级值越高,Master的优先级越高。

在DW_ahb_icm中,优先级值越低,层的优先级越高。

在配置时,每个master都需要被分配一个初始优先级。缺省情况下,每个master的优先级与master序号相同。

3.1 第一层仲裁(First Tier Arbitration )

当两个或更多的masters同时请求总线时,具有最高优先级的master被授予总线。

在固定优先级仲裁中,低优先级的设备可能长期得不到资源,导致饥饿问题。

3.2 第二层仲裁(Second Tier Arbitration)

如果两个masters有相同的优先级,则使用“Fair Among Equals”算法进行仲裁。

FAE 经常采用循环仲裁(Round-Robin)的方法,在平等设备间轮流分配资源,确保每个设备都有机会获得访问权,而不至于某个设备被长时间饥饿(starvation)。

历史记录:一些 FAE 实现可能会记录每个设备的历史访问情况,以便在相同条件下,优先考虑那些最近没有获得过资源的设备。

动态优先级:在某些实现中,FAE 可能会根据系统运行时的条件(如当前负载、历史访问频率等)动态调整优先级。

3.3 加权令牌仲裁(Weighted Token Arbitration)

每个master都会被分配一个权重值,这个值通常与该设备的优先级、重要性或对资源的需求相关联。系统根据每个master的权重分配令牌(Token),在某一仲裁周期内,每个master可以获得的令牌数量与其权重成正比。

当多个master请求访问同一个资源时,仲裁器根据各自持有的令牌数量来决定哪个master可以获得访问权。权重高的master由于持有更多的令牌,因此在竞争中更有优势。虽然高权重的master更有优势,但低权重的master仍然有机会获得资源,从而避免了长期饥饿(starvation)问题。

0的值表示无限个令牌。

每个master的token值为最大周期数减2个周期

Master 1的优先级为15(最高),拥有4个tokens,而Master 2的优先级级别为1(最低),令牌为0,也即拥有无限个tokens。

虽然req_m1和req_m2都为高,但是master1优先级更高,所以master 1被授予总线所有权(hgrant_m1)时,hmaster = 1。此时,master1令牌计数器开始(count_m1)计数。当master 1的令牌用完时,他会产生一个mask,使其不会进入下一次arbitation, 因此master 2被授予所有权(hgrant_m2),直到仲裁周期结束。然后下一个仲裁周期开始,hgrant_m1和hgrant_m2都为高电平,但是由于master1优先级高,因此master1再次被授予总线所有权,并且此时master1令牌计数器被重置为4。虽然hgrant_m1只维持了两拍,但是必须要等master1的token被消耗完后才会进行下一次仲裁,由于后面没有mask操作,所以第三次仲裁任然是master1拿到权限,但是为什么hmaster后面还有一个次为2 ??hgrant_m2还有两拍为高??

注意:

即使master1的数据已经发送完了,但也要等到token被消耗完才会进行下一次arbitation。

ahb_wt_aps表示的是仲裁周期,master的token值加上2是最小仲裁周期。当计数开始时,该脉冲在一个周期内处于高位。仲裁周期可以硬编码或可编程

问题:

为什么hmaster后面还有一个次为2 ,为什么hgrant_m2还有两拍为高。

目前的理解是,先有req拉高,然后根据优先级确定哪一个master的grant拉高,然后再确定hamster为哪个master的ID。

哦~我懂了,因为master1 的req被拉低后,master2的req还维持了两拍为高,因此在这两拍内hgrant_m2为高,hmaster为2.但是由于master1的token还没被消耗完,因此还不会进行下次总线仲裁(但是为何hmaster=2呢,不应该仍然是master1占据总线吗?),当token被消耗完时,req2已经为低了

3.4 Weighted Token Arbitration 与 First Tier Arbitration 的异同

First Tier Arbitration:通常基于一个简单的规则集,如固定优先级、循环仲裁(Round-Robin)、或先到先得(First-Come, First-Served)。它可能不考虑复杂的动态条件,而是直接根据设定的优先级或顺序来做出仲裁决策。

Weighted Token Arbitration:基于权重和令牌的机制,设备根据其权重获得令牌,仲裁过程通过比较令牌数量来决定哪个设备获得资源。它可以动态调整权重以适应系统需求,具有更灵活的控制能力。

3.5 Arbiter Slave Interface 

通过这个接口来控制Arbiter的一些功能。如Master priorities、Default master、Early burst termination、Weighted token registers、coreKit version ID等

3.6 波形图

AHB仲裁信号:

hburstseqx: 是主机请求访问总线信号

htrans: htrans=0是IDLE,1是BUSY, 2是NONSEQ, 3是SEQ

hgrantx:Arbiter通过hgrantx信号来表示请求总线的master中哪个的优先级最高

hmaster:表示哪一个主机当前被授予总线

hready:表示当前传输完成

具有多个主机请求所有权的固定长度突发的时间。当主机具有不同的优先级时,总线所有权从高到低。当主节点具有相同的优先级时,总线的所有权是随机的。

当具有未定义长度突发和相同优先级级别的主机被相同或更高优先级的主机提前终止时。也即,由于不知道突发长度,可能在一个master发送的途中被其他master打断

来自具有不同优先级级别的主机的未指定长度的突发的时间。

最高优先级每次都赢得总线的所有权。在爆发之间有一个额外的IDLE周期,因为请求必须保持到最后一次传输开始

这几个波形图没咋看懂

四、传输

支持分割传输(split)和锁定传输(locked)

重点介绍分割传输,

通过根据从机的响应操作来分离(或者分块)主机操作,以给从机提供地址和合适的数据,提高了总线的总体使用率。

        当传输产生时,如果从机认为传输的执行将占据大量的时钟周期,那么从机能够决定发出一个 SPLIT 响应。该信号提示仲裁器尝试这次传输的主机不应该被授予访问总线,直到从机表示它准备好了完成传输时。因此,仲裁器负责监视响应信号,并且在内部屏蔽已经是 SPLIT 传输主机的任何请求。

        在传输的地址周期,仲裁器在 HMASTER[3:0]产生一个标记,或者总线主机序号,以表示正在执行传输的主机。任何一个发出 SPLIT 响应的从机必须表示它有能力完成这个传输,并且通过记录 HMASTER[3:0]信号上的主机序号来实现。

        之后,当从机能够完成传输时,它就根据主机序号在在从机到主机的 HSPLITx[15:0]信号上生效适当的位。然后仲裁器使用这个信息来解除来自主机请求信号的屏蔽,并且主机将被及时授予访问总线以重试传输。仲裁器在每个时钟周期采样 HSPLITx 总线,因此,从机只需要生效适当的位一个周期,以便仲裁器能够识别。

        如果系统中有多个具有 SPLIT 能力的从机,那么每个从机的 HSPLITx 总线可以逻辑或在一起以提供给仲裁器单个 HSPLIT 总线。大多数系统中并没有用到最大 16 个总线主机的能力,因此,仲裁器仅要求一个位数和总主机数量一样的 HSPLIT 总线。但是,建议所有具有 SPLIT 能力的从机被设计成支持高达16个主机。

更多内容参考博客AMBA总线协议(8)——AHB(六):分割传输_ahb协议分块-CSDN博客

五、默认(default)master与虚拟(dummy)master

Deafult Master:当没有其他主设备正在使用总线时,作为默认控制总线的主设备。它的作用是保证总线始终有一个主设备处于控制状态,即使没有具体的传输请求

Dummy Master: 是一种用于测试或占用总线的虚拟主设备。它通常在仿真环境或测试环境中使用,模拟一个实际的主设备,但并不执行实际的数据传输任务

当启用weight-token-arbitation时,默认的master就是是dummy主机。

dummy master的驱动是IDLE状态

六、 暂停模式

可选的。当系统处于暂停模式时,dummy master拥有总线。来自主机的请求将被忽略,直到系统退出暂停模式。使用DW_apb_rap模块或类似的功能可以退出Pause Mode。默认情况下,coreConsultant中启用了仲裁者暂停模式特性

七、延迟暂停( Delayed Pause Action)

当在配置时设置延迟暂停动作时,当设置暂停信号时,如果从机给的hready仍为high时,暂停不会生效,但是此时该主机的htrans改为IDLE。如果未设置此操作,则一旦设置了暂停信号,DW_ahb将在下一个hclk边缘处进入暂停模式。通过延迟暂停操作,可以保证在暂停之前该master的所有传输传完

当发生资源冲突时,从设备的某些资源被其他任务占用时,需要一定的时间才能释放资源并响应主设备的请求。就需要这个信号了

八、突发提前终止(Early Burst Termination)

可选的, EBTEN = 1时被开启。可以提高总线利用率。当arbiter slave interface被使能的时候,可以配置。提前突发终止(EBT)使得在主master保持总线的周期过多时提前终止突发成为可能。总线被交给dummy master,经过一个clk后再重新进行arbitation。但是当传输被locked时,不会被提前终止。

当EBTEN = 0时,突发提前终止在下面两种情况下也可能发生:

  • 当更高优先级的主机请求总线时,非指定长度的INCR传输(仅当配置参数AHB_FULL_INCR为false时)。
  • 固定长度突发的最后两个节拍之间的繁忙周期(没懂)

九、Full Incrementing Bursts

当一个未指定长度的突发从主服务器发出时,您可以控制内部仲裁器的更新。通过支持完全递增的突发,仲裁器不会“提前终止”未指定长度的突发传输。整个burst被允许完成。但如果是不支持完全递增的突发(这是默认的操作模式),当master发出未指定长度的突发传输时,仲裁器可以自由地将总线使用权授予最高优先级的master。这实际上提前终止了传输。

十、可选的内部解码器(Optional Internal Decoder)

具有以下功能:

10.1 Remap Operation

Remap操作主要用于系统中地址空间的重新映射,以便外设或存储器可以访问不同的地址空间。

处理器可以从一个内存启动,然后在另一个内存运行。这通常意味着地址0x00000000需要从一个内存重新映射到另一个内存。DW_ahb有两种操作模式来支持这种类型的场景:引导模式(Boot Mode)和正常模式(Normal Mode)。每种模式都有自己的内存映射,根据您的配置,可以与其他模式相同,也可以不同。此功能被称为DesignWare Remap Feature。如果未启用此特性,则配置选项仅在正常模式下可用。

在启动模式的例子中,一个ROM(从机1)占用基址0x00000000,而一个嵌入式RAM(从机5)在正常模式下被重新映射到占用0x00000000的地址位置。有些slave映射前后地址一样,有些不一样

不同内存映射的选择是在输入信号remap_n的控制下进行的。在引导模式下,remap_n信号是逻辑0,而在正常模式下是逻辑1。如果不启用Remap功能,则remap_n在内部默认设置为1。

10.1.1 Boot Mode

启动代码的定位: 在系统上电复位(Power-On Reset)后,处理器需要从特定的地址开始执行启动代码。通常,这个地址是0x00000000。

非易失性存储器: 启动代码通常存储在非易失性存储器中,例如ROM(只读存储器)或闪存(Flash),因为RAM(随机存取存储器)在上电时可能还未初始化

在启动模式下,通过Remap操作,将包含启动代码的非易失性存储器映射到地址0x00000000处。这确保了处理器在复位后能够正确地从启动代码开始执行。

10.1.2 Normal Mode

运行时性能优化: 在启动完成后,为了优化系统性能,可能需要将更快的存储器(如SRAM)映射到地址0x00000000处,以加快指令和数据的访问速度。

资源的有效利用: 将RAM映射到低地址空间可以方便操作系统或应用程序的运行。

重新映射地址空间: 在启动完成并满足特定条件后,通过Remap操作,将SRAM或其他需要的存储器重新映射到地址0x00000000处。

10.1.3 Remap操作的流程示例

系统复位: 系统上电复位,处理器指向地址0x00000000。

启动模式: 由于Remap操作,启动存储器(如Flash)被映射到0x00000000,处理器开始执行启动代码。

初始化: 启动代码负责初始化系统,包括设置时钟、初始化RAM等。

切换到正常模式: 初始化完成后,通过软件触发Remap操作,将SRAM映射到0x00000000。

继续执行: 系统进入正常运行模式,操作系统或应用程序在新的内存映射下运行。

10.2 多地址区域(Multiple Address Regions)

存储器控制器具有用于内部寄存器的区域和用于外部存储器的区域。slave不需要占用内存映射的连续区域,最多可以被划分为8个区域(见上图)

10.3 Default Slave

当master试图访问一个未分配的地址时,DW_ahb返回一个错误响应。DW_ahb中提供此响应的代理称为Default Slave。

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

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

相关文章

【云原生】高可用集群KEEPALIVED(理论篇)

一、高可用集群 1.1 集群类型 LB:Load Balance 负载均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream)HA:High Availability 高可用集群数据库、RedisSPoF: Single Point of Failure,解决单点故障HPC: High Performance computing 高性能集群 1.2 系统可用…

第二十五天培训笔记

2 、在 python 中连接数据库并结合游标对数据库进行操作 前提:要有 python3 环境 pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple // 设置 pip3 的全 局配置,将默认的 Python 包索引源( index-url &am…

Raspberry Pi Pico 2 上实现:实时机器学习(ML)音频噪音抑制功能

Arm 公司的首席软件工程师 Sandeep Mistry 为我们展示了一种全新的巧妙方法: 在 Raspberry Pi Pico 2 上如何将音频噪音抑制应用于麦克风输入。 机器学习(ML)技术彻底改变了许多软件应用程序的开发方式。应用程序开发人员现在可以为所需系统整…

【C++ 项目】负载均衡在线 OJ

文章目录 🌈 一、项目介绍🌈 二、项目源码🌈 三、项目演示⭐ 1. 前端界面展示⭐ 2. 后端界面展示 🌈 四、项目准备⭐ 1. 项目所用技术⭐ 2. 项目开发环境⭐ 3. 项目宏观结构 🌈 五、comm 公共模块⭐ 1. util.hpp 工具⭐…

【机器学习第9章——聚类】

机器学习第9章——聚类 9.聚类9.1 聚类任务9.2 性能度量9.3 距离计算9.4 原型聚类9.4.1 k均值算法9.4.2 学习向量量化(LVQ)9.4.3 高斯混合聚类 9.5 密度聚类DBSCAN算法 9.6 层次聚类9.7 kmeans手动算法实现9.8 kmeans算法运用 9.聚类 9.1 聚类任务 在“无监督学习”任务中研究…

MIT6.s081 2021 Lab Copy on-write

Implement copy-on write 背景 xv6 使用 fork() 系统调用创建子进程时,需要将父进程的地址空间进行 深拷贝 ,即将页表和实际物理空间同时进行拷贝,以实现父进程和子进程地址空间的独立性。但很多时候,如 shell 程序,…

时间线编辑特效SDK解决方案,高效的接入服务

在数字时代的浪潮中,短视频以其独特的魅力迅速成为连接世界的新语言,而创意与技术的深度融合,则是这场视觉盛宴背后的核心驱动力。美摄科技,作为短视频技术领域的佼佼者,近期隆重推出了其革命性的时间线编辑特效SDK解决…

踩坑【已解决】:Redis配置主从复制踩到的坑,主机不显示从机的连接信息,但是从机显示主机信息

关于Redis配置主从复制踩到的坑!!! 设置单机集群的时候,两台从机都显示连接到主机,但是主机显示连接到的从机数量为0: 原因: 在master的配置文件中我们配置了密码的信息,但是我们在从配置文件…

gitee 使用安装教程

一、下载方式 1.官网下载https://git-scm.com/downloads 2.淘宝镜像下载https://registry.npmmirror.com/binary.html?pathgit-for-windows/ 2.1安装 1.点击刚刚下载的安装包,然后点击next 2.根据自己的情况选择,一般默认就可以了 3. 点击next 4.点…

PS DRAM接口的函数式编程模型(一)

针对PS DRAM接口的操作启动,确实需要遵循一系列精心设计的步骤来确保DRAM控制器(DDRC)和DRAM模块能够正确初始化和配置。以下步骤详细说明了这些操作,并指出了Vivado Design Suite通常如何提供这些编程支持。 DDR时钟初始化&…

1DCNN-2DResNet并行故障诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Python轴承故障诊断入门教学-CSDN博客 Python轴承故障诊断 (13)基于故障信号特征提取的超强机器学习识别模型-CSDN博客 Python轴承故障诊断 (14)高创新故障识别模型-CSDN…

机器学习入门(六):分类模型评估方法

目录 1. 数据集划分 1.1 为什么要划分数据集? 1.2 数据集划分的方法 1.3 留出法(简单交叉验证) 1.4 交叉验证法 1.5 留一法 1.6 自助法 2. 分类算法的评估标准 2.1 分类算法的评估 2.2 SKlearn中模型评估API介绍 3. 小结 前言 掌握分类模型评估方法对于数据科学家…

测试流程规范--准入准出规则

简介: 为了加强测试部软件测试的质量控制及与测试相关部门、人员更好理解测试各阶段的准入/准出条件而建立的准入/准出规范。 一,目的 为了加强测试部软件测试的质量控制及与测试相关部门、人员更好理解测试各阶段的准入/准出条件而建立的准入/准出规范…

【python】在Python中操作MongoDB的详细用法教程与实战案例分享

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

《黑神话:悟空 性能测试工具》Steam已免费开放下载

《黑神话:悟空》将于8月20日上午10点正式解锁,届时大家就能体验到这款期待三年的国产3A之光了。为了方便大家游玩,官方提前上线了性能测试工具,目前《黑神话:悟空 性能测试工具》已在Steam商店开放免费下载。 据Steam评…

Qt | QSQLite内存数据库增删改查

点击上方"蓝字"关注我们 01、演示 参数随便设置 查询 修改 右键菜单是重点 手动提交,点击Submit All

2024下半年软考报考攻略:从报名到拿证全流程,看这一篇就够了!

下半年软考本月就要开启报名了,有一些同学可能是第一次参加,还不清楚具体流程。今天小编就来为大家总结软考从报名到拿证的全过程指南,有需要的可以收藏这篇攻略哦! 一、报名流程 1、登录网站 登录中国计算机技术职业资格网&…

C++结构体指针强制转换以处理电力系统IEC103报文

前言 最近依旧是开发规约解析工具的103篇,已经完成了通用分类服务部分的解析,现在着手开始搞扰动数据传输,也就是故障录波的传输。 在103故障录波(扰动数据)的报文中,数据是一个数据集一个数据集地存放&a…

如何有效优化无线双模蓝牙模块的通讯距离?

许多客户在使用无线双模蓝牙模块时发现传输距离达不到预期要求。影响无线蓝牙模块通讯距离的因素有很多,以下是美迅物联网MesoonRF归纳总结的一些可能的原因以及如何改善: 1.优化天线设计 天线是影响无线双模蓝牙模块通讯距离的关键因素之一,…

IPC进程间通信

信号 信号是一种终端机制,程序运行到一半的时候接收到了某种通知,程序就会立刻中断运行,转而去处理通知。 登记信号 一个进程只会接收默认的几个信号 如果想要让一个进程接收特定信号的话,必须提前在该进程中登记一下想要接收…