AHB---数据总线

1. 数据总线

为了实现AHB系统,需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位,但这可以根据数据总线宽度进行更改。 数据总线包含以下部分:

  • HWDATA
  • HRDATA
  • Endianness(字节序)

1.1 HWDATA

在写传输期间,master驱动写数据总线。如果传输被延长,则master必须保持HREADY为高时的data valid,直到传输完成。

对于比总线宽度窄的传输,例如在32位总线上的16位传输,master只需要驱动相应的字节通道。slave从正确的字节通道中选择写数据。

1.2 HRDATA

在读传输期间,相应的slave驱动读数据总线。如果slave通过保持HREADY为低来延长读传输,那么slave只需要在传输的最后一个周期提供HREADY为高时的valid data。

对于比总线宽度窄的传输,slave只需要在有效的字节通道上提供valid data。master从正确的字节通道中选择数据。

当传输以OKAY响应完成时,slave需要提供valid data。错误响应(ERROR responses)不需要有效的读数据。

2. 字节序(Endianness)

AHB支持大端序和小端序系统。支持大端序数据存储的两种方法。

AHB5引入了Endian属性来定义支持哪种形式的大端序数据访问。

  • BE8:字节不变大端序(Byte-invariant big-endian)。一个字节访问(8位)使用的是与相同地址上的小端序访问相同的数据总线位。
  • BE32:字不变大端序(Word-invariant big-endian)。一个字访问(32位)使用的最显著(MS)字节和最不显著(LS)字节与相同地址上的小端序访问相同的数据总线位。

以下一组方程定义了小端序、字节不变大端序和字不变大端序访问所使用的数据位。

方程使用以下变量:

  • 地址(address):传输的地址。
  • 数据总线字节(Data_Bus_Bytes):8位数据总线字节通道的数量。
  • INT(x):x的向下取整整数值。

2.1 小端序

当一个小端序组件访问一个字节时,以下方程显示了使用哪些数据总线位:

Byte_Lane = Address - (INT(Address / Data_bus_Bytes)) x Data_Bus_Bytes 

数据传输在 DATA[(8 × Byte_Lane) + 7 : (8 × Byte_Lane)]

当较大的小端序传输发生时,数据以这样的方式传输:

  • 最低有效(LS)字节传输到传输地址。
  • 递增的字节传输到顺序递增的地址。

2.2 字节不变大端序

当一个字节不变大端序组件访问一个字节时,以下方程显示了使用哪些数据总线位:

Byte_Lane = Address - (INT(Address / Data_bus_Bytes)) x Data_Bus_Bytes

 数据传输在 DATA[(8 × Byte_lane) + 7 : (8 × Byte_lane)]

注意:方程与小端序的方程相同。因为大端序和小端序访问对于字节传输是相同的,所以这些传输使用了“字节不变”这个术语。

当较大的字节不变大端序传输发生时,数据以这样的方式传输:

  • 最高有效(MS)字节传输到传输地址。
  • 递减的字节传输到顺序递增的地址。

注意:这是字节不变大端序和小端序组件之间的关键区别。

2.3 字不变大端序

当一个字不变大端序组件访问一个字节时,以下方程显示了使用哪些数据总线位: Address_offset = Address - (INT(Address / Data_Bus_Bytes)) x Data_bus_Bytes 

Word_offset = (INT(Address_offset / 4)) x 4

Byte_offset = Address_offset - Word_offset 

数据传输在 DATA[(8 x (word_offset + 3 - Byte_offset)) + 7 : 8 x (word_offset + 3 - Byte_offset)]

对于32位总线,Word_offset总是0,因此方程简化为:

DATA[(8 x (3 - Byte_offset)) + 7 : 8 x (3 - Byte_offset)]

注意 这表明了字不变大端序和小端序组件之间的一个关键区别。字不变大端序组件传输一个字节量时使用的是与小端序和字节不变大端序组件不同的数据总线位。

对于使用字不变大端序的半字和字传输,数据以这样的方式传输:

  • 最高有效字节传输到传输地址。
  • 递减的字节传输到顺序递增的地址。

对于使用字不变大端序的大于一个字的传输,数据被分割成字大小的块:

  • 最高的字传输到传输地址。
  • 递减的字传输到递增的地址。

32位的数据总线可以扩展用于更宽的数据总线实现。

具有小于数据总线宽度的突发传输的每个突发拍中有不同的有效字节通道。

表6-1和表6-2显示了在小端序或字节不变大端序系统中32位总线上的有效字节通道。在这两种情况下,有效字节通道是相同的,但最高有效字节和最低有效字节的位置不同。

表6-3显示了在字不变大端序系统中32位总线上的有效字节通道。 

2.4 字节不变性

使用字节不变大端序数据结构简化了在单一内存空间中访问混合字节序数据结构的过程。

采用字节不变大端序和小端序意味着,对于数据结构中的任何多字节元素:

  • 无论数据的字节序如何,该元素使用的是相同的连续字节的内存。
  • 字节序决定了字节在内存中的顺序,也就是说,它决定了内存中的第一个字节是元素的最高有效(MS)字节还是最低有效(LS)字节。
  • 任何给定地址的字节传输都会通过相同的数据总线将八位数据传输到相同的地址位置,而不管该字节所属的任何数据元素的字节序如何。

图6-1 展示了一个要求字节不变访问的数据结构示例。在这个示例中,头部字段使用小端序排列,而数据负载使用大端序排列。

在这个结构中,例如,Count 是一个小端序的两字节元素,这意味着它的最低地址是它的最低有效(LS)字节。 使用字节不变性确保了对数据负载进行大端序访问不会破坏小端序元素。

3.数据总线宽度

提高总线带宽的一种方法是增加片上总线的数据路径宽度,而不增加操作频率。增加的金属层和使用大型片上存储块(如嵌入式DRAM)是促进使用更宽片上总线的因素。

指定固定宽度的总线意味着,在许多情况下,总线的宽度对应用来说并不是最优的。因此,采用了一种方法,它允许总线宽度的灵活性,同时仍然确保模块在不同设计之间具有很高的可移植性。

该协议允许数据总线宽度为8、16、32、64、128、256、512或1024位。然而,建议至少使用32位的总线宽度。对于几乎所有应用来说,256位的最大总线宽度已经足够。

对于读写传输,接收模块必须从总线上正确的字节通道选择数据。不需要在所有字节通道上响应数据。

3.1 在宽总线上实现窄slave 

图6-2展示了如何将原本设计为使用32位数据总线的slave模块转换为在64位总线上操作。这只需要添加外部逻辑,而不需要任何内部设计更改,因此该技术适用于硬宏单元。

对于输出,当将窄总线转换为更宽的总线时,可以做以下之一:

  • 如图6-2所示,在宽总线的两半复制数据。
  • 使用额外的逻辑确保只有相应的一半总线被更改。这可以减少功耗。

slave只能接受与其自然接口一样宽的传输。如果master尝试进行的传输宽度超出slave支持的范围,那么slave可以使用错误传输响应。

3.2 在窄总线上实现宽slave

通过使用外部逻辑,可以调整预设计或导入的slave以适应更窄的数据总线。图6-3 展示了在窄总线上实现宽slave的方式。

 

3.3 在宽总线上实现master

master可以通过类似的方式修改,以便在比原设计更宽的总线上工作,即通过:

  • 多路复用输入总线。
  • 复制输出总线。

注意 除非在master中包含了某种机制来限制master尝试的传输宽度,否则master不能在比原设计更窄的总线上工作。master决不能尝试传输宽度(由HSIZE指示)比它连接的数据总线宽度更大的传输。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MinimogWP WordPress 主题下载——优雅至上,功能无限

无论你是个人博客写手、创意工作者还是企业站点的管理员,MinimogWP 都将成为你在 WordPress 平台上的理想之选。以其优雅、灵活和功能丰富而闻名,MinimogWP 不仅提供了令人惊叹的外观,还为你的网站带来了无限的创作和定制可能性。 无与伦比的…

投资者悄然收购二手楼梯楼,在杭州豪掷巨资购买12套!

独家首发 -------------- 日前杭州中介流传,一名投资客大举收购二手楼梯楼,下手就是12套,显示出一些具有前瞻性眼光的投资者悄悄放弃电梯楼,选择了处于价格洼地的楼梯楼。 二手楼梯楼当下被严重低估,在一线城市的二手楼…

Tmux工具使用案例

Tmux工具使用案例 连接linux一般使用ssh&#xff0c;当ssh会话中需要长时间执行命令时&#xff0c;为了避免命令不受ssh会话影响&#xff0c;除了可以将命令通过nohup <cmd> &等方法放到后台执行外&#xff0c;也可以利用Tmux这个工具解绑SSH会话与执行命令&#xff…

Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释&#xff1a; 术语和概念&#xff1a; 任期号&#xff08;term number&#xff09;&#xff1a;用来区分不同的leader。前一个日志槽位的信息&#xff08;prelogIndex&#xff09;&#xff1a;这是前一个日志条目的索引&#…

关于二手车系统学习--登录模块

1.样式1-17行 <div class"cheader"><div style"width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px"><el-row><el-col:span"5"style"font-size: 20px;cursor: pointer;color: #00ae66;font-weight: bold…

苹果自研大语言模型“Ajax“ 助力iOS 18升级;Stack Overflow与OpenAI建立API合作伙伴关系

&#x1f989; AI新闻 &#x1f680; 苹果自研大语言模型"Ajax" 助力iOS 18升级 摘要&#xff1a;苹果公司预计通过自研大语言模型Ajax来为iOS 18和Siri带来重大升级&#xff0c;但不计划推出类似ChatGPT的AI聊天机器人。Ajax模型基于Google的Jax框架&#xff0c;并…

Android:弹出对话框方式梳理一览(一)

Android&#xff1a;弹出对话框方式梳理一览&#xff08;一&#xff09; Guide&#xff5c;导言 在Android开发中&#xff0c;对话框可能是我们与用户交互的非常常用的方式&#xff0c;包括弹出一个小界面&#xff0c;可能在实际场景中都非常实用。本篇文章主要就是对Android弹…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…

MySQL 中的HASH详解

MySQL中的哈希索引&#xff08;Hash Index&#xff09;是一种特殊的数据库索引类型&#xff0c;它利用哈希表&#xff08;Hash Table&#xff09;的数据结构来存储索引项。哈希表通过哈希函数&#xff08;Hash Function&#xff09;将索引列的值转化为一个固定长度的哈希码&…

【目录】500 行或更少(500 Lines or Less)

AOSA 500 行或更少&#xff08;500 Lines or Less&#xff09;是《开源应用程序体系结构》(Architecture of Open Source Applications, AOSA)系列的第四卷。该系列的前三卷是关于大型程序必须解决的大问题&#xff0c;而本书专注于程序员在构建新事物时在小规模中做出的设计决…

数据结构链表

数据结构链表 链表 1&#xff09;链表的概念及结构: 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 2&#xff09;实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 单向、双向…

SAP PP模块学习提炼第一部分

SAP是ERP的一款软件。 SAP的入门困难&#xff1a; 听不懂&#xff0c;看不懂缺乏知识体系缺乏行业经验 SAP入门引导&#xff1a; 导师引导实战演练 SAP基础介绍 1.什么是SAP? System, Application and Products in Data Processing 即数据处理的系统、应用和产品。 2.…

7: 分配器

文章目录 operator new () 和 malloc()stl 中allocator的使用allocators 内部实现vc的分配器 并没有太多的技巧可言下面是BC5的stl 设计GCC的allocators2.9版本GCC使用的allocator是什么&#xff1f;这里面cookie的作用 4.9版本的GCC allocator operator new () 和 malloc() 所…

Redis系列之key过期策略介绍

为什么要有过期策略&#xff1f; Redis是一个内存型的数据库&#xff0c;数据是放在内存里的&#xff0c;但是内存也是有大小的&#xff0c;所以&#xff0c;需要配置redis占用的最大内存&#xff0c;主要通过maxmemory配置 maxmomory <bytes> # redis占用的最大内存官…

深入解析C#中的async和await关键字

文章目录 一、异步编程的基本概念及其在C#中的实现二、async关键字的定义及其用法三、await关键字的定义及其用法示例代码&#xff1a;使用async和await编写一个简单的异步程序 四、async和await的优点注意事项 五、C#下async和await中常见问题汇总1. 异步方法中的await调用2. …

CST电磁仿真软件远场源的导出调用和提取结果【小白必看】

远场源的导出&调用(1) 提取Hybrid仿真所需的远场源&#xff01; Post-Processing > Tools > Result Templates Tools >Farfield and Antenna Properties > Export Farfields As Source 混合求解(Hybrid Simulation)是对安装在舰船等大型平台上的天线进行仿真…

【Leetcode 42】 接雨水-单调栈解法

基础思路&#xff1a; 维持栈单调递减&#xff0c;一旦出现元素大于栈顶元素&#xff0c;就可以计算雨水量&#xff0c;同时填坑&#xff08;弹出栈顶元素&#xff09; 需要注意&#xff1a; 单调栈通常保存的是下标&#xff0c;用于计算距离 public static int trap2(int[…

什么是OSW(光交换)?

光交换&#xff08;OSW&#xff09;是光传输网络中的一项关键技术&#xff0c;为复杂网络内光信号的动态路由和管理提供了手段。OSW的工作原理涉及对光信号路径的精确控制&#xff0c;确保光通信系统中的高效和灵活传输。本文全面介绍了OSW的不同类型、功能、工作模式和优势&am…

Linux 二十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

上市企业扣非净利润是什么意思,可以反映什么问题?

扣非净利润&#xff0c;全称“扣除非经常性损益后的净利润”&#xff0c;是指企业在剔除与正常经营无关的、偶然发生的损益后所得到的利润。这些非经常性损益包括但不限于政府补贴、处置长期资产、税收返还等。 扣非净利润的计算公式为&#xff1a;扣非净利润 净利润 - 非经常…