AMBA AHB 协议规范
AHB 协议规范
引言
本引言介绍了AMBA AHB协议规范。它包含以下章节:
关于本规范
该规范描述了AMBA AHB协议。
目标受众
该规范是为希望熟悉AMBA AHB协议并设计与AMBA AHB协议兼容的系统和模块的硬件和软件工程师编写的。
使用本规范
本规范编写了如下章节:
- 第1章 介绍:本章介绍了AMBA AHB协议的概述。
- 第2章 信号介绍:本章介绍了AHB各个组件的信号。
- 第3章 传输:本章介绍了关于主机发起的不同传输类型的信息。
- 第4章 总线互联:本章介绍了有关AMBA AHB系统所需互连逻辑的信息。
- 第5章 从机响应信号:本章介绍了有关从机响应信号的信息。
- 第6章 数据总线:本章介绍了有关读取和写入数据总线以及如何与不同数据总线宽度互连的信息。
- 第7章 时钟和复位:本章介绍了了有关时钟和复位信号的信息。
- 第8章 信号有效性:本章及诶少了关于信号有效性的规则信息。
- 第9章 原子属性:本章介绍了本规范所定义的原子属性信息.
- 第10章 独占传输:本章介绍了关于独占(Exclusive)传输、独占访问监视器以及关于独占传输其他信号的信息。
- 第11章 user信号:本章介绍了关于user信号的信息。
- 第12章 奇偶校验接口保护:本章介绍了使用奇偶校验和在AMBA AHB中使用的奇偶校验接口保护的描述。
- 附录A 信号汇总:本附录汇总了 AMBA AHB 接口所有必须和可选的信号。
- 附录B 版本: 本附录介绍了此规范已发布版本之间技术变更的描述。
- 词汇表:本规范介绍了本规范所用术语的词汇表及其定义。
约定
本节描述了本规格使用的约定:
排版
排版惯例是:
- italic(斜体):突出重要笔记,介绍特殊术语,并指示内部交叉引用和引用。
- bold(粗体):表示信号名称,并用于描述性列表中的术语(如果适用)。
- monospace(等宽):该字体用于汇编程序语法描述、伪代码和源代码示例。同时用于主要文本中的指令助记符,以及对出现在汇编程序语法描述、伪代码和源代码示例中的其他项目的引用。
- SMALL CAPITALS(小写大写字母):用于几个具有特定技术含义的术语。
时序图
时序图有时会同时将单比特信号显示为高电平和低电平,它们看起来与时序图约定中的总线变化相似。 如果时序图以这种方式显示单比特信号,则其值不会影响随附的描述。 阴影总线和信号区域是未定义的,因此总线或信号可以在该时间内的阴影区域内假设任何值。实际电平并不重要,也不影响正常操作。
信号
下面是关于信号方面的约定:
- 信号电平:断言信号的水平取决于信号是高有效还是低有效,断言意味着
- HIGH:表示高电平有效。
- LOW:表示低电平有效。
- 小写n:出现在信号名的开始或结束都表示低电平有效。
- 前缀H:表示AHB信号。
- 前缀P:表示APB信号。
数字
数字通常用十进制表示。二进制数字前加0b,而十六进制数字前加0x。
外链阅读
反馈
- 请通过填写 https://developer.arm.com/feedback/survey 上的表单,提交关于Arm产品文档的反馈意见。
- 有关Arm产品、架构和规格的技术反馈、问题或咨询,请在 https://support.developer.arm.com/my-cases/open-case/ 上提交支持请求。
第1章 介绍
本章提供了AMBA AHB协议的概述。它包含以下部分:
1.1 关于AHB协议
AHB是一种用于高性能可综合设计的总线接口协议。
AHB定义了组件之间的连接,例如:主机之间,主机从机之间,以及从机之间。 AMBA AHB 实现了高性能、高时钟频率系统所需的功能,包括:
- 突发传输。
- 单时钟沿操作。
- Non-tristate实现。
- 数据总线的位宽可配。
- 地址总线的位宽可配。
最常见的AHB从机是内部存储器、外部存储接口和高带宽外设。 虽然低带宽外设可以作为AHB从机,但出于系统性能的考虑,它们通常位于AMBA高级外设总线(APB)上。 高性能AHB与APB之间的桥接是通过一种被称为APB桥的AHB从机完成的。
图 1-1 显示了一个单一的AHB系统设计,包括AHB主机和三个AHB从机。 总线互连逻辑由一个地址解码器和一个从机到主机的多路复用器组成。 解码器在地址阶段监控主机的地址,以便在传输的数据阶段选择适当的从机。 多路复用器将相应的从机输出数据路由回主机。
AHB还支持多主机设计,采用一个互连组件,该组件为不同的主机提供仲裁和路由信号,以便传送到适当的从机。
Note: 图 1-1 展示了主要的地址总线和数据总线以及典型的数据路由,并不包含所有的信号。
AHB系统的主要组件类型如下所述:
1.1.1 主机
主机提供地址和控制信息以启动读写操作。
图 1-2 展示了一个典型的主机接口。
Note: 图 1-1 不包含在ahb5版本中附加的信号。
1.1.2 从机
从机在系统中响应由主机发起的传输。从机使用解码器中的HSELx选择信号来控制何时响应总线传输。 从机对主机做出的响应:
- 总线传输的完成或者延迟。
- 总线传输的失败或者成功。
图 1-3 展示了一个典型的从机接口。
Note: 图 1-3 不包含在ahb5版本中附加的信号。
1.1.3 互联
互联组件提供了系统中主机和从机之间的连接。
多主机系统需要使用一种互连,它提供仲裁和将不同主机的信号路由到适当从机的功能。 此路由对于地址、控制和写入数据信号是必需的。 关于多主机系统中使用的不同方法的进一步细节,例如单层或多层互连,本规范中没有提供。 可以参考 Multi-layer AHB Technical Overview (ARM DVI 0045) 。
1.1.3.1 译码器
该组件解码每个传输的地址,并为参与传输的从机提供选择信号。它还为多路复用器提供控制信号。 在所有使用两个或更多从机的实现中,需要一个集中解码器。有关更多信息,请参见 4.2 地址解码 。
1.1.3.2 多路复用器
一个从机到主机的多路复用器是必需的,以将从机的读取数据总线和响应信号多路复用到主机。解码器为多路复用器提供控制信号。 在所有两个或两个以上多从机的实现中,都需要一个集中式多路复用器。有关更多信息, 请参见 4.3 多路复用器中的读数据和响应 。
1.2 AMBA AHB版本
本规范的A版描述了AHB-Lite接口,B版引入了基于AHB-Lite并具有一些附加功能的AHB5。
本文件的版本是C版,新增了以下主题:
- 信号位宽属性;Signal width properties,详见 2.2 主机信号 。
- strobe写信号;Write Strobes,详见 3.5 strobe写 。
- user信号更新;,详见 11.1 user信号描述 。
- 接口保护校验;Interface protection using parity,详见 12.1 amba ahb的校验使用。
Note: 在本规范中,术语AHB用于指代AHB-Lite和AHB5。除非另有说明,否则信号对 AHB-Lite 和 AHB5 是通用的。
1.3 操作
主机通过驱动地址和控制信号来开始传输。这些信号提供有关地址、方向、传输宽度的信息,并指示传输是否为突发的一部分。 传输可以有以下几种形式:
- Single;
- 地址边界不回环的增量突发传输;
- 在特定地址边界回环的回环突发传输。
写数据总线将数据从主机搬运到从机。读数据总线将数据从从机搬运到主机。
每次传输都包含两个阶段:
- 地址阶段:一个周期用于地址和控制。
- 数据阶段:一个或多个周期用于传输数据。
从机不能请求延长地址阶段,因此所有从机必须在此期间完成地址取样。 然而,从机可以拉低HREADYOUT请求主机拉低HREADY延长数据阶段。 当从机HREADYOUT信号为低电平时,主机会在传输中插入等待状态,使从机有额外的时间来提供或取样数据。
从机使用HRESP表示传输的失败或者成功。
第2章 信号介绍
本章描述了协议信号。它包含以下部分:
Note: 所有AHB-Lite和AHB5信号前面都加上字母H,以将它们与系统设计中其他名称相似的信号区分开来。
一些信号可以具有不同的宽度,这由一个属性来描述。这些属性可以用来描述固定的配置或控制接口的配置,宽度为0的信号在接口上不存在。
2.1 全局信号
表 2-1 列出的是协议的全局信号。
信号 | 信号源 | 位宽 | 描述 |
---|---|---|---|
HCLK | 时钟源 | 1 | 用于同步总线,并且同步沿是HCLK的上升沿,详见 7.1.1 时钟。 |
HRESETn | 复位源 | 1 | 总线复位信号为低电平有效,并重置系统和总线。这是唯一的低电平有效信号,详见 7.1.2 复位。 |
2.2 主机信号
表 2-2 列出了主机生成的协议信号。 信号宽度属性定义了信号的宽度。例如ADDR_WIDTH定义了HADDR宽度。属性可以用来描述固定配置或控制接口的配置。
表 2-2 主机信号
信号 | 信号目标 | 位宽 | 描述 |
---|---|---|---|
HADDR | 从机和译码器 | ADDR_WIDTH | 传输的字节地址。ADDR_WIDTH建议在10到64,在本规范的A和B版本中固定为32。 |
HBURST | 从机 | HBURST_WIDTH | 表示在一次突发中包含几次传输以及地址是如何递增的。BURST_WIDTH必须是0或者3。详见 3.6 突发传输。 |
HMASTLOCK | 从机 | 1 | 表示当前传输是锁定序列的一部分,并且与地址和控制信号具有相同的时序。详见 3.3 锁定传输。 |
HPROT | 从机 | HPROT_WIDTH | 保护控制信号,提供有关访问类型的信息HPROT_WIDTH必须为 0、4 或 7,具体取决于Extended_Memory_Types属性。详见 3.8 保护控制 和 3.9 内存类型。 |
HSIZE | 从机 | 3 | 表示传输的的大小。详见 3.4 传输大小。 |
HNONSEC | 从机和译码器 | 1 | 指示传输是非安全还是安全 如果 AHB5 Secure_Transfers 属性为真则支持此信号。详见 3.10 安全传输。 |
HEXCL | Exclusive Access Monitor | 1 | 指示该传输是否是独占访问序列的一部分 如果AHB5 Exclusive_Transfers属性为真,则支持该信号。 10.3 独占访问信号。 |
HMASTER | Exclusive Access Monitor和从机 | HMASTER_WIDTH | 主机标识符。 如果主机有多个独占传输线程,则由主机生成。 由互连组件修改以确保每个主机被唯一标识。 如果AHB5独占传输属性为真,则支持此信号。建议HMASTER_WIDTH在0到8之间。 10.3 独占访问信号。 |
HTRANS | 从机 | 2 | 表明传输的类型 IDLE BUSY NONSEQUENTIAL SEQUENTIAL 详见 3.2 传输类型。 |
HWDATA | 从机 | DATA_WIDTH | 在写操作期间,将数据从主机传输到从机。数据宽度可以是8、16、32、64、128、256、512或1024。然而,任何小于32或大于256的值都不推荐使用。详见 6.1 数据总线。 |
HWSTRB | 从机 | DATA_WIDTH/8 | strobe写信号。所有bit为低时表示不以strobe写的方式写数据。每8位HWDATA对应1位HWSTRB。HWSTRB[n]对应HWDATA[(8n)+7:(8n)]。HWSTRB是一个数据阶段相关的信号,具有与HWDATA相同的有效性规则。详见 3.5 strobe写。 |
HWRITE | 从机 | 1 | 指示传输方向。当为高电平时表示写入传输,当为低电平时表示读取传输。它与地址信号具有相同的时序,然而,在整个突发传输过程中,必须保持恒定。详见 3.1 基础传输。 |
2.3 从机信号
表 2-3 列出了从机生成的协议信号。
表 2-3 从机信号
信号 | 信号目标 | 位宽 | 描述 |
---|---|---|---|
HRDATA | 多路复用器 | DATA_WIDTH | 在读取操作中,读取数据总线将数据从选定的从机传输到多路复用器。多路复用器随后将数据传输给主机。数据宽度可以是8、16、32、64、128、256、512或1024。不过,不推荐使用小于32或大于256的值。详见 6.1 数据总线。 |
HREADYOUT | 多路复用器 | 1 | 当高电平时,HREADYOUT信号表示总线上的传输已完成 此信号可以被拉低以延长传输。详见 4.3 多路复用器中的读数据和响应。 |
HRESP | 多路复用器 | 1 | 传输响应为主机提供了关于传输状态的额外信息。当信号为LOW时HRESP信号表示传输状态正常。当信号为HIGH时 HRESP 信号表示传输状态错误。详见 5.1 从机传输响应。 |
HEXOKAY | 多路复用器 | 1 | 独占响应。这表示独占传输的成功或失败。 如果 AHB5 的 Exclusive_Transfers 属性为 True,则支持该信号。详见 10.3 独占访问信号。 |
2.4 译码器信号
表 2-4 列出了译码器生成的协议信号。
表 2-4 译码器信号
信号 | 信号目标 | 位宽 | 描述 |
---|---|---|---|
HSELx | 从机 | 1 | 每个从机都有自己的选择信号HSELx,该信号指示当前传输是针对所选从机的。当从机被初次选中时,它还必须监控HREADY的状态,以确保之前的总线传输已经完成,然后才对当前传输作出响应。当从机被选中进行非IDLE传输时,HSELx必须在地址和其他控制信号的同一周期内被拉高。HSELx可以在空闲传输期间被拉高或拉低。详见 4.2 地址解码。 |
Note: x表明对于每一个从机都应该有一个独一无二的标识符,例如HSEL_s1,HSEL_s2,HSEL_Memory。
Note: 通常解码器还会向多路复用器提供HSELx信号,或从HSELx信号派生出信号或总线, 以使多路复用器能够将所选从机的适当信号路由到主机。重要的是,这些额外的多路复用器控制信号应重新定时到数据阶段。
2.5 多路复用器信号
表 2-5 列出了多路复用器生成的协议信号。
表 2-5 译码器信号。
信号 | 信号目标 | 位宽 | 描述 |
---|---|---|---|
HRDATA | 主机 | DATA_WIDTH | 读数据总线,解码器选择对应从机的HRDATA |
HREADYOUT | 主机和从机 | 1 | 当HIGH时HREADYOUT信号向主机和所有从机指示 前一次传输已完成。详见 4.3 多路复用器中的读数据和响应。 |
HRESP | 主机 | 1 | 传输响应,解码器选择对应从机的HRESP。 |
HEXOKAY | 主机 | 1 | 独占传输响应,解码器选择对应从机的HEXOKAY。 |
Note: 因为HRDATA、HRESP和HEXOKAY信号通过多路复用器并保持相同的信号命名, 这三个信号的完整信号描述见 2.3 从机信号。
第3章 传输
本章主要描述读写传输,包含以下章节:
3.1 基础传输
一次传输包含两个阶段
- 地址阶段:持续一个HCLK周期,除非通过先前的总线传输进行扩展。
- 数据阶段:可能需要几个HCLK周期。使用HREADY信号来控制完成传输所需的时钟周期数。
HWRITE控制传输的方向:
- HIGH:表示这是一次写传输,主机广播数据到HWDATA写数据总线上。
- LOW:表示这是一次读传输,从机必须产生数据到HRDATA读数据总线上。
最简单的传输是不带等待周期的,只包含一个周期的地址阶段和一个周期的数据阶段。
图 3-1 展示了没有等待周期的读传输。
图 3-2 展示了没有等待周期的写传输。
在这两个简单的传输例子中:
- 主机在HCLK的上升沿将地址和控制信号发送到总线上;
- 从机然后在HCLK的下一个上升沿取样地址和控制信息;
- 在从机采样地址和控制后,它可以开始驱动适当的HREADYOUT响应。该响应由主机在HCL的第三个上升沿采样。
这个简单的例子演示了在不同时钟周期内传输的地址阶段和数据阶段是如何发生的。 任何传输的地址阶段发生在前一个传输的数据阶段。 这种地址和数据的重叠是总线流水线特性的基础,使得在提供足够的时间让从机对此次传输做出响应的同时,实现高性能操作。
从机可以在任何传输中请求主机插入等待状态,以便为完成提供额外时间。 每个从机都在传输的数据阶段驱动HREADYOUT信号。 互连负责合并所有从属设备的HREADYOUT信号,以生成一个单一的HREADY信号,用于控制整体进度。
图 3-3 展示了具有两个等待周期的读传输。
图 3-4 展示了具有一个等待周期的写传输。
Note: 对于写传输,主机在等待周期内保持数据稳定。 对于读传输,从属设备在传输即将完成之前不必提供有效数据。 有关使用稳定数据的进一步信息,请参见 7.1.1 时钟。
当传输以这种方式延长时,它会产生一个副作用,使下一个传输的地址阶段也延长。
图 3-5 显示了三个无关地址A、B和C的传输,其中地址C的地址阶段被延长。
在 图 3-5 中:
- 地址A和C的传输没有等待周期;
- 地址B的传输有一个等待周期;
- 地址B数据阶段的延展同样延展了地址C的地址阶段。
3.2 传输类型
表 3-1 列出了由HTRANS表示的四种传输类型。
表 3-1 传输类型编码
HTRANS[1:0] | Type | 描述 |
---|---|---|
0b00 | IDLE | 指示不需要数据传输。 当主机不想执行数据传输时,会使用IDLE传输。建议主机用IDLE传输终止锁定的传输。从机必须始终对IDLE传输提供零等待状态的确认响应,并且从机必须忽略该传输。 |
0b01 | BUSY | 当主机正在继续进行突发传输,但下一个传输不能立即进行时,主机可以在突发传输中插入BUSY周期。 当主机使用BUSY传输类型时,地址和控制信号必须反映突发传输中的下一个传输。 只有未定义长度的突发传输可以将BUSY传输作为突发传输的最后一个周期。有关BUSY传输后的突发终止,请参阅 3.6.1 BUSY传输之后的突发终止。 从机必须始终对BUSY传输提供零等待状态的OKAY响应,而传输必须被从机忽略。 |
0b10 | NONSEQ | 指示单次传输或突发的第一次传输。 地址和控制信号与之前的传输无关。 总线上的单次传输被视为长度为一的突发, 因此传输类型为NONSEQUENTIAL。 |
0b11 | SEQ | 突发传输剩余的部分是顺序的,并且地址与之前的传输相关联,控制信息与之前的传输是相同的。 地址等于之前传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]信号指示。 在回环突发的情况下,传输的地址在地址边界处回环。 |
图 3-6 显示了NONSEQ、BUSY、SEQ传输类型。
- T0-T1:主机请求对地址0x20发起HTRANS为NONSEQ的传输,这是传输的第一拍;
- T1-T2:主机无法请求对地址0x24的传输,插入一拍HTRANS为BUSY的传输以延迟地址0x24的传输;从机完成了地址0x20的传输;
- T2-T3:主机现在可以请求发起对地址0x24的传输,发起一拍HTRANS为SEQ的传输;从机忽略了地址0x24HTRANS为BUSY传输,未提供任何数据;
- T3-T4:主机请求对地址0x28发起HTRANS为SEQ的传输;从机完成了地址0x24的传输;
- T4-T5:主机请求对地址0x2c发起HTRANS为SEQ的传输;从机由于无法完成当前传输,拉低HREADYOUT请求主机向传输过程插入一拍的等待;
- T5-T6:主机保持对地址0x2c的传输请求;从机保持地址0x28的HRDATA;
- T6-T7:主机不再发起传输;从机完成了地址0x2c的传输;
3.3 锁定传输
如果主机要求锁定访问,则它必须拉高HMASTLOCK信号。 该信号指示任何从机当前的传输序列是不可分割的,因此必须在处理其他任何传输之前先处理此序列。
通常锁定传输用于维护数据信息的完整性,确保从机在微处理器SWP指令的读写阶段之间不执行其他操作。
在一个锁定序列中:
- 总线在HMASTLOCK被拉高后锁定,对应的从机HSEL也要被拉高,且HREADY为高电平;
- 在HMASTLOCK拉低且HREADY为高电平后,总线被解锁。
图 3-7 显示了带有微处理器SWP指令的HMASTLOCK信号。
Note: 在锁定传输完成后后,建议主机插入一个IDLE传输。
大多数从机不需要实现HMASTLOCK,因为它们只能按照顺序进行传输。 可以被多个主机访问的从机设备,例如多端口内存控制器(MPMC),必须实现HMASTLOCK信号。
允许主机在序列开始、中间或结束时锁定序列,HMASTLOCK可以进行IDLE传输。 虽然在锁定传输序列的开始或结束使用锁定的IDLE传输是允许的,但不建议这样做,因为这种行为可能会对系统的仲裁产生不利影响。
允许主机在进行多次IDLE传输时声称HMASTLOCK,然后在没有执行非IDLE传输的情况下取消HMASTLOCK, 但不推荐这样做。锁定IDLE传输这种行为可能会对系统的仲裁产生不利影响。 可能的影响如下:
- 仲裁延迟:使用空闲传输锁定总线,可能会增加其他传输不必要的延迟;
- 带宽资源浪费:空闲传输本质上不涉及数据的传输,保持锁定意味着传输过程中没有数据进行读写,会造成带宽的浪费;
- 优先级倒置:低优先级的设备锁定总线,导致高优先级的设备迟迟获取不到总线的使用权,造成优先级倒置的现象,影响系统设备优先级的合理性;
- 状态管理混淆:锁定传输属于一种主动行为,会对系统的状态管理造成一定地混淆,从而妨碍系统的稳定性、可靠性以及增加工程师调试的复杂度。
所有的锁定传输必须在一个锁定的序列中以及同一片从机地址区域。
Note: 确保在已锁定序列中的所有传输都发送到同一从机地址区域,这一要求在本规范的A版中并不存在。必须对A版进行验证,以确保它不存在锁定传输这一行为。
3.4 传输大小
HSIZE[2:0]表示数据传输的大小,表 3-2 列出了可能的传输大小。
表 3-2 传输大小编码
HSIZE[2:0] | 大小(bits) | 描述 |
---|---|---|
0b000 | 8 | Byte |
0b001 | 16 | HalfByte |
0b010 | 32 | Word |
0b011 | 64 | DoubleWord |
0b100 | 128 | 4-word line |
0b101 | 256 | 8-word line |
0b111 | 512 | - |
0b111 | 1024 | - |
Note: 由HSIZE设置的传输尺寸必须小于或等于数据总线的宽度。例如,对于32位数据总线,HSIZE只能使用值0b000、0b001或0b010
HSIZE信号与地址总线具有相同的时序,它们必须在突发传输期间保持不变;
HSIZE与HBURST一起决定了回环突发的地址边界;
3.5 strobe写
strobe写是一个可选功能,它使得主机可以发出一个仅更新活动字节的写入操作。Write_Strobes 属性指示接口是否支持strobe写操作。
- True:支持strobe写,HWSTRB出现在接口上;
- False:不支持strobe写,HWSTRB不出现在接口上;
3.5.1 strobe写信号
关于strobe写的HWSTRB信号信息可以查阅 2.2 主机信号
3.5.2 strobe写信号的规则
以下规则适用于在AHB中确定strobe写:
- strobe写传输比数据总线更窄,HSIZE和HADDR决定哪些字节通道是活动的,
- HWDATA活动字节对应的HWSTRBbit可以是高电平有效规则下的高或低电平有效规则下的低。活动字节对应的HWSTRBbit低电平有效传输被称为稀疏写入。
- HWDATA不活动字节对应的HWSTRBbit可以是高电平有效规则下的低或低电平有效规则下的高。接口必须使用HSIZE和HADDR来确定哪些字节通道处于非活动状态。
- 允许在所有HWSTRB为无效的情况下进行传输,该传输不写入任何字节。
- HWDATA与HWSTRB字节通道的映射不依赖于字节序;
- 对于读取传输,建议HWSTRB信号拉低;
- strobe写信号可以在突发传输的拍之间变化;
3.5.3 互操作性
表 3-3 显示了基于属性Write_Strobes不同的接口之间互操作性。
表 3-3 Write_Strobes属性
Write_Strobes | 从机:False | 从机:True |
---|---|---|
主机:False | 兼容 | 兼容,从机接口上的HWSTRB常接为HIGH |
主机:True | 如果主机不产生稀疏传输的话是兼容的 | 兼容 |
3.6 突发传输
在此协议中定义了4、8和16拍的突发、未定义长度的突发和单次传输。支持增量突发和回环突发。
- 增量突发访问顺序位置和突发中的每次传输的地址都是上一个地址的递增;
- 当回环突发跨越地址边界时,会回到回环的初始地址继续进行突发传输。地址边界的计算方式是突发中节拍数量与传输大小的乘积。 节拍数量由HBURST控制,传输大小由HSIZE控制。
表 3-4 显示了可能的突发类型
表 3-4 突发类型编码
HBURST[2:0] | Type | 描述 |
---|---|---|
0b000 | SINGLE | 单次突发传输 |
0b001 | INCR | 未定义长度的增量突发 |
0b010 | WRAP4 | 4拍的回环突发 |
0b011 | INCR4 | 4拍的增量突发 |
0b100 | WRAP8 | 8拍的回环突发 |
0b101 | INCR8 | 8拍的增量突发 |
0b110 | WRAP16 | 16拍的回环突发 |
0b111 | INCR16 | 16拍的增量突发 |
主机必须避免尝试启动跨越1KB地址边界的增量突发。
主机可以使用下面两种方式进行单次传输:
- SINGLE突发传输;
- 未定义长度的INCR突发传输,长度为1。
Note: 突发大小表示突发中的时钟周期数量,而不是传输的字节数。 通过将时钟周期的数量乘以每个时钟周期中的数据量来计算突发中传输的总数据量,如HSIZE[2:0]所示。
所有突发传输必须与地址边界对齐,该边界等于传输的大小。 例如,字传输必须对齐到字地址边界(HADDR[1:0]= 0b00)即地址按4个字节的增量进行递增, 而半字传输则必须对齐到半字地址边界(HADDR[0]= 0)即地址按2个字节的增量进行递增。 建议IDLE传输的地址也要对齐,以避免在仿真中出现虚假警告。 在本规范的A和B版本中,这是一项规则,而非建议。
3.6.1 BUSY传输之后的突发终止
在一次突发开始后,如果在继续下一次突发的传输之前需要更多时间,主机会使用BUSY传输。
主机在未定义长度的INCR突发期间,允许插入BUSY传输,然后决定不再需要数据传输。 在这种情况下,主机可以发起一个NONSEQ或IDLE传输,从而有效地终止未定义长度的突发。
主机不允许在SINGLE突发后立即发起BUSY传输,SINGLE突发后必须跟随IDLE或NONSEQ传输。
该协议不允许主机以BUSY传输结束固定长度类型的突发:
- 增量类型的突发传输:INCR4、INCR8、INCR16;
- 回环类型的突发传输:WRAP4、WRAP8、WRAP16;
这些固定长度的突发类型必须以SEQ传输结束。
3.6.2 提前终止突发传输
突发传输可以被下面两种方式提前终止:
3.6.2.1 从机发出错误响应
如果从机提供了错误响应,则主机可以取消此次传输中的剩余传输。 然而,这并不是一个严格的要求,主机也可以选择继续进行此次传输中的剩余传输。
如果主机取消了突发中的剩余传输,则必须在两个周期的错误响应期间将HTRANS类型更改为IDLE。
如果主机没有完成该突发传输,那么在下次访问该从机时不必重新构建该突发。 例如,如果一个主机只完成了八拍突发中的三拍,那么在下次访问该主机时,它不必完成剩下的五拍传输。
3.6.2.2 多层互联终止
尽管主机不允许提前终止突发请求,但从机必须被设计为在突发未完成的情况下正常工作。
当在多主机系统中使用多层互连组件时,它可以终止一个突发以便另一个主机可以访问从机。 如果发生这种情况,从机必须终止来自原主机的突发,然后适当地响应新的主机。
3.6.3 突发传输示例
- 3.6.3.1 4拍的回环突发传输,WRAP4
- 3.6.3.2 4拍的增量突发传输,INCR4
- 3.6.3.3 8拍的回环突发传输,WRAP8
- 3.6.3.4 8拍的增量突发传输,INCR8
- 3.6.3.5 未定义长度的增量传输,INCR
3.6.3.1 4拍的回环突发传输,WRAP4
图 3-8 展示了4拍的回环突发字写传输,在第1拍传输中包含一个等待周期。
因为突发是一个4拍的字传输,所以地址在16字节边界处进行回环,传输地址0x3C后紧接着传输地址0x30。
对于HBURST为WRAP4,HSIZE为4bytes的回环突发传输。 每四个字即0x10为一个回环边界,地址到达回环边界时,立刻回到回环传输的初始地址。 由于 图 3-8 的例子中当地址到达回环边界0x40时,立刻回到回环传输的初始地址0x30。
Note: 初始地址为回环边界不需要回环。
附表 3-1 展示了HBURST为WRAP4,HSIZE为4bytes可能的传输地址, 每一行为一个回环区域,传输只会发生在本回环区域内。
附表 3-1HBURST为WRAP4,HSIZE传输的地址表
第一拍 | 第二拍 | 第三拍 | 第四拍 |
---|---|---|---|
0x00 | 0x04 | 0x08 | 0x0c |
0x10 | 0x14 | 0x18 | 0x1c |
0x20 | 0x24 | 0x28 | 0x2c |
0x30 | 0x34 | 0x38 | 0x3c |
3.6.3.2 4拍的增量突发传输,INCR4
图 3-9 展示了使用4拍增量突发的字读传输,并为第4拍传输添加了一个等待状态。 在这种情况下,地址不会在16字节边界处回环,地址0x3C后面跟着一个传输到地址0x40。
3.6.3.3 8拍的回环突发传输,WRAP8
图 3-10 展示了一个8拍回环突发传输的字读传输。
因为突发是一个8拍的字传输,所以地址在32字节边界处进行回环,传输到地址0x3C之后紧接着传输地址0x20。
3.6.3.4 8拍的增量突发传输,INCR8
图 3-11 展示了使用8拍增量突发的半字写传输。
在这种情况下,地址不会在16字节边界处回环,地址0x3C后面跟着一个传输到地址0x3E。
3.6.3.5 未定义长度的增量传输,INCR
图 3-12 展示了未定义长度的突发传输。
包含两种突发:
- 第一次突发是一个写操作,由两个半字传输组成,从地址0x20开始。这些传输地址每次增加两个。
- 第二次传输是一个从地址0x5C开始的由三个字传输组成的读取。这些传输地址以四为增量递增,并且在地址0x60插入了一个等待周期。
3.7 等待传输
如果从机需要更多时间来提供或采样数据,从机将使用HREADYOUT请求主机插入等待状态。 在等待传输期间,主机对传输类型和地址进行更改方面受到限制。这些限制在以下部分中进行了描述:
3.7.1 等待状态中更改传输类型
当从机请求等待状态时,主机不得更改传输类型,除非如下所述情况:
3.7.1.1 IDLE传输
在等待传输期间,主机被允许将传输类型从IDLE更改为NONSEQ。 当HTRANS传输类型更改为NONSEQ时,主机必须保持HTRANS不变,直到HREADY为HIGH。 这表明,在一次等待阶段中,传输类型只允许被改变一次。
图 3-13 展示了一个带有等待状态的SINGLE突发传输,并且在等待状态传输类型从IDLE转变为NONSEQ。
在 图 3-13 中:
- T0-T1:主机请求对地址A发起HTRANS为NONSEQHBURST为SINGLE的传输;
- T1-T2:主机请求对地址Y发起HTRANS为IDLE的传输;从机拉低HREADYOUT请求主机向传输插入一个等待周期;
- T2-T3:主机请求对地址Z发起HTRANS为IDLE的传输;从机保持不变
- T3-T4:主机请求对地址B发起HTRANS为NONSEQHBURST为INCR4的传输;从机保持不变
- T4-T5:主机保持不变;从机保持不变
- T5-T6:主机保持不变;从机拉高HREADYOUT完成地址A的传输;
- T6-T7:主机请求对地址B+4发起HTRANS为SEQHBURST为INCR4的传输;从机完成地址B的传输;
3.7.1.2 固定突发长度中的BUSY传输
在等待固定突发长度的传输期间,主机可以将传输类型从BUSY更改为SEQ。 当HTRANS传输类型更改为SEQ时,主机必须保持HTRANS不变,直到HREADY为HIGH。
Note: 因为BUSY传输必须且仅在突发的连续节拍之间插入,这不适用于SINGLE突发。因此这种情况适用于以下突发类型:
- INCR4、INCR8、INCR16
- WRAP4、WRAP8、WRAP16
图 3-14 展示了固定突发长度且带有等待状态的传输,传输状态从BUSY转变到SEQ。
在 图 3-14 中:
- T0-T1:主机请求对地址0x24发起HTRANS为SEQ,HBURST为INCR4的传输;
- T1-T2:主机请求对地址0x28发起HTRANS为BUSY,HBURST为INCR4的传输;从机拉低HREADYOUT请求主机向传输插入一个等待周期;
- T2-T3:主机保持不变;从机保持不变;
- T3-T4:主机请求对地址0x28发起HTRANS为SEQ的传输;从机保持不变;
- T4-T5:主机保持不变;从机保持不变;
- T5-T6:主机保持不变;从机拉高HREADYOUT完成地址0X24的传输;
- T6-T7:主机请求对地址0x2C发起HTRANS为SEQ,HBURST为INCR4的传输;
从机完成对地址0X28的传输;
3.7.1.3 未定义突发长度中的BUSY传输
在等待的传输期间,对于一个未定义长度的突发INCR,当HREADY为低时,主机被允许从BUSY状态切换到任何其他传输类型。 如果发起了SEQ传输,突发将继续;但如果发起了IDLE或NONSEQ传输,突发将终止。
图 3-15 显示了在未定义长度的突发期间进行了等待传输,传输类型从BUSY变为NONSEQ。
在 图 3-15 中:
- T0-T1:主机请求对地址0x64发起HTRANS为SEQ,HBURST为INCR的传输;
- T1-T2:主机请求对地址0x68发起HTRANSBUSY,HBURST为INCR的传输;从机拉低PREADYOUT请求主机向传输插入一个等待周期;
- T2-T3:主机保持不变;从机保持不变;
- T3-T4:主机请求对地址0x10发起HTRANS为NONSEQ,HBURST为INCR4的传输;从机保持不变;
- T4-T5:主机保持不变;从机保持不变;
- T5-T6:主机保持不变;从机拉高PREADYOUT完成地址0x64的传输;
- T6-T7:主机请求对地址0x14发起HTRANS为SEQ,HBURST为INCR4的传输;从机完成地址0x10的传输;
3.7.2 等待状态中更改地址
当从机请求等待状态时,主机只能更改地址一次,除非如下所述:
3.7.2.1 IDLE传输状态
在等待传输期间,主机被允许更改IDLE传输的地址。当HTRANS传输类型更改为NONSEQ时,主机必须保持地址不变,直到HREADY为高电平。
图 3-16 显示了突发的等待传输,地址在IDLE传输期间发生变化。
在 图 3-16 中:
- T0-T1:主机请求对地址A发起HTRANS为NONSEQ,HBURST为SINGLE的传输;
- T1-T2:主机请求对地址Y发起HTRANS为IDLE的传输;从机拉低HREADYOUT请求主机向传输插入一个等待周期;
- T2-T3:主机请求对地址Z发起HBURST为IDLE的传输;从机保持不变;
- T3-T4:主机请求对地址B发起HTRANSNONSEQ,HBURST为INCR4的传输;从机保持不变;
- T4-T5:主机保持不变;从机保持不变;
- T5-T6:主机保持不变;从机拉高PREADYOUT完成地址A的传输;
- T6-T7:主机请求对地址B+4发起HTRANS为SEQ,HBURST为INCR4的传输;从机完成地址B的传输;
3.7.2.2 ERROR响应之后
在等待传输期间,如果从机发出一个错误响应,那么当HREADY为低时,主机被允许更改地址。 有关错误响应的更多信息,请参见 5.1.3 ERROR响应。
图 3-17 显示了一个等待传输,地址在主机接收到从机发出的错误响应后发生了变化。
在 图 3-17 中:
- T0-T1:主机请求对地址0x24发起HTRANS为SEQ,HBURST为INCR4的传输;从机拉低HRESP发出OKAY响应;
- T1-T2:主机请求对地址0x28发起HTRANS为SEQ,HBURST为INCR4的传输;从机拉低PREADYOUT请求主机向传输插入一个等待周期;
- T2-T3:主机保持不变;从机保持不变;
- T3-T4:主机保持不变;从机拉高HRESP发出ERROR响应;
- T4-T5:主机请求对地址0xc0发起HTRANS为IDLE的传输;
从机拉高HREADYOUT表示对地址0x28完成一个ERROR传输; - T5-T6:从机对地址0xC0完成一个OKAY传输;
3.8 保护控制
本规范的A版定义了一个4位的HPROT信号,本节对此进行了描述。 本规范的B版增加了扩展内存类型,详细描述见 3.9 内存类型
Note: HPROT[3]的名称在本规范的版本A和版本B之间发生了变化,但定义保持不变。 在版本A中HPROT[3]被指定为Cacheable,在版本B中它被指定为Modifiable。
保护控制信号HPROT[3:0]提供关于总线访问的附加信息,主要用于实现任何模块在某种程度上的保护。
信号表示传输访问类型:
- 指令获取还是数据访问;
- 特权模式访问还是用户模式访问;
对于具有内存管理单元的主机,这些信号还指示当前访问是否可缓存(Cacheable)或可缓冲(Bufferable)。
表 3-5 显示了HPROT信号的编码。
表 3-5 保护信号编码
HPROT[3]是否可改变 | HPROT[2]是否可缓冲 | HPROT[1]是否是特权访问 | HPROT[0]数据访问还是指令获取 | 描述 |
---|---|---|---|---|
− | − | − | 0 | 指令获取 |
− | − | − | 1 | 数据访问 |
− | − | 0 | − | 用户访问 |
− | − | 1 | − | 特权访问 |
− | 0 | - | − | 不可缓冲 |
− | 1 | − | - | 可以缓冲 |
0 | − | − | − | 不可改变 |
1 | − | - | - | 可以改变 |
Note: 缓冲和缓存的区别:
- 定义和目的:
缓冲(Buffer):主要用于在数据传输过程中存储临时数据,以解决设备速度不匹配的问题,缓缓冲冲击,使得数据传输更加平稳和高效。
缓存(Cache):主要用于存储频繁访问的数据,以加快数据读取速度,提高系统性能。缓存的目的是减少访问数据时的延迟。
- 操作侧重点:
缓冲:偏重写操作,通过批量处理数据来减少设备之间的速度差别,优化I/O操作。例如,将数据暂存至缓冲区,待积累到一定量后统一写入磁盘。
缓存:偏重读操作,将经常需要访问的数据存储在缓存中,以便快速读取,减少从原始存储读取数据的时间。
- 应用场景:
缓冲:常用于系统 I/O 设备之间的数据传输,如从内存到磁盘的写操作,或网络数据包的处理。
缓存:常用于 CPU 和内存间的高频数据访问,提高处理器的访问效率,如 CPU 缓存、网页缓存等。
- 总结来说,缓冲和缓存虽然都是用来提高系统性能的技术,但其应用场景、侧重点和工作方式不同。
缓冲主要用于应对数据传输的不匹配性,平滑数据流动。
而缓存则专注于加快数据读取速度,提高系统响应效率。
这些差异使得缓冲和缓存分别在不同的场合发挥着重要作用。
Note: 许多主机无法生成准确的保护信息。如果管主机无法生成准确的保护信息,建议:
- 主机将HPROT设置为0b0011,以对应不可缓存、不可缓冲、特权的数据访问。
- 从机除非必要,不要使用HPROT
HPROT控制信号与地址总线具有相同的时序。但是,它们必须在整个突发传输过程中保持不变。
3.9 内存类型
AHB5定义了Extended_Memory_Types属性。该属性定义了一个接口是否支持本节所述的扩展内存类型。如果没有定义此属性,则该接口不支持扩展内存类型。
本规范的这一版增加了额外的HPROT信号,并提供了每种内存类型的更详细要求。
表 3-6 显示了HPROT每个bit代表的意义。 表 3-7 显示了HPROT[6:2]的内存类型映射。
表 3-6HPROTbit位的意义
HPROT | 功能 | 描述 |
---|---|---|
HPROT[0] | 数据访问还是指令获取 | HIGH:表明传输是数据访问; LOW:表明传输是指令获取 |
HPROT[1] | 特权访问还是用户访问 | HIGH:表明传输是特权访问; LOW:表明传输是用户访问 |
HPROT[2] | 可以缓冲还是不可缓冲 | 如果HPROT[4:3]=0b11 HIGH:写入响应可以从传输中间给出,但在传输到目的地时需要及时清晰地写入响应; LOW:传输到目的地时必须写入响应 |
HPROT[3] | 可以修改还是不可修改 | HIGH:HBURST、HSIZE表示的传输特征可以被修改; LOW:HBURST、HSIZE表示的传输特征不能被修改; |
HPROT[4] | 需要查找还是不需查找 | HIGH:传输必须在缓存中查找; LOW:传输不一定在缓存中查找,但传输必须传播到最终的目的地。 |
HPROT[5] | 需要分配还是不需分配 | HIGH:处于性能考虑,建议将此传输分配到缓存中; LOW:处于性能考虑,建议此传输不要分配到缓存中。 |
HPROT[6] | 可以共享还是不可共享 | HIGH:表明该传输与系统中其他主机共享内存区域。传输的响应在传输其他主机事务之前不得提供。 LOW:指示此传输是不可共享的,并且内存区域未与系统中的其他主机共享。传输发出响应并不保证其他主机可以开始传输。对于设备内存的传输,此位被忽略且必须为零。 |
3.9.1 数据访问或者指令获取
所有传输都包含数据或指令保护位HPROT[0]:
- HIGH:该位表示传输是数据访问
- LOW:该位表示传输是指令获取
该协议将此指示定义为提示。在所有情况下它并不一定准确,例如,当传输包含指令和数据项的混合时。
建议主机将HPROT[0]设置为高,以指示数据访问,除非该访问被明确知道是指令访问。
3.9.1 特权访问和用户访问
所有传输都包含特权访问和用户访问保护位HPROT[1]:
- HIGH:该位表示传输是特权访问
- LOW:该位表示传输是用户访问
Note: 某些处理器支持多个特权级别,请参阅所选处理器的文档以确定与AHB特权级别的映射。 唯一的区分是在特权访问和非特权访问之间。
3.10 保护传输
本节提供有关HPROT保护控制信号的更多信息,以及这些信号与不同内存类型之间的关系。
设备内存类型E
后缀表示允许提前写入响应.
设备内存类型nE
后缀表示不允许提前写入响应,写入响应必须来自最终目的地。
表 3-7 显示了HPROT[6:2]bit组合与内存类型的映射,未显示的组合则是不允许的。
表 3-7 HPROT bit位允许的组合
HPROT[6]是否共享 | HPROT[5]是否分配 | HPROT[4]是否查找 | HPROT[3]是否可改变 | HPROT[2]是否可缓冲 | 内存类型 |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | Device-nE(不可提前给出响应) |
0 | 0 | 0 | 0 | 1 | Device-E(可提前给出响应) |
0 | 0 | 0 | 1 | 0 | Normal Non-cacheable,Non-shareable |
0 | 0 or 1 | 1 | 1 | 0 | Write-through,Non-shareable |
0 | 0 or 1 | 1 | 1 | 1 | Write-back,Non-shareable |
1 | 0 | 0 | 1 | 0 | Normal Non-cacheable,Shareable |
1 | 0 or 1 | 1 | 1 | 0 | Write-through,Shareable |
1 | 0 or 1 | 1 | 1 | 1 | Write-back,Shareable |
以下部分详细说明了每种内存类型的要求。
3.9.4 设备内存需求
对于所有设备内存,即Device-nE和Device-E,所需的行为是:
- 读取的数据必须来自最终目的地;
- 传输不得拆分为多笔传输或与其他传输合并;
- 读取不得预先获取或进行推测性操作;
- 写入不可合并;
- 所有来自同一主机对同一从机的读写传输必须保持顺序;
- 由HSIZE表示的传输大小必须保持不变;
- 允许将一次传输的突发拆分成多个较小的突发。 然而,原始突发中的NONSEQ和SEQ传输的总数必须与拆分后较小突发中的NONSEQ和SEQ传输的总数相同;
- 唯一允许对HPROT进行的更改是将传输从可缓冲转换为不可缓冲;
对于Device-nE:
- 写响应必须从最终目的地获得;
对于Device-E:
- 可以从一个中间点获得正确的响应;
- 写入传输必须在提供写入响应时对所有其他主机可见;
- 传输必须及时到达最终目的地;
3.9.5 普通内存需求
正常内存可以是普通非缓存的(Normal Non-cacheable)、写直通(Write-through)的或写回(Write-back)的。 对于正常内存,所需的行为是:
- 读取可以是推测性的;
- 读取可以获取比所需更多的数据;
- 可以合并写入;
- HBURST和HSIZE所示的传输特征可以改变;
- 来自相同主机到重叠地址的读写传输必须保持有序;
- 对于可共享的传输,只有在传输对所有其他主机可见时才能提供响应;
对于普通非缓存内存类型:
传输必须在最终目的地及时可见;
Note 没有机制可以确定写入传输何时到达最终目的地(There is no mechanism to determine when a write transfer has reached its final destination.)
读取的数据必须从以下来源获取:
- 最终目的地;
- 传输到最终目的地的写入操作;
如果是从写入传输中获得读取数据:
- 必须从最最近一次的写入传输中获得。
- 数据不得缓存以供后续读取;
读取操作不得缓存获取的数据以便后续使用;
Note: 对于一个普通的不可缓存内存,可以从仍在传输过程中的写入传输中获取读取数据,这与读取和写入传输同时传播到达最终目的地是无法区分的。 以这种方式返回的读取数据并不表示写入传输对最终目的地是可见的。
对于写直通类型:
- 可以从中间缓存或缓冲区获得正确的响应;
- 读取的数据可以缓存到中间缓存或缓冲区中;
- 读取和写入传输需要进行缓存查找;
- 写入传输必须及时在最终目的地可见;
Note 没有机制可以确定写入传输何时到达最终目的地(There is no mechanism to determine when a write transfer has reached its final destination.)
对于写回类型:
- 可以从中间缓存或缓冲区获取写入响应;
- 读取的数据可以缓存到中间缓存或缓冲区;
- 读取和写入传输都需要进行缓存查找;
- 写入传输必须及时在最终目的地可见;
3.9.6 分配属性(Allocate)
写直达和写回传输包含一个分配属性HPROT[5]可设置,出于性能原因,建议如下使用:
- HPROT[5]=HIGH:此传输会在缓存中分配;
- HPROT[5]=LOW:此传输不会在缓存中分配;
3.9.7 对版本HPROT[3:0]兼容考量
原本信号 | 对于扩展内存类型的映射 | |||||||
---|---|---|---|---|---|---|---|---|
HPROT[3] | HPROT[2] | Definition | Expected_use | HPROT[6] | HPROT[4] | HPROT[3] | HPROT[2] | memory_type |
0 | 0 | Non-cacheable Non-bufferable | Strongly-ordered | 0 | 0 | 0 | 0 | Device-nE |
0 | 1 | Non-cacheable Bufferable | Device | 0 | 0 | 0 | 1 | Device-E |
1 | 0 | Cacheable Non-bufferable | Write-through | 1 | 1 | 1 | 0 | Write-through Shareable |
1 | 1 | Cacheable Bufferable | Write-back | 1 | 1 | 1 | 0 | Write-back Shareable |
在仅包含HPROT[3:0]的系统中使用支持HPROT[6:0]的组件时,建议去掉HPROT高位;
Note: 这种方法将导致写直通映射到非缓存内存。然而,如果提供了额外的信息来确定更合适的映射,可以使用替代方案。
3.10 安全传输
AHB5定义了Secure_Transfers属性。该属性定义了接口是否支持安全和非安全传输的概念。 如果没有定义该属性,则该接口不支持安全传输。
支持安全传输的接口具有一个额外的信号HNONSEC。该信号在非安全传输时被置为高电平,在安全传输时被置为低电平。
HNONSEC是一个地址阶段信号,并且在突发期间必须保持不变。
在与不支持安全传输的组件进行接口连接时,必须小心。
Note: 该信号的定义是为了在其被置为高电平时,传输被识别为非安全。这与Arm安全扩展的其他信号在实现中的一致性相符。
第4章 总线互联
本章描述了AMBA AHB系统所需的互连逻辑。它包含以下节:
4.1 互联
互连组件提供了系统中主机与从机之间的连接。
单个主机系统只需要使用解码器和多路复用器,如以下各节所述。
多主机系统需要使用一个提供仲裁和将不同主机的信号路由到适当从机的互连。 这种路由对于地址、控制和写数据信号是必需的。
关于多主机系统使用的进一步细节,例如单层或多层互连,在本规格中未提供。
有关实现多层AHB-Lite互连的更多信息,可以参考Multi-layer AHB Technical Overview (ARM DVI 0045)。
4.2 地址解码
地址解码器为总线上的每个从机提供选择信号HSELx。 鼓励使用简单的地址解码方案,以避免复杂的解码逻辑并确保高速操作。
当HREADY为高时,从机仅在此时采样HSELx、地址和控制信号,表明当前传输正在完成。 在某些情况下,当HREADY处于低状态时,HSELx可能会被激活,但在当前传输完成时,所选的从机可能已更改。 请参阅 3.7.2 等待状态中的地址改变。
可以分配给单个从机的最小地址空间为1KB,地址区域的起始和结束必须位于1KB边界上。 所有主机都设计为不会在1KB地址边界上进行递增传输。 这确保了数据突发不会跨越地址解码边界。
图 4-1 显示了解码器生成的HSELx从机选择信号。
4.2.1 默认从机
如果系统设计不包含完整的内存映射,则必须实现一个额外的默认从机,以便在访问任何不存在的地址时提供响应。 如果尝试对不存在地址的NONSEQ或SEQ传输,则默认从机将提供错误响应。 IDLE或BUSY的传输到不存在地址将导致零等待状态的正常响应。
4.2.2 多从机选择
一个从机接口可以支持多个从机选择HSELx信号。 每个HSELx信号对应于不同高位地址位的解码。
这允许单个从机接口提供多个逻辑接口,每个接口在系统地址映射中的位置不同。 可以分配给逻辑接口的最小地址空间为1KB。 这种方法消除了从机接口需要支持地址解码以区分逻辑接口的需求。
多个HSELx信号的典型用例是主数据路径和控制寄存器在地址映射中位置不同的外设。 这两个位置也可以通过单个接口访问,而无需为从机实现地址解码。
4.3 多路复用器中的读数据和响应
AHB协议对读取数据进行多路复用器互连方案。
主机将地址和控制信号发送到所有从机,解码器在传输的数据阶段选择适当的从机。
来自所选从机的任何响应数据,经过读取数据多路复用器传递给主机。
图 4-2 显示了实现三个从机所需的多路复用器互连结构设计。
Note: 如果支持独占传输,多路复用器还必须将适当的HEXOKAY信号路由到主机。
4.4 AHB接口的互联
通用的互连结构可以提供AHB作为接口选项,其中还包括AMBA AXI或AMBA APB等其他选项。 图 4-3 显示了通用互连结构如何实现HTRANS、HREADY和HSEL。
在这个例子中,互连的主机端使用HTRANS来指示有效的传输,并且有一个单一的HREADY信号。 当从机插入等待状态时,或者主机在互连中等待仲裁时,HREADY用于暂停当前传输。
互连的从机端还包括一个HSEL输出和两个HREADY信号。 来自从机方的HREADYOUT被传递给主机以插入等待状态。 来自互连的HREADY输出可用于在上一个传输的数据阶段被阻塞时使从机端暂停传输。
一种替代实现方式是将HSEL在从机上设置为高电平,并且通过互连去覆盖从机的HTRANS为IDLE状态以达到不选择从机的目的。
第5章 从机响应信号
本章描述了从机响应信号。它包含以下部分:
5.1 从机传输响应
在主机启动传输后,从机控制传输的进展。主机不能在传输开始后取消传输。
对于支持 AHB5 Exclusive_Transfers 属性的组件,
请参见 10.3 独占访问信号,了解HEXOKAY传输响应信号的详细信息。
从机必须提供一个响应,指示传输的状态。传输状态由HRESP信号和HREADYOUT提供。
表 5-1 显示了HRESP的状态。
表 5-1HRESP状态
HRESP | 响应 | 描述 |
---|---|---|
0 | OKAY | 传输要么已成功完成,要么需要额外的周期以便从机完成传输 HREADYOUT信号指示传输是待处理还是已完成 |
1 | ERROR | 在传输过程中发生了错误。必须向主机发出错误状态信号,以便其意识到传输未成功。 对于错误状态,需要进行两个周期的响应,HREADYOUT将在第二个周期被拉高。 |
表 5-2 显示了基于HRESP和HREADYOUT信号的完成传输状态
表 5-2HRESP和HREADY的组合
HRESP | HREADYOUT | |
---|---|---|
0 | 1 | |
0 | 传输延迟 | 传输成功完成 |
1 | 在第一个周期发出错误响应 | 在第二个周期传输失败完成 |
这意味着从机可以通过以下三种方式完成传输:
- 立即完成传输;
- 发出错误信号以表示传输失败;
- 插入一个或多个等待状态以便有时间完成传输;
存在着这三种从机传输响应:
5.1.1 传输结束
成功完成传输的信号是当HREADY为高电平且HRESP为OKAY时。
5.1.2 传输延迟
一个典型的操作是从机拉低HREADYOUT在数据传输阶段插入适当数量的等待状态。 然后,传输以HREADYOUT高电平和OKAY响应完成,以指示传输的成功完成。
当从机在完成响应之前插入一定数量的等待状态时,它必须将HRESP设为 OKAY。
Note: 一般来说,每个从机必须在完成传输之前插入预定的最大等待状态数量。 这使得能够计算访问总线的最大延迟。插入等待状态会使整个AHB接口停滞,因此长时间的等待状态会对系统性能产生负面影响。
5.1.3 ERROR响应
从机使用ERROR响应来表示与相关传输有关的某种错误情况,通常表示保护错误,例如尝试写入只读内存位置。
尽管可以在一个周期内给出OKAY响应,但ERROR响应需要两个周期。 要启动ERROR响应,从机将HRESP拉高以指示ERROR,同时将HREADYOUT拉低以延长传输一个额外周期。 在下一个周期内,HREADYOUT被拉高以结束传输,而HRESP保持拉高以指示ERROR。
由于总线的流水线特性,需要两周期响应。 当一个从机开始发出错误响应时,随后的传输地址已经广播到总线上。 两周期响应为主机提供了足够的时间来取消下一个访问,并在下一个传输开始之前将HTRANS[1:0]驱动到空闲状态。
如果从机需要超过两个周期来提供错误响应,则可以在传输开始时插入额外的等待状态。 在此期间HREADY处于低电平,响应必须设置为 OKAY。
图 5-1 显示了一个带有错误响应的传输。
在 图 5-1 中:
- T0-T1:
主机请求对地址A发起HTRANS为NONSEQ的传输; - T1-T2:
主机请求对地址B发起传输;
从机拉低HREADYOUT请求主机向传输插入一个等待周期,同事向主机发出一个HRESP为OKAY的响应; - T2-T3:
主机保持不变;
从机向主机发出第一个周期HRESP为ERROR的响应; - T3-T4:
主机请求发起一个IDLE的传输;
从机拉高HREADYOUT,HRESP保持不变向主机发起第二个周期的ERROR响应,表明一个ERROR的传输完成; - T4-T5:
主机保持不变;
从机向主机发出一个HRESP为OKAY的响应;
如果从机提供了错误响应,那么主机可以取消突发传输中的剩余传输。 然而,这不是一个严格的要求,主机继续进行突发中的剩余传输是可以接受的。 收到读取传输的错误响应的主机仍然可以使用该数据。 从机不能依赖错误响应来阻止读取HRDATA上的值。 建议当读取传输给出错误响应时将HRDATA驱动到零。
第6章 数据总线
本章描述了数据总线。它包含以下章节:
6.1 数据总线
要实现AHB系统,需要分开的读写数据总线。 尽管建议的最小数据总线宽度为32位,但可以如 6.3 数据总线位宽 的描述进行更改。 数据总线的描述如下:
6.1.1 HWDATA
主机在写入传输期间驱动写数据总线。 如果传输时间延长,主机必须保持数据有效,直到HREADYOUT为高传输完成。 有关在多个周期内保持信号有效的详细信息,请参见 7.1.1 时钟。
对于宽度小于总线宽度的传输,例如在32位总线上进行的16位传输,主机只需驱动相应的字节通道。 从机从正确的字节通道选择写入数据。 详细信息请参见 ,了解在小端和大端系统中哪些字节通道是活跃的。
6.1.2 HRDATA
被选中的从机在读取传输期间驱动读取数据总线。 如果从机通过将HREADYOUT保持在低电平来扩展读取传输, 那么从机只需在传输的最后一个周期拉高HREADYOUT提供有效数据。
对于比总线宽度窄的传输,从机仅需在有效字节通道上提供有效数据。 主机从正确的字节通道中选择数据。只有在传输以OKAY响应完成时,从机才需要提供有效数据。ERROR响应不需要有效读取数据。
6.2 字节序
AHB支持大端和小端系统。支持两种大端数据存储方法。 AHB5引入了字节序属性,以定义支持哪种形式的大端数据访问。
- BE8:字节不变大端字节序。 字节不变大端字节序源自字节访问(8位)使用与小端访问同一地址的数据总线位。
- BE32:字不变大端字节序。 字不变大端字节序源自字访问(32位)使用与小端访问同一地址的最高有效字节(MS)和最低有效字节(LS)相同的数据总线位。
有关字节不变大端的更多信息可以在 6.2.4 字节不变 中找到。
以下定义了用于小端、字节不变大端和字不变大端访问的数据位。 使用以下变量:
- address:传输的地址;
- Data_Bus_Bytes:8位数据总线字节通道的数量;
- INT(x):x的向下取整整数值;
6.2.1 小端字节序
当一个小端组件访问一个字节时,以下公式显示了使用了哪些数据总线位:
Byte_Lane = Address – (INT(Address / Data_bus_Bytes)) × Data_bus_Bytes
数据在DATA[(8 × Byte_Lane) + 7 : (8 × Byte_Lane)]上进行传输。
当发生更大的小端传输时,数据的传输方式为:
- LS字节传输到传输地址;
- 更高位字节传输到逐次递增的地址;
6.2.2 字节不变大端字节序
当一个字节不变的大端组件访问一个字节时,以下公式显示了使用哪些数据总线位:
Byte_Lane = Address - (INT(Address / Data_bus_Bytes)) × Data_bus_Bytes
数据在 DATA[(8 × Byte_lane) + 7 : (8 × Byte_lane)] 上传输。
Note: 这些方程与小端相同。由于大端和小端在字节传输方面是相同的,因此对于这些传输使用字节不变这一词。
当发生更大字节不变的大端传输时,数据传输方式为: • MS字节传输到传输地址。 • 逐渐降低的有效字节传输到顺序递增的地址。
Note: 这是字节不变的大端和小端组件之间的关键区别。 从高位地址开始传输还是从低位地址开始传输。
6.2.3 字不变大端字节序
当一个字不变的大端组件访问一个字节时,以下公式显示了使用哪些数据总线位:
Address_Offset = Address –(INT(Address / Data_bus_Bytes)) × Data_bus_Bytes
Word_Offset = (INT(Address / 4)) × 4
Byte_Offset = Address_Offset – Word_Offset
数据通过DATA[(8 × (字偏移 + 3 – 字节偏移)) + 7 : 8 × (字偏移 + 3 – 字节偏移)]进行传输。
对于一个32位总线,Word_Offset将始终为零,因此公式简化为:
DATA[(8 × (3 – 字节偏移)) + 7 : 8 × (3 – 字节偏移)]
Note: 这表明字不变的大端和小端组件之间的一个关键区别。 字不变的大端组件传输字节数量时使用的数据总线位与小端和字节不变的大端组件不同。
对于使用字不变的大端进行的半字和字传输,数据的传输方式如下:
- MS字节传输到传输地址。
- 依次递减的重要字节传输到连续增加的地址。
对于使用字不变的大端进行的大于一个字的传输,数据被拆分成字大小的块:
- LS字传输到传输地址。
- 依次递增的重要字传输到连续增加的地址。
表 6-1、 表 6-2 和 表 6-3 中的32位数据总线可以扩展用于更宽的数据总线实现。
传输大小小于数据总线宽度的突发传输在突发的每一个节拍中都有不同的活动字节通道。
表 6-1 和 表 6-2 显示了在小端或字节不变的大端系统中,活跃的32位总线上的字节通道。 两种情况下活动的字节通道是相同的,但MS字节和LS字节的位置不同。
表 6-1 32位小端数据总线的活动字节通道
传输大小 | Address_Offset | DATA[31:24] | DATA[23:16] | DATA[15:8] | DATA[7:0] |
---|---|---|---|---|---|
Word | 0 | Active[MS] | Active | Active | Active[LS] |
HalfWord | 0 | − | − | Active[MS] | Active[LS] |
HalfWord | 2 | Active[MS] | Active[LS] | − | - |
Byte | 0 | − | − | − | Active |
Byte | 1 | − | − | Active | - |
Byte | 2 | - | Active | - | - |
Byte | 3 | Active | − | − | - |
表 6-2 32位字节不变大端数据总线的活动字节通道
传输大小 | Address_Offset | DATA[31:24] | DATA[23:16] | DATA[15:8] | DATA[7:0] |
---|---|---|---|---|---|
Word | 0 | Active[LS] | Active | Active | Active[MS] |
HalfWord | 0 | − | − | Active[LS] | Active[MS] |
HalfWord | 2 | Active[LS] | Active[MS] | − | - |
Byte | 0 | − | − | − | Active |
Byte | 1 | − | − | Active | - |
Byte | 2 | - | Active | - | - |
Byte | 3 | Active | − | − | - |
表 6-3 32位字不变大端数据总线的活动字节通道
传输大小 | Address_Offset | DATA[31:24] | DATA[23:16] | DATA[15:8] | DATA[7:0] |
---|---|---|---|---|---|
Word | 0 | Active[MS] | Active | Active | Active[LS] |
HalfWord | 0 | Active[MS] | Active[LS] | - | - |
HalfWord | 2 | - | - | Active[MS] | Active[LS] |
Byte | 0 | Active | − | − | - |
Byte | 1 | − | Active | - | - |
Byte | 2 | - | - | Active | - |
Byte | 3 | - | − | − | Active |
6.2.4 字节不变
字节不变的大端数据结构的使用简化了在单一内存空间中访问混合大小端数据结构的过程。
使用字节不变的大端和小端意味着对于数据结构中的任何多字节元素来说:
- 无论数据的字节序如何,该元素都使用相同的连续字节内存;
- 字节序决定了这些字节在内存中的顺序,这意味着它决定了内存中的第一个字节是元素的高位字节还是低位字节;
- 对于给定地址的任何字节传输,无论这个字节属于哪个数据元素的字节序,都是在相同的数据总线上将八bit数据传送到相同的地址位置。
图 6-1 展示了一个需要字节不变访问的数据结构示例。在这个示例中,头部字段使用小端序,而数据有效负载使用大端序。
在这个示例结构中,Count是一个两个字节的小端元素,这意味着它的最低地址是它的最低有效字节。 字节不变性的使用确保对有效载荷的大端访问不会损坏小端元素
6.3 数据总线位宽
一种在不提高操作频率的情况下提高总线带宽的方法是加宽片上总线的数据路径。 指定总线的固定宽度意味着在许多情况下,总线的宽度对于应用并不是最优的。 因此,采用了一种方法,允许总线宽度具有灵活性,同时仍确保模块在设计之间高度可移植。 该协议允许数据总线具有8、16、32、64、128、256、512或1024位宽。 然而,建议使用最小总线宽度为32位。最大总线宽度为256位,对于几乎所有应用都是足够的。 对于读写传输,接收模块必须从总线的正确字节通道中选择数据。在所有字节通道上复制数据并不是必需的。
以下部分描述了:
6.3.1 在宽总线上实现窄总线从机
图 6-2 显示了一个原本设计为在32位数据总线下操作的从机如何转换为在64位总线上操作。 这只需要添加外部逻辑,而不是任何内部设计更改,因此该技术适用于硬宏单元。
对于输出,将窄总线转换为宽总线时,请执行以下操作之一
- 如 图 6-2 所示,宽总线的两个部分互为复制;
- 使用额外的逻辑确保只有适当的一半总线被更改 同时这也会降低功耗;
从机只能接受与其自然接口一样宽的传输。 如果主机尝试对从机尝试更宽的传输,则从机可以使用ERROR传输响应。
6.3.2 在窄总线上实现宽总线从机
预设计或引入的从机可以通过使用外部逻辑适配到更窄的数据总线。图 6-3 显示了在窄总线上实现的宽总线从机。
6.3.3 在宽总线上实现窄总线主机主机
主机可以被修改为在比最初设计的更宽的总线上工作,方式与从机被修改为在更宽的总线上工作相同, 见 6.3.1 在宽总线上实现窄总线从机。操作步骤如下:
- 多路复用输入总线。
- 复制输出总线。
Note: 主机不能在比最初设计的更窄的总线上工作,除非在主机中包含某种机制来限制主机尝试的传输宽度。 主机绝不能尝试进行宽度(由HSIZE指示)比其连接的数据总线更宽的传输。
第7章 时钟和复位
本章描述了协议时钟和复位信号的时序。它包含以下部分:
7.1 时钟和复位的实现
本节描述了实现HCLK和HRESETn信号的要求。
7.1.1 时钟
每个组件使用一个时钟信号HCLK。所有输入信号在HCLK的上升沿被采样。所有输出信号的变化必须发生在HCLK的上升沿之后。
稳定的信号在扩展传输中要求在不同的上升时钟边缘采样时保持相同的值。 然而,这些信号在时钟边缘之后可能会出现毛刺,改变为驱动之前的值。
Note: 在使用典型的综合设计流程时,可以观察到这种行为,其中输出多路复用器的控制信号在扩展传输期间改变,但它们导致与之前相同的输出值。
是否在上升时钟边缘之间接口无毛刺是由实现定义的。
AHB5定义了Stable_Between_Clock属性。该属性用于判断一个接口是否保证所需的稳定信号在上升时钟边缘之间保持稳定。
- 如果该属性为True,则必须保证所需的稳定信号在上升时钟边缘之间保持稳定且无毛刺。
- 如果该属性为False或未定义,则信号可以在上升时钟边缘之间出现毛刺。
7.1.2 复位
复位信号HRESETn是协议中唯一一个低电平有效的信号。并且是所有总线元件的主复位信号。 复位可以异步进行,但必须在HCLK上升沿之后同步释放。
器件必须定义HRESETn信号复位的最小周期数,以确保器件完全复位并且输出处于所需的复位值。 在复位期间,所有主机必须确保地址和控制信号处于有效电平。并且HTRANS[1:0]处于IDLE状态。
在复位期间,所有从机必须确保HREADYOUT为高电平。
第8章 信号有效性
本章描述 AMBA AHB 中信号何时必须有效的规则,它包含以下部分:
8.1 AMBA AHB中的信号有效性
当信号不要求有效时它们可以取任何值但建议使用0或X。 当数据传输具有无效字节通道时建议将其驱动为0,这确保在对无效字节通道进行采样时不会发生传输之间的数据泄漏。
8.2 信号有效性规则
以下信号必须始终有效:
- HTRANS
- HADDR
- HSEL
- HMASTLOCK
- HREADY
- HREADYOUT
- HRESP
以下信号在HTRANS不为IDLE时必须有效:
- HBURST
- HPROT
- HSIZE
- HNONSEC
- HEXCL
- HMASTER
- HWRITE
- HAUSER
以下信号在写事务的数据阶段必须有效:
- HWDATA
- HWSTRB
- HWUSER
以下信号在HREADY为高且HRESP为低时在写事务的数据阶段必须有效:
- HEXOKAY
- HBUSER
以下信号在HREADY为高且HRESP为低时在读事务的数据阶段必须有效:
- HRDATA
- HEXOKAY
- HRUSER
- HBUSER
第9章 原子属性
本章定义了两个原子属性 它包含以下部分
Note: 单副本原子性和多副本原子性是计算和数据管理中的两个重要概念。下面简要说明这两个概念及其区别:
单副本原子性:
- 定义: 单副本原子性指的是在一个存储或传输操作过程中, 某个数据单元(如单一字节或多个字节的一个整体)要么完全被读或写,要么完全不可见,没有部分更新的状态。 这种操作确保数据在任何时刻都是一致的,没有中间状态的存在。
- 应用: 例如,在AXI4协议中,单副本原子性大小定义了传输必须按原子性更新的最小数据块大小。
多副本原子性:
- 定义: 多副本原子性涉及到多个数据副本,通常出现在分布式系统中。 它规定在多个副本中进行的操作必须原子性地进行,要么全部副本进行一致更新,要么操作失败并回到初始状态。 这种机制确保数据的一致性和可靠性。
- 应用: 在分布式事务中,多副本原子性通过多副本数据的强一致性来实现,确保所有副本在进行同一个传输时都保持一致。
总的来说,单副本原子性关注的是单个副本在单一节点上的一致性,而多副本原子性则关注多个副本在分布式环境中的一致性。
9.1 单副本原子性大小
单副本原子大小定义了原子更新所保证的数据字节数。
单副本原子大小是为一组正在通信的组件定义的。例如:
- 处理器、DSP和DRAM控制器处于一个64位单副本原子组中。
- 一个更大的组,包括处理器、DSP、DMA、DRAM、SRAM和外设,处于一个32位单副本原子组中。
传输的起始地址对齐程度决定了其是否能保证具有单副本原子性。 例如,如果一个64位单副本原子组中的突发没有对齐到8字节边界,那么它就没有64位单副本原子性。
当写入传输更新内存位置时,必须确保观察者能看到:
- 该位置没有更新(要么不更新)。
- 至少一个单副本原子性大小的数据量已更新(要么一个原子量的大小都更新)。
不允许其他观察者在某一时刻看到在单副本原子性大小内更新的某些数据字节,然后在较晚时刻看到同一单副本原子性大小内的其他数据字节。
与传输相关的字节strobe不影响单副本原子性大小。
大于单副本原子性大小的传输必须以至少单副本原子性大小的块更新内存。
Note: 在确定单副本原子性大小时,不考虑数据值更新的确切时刻。必须确保没有主机能够观察到原子数据的部分更新。 例如,在许多系统中,数据结构如链表由32位原子元素构成。这些元素的原子更新要求整个32位值同时更新。 任何主机在某一时刻能观察到16位更新,而在稍后的时刻更新其他16位,这是不可接受的。
更复杂的系统需要对更大原子元素的支持,特别是64位原子元素,以便主机能够使用基于这些更大原子元素的数据结构进行通信。
9.2 多副本原子性
AHB5定义了Multi_Copy_Atomicity属性,这个属性被定义用来指定系统是否提供多副本原子性。
- Multi_Copy_Atomicity属性为True,则定义该系统具有多副本原子性;
- Multi_Copy_Atomicity属性为False,则定义该系统不具有多副本原子性;
如果系统满足以下条件则被定义为多副本原子性
- 所有代理对同一位置的写入顺序相同;
- 除发出者外的代理都可观察到对某个位置的原子写入;
通过避免使用转发缓冲区可以确保多副本原子性。 转发缓冲区可使传输对系统中的某些代理可见但并不对所有代理都可见。
Note: 在包含某种形式的硬件缓存一致性系统中确保多副本原子性还需要满足其他要求, 本规范不会进一步详细讨论这些额外要求。
第10章 独占传输
本章描述了独占传输的概念。它包含以下几个部分:
10.1 介绍
AHB5定义了Exclusive_Transfers属性。 这个属性定义了一个接口是否支持独占传输。 如果这个属性未被定义,则该接口不支持独占传输。
独占传输提供了一种支持信号量类型操作的机制。 独占访问序列是由单一主机发起的一系列独占传输,操作步骤如下:
- 从一个地址执行独占读取传输。
- 根据从独占传输中读取的数据值计算一个新的数据值,用于存储到该地址。
- 在独占读取和独占写入之间,可以有其他非独占传输。
- 向同一地址执行新数据值的独占写入传输:
- 如果自独占读取传输以来没有其他主机写入该位置,则独占写入传输成功并更新内存。
- 如果自独占读取传输以来有其他主机写入该位置,则独占写入传输失败,内存位置不更新。
- 对独占写入传输的响应应指示该传输是否成功,或是否失败。
该序列确保要存储的内存,在被写入根据旧值计算出的新值之前值保持不变,之后内存才会被更新。 如果独占写入传输失败,主机将重复整个独占访问序列。 在独占读取传输后,由同一主机对相同或重叠位置的更新所导致相关独占内存的写入传输成功或失败,是实施方定义的。
10.2 独占访问监视器
独占访问监视器是用来支持独占访问序列,这个监视器必须确定独占写入传输成功还是失败。 独占访问监视器必须能够同时监控系统中每个支持独占访问的主机至少一个地址位置。
独占访问监视器在系统中的位置尚未定义。 但是,它必须可以观察所有用于独占访问序列的地址位置的访问情况。 例如,如果一个系统包含多个内存控制器, 则所有访问要么经过一个包含独占访问监视器的中央点,要么在每个内存控制器处单独放置一个独占访问监视器。
并不要求一个系统支持所有地址位置的独占访问序列。 对于不支持独占访问序列的位置,需提供了一种安全机制。 通常情况下,系统将支持对主内存的独占访问序列,但不支持对任何外设的独占访问。
10.3 独占访问信号
与独占传输相关的附加信号包括:
- HEXCL:独占传输。表示该传输是独占访问序列的一部分。此信号为地址阶段信号,其有效性约束与HADDR相同。
- HMASTER[m:0]:主机标识符。具有多个独占能力线程的主机必须生成此信号以区分这些线程。主机生成的HMASTER值将与互连生成的值相结合,以确保呈现给独占访问监视器的HMASTER值是唯一的。此信号为地址阶段信号,其有效性约束与HADDR相同。
- HEXOKAY:独占确认。这里添加了另一个响应信号,以指示独占传输的成功或失败。
HMASTER[m:0]信号的位宽为实现方定义。建议按以下方式实现:
- 对于主机组件,实现支持独占能力线程所需的位数。
- 对于连接主机的互连端口,可以选择实现4位,互连可以用配置的方式以支持更大位宽。
- 对于从机或监视组件,可以选择实现8位,从机或监视组件可以用配置的方式以支持更大位宽。
允许将HMASTER信号用于独占传输以外的目的。 系统中的互连和从机允许使用此信号区分系统中的不同主机并相应地调整其行为。 因此,必须为所有传输提供有效的HMASTER指示,而不仅限于独占传输。
10.3.1 独占响应信号
HEXOKAY信号用于指示独占传输的成功或失败:
- 当被置为HIGH时,HEXOKAY表示独占传输成功,并且对于独占写传输,内存位置已经被更新。
- 当被置为LOW时,HEXOKAY表示独占传输失败。这可能是因为:
- 尝试对不支持独占传输的地址位置进行独占传输。
- 独占写传输失败,因为自上次匹配的独占读传输以来,内存位置未保持不变。在这种情况下,内存位置没有被更新。 主机确保在不支持独占传输的地址位置上不尝试执行独占写传输,方法是确保它始终先对该位置执行独占读传输。 以下约束适用于HEXOKAY:
- HEXOKAY只能在HREADY被置为HIGH的同一周期内被置为HIGH。
- HEXOKAY只能在独占传输的响应中被置为HIGH。
- HEXOKAY不得在HRESP被置为HIGH的同一周期内被置为HIGH。
在独占传输的位置只能被单个主机访问的系统中,允许从机始终指示独占传输成功,而无需监视是否有其他主机访问该位置。
10.4 独占传输限制
以下限制适用于独占传输:
- 必须是单一的传输;
- 必须是突发类型SINGLE或突发类型INCR;
- 不得包括BUSY传输;
- 地址必须与HSIZE指示的数据大小对齐;
- HPROT信号的值必须保证独占访问监视器能够看到该传输;
Note:HPROT信号必须保证独占访问监视器能够看到该传输。如果独占访问监视器位于系统缓存的下游,则该传输必须是不可缓存的。如果独占访问监视器位于系统缓存的上游,则允许该传输是可缓存的。如果独占访问监视器位于可能给出提前写响应的写缓冲区的下游,则独占传输必须是不可缓冲的
对于独占读取传输和独占写入传输被认为是同一独占访问序列的一部分,以下信号在两个传输中必须相同:
- HADDR地址;
- HSIZE数据大小;
- HPROT保护控制;
- HBURST突发类型;
- HMASTER主机标识符;
- HNONSEC非安全,如果适用;
允许主机在同一独占访问序列中发出独占读取传输,但不跟随独占写入传输;
允许主机发出独占写入传输,而该传输前没有独占读取传输。 在这种情况下,独占写入传输必须失败,HEXOKAY响应信号必须为LOW;
主机在同一时间点不得有两个独占传输处于进行中。
独占传输的地址阶段不得在与前一个独占传输HMASTER相同的数据阶段仍在进行时发出。 这无论传输是否为同一独占访问序列的一部分都适用。
允许在前一个独占传输的数据阶段仍在进行时,发出不同于前一个独占传输HMASTER的地址阶段。
Note: 独占传输的地址阶段被定义为当HEXCL被拉高且HTRANS表示NONSEQ时。 HTRANS表示IDLE时,HEXCL的拉高不被定义为独占传输的地址阶段。
第11章 user信号
本章描述了每个通道上的一组可选的用户定义信号,称为user信号。它包含以下部分:
Note: 通常建议不使用user信号 AHB协议未定义这些信号的功能。 如果两个组件以不兼容的方式使用相同的user信号,则可能会导致互操作性问题。
11.1 user信号描述
表11-1 列出了为每个通道定义的user信号名称。每个user信号可以具有不同的宽度。
表11-1user信号描述
信号 | 信号源 | 位宽 | 描述 |
---|---|---|---|
HAUSER | 主机 | USER_REQ_WIDTH | 用户定义的请求信号。 USER_REQ_WIDTH定义HAUSER的位宽。 建议在0到128位之间 |
HWUSER | 主机 | USER_DATA_WIDTH | 用户定义的写数据信号。 USER_DATA_WIDTH定义HWUSER的位宽。 建议在0到DATA_WIDTH/2之间。 |
HRUSER | 从机 | USER_DATA_WIDTH | 用户定义的读取数据信号。 USER_DATA_WIDTH定义HRUSER的位宽。 建议在0到DATA_WIDTH/2之间。 |
HBUSER | 从机 | USER_RESP_WIDTH | 用户定义的响应信号。 用于读写传输。 USER_RESP_WIDTH定义HBUSER的位宽。 推荐在0到16之间。 |
这些信号具有与关联通道相同的时序和有效性要求。
对于数据通道user信号,建议如下:
- 位宽的大小是接口宽度(字节)的整数倍。
- 每个字节的bit打包在一起。
数据通道的user bit位置定义为:
- 每个数据字节都有 m 个关联的user信号。
- 数据总线宽度为 n 字节。
- user bit总数量为 u,其中 u = m × n。
user 信号的字节位置y如下,其中 y = 0 … (n - 1),位于:
- HWUSER[((y × m) + (m - 1)):(y × m)]
- HRUSER[((y × m) + (m - 1)):(y × m)]
建议在互联中包含user信号,但不要求在主机或从机上包含它们。
11.2 user信号互联
对于未被互连修改的传输,与该传输相关的user信号可以通过互连进行传输。
对于被互连修改的传输,本节中的信息提供了生成传输相关user信号的指示。
用户信号协议规则为:
- HAUSER信号在传输的地址阶段必须有效。
- 当HREADY为低时,HAUSER信号在周期之间不得改变,除非HRESP信号为错误。
- HWUSER信号在写传输的数据阶段必须有效。
- 当HREADY信号为低时,HWUSER信号在写传输的周期之间不得改变,除非HRESP信号为错误。
- 当HREADY信号为高时,HRUSER信号在读传输的数据阶段必须有效,除非HRESP信号为错误。
- 当HREADY信号为高时,HBUSER信号在读写传输的数据阶段必须有效,除非HRESP信号为错误。
- 当单个传输转换为多个传输时:
- 原始传输的HAUSER信号被复制到每个生成的传输中。
- 对于每个包含原始传输某些数据字节的生成传输, 生成传输的HWUSER和HRUSER信号使用传输中包含的数据字节的用户位。
- 当多个传输转换为单个传输时:
- 第一个传输的HAUSER信号用于生成传输的HAUSER信号。后续传输的HAUSER信号被丢弃。
- 生成传输的HWUSER和HRUSER信号使用原始传输中相关数据字节的组合用户位。
第12章 奇偶校验接口保护
本章描述了使用奇偶校验进行接口保护,以及AMBA AHB中使用的奇偶校验信号。它包含以下几个部分:
12.1 AMBA AHB的校验使用
对于安全关键的应用程序,有必要在系统芯片的各个线路上检测并可能纠正瞬态和功能性错误。
系统组件中的错误可能传播并导致连接组件中的多个错误。 需要进行端到端的错误检测和纠正(EDC),覆盖从源到目的地的所有逻辑和线路。
实现端到端保护的一种方法是在组件中采用定制的EDC方案,并在组件之间实施简单的错误检测方案。
在这些组件之间没有逻辑,并且单比特错误不会传播为多比特错误。 本节描述了一种在组件之间的AMBA接口上检测单比特错误的奇偶校验方案。 如果多比特错误发生在不同的奇偶校验信号组中,可以检测到这些错误。 图 12-1 显示了可以在AMBA AHB中使用奇偶校验的位置。
12.2 接口保护的配置
在接口上采用的保护方案由属性Check_Type定义。以下定义Check_Type的值:
- False:接口上没有检查信号,默认配置为False。
- Odd_Parity_Byte_All:对所有信号进行奇校验检查,每个校验bit对应8bit的被检查信号。
12.3 byte校验检查信号
以下是所有为字节奇偶校验接口保护添加检查信号的共性:
- 奇校验被使用时。奇校验意味着在接口上的信号组中添加检查信号,并以信号组始终有奇数个bit为为1的方式驱动。
- 包括数据和有效负载的奇偶校验信号被定义为在大多数情况下每组不超过8位。 此限制假设在生成每个奇偶校验位的时间预算中最大可用的逻辑级别为3。
- 涉及关键控制信号的奇偶校验信号,可能可用的时间预算较小,以单个奇偶校验位定义。 这个单一的奇数奇偶校验位可以是原始关键控制信号的反相。
- 对于宽于1位的检查信号:
- 检查位[n]对应于有效负载中的位[(8n+7):8n]。
- 如果有效负载不是字节的整数倍,则检查信号的最高有效位覆盖了有效负载的最高部分中的少于8位的部分。
- 检查信号必须在检查使能项为True的每个周期内正确驱动。 有关奇偶校验检查信号的更多信息,请参见 表 12-1。
- 奇偶校验信号必须根据相关有效负载中的所有位正确驱动, 不论这些位是否在传输中被激活并使用。 例如,即使某些字节通道在传输中未使用,HWDATACHK的所有位也必须正确驱动。
- 如果接口上没有检查信号所覆盖的任何信号,则该检查信号从接口中省略。
- 如果接口上没有存在某些检查信号所覆盖的信号,则假定缺失的信号为低电平。
12.4 错误检查
本规范并不规范化当检测到奇偶校验错误时组件或系统的行为。
根据系统和受影响信号的不同,翻转的位可能会产生广泛的影响。 它可能是无害的,导致性能问题,导致数据损坏,导致安全违规,或导致死锁。 事务响应与奇偶校验错误检测无关。
当检测到错误时,接收方可以执行以下任一操作:
- 终止或传播事务。
- 更正奇偶校验信号或传播错误。
- 更新其内存或保持不变。
- 通过其他方式发出错误响应,例如通过中断。
12.5 校验检查信号列表
表 12-1 校验检查信号
检查信号 | 被检查信号 | 检查信号位宽 | 检查颗粒度 | 检查使能 |
---|---|---|---|---|
HTRANSCHK | HTRANS | 1 | 2 | HRESETn |
HADDRCHK | HADDR | ceil(ADDR_WIDTH/8) | 1-8 | HRESETn |
HCTRLCHK1 | HBURST HMASTLOCK HWRITE HSIZ HNONSEC | 1 | 4-9 | HTRANS!=IDLE |
HCTRLCHK2 | HEXCL HMASTER | 1 | 2-9 | HTRANS!=IDLE |
HPROTCHK | HPROT | 1 | 4-7 | HTRANS != IDLE |
HWSTRBCHK | HWSTRB | ceil(DATA_WIDTH/64) | 1-8 | Write data phase |
HWDATACHK | HWDATA | DATA_WIDTH/8 | 8 | Write data phase |
HRDATACHK | HRDATA | DATA_WIDTH/8 | 8 | Read data phase & HREADY |
HREADYOUTCHK | HREADYOUT | 1 | 1 | HRESETn |
HREADYCHK | HREADY | 1 | 1 | HRESETn |
HRESPCHK | HRESP HEXOKAY | 1 | 1-2 | Data Phase |
HSELxCHK | HSELx | 1 | 1 | HRESETn |
HAUSERCHK | HAUSER | ceil(USER_REQ_WIDTH/8) | 1-8 | HTRANS != IDLE |
HRUSERCHK | HRUSER | ceil(USER_DATA_WIDTH/8) | 1-8 | Read data phase & HREADY |
HWUSERCHK | HWUSER | ceil(USER_DATA_WIDTH/8) | 1-8 | Write data phase |
HBUSERCHK | HBUSER | ceil(USER_RESP_WIDTH/8) | 1-8 | Data phase & HREADY |
Note: 如果一个从机有多个HSEL输入,则只有一个HSELxCHK信号,并且检查粒度大于1。
Note:函数ceil()返回一个等于或大于输入值的最小整数。
附录A 信号汇总
本附录列出了所有AMBA AHB5接口的信号。本附录包含:
A.1 一般信号汇总
任何未驱动的输入可选信号具有默认值。 下表中的主机列适用于 AHB 主机接口和互连主机镜像接口。 下表中的从机列适用于 AHB 从机接口和互连从机镜像接口。
Code | Meaning |
---|---|
Y | 强制为输入或输出 |
N | 不存在 |
O | 可选为输入或输出 |
C | 属性为真时需满足条件 |
OC | 属性为真时需满足条件且可选 |
表A-2 所有的AMBA AHB信号
信号 | 位宽 | 默认值 | 存在属性 | 主机 | 从机 |
---|---|---|---|---|---|
HCLK | 1 | - | - | Y | Y |
HRESETn | 1 | - | - | Y | Y |
HADDR | ADDR_WIDTH | - | - | Y | Y |
HBURST | 3 | 0x1 | - | O | O |
HMASTLOCK | 1 | 0b0 | - | O | O |
HPROT | HPROT_WIDTH | 0x03 | - | O | O |
HSIZE | 3 | - | - | Y | Y |
HNONSEC | 1 | 0b0 | Secure_Transfers | C | C |
HEXCL | 1 | 0b0 | Exclusive_Transfers | C | C |
HMASTER | HMASTER_WIDTH | 0 | Exclusive_Transfers | C | C |
HTRANS | 2 | - | - | Y | Y |
HWDATA | DATA_WIDTH | - | - | Y | Y |
HWSTRB | DATA_WIDTH/8 | All ones | Write_Strobes | C | C |
HWRITE | 1 | - | - | Y | Y |
HRDATA | DATA_WIDTH | - | - | Y | Y |
HREADY | 1 | - | - | Y | Y |
HREADYOUT | 1 | - | - | N | Y |
HRESP | 1 | - | - | Y | Y |
HEXOKAY | 1 | - | Exclusive_Transfers | C | C |
HSELx | 1 | - | - | N | Y |
HAUSER | USER_REQ_WIDTH | - | USER_REQ_WIDTH | OC | OC |
HWUSER | USER_DATA_WIDTH | - | USER_DATA_WIDTH | OC | OC |
HRUSER | USER_DATA_WIDTH | - | USER_DATA_WIDTH | OC | OC |
HBUSER | USER_RESP_WIDTH | - | USER_RESP_WIDTH | OC | O |
A.2 检查信号汇总
表A-3 显示了基于 Check_Type 属性可以在接口上存在的保护信号。 存在属性列指示该属性,定义信号的存在,除了 Check_Type 属性。
表a-3 检查信号汇总表
信号 | 位宽 | 存在属性 | 默认值 | 主机 | 从机 |
---|---|---|---|---|---|
HTRANSCHK | 1 | - | - | C | C |
HADDRCHK | ceil(ADDR_WIDTH/8) | - | - | C | C |
HCTRLCHK1 | 1 | - | - | C | C |
HCTRLCHK2 | 1 | Exclusive_Transfers | 1 | C | C |
HPROTCHK | 1 | HPROT_WIDTH | 1 | OC | OC |
HWSTRBCHK | ceil(DATA_WIDTH/64) | Write_Strobes | - | C | C |
HWDATACHK | DATA_WIDTH/8 | - | - | C | C |
HRDATACHK | DATA_WIDTH/8 | - | - | C | C |
HREADYOUTCHK | 1 | - | - | N | C |
HREADYCHK | 1 | - | - | C | C |
HRESPCHK | 1 | - | - | C | C |
HSELxCHK | 1 | - | - | N | C |
HAUSERCHK | ceil(USER_REQ_WIDTH/8) | USER_REQ_WIDTH | - | C | C |
HRUSERCHK | ceil(USER_DATA_WIDTH/8) | USER_DATA_WIDTH | - | C | C |
HWUSERCHK | ceil(USER_DATA_WIDTH/8) | USER_DATA_WIDTH | - | C | C |
HBUSERCHK | ceil(USER_RESP_WIDTH/8) | USER_RESP_WIDTH | - | C | C |
附录B 版本
本附录描述了该规范已发布版本之间的技术变更。
表 B-1 版本A
变化 | 位置 |
---|---|
初次发布 | - |
表 B-2 版本A和版本B的区别
变化 | 位置 |
---|---|
增加了修订,包括新属性、明确和建议 | 2.1 AMBA AHB版本 |
增加了HPROT[3:0]保护控制信号的说明 | 2.2 主机信号 |
增加了HPROT[6:4]信号的额外条目,增加了扩展内存类型。仅适用于本规范的B版本。 | 2.2 主机信号 |
增加了HNONSEC信号的需求用于安全传输 | 2.2 主机信号 |
增加用于HEXCL和HMASTER[3:0]信号,这是进行独占传输所必需的 | 2.2 主机信号 |
增加了独占传输所需的HEXOKAY信号 | 2.3 从机信号 |
增加了有关在IDLE传输中使用HMASTLOCK的更多详细信息 | 3.3 锁定传输 |
表B-3 版本B和版本C的区别
变化 | 位置 |
---|---|
增加了新的信号宽度特性 | 2.2 主机信号 2.3 从机信号 2.4 译码器信号 2.5 多路复用器信号 |
增加了锁定序列的更多详细信息 | 3.3 锁定传输 |
增加了新章节描述strobe写功能,包括HWSTRB信号规则和互操作性的信息 | 3.5.1 strobe写信号 |
增加了新章节描述了AMBA AHB5中的信号有效性规则 | 第8章 信号有效性 |
增加了响应信号的描述 | 10.3.1 独占响应信号 |
增加了新表,用于描述user信号,描述信号宽度属性 | 11.1 user信号描述 |
增加了user信号规则的细节 | 11.2 user信号互联 |
增加了附加章节描述使用奇偶校验进行接口保护以及AMBA AHB中使用的奇偶校验信号,包括接口保护和错误检测行为的配置 | 第12章 奇偶校验接口保护 |
增加了附录补充,列出所有AMBA AHB5接口的信号 | 附录A 信号汇总 |
术语更新 规范化术语,使用Manager指代发起交易的agent(主机),使用Subordinate指代接收和响应请求的agent(从机) | 整个规范 |
词汇表
本词汇表描述了AMBA AHB文档中使用的一些技术术语。
- AHB:一种AMBA总线协议,定义了系统组件之间的接口,包括管主机、互连和从机。 AMBA AHB支持高时钟频率、单时钟边缘操作、突发传输和非三态实现,它可以支持宽数据总线配置 。
- AHB-Lite:完整AMBA AHB协议规范的一个子集,提供大多数AMBA AHB从机和主机设计所需的所有基本功能, 特别是在与多层AMBA互连一起使用时。
- Aligned:将数据项存储在一个地址上,该地址可以被整除以最大的2次幂,该幂可以精确地整除其字节大小。 因此,对齐的半字、字和双字的地址分别可以被2、4和8整除。
- APB:一种AMBA总线协议,用于辅助或通用外设,如计时器、Interrupt控制器、UART和I/O端口。 通过系统到外设总线桥使用APB连接到主系统总线可以帮助减少系统功耗。
- AXI:一种AMBA总线协议,支持:
- 地址或控制和数据的独立阶段
- 使用字节通道触发的非对齐数据传输
- 仅发出起始地址的基于突发的事务
- 独立的读写数据通道
- 发出多个未决地址
- 无序事务完成
- 可选地添加寄存器阶段以满足时序或重新传播要求
- AXI协议包括用于低功耗操作的可选信号扩展
- Beat(拍):替代术语用于描述突发内的单个传输。例如,在AMBA AHB中,一个INCR4突发包含四个节拍。
- Burst(突发):以组传输到连续地址。在AMBA协议中,突发由指示突发长度以及地址递增方式的信号控制。
- DoubleWord(双字):64位数据项。双字通常在Arm系统中至少要字对齐。
- Endianness(字节序): 当该结构存储在内存中时,确定数据结构中连续字节的顺序的方案。
- Halfword(半字):16位数据项。半字通常在Arm系统中半字对齐 。 Processor(处理器):执行处理的实体的通用术语。 Word(字):32位数据项。字通常在Arm系统中字对齐。