AHB(Advanced High Performance Bus)协议规范
参考:ARM (IHI 0033B.b) AMBA 5 AHB Protocol Specification : AHB5, AHB-Lite
文章目录
- AHB(Advanced High Performance Bus)协议规范
一. 介绍
出于说明目的,本规范中使用了32位数据总线。但允许额外的数据总线宽度,如后文6.3数据总线宽度所示。
1.1 关于协议
AMBA AHB是一个适合高性能可综合设计的总线接口。它定义了组件之间的接口,如主组件、互连组件和从组件。
最常见的AHB从机是内部存储器设备、外部存储器接口和高带宽外设。 尽管低带宽外设可以作为AHB从机,但出于系统性能原因,它们通常位于AMBA高级外设总线(APB)上。更高性能的AHB和APB之间的桥接是使用AHB从机完成的,称为APB桥。
图1-1显示了带有AHB主设备和三个AHB从设备的单主AHB系统设计。总线互连逻辑由一个地址解码器和一个从机到主机多路复用器组成。解码器监控来自主机的地址,以便选择合适的从机,多路复用器将相应的从机输出数据路由回主机。
AHB还通过使用互连组件支持多主机设计,该互连组件提供仲裁并将信号从不同主机路由到适当的从机。
1.1.1 主机
主机提供地址和控制信息来启动读写操作。图1-2显示了一个主机接口。
1.1.2 从机
从机响应系统中主机发起的传输。从机使用来自解码器的HSELx
选择信号来控制何时响应总线传输。
从机向主机发回信号:
- 总线传输的完成或延长。
- 总线传输的成功或失败。
图1-3显示了一个从机接口。
1.1.3 互连
互连组件提供系统中主设备和从设备之间的连接。
单个主系统只需要使用解码器和多路复用器,如下节所述。
多主机系统需要使用互连,该互连提供仲裁以及从不同主机到适当从机的信号路由。地址、控制和写数据信令需要这种路由。
解码器:
该组件对每次传输的地址进行解码,并为参与传输的从机提供选择信号。它还向多路复用器提供控制信号。在所有使用两个或更多从设备的实现中,都需要一个集中式解码器。
多路复用器:
需要一个从机到主机的多路复用器来多路复用从机到主机的读数据总线和响应信号。解码器为多路复用器提供控制。在所有使用两个或更多从机的实现中,都需要一个集中式多路复用器。
1.2 AHB修订版(略)
1.3 操作
主机通过驱动地址和控制信号开始传输。这些信号提供有关传输地址、方向、宽度的信息,并指示传输是否构成突发的一部分。传输可以是:
- 单次。
- 不在地址边界换行的递增突发。
- 在特定地址边界换行的换行突发。
写数据总线将数据从主机移动到从机,读数据总线将数据从从机移动到主机。
每次传输包括:
地址阶段——一地址和控制周期。
数据阶段——数据的一个或多个周期。
从机不能请求延长地址阶段,因此所有从机必须能够在此期间对地址进行采样。但是,从机可以使用HREADY
请求主机扩展数据阶段。该信号为低电平时,会将等待状态插入传输,使从机有额外时间提供或采样数据。从机使用HRESP
来指示传输的成功或失败。
二. 信号描述
2.1 全局信号
2.2 主机信号
2.3 从机信号
2.4 解码器信号
通常,解码器还向多路复用器提供HSELx
信号,或从HSELx
信号导出信号/总线,以使多路复用器能够将适当的信号从选定的从机路由到主机。重要的是,这些额外的多路复用器控制信号被重定时到数据阶段。
2.5 多路复用器信号
三. 传输
3.1 基本传输(读写时序)
传输包括两个阶段:
Address:持续一个HCLK
周期,除非它被前一个总线传输延长。
Data:可能需要几个时钟周期。使用HREADY
信号控制完成传输所需的时钟周期数。
HWRITE
控制与主机之间的数据传输方向。因此,当:
HWRITE
为高电平时,表示写传输,主机在写数据总线上广播数据,HWDATA[31:0]
;HWRITE
为低电平时,执行读传输,从机在读数据总线上生成数据,HRDATA[31:0]
。
最简单的传输没有等待状态,因此传输由一个地址周期和一个数据周期组成。图3-1显示了一个简单的读传输,图3-2显示了一个简单的写传输。
在没有等待状态的简单传输中:
- 主机在
HCLK
上升沿后将地址和控制信号驱动到总线上。 - 然后,从机在
HCLK
的下一个上升沿采样地址和控制信息。 - 从机对地址和控制进行采样后,可以开始驱动相应的
HREADYOUT
响应。主机在HCLK
的第三个上升沿对该响应进行采样。
这个简单的示例演示了在不同的时钟周期内,传输的地址和数据阶段是如何发生的。任何传输的地址阶段都发生在前一次传输的数据阶段。 地址和数据的这种重叠是总线流水线特性的基础,能够实现高性能操作,同时仍然为从机提供足够的时间来响应传输。
从机可以在任何传输中插入等待状态,以获得额外的完成时间。每个从机都有一个HREADYOUT
信号,在传输的数据阶段驱动。该互连负责组合来自所有从机的HREADYOUT
信号,以生成用于控制整体进度的单个HREADY
信号。
图3-3显示了具有两个等待状态的读传输。
图3-4显示了具有一个等待状态的写传输。
当以这种方式扩展传输时,它具有扩展下一次传输的地址阶段的副作用。 图3-5显示了对不相关地址A、B和C的三次传输,其中地址C的地址阶段延长。
在图3-5中:
- 到地址A和C的传输是零等待状态
- 到地址B的传输是一个等待状态
- 将到地址B传输的数据阶段扩展具有将到地址C传输的地址阶段扩展的效果
3.2 传输类型(HTRANS——IDLE,BUSY,NONSEQ,SEQ)
根据HTRANS[1:0]
的控制,传输可以分为四种类型之一。表3-1列出了这些。
图3-6显示了NONSEQ、BUSY和SEQ传输类型的使用。
在图3-6中:
T0-T1 4拍读取从一次NONSEQ传输开始。
T1-T2 主机无法执行第二拍,插入一个BUSY传输来延迟第二拍的开始。从机提供第一拍的读取数据。
T2-T3 主机现在准备开始第二拍,所以SEQ传输信号出现。主机忽略从机在读数据总线上提供的任何数据。
T3-T4 主机执行第三拍。从机提供第二拍的读取数据。
T4-T5 主机执行最后一拍。从机无法完成传输,使用HREADYOUT
插入单个等待状态。
T5-T6 从机提供第三拍的读取数据。
T6-T7 从机提供最后一拍的读取数据。
3.3 锁定传输(HMASTLOCK)
如果主机要求锁定访问,那么它还必须声明HMASTLOCK
信号。该信号向任何从机指示当前传输序列不可分割,因此必须在处理任何其他传输之前进行处理。 通常,通过确保从机在微处理器SWP指令的读和写阶段之间不执行其他操作,锁定传输用于维护信号量的完整性。
图3-7显示了带有微处理器SWP指令的HMASTLOCK
信号。
(锁定传输后,建议主机插入空闲传输。)
大多数从机不需要实现HMASTLOCK
,因为它们只能按照接收的顺序执行传输。可以被多个主设备访问的从设备,例如,多端口内存控制器(MPMC)必须实现HMASTLOCK
信号。
3.4 传输尺寸(HSIZE)
HSIZE[2:0]
表示数据传输的大小。表3-2列出了可能的传输大小。
(HSIZE
设置的传输大小必须小于或等于数据总线的宽度。 例如,对于32位数据总线,HSIZE
必须只使用0b000、0b001或0b010。)
将HSIZE
与HBURST
结合使用,以确定换行突发的地址边界。HSIZE
信号的时序与地址总线完全相同。然而,它们必须在整个突发传输中保持不变。
3.5 突发操作(HBURST——SINGLE,INCR4/8/16,WRAP4/8/16)
4拍、8拍和16拍的突发、长度不确定的突发和单次传输在该协议中定义。它支持递增和换行:
- 递增突发访问顺序位置,突发中每次传输的地址是前一个地址的增量。
- 换行突发跨越地址边界时换行。地址边界计算为突发中的节拍数和传输尺寸的乘积。拍数由
HBURST
控制,传输大小由HSIZE
控制。例如,字(4字节)的四拍换行突发访问16字节边界时换行。因此,如果突发的起始地址是0x34,那么它包括4次到地址0x34、0x38、0x3C和0x30的传输。
HBURST[2:0]
控制突发类型。表3-3列出了可能的突发类型。
主机不得试图启动跨越1KB地址边界(如0x400、0x800、0xc00及其倍数等)的递增突发。
主机可以使用以下任一方式执行单次传输:
- 单次传输突发。
- 长度为1的未定义长度突发。
突发中的所有传输必须与等于传输大小的地址边界对齐。 例如,字传输必须与字地址边界对齐(HADDR[1:0]
= 0b00),半字传输必须与半字地址边界对齐(HADDR[0]
= 0)。IDLE传输的地址也必须对齐,否则在仿真过程中,总线监控器可能会报告虚假警告。
3.5.1 BUSY传输后突发终止
突发开始后,如果主机需要更多时间才能继续突发中的下一次传输,则主机使用BUSY传输。
在未定义长度的突发期间,INCR,主机可能会插入BUSY传输,然后决定不再需要数据传输。在这种情况下,主机可以执行一次NONSEQ或IDLE传输,从而有效终止未定义长度的突发。
对于以下类型的固定长度突发,协议不允许主机以BUSY传输结束突发:
- 递增INCR4、INCR8和INCR16。
- 换行WRAP4、WRAP8和WRAP16。
这些固定长度的突发类型必须以SEQ传输结束。
SINGLE突发后,主机不允许立即执行BUSY传输。SINGLE突发之后必须是IDLE传输或NONSEQ传输。
3.5.2 提前突发终止
突发可以通过以下方式终止:
从属错误响应:
如果从机提供错误响应,则主机可以取消突发中剩余的传输。 但是,这并不是严格的要求,主机在突发中继续其余传输也是可以接受的。如果主机取消突发中剩余的传输,则它必须在两个周期的错误响应期间将HTRANS
更改为IDLE。如果主机没有完成该突发,则不要求它在下次访问该从机时重建该突发。例如,如果一个主机只完成了8拍脉冲串中的3拍,那么当它下一次访问该从机时,它不必完成剩余的5次传输。
多层互连终止:
尽管不允许主设备提前终止突发请求,但从设备必须设计为在突发未完成时正常工作。当多层互连组件用于多主机系统时,从设备可以终止突发,以便另一个主机可以访问从机。 如果发生这种情况,从机必须终止来自原主机的突发,然后对新主机做出适当响应。
3.5.3 突发示例
四拍换行突发,WRAP4:
图3-8显示了使用四拍换行突发的写传输,第一次传输增加了等待状态。
由于突发是一个四拍的字传输突发,因此地址在16字节边界处换行,在传输到地址0x3C后,再传输到地址0x30。
四拍递增突发, INCR4:
图3-9显示了使用四拍递增突发的读传输,第一次传输增加了等待状态。在这种情况下,地址不会在16字节的边界处换行,地址0x3C之后是到地址0x40的传输。
八拍换行突发,WRAP8:
图3-10显示了使用八拍换行突发的读传输。
因为突发是一个8拍的字传输突发,所以地址在32字节的边界处换行,在传输到地址0x3C之后是传输到地址0x20。
八拍递增突发,INCR8:
图3-11显示了使用八拍递增突发的写传输。
该突发使用半字传输,因此地址增加了2。因为突发是递增的,地址继续递增超过16字节的地址边界。
长度不确定的突发,INCR:
图3-12显示了长度不确定的递增突发。
图3-12显示了两个突发:
- 第一个突发是由两个半字传输组成的写操作,从地址0x20开始。这些传输地址增加2。
- 第二次突发是一次读取,包括从地址0x5C开始的三次字传输。这些传输地址递增4。
3.6 等待传输
如果从机需要更多时间来提供或采样数据,则使用HREADYOUT
插入等待状态。在等待传输期间,主机只能对传输类型和地址进行更改。
3.6.1 等待状态期间传输类型改变
当从机请求等待状态时,主机不得更改传输类型,除非按照如下所述:
空闲传输:
在等待传输期间,允许主机将传输类型从IDLE更改为NONSEQ。 当HTRANS
传输类型变为NONSEQ时,主机必须保持HTRANS
不变,直到HREADY
为高电平。
图3-13显示了单个突发的等待传输,传输类型从IDLE更改为NONSEQ。
在图3-13中:
T0-T1——主机向地址A发起单次突发。
T1-T2——主机向地址Y插入一个空闲传输。从机插入一个等待状态,HREADYOUT
=LOW。
T2-T3——主机向地址z插入一个空闲传输。
T3-T4——主机将传输类型更改为NONSEQ,并向地址B发起一个INCR4传输。
T4-T6——如果HREADY
为低,主机必须保持HTRANS
不变。
T5-T6——到地址A的单次突发在HREADY
为高电平时完成,主机开始到地址B的第一拍。
T6-T7——到地址B的INCR4传输的第一拍完成,主机开始到地址B+4的下一拍。
BUSY传输,固定长度突发:
在固定长度突发的等待传输期间,允许主机将传输类型从BUSY更改为SEQ。 当HTRANS
传输类型更改为SEQ时,主机必须保持HTRANS
不变,直到HREADY
为高。
因为BUSY传输只能在突发的连续节拍之间插入,所以这不适用于SINGLE突发。因此,这种情况适用于以下突发类型:
- INCR4、INCR8和INCR16。
- WRAP4、WRAP8和WRAP16。
图3-14显示了在固定长度突发中等待的传输,传输类型从BUSY变为SEQ。
在图3-14中:
T0-T1——主机向地址0x24发起INCR4突发的下一拍。
T1-T3——主机向地址0x28插入一个BUSY传输。从机插入等待状态,HREADYOUT
=LOW。
T3-T4——主机将传输类型更改为SEQ,并将突发的下一拍初始化为地址0x28。
T4-T6——当HREADY
为低电平时,主机必须保持HTRANS
恒定。
T5-T6——节拍到地址0x24完成,HREADY
为高。
T6-T7——向地址0x28传输的第三拍完成,主机开始向地址0x2C传输最后一拍。
BUSY传输,未定义长度的突发:
在等待未定义长度突发的传输期间,INCR,当HREADY
为低电平时,主机被允许从BUSY转换到任何其他传输类型。 如果执行了SEQ传输,则突发继续,但是如果执行了IDLE或NONSEQ传输,则突发终止。
图3-15显示了在未定义长度的突发期间等待的传输,传输类型从BUSY变为NONSEQ。
在图3-15中:
T0-T1——主机将INCR突发的下一拍发送到地址0x64。
T1-T3——主机向地址0x68插入一个BUSY传输。从机插入等待状态,HREADYOUT
=LOW。
T3-T4——主机将传输类型更改为NONSEQ,并向地址0x10发起新的突发。
T4-T6——当HREADY
为低电平时,主机必须保持HTRANS
恒定。
T5-T6——未定义长度突发在HREADY
为高电平时完成,主机开始第一拍至地址0x10。
T6-T7——向地址0x10传输的第一拍完成,主机开始向地址0x14传输下一拍。
3.6.2 等待状态期间的地址改变
当从机请求等待状态时,主机只能更改一次地址,如下所述:
在IDLE传输期间:
在等待传输期间,允许主机更改IDLE传输的地址。 当HTRANS
传输类型更改为NONSEQ时,主机必须保持地址不变,直到HREADY
为高。
图3-16显示了单个突发的等待传输,地址在IDLE传输期间发生变化。
在图3-16中:
T0-T1——主机向地址A发起单次突发。
T1-T2——主机向地址Y插入一个IDLE传输。从机插入一个等待状态,HREADYOUT
=LOW。
T2-T3——主机向地址Z插入一个IDLE传输。
T3-T4——主机将传输类型更改为NONSEQ,并向地址B发起INCR4传输。在HREADY
变为高电平之前,不允许再进行地址更改。
T5-T6——到地址A的单次突发在HREADY
为高电平时完成,主机开始到地址B的第一拍。
T6-T7——到地址B的INCR4传输的第一拍完成,主机开始到地址B+4的下一拍。
出现ERROR响应后:
在等待传输期间,如果从机ERROR响应,那么当HREADY
为低电平时,主机可以更改地址。
图3-17显示了一个等待的传输,地址随着从机的ERROR响应而改变。
在图3-17中:
T0-T1——主机向地址0x24发起突发的下一拍。
T1-T3——主机向地址0x28发起突发的下一拍。从机回答说OKAY。
T3-T4——从机报错ERROR。
T4-T5——主机将传输类型更改为IDLE,并允许在HREADY
为低电平时更改地址。从机完成ERROR响应。
T5-T6——地址0xC0的从机以OKAY响应。
3.7 保护控制(HPROT[3:0])
本规范的A发行版定义了一个4位HPROT
信号,这将在本节中描述。本规范的B发行版增加了扩展内存类型,这将在内存类型中详细描述。
保护控制信号HPROT[3:0]
提供有关总线访问的附加信息,主要供任何实现某种级别保护的模块使用。
这些信号指示传输是否为:
- 操作码获取或数据获取。
- 特权模式访问或用户模式访问。
对于具有存储器管理单元(MMU)的主机,这些信号还指示当前访问是可缓存的还是可缓冲的。表3-4列出了HPROT
信号编码。
许多主机无法生成准确的保护信息。如果主机无法生成准确的保护信息,本规范建议:
- 主机将
HPROT
设置为0b0011,以对应于不可缓存、不可缓冲的特权数据访问。 - 除非绝对必要,否则从机不使用
HPROT
。
HPROT
控制信号的时序与地址总线完全相同。然而,它们必须在整个突发传输中保持不变。
3.8 存储类型(HPROT[6:4])
AHB5定义了扩展内存类型属性。此属性定义接口是否支持本节中描述的扩展内存类型。如果未定义此属性,则接口不支持扩展内存类型。本规范增加了额外的HPROT
信号,并提供了每种内存类型的更详细的需求列表。
表3-5显示了每个HPROT
位的含义。
3.8.1 数据或指令
所有传输都包括数据或指令保护位HPROT[0]
:
- 置位时,该位表示传输是数据访问。
- 解除置位时,该位表示传输是取指令。
协议将此指示定义为一个提示。它不是在所有情况下都准确,例如,当事务包含指令和数据项的混合时。本规范建议主机将HPROT[0]
设置为高,以指示数据访问,除非该访问被明确称为指令访问。
3.8.2 无特权或有特权
所有传输都包括特权或非特权保护位HPROT[1]
:
- 置位时,该位表示传输是特权访问。
- 解除置位时,该位表示传输是非特权访问。
3.8.3 内存类型
本节提供了有关HPROT
保护控制信号的更多信息,以及这些信号与不同内存类型的关系。表3-6显示了HPROT[6:2]
信号和存储器类型之间的映射。表3-6未显示的位组合是不允许的。
设备内存类型E后缀表示允许提前写响应。设备内存类型nE后缀表示不允许提前写响应,写响应必须来自最终目的地。
以下各节详细介绍了每种内存类型的要求。
3.8.4 设备内存要求
对于所有设备内存,即设备1和设备2,所需的行为是:
- 读取数据必须从最终目的地获得。
- 不得将传输拆分为多个传输或与其他传输合并。
- 不得预取或推测性地执行读取。
- 不得合并写入。
- 从同一主机到同一从机的所有读写传输必须保持有序。
- 不得改变传输的大小,即
HSIZE
。 - 允许将传输突发分成多个较小的突发。但是,原始突发中的NONSEQ和SEQ传输的总数必须与合成的较小突发中的NONSEQ和SEQ传输的总数相同。
HPROT
允许的唯一更改是将Bufferabe的传输转换为Non-bufferable。
此外,对于Device-nE:
- 必须从最终目的地获得写响应。
此外,对于Device-E:
- 写响应可以从中间点获得。
- 在给出写响应时,所有其他主机都必须能够观察到写传输。
- 写传输必须及时到达最终目的地。
3.8.5 正常内存要求
对于所有正常内存,即正常Non-cacheable内存、 Write-through和Write-back,所需的行为是:
- 读可以是推测性的。
- 读取可以获取比所需更多的数据。
- 可以合并写入。
- 由
HBURST
和HSIZE
指示的传输特性可以改变。 - 从同一主机到重叠地址的读写传输必须保持有序。
- 对于可共享的事务,只有在所有其他主机都可以看到传输时,才必须给出响应。
此外,对于普通Non-cacheable内存:
- 必须及时使写传输在最终目的地可见。
- 读取数据必须从以下来源获得:最终目的地或正在向最终目标进行的写入传输。
- 如果从写传输中获得读数据:它必须从最新版本的写入中获得。不得缓存数据以供以后读取。
- 读取操作不得缓存获取的数据供以后使用。
(对于普通的不可缓存内存,可以从仍在向最终目的地前进的写传输中获取读数据,这与传播以同时到达最终目的地的读和写传输是无法区分的。以这种方式返回的读数据并不表示写传输在最终目的地可见。)
此外,对于Write-through:
- 写响应可以从中间缓存或缓冲区获得。
- 读取数据可以缓存在中间缓存或缓冲区中。
- 读写传输需要缓存查找。
- 必须及时使写事务在最终目的地可见。
此外,对于Write-back:
- 写响应可以从中间缓存或缓冲区获得。
- 读取数据可以缓存在中间缓存或缓冲区中。
- 读写传输需要缓存查找。
- 不要求写事务在最终目的地可见。
3.8.6 分配属性
Write-through和Write-back传输包括分配属性HPROT[5]
:
- 声明后,出于性能原因,本规范建议将此传输分配到缓存中。
- 取消声明时,出于性能原因,本规范建议不在缓存中分配此传输。
3.8.7 遗留问题
表3-7显示了本规范建议为仅包含HPROT[3:0]
信号的组件提供HPROT[6:0]
信号的映射。
当在仅包含HPROT[3:0]
的系统中使用支持HPROT[6:0]
的组件时,可以移除高阶HPROT
位。
3.9 安全传输(HNONSEC)
AHB5定义了安全传输属性。此属性定义接口是否支持安全和非安全传输的概念。如果未定义此属性,则接口不支持安全传输。
一个支持安全传输的接口有一个额外的信号,HNONSEC
。对于非安全传输,该信号被置位,对于安全传输,该信号被取消置位。
HNONSEC
是一个地址相位信号,具有与HADDR
相同的有效性约束。
在不支持安全传输的组件之间进行接口时,必须小心。
(该信号被定义为当其被断言时,传输被识别为不安全的。这与ARM安全扩展实现中的其他信令是一致的。)
四. 总线互连
4.1 互连
互连组件提供系统中主设备和从设备之间的连接。
单个主系统只需要使用解码器和多路复用器,如下节所述。
多主机系统需要使用互连,该互连提供仲裁以及从不同主机到适当从机的信号路由。地址、控制和写数据信号需要这种路由。本协议中没有提供用于多主系统的不同方法的进一步细节,例如单层或多层互连。
4.2 地址解码
地址解码器为总线上的每个从机提供一个选择信号HSELx
。选择信号是高阶地址信号的组合解码。鼓励简单的地址解码方案,以避免复杂的解码逻辑,并确保高速操作。
当HREADY
为高电平时,从机必须只对HSELx
、地址和控制信号进行采样,表明当前传输正在完成。在某些情况下,当HREADY
为低电平时,可能会置位HSELx
,但在当前传输完成时,所选从机已发生变化。
可以分配给单个从机的最小地址空间是1KB,地址区域的开始和结束必须存在于1KB的边界上。所有主机都设计为不在1KB地址边界上执行递增传输。这确保突发永远不会跨越地址解码边界。
图4-1显示了解码器产生的HSELx
从机选择信号。
4.2.1 默认从机
如果系统设计不包含完全填满的内存映射,则必须实现一个额外的默认从机,以便在访问任何不存在的地址位置时提供响应。
如果尝试向不存在的地址位置进行NONSEQUENTIAL或SEQUENTIAL传输,则默认从机会提供ERROR响应。
IDLE或BUSY传输到不存在的位置会导致零等待状态OKAY响应。
4.2.2 多从机选择
允许单个从机接口支持多个从机选择信号HSELx
。 每个HSELx
信号对应于高阶地址位的不同解码。
这允许单个从接口提供多个逻辑接口,每个逻辑接口在系统地址映射中具有不同的位置。可以分配给逻辑接口的最小地址空间是1KB。这种方法不需要从机支持地址解码来区分逻辑接口。
多个HSELx
信号的一个典型用例是一个外设,它的主数据路径和控制寄存器位于地址映射的不同位置。两个位置都可以通过单个接口访问,无需从机执行地址解码。
4.3 读数据和响应复用器
AHB协议与读数据多路复用器互连方案一起使用。主机向所有从机发送地址和控制信号,解码器选择合适的从机。来自所选从机的任何响应数据通过读数据多路复用器传递给主机。
图4-2显示了实现具有三个从机的设计所需的多路复用器互连结构。
(如果支持独占传输,多路复用器还必须将适当的HEXOKAY
信号路由到主机。)
五. 从设备响应信号
5.1 从机传输响应(HRESP——OKAY,ERROR)
主机开始传输后,从机控制传输进度。传输开始后,主机不能取消传输。
对于支持AHB5 Exclusive_Transfers属性的组件,请参见独占访问信号,以了解额外的HEXOKAY
传输响应信号的详细信息。
从机在被访问时必须提供一个指示传输状态的响应。传送状态由HRESP
信号提供。表5-1列出了HRESP
状态。
表5-1显示,完整的传输响应是HRESP
和HREADYOUT
信号的组合。
表5-2列出了基于HRESP
和HREADYOUT
信号状态的完整传输响应。
这意味着从机可以通过以下三种方式完成传输:
- 立即完成传输。
- 发出错误信号,指示传输失败。
- 插入一个或多个等待状态,以便有时间完成传输。
这三种从机传输响应如下所述:
5.1.1 传输完成
当HREADY
为高电平且HRESP
为OKAY时,表示传输成功完成。
5.1.2 传输待定
典型的从机使用HREADYOUT
将适当数量的等待状态插入传输的数据阶段。然后,传输完成,HREADYOUT
为高,OKAY响应表示传输成功完成。
当从机在完成响应之前插入多个等待状态时,它必须将HRESP
驱动到OKAY。
5.1.3 错误响应
从机使用ERROR响应来指示相关传输的某种形式的错误情况。通常这表示保护错误,例如试图写入只读存储器位置。
虽然可以在单个周期内给出一个OKAY响应,但ERROR响应需要两个周期。为了启动错误响应,从机驱动HRESP
为高电平以指示错误,同时驱动HREADYOUT
为低电平以将传输延长一个额外周期。在下一个周期中,HREADYOUT
被驱动为高电平以结束传输,而HRESP
保持被驱动为高电平以指示错误。
由于总线的流水线特性,需要两个周期的响应。当从机开始发出ERROR响应时,下一次传输的地址已经广播到总线上。两个周期的响应为主机提供了足够的时间来取消下一次访问,并在下一次传输开始前将HTRANS[1:0]
驱动到空闲状态。
如果从机需要两个以上的周期来提供ERROR响应,则可以在传输开始时插入额外的等待状态。在此期间,HREADY
为低电平,响应必须设置为OKAY。
图5-1显示了带有ERROR响应的传输。
在图5-1中:
T1-T2——从机插入一个等待状态,并提供一个OKAY响应。
T2-T3——从机发出错误响应。这是错误响应的第一个周期,因为HREADY
为低电平。
T3-T4——从机发出错误响应。这是错误响应的最后一个周期,因为HREADY
现在为高电平。主机将传输类型更改为IDLE。这取消了对地址B的预期事务,该地址在T2时由一个从设备寄存。
T4-T5——从机回应一个OKAY响应。
如果从机提供错误响应,则主机可以取消突发中剩余的传输。但是,这并不是严格的要求,主机在突发中继续其余传输是可以接受的。
六. 数据总线
6.1 数据总线
实现AHB系统需要独立的读写数据总线。尽管推荐的最小数据总线宽度指定为32位,但可以按照6.3数据总线位宽中所述进行更改。
6.1.1 HWDATA
在写传输期间,主机驱动写数据总线。如果传输被延长,则主机必须保持数据有效,直到传输完成,如HREADY
高电平所示。
对于窄于总线宽度的传输,例如32位总线上的16位传输,主机只需驱动适当的字节通道。从机从正确的字节通道中选择写数据。
6.1.2 HRDATA
在读传输期间,适当的从机驱动读数据总线。如果从机通过保持HREADY
为低电平来延长读传输,那么从机只需在传输的最后一个周期提供有效数据,如HREADY
为高电平所示。
对于窄于总线宽度的传输,从机只需在活动字节通道上提供有效数据。主机从正确的字节通道中选择数据。从机只需在传输完成时提供有效数据,并给出OKAY响应。错误响应不需要有效的读取数据。
6.2 字节顺序
AHB同时支持大端和小端系统。支持两种大端数据存储方法。AHB5引入了Endian属性来定义支持哪种形式的大端数据访问。
BE8:
字节不变的大端。术语“字节不变的大端”源于这样一个事实,即字节访问(8位)使用与对同一地址的小端序访问相同的数据总线位。
BE32:
字不变的大端。术语“字不变的大端”源于这样一个事实,即字访问(32位)对最高有效(MS)和最低有效(LS)字节使用相同的数据总线位作为对同一地址的小端访问。
下面这组等式定义了哪些数据位用于小端、字节不变的大端和字不变的大端访问。这些方程使用以下变量:
- 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)]
上传输。
当发生较大的字节不变的大端字节传输时,数据的传输方式如下:
- MS节被传输到传输地址。
- 递减的有效字节被传输到顺序递增的地址。
6.2.3 字不变的大端
当一个字不变的大端部件访问一个字节时,下面的等式显示使用了哪些数据总线位:
Address_Offset = Address –(INT(Address / Data_Bus_Bytes)) × Data_bus_Bytes
Word_Offset = (INT(Address_Offset / 4)) × 4
Byte_Offset = Address_Offset – Word_Offset
数据在DATA[(8 × (Word_Offset + 3 – Byte_Offset)) + 7 : 8 × (Word_Offset + 3 – Byte_Offset)]
上传输。
对于32位总线,字偏移始终为零,因此等式简化为:
DATA[(8 × (3 – Byte_Offset)) + 7 : 8 × (3 – Byte_Offset)]
对于使用字不变大端字节序的半字和字传输,数据传输方式如下:
- 最高有效字节被传输到传输地址。
- 递减的有效字节被传输到顺序递增的地址。
对于使用字不变大端字节序的大于一个字的传输,数据被分割成字大小的块:
- 最低有效字被传输到传输地址。
- 递增的有效字被传输到递增的地址。
传输大小小于数据总线宽度的突发传输对于突发的每一拍都有不同的有效字节通道。
表6-1和表6-2显示了32位总线上在小端或字节不变大端系统中活动的字节通道。在这两种情况下,活动字节通道是相同的,但是最高有效字节和最低有效字节的位置不同。
表6-3显示了32位总线上的字节通道,它们在字不变的大端系统中是有效的。
6.2.4 字节不变性
字节不变的大端数据结构的使用简化了在单个内存空间中访问混合端数据结构。使用字节不变的大端和小端意味着,对于数据结构中的任何多字节元素:
- 元素使用相同的连续字节内存,而不考虑数据的字符顺序。
- 字符顺序决定了内存中这些字节的顺序,也就是说它决定了内存中的第一个字节是元素的MS字节还是元素的LS字节。
- 向给定地址的任何字节传输都会将同一条数据总线上的8位数据传递到同一地址位置,而不管该字节所属的任何数据元素的字符顺序如何。
图6-1显示了一个需要字节不变访问的数据结构的例子。在这个例子中,头字段使用小端排序,数据有效载荷使用大端排序。
例如,在这个结构中,Count是一个两字节的小端元素,这意味着它的最低地址是它的LS字节。字节不变性的使用确保了对有效载荷的大端访问不会破坏小端元素。
6.3 数据总线位宽
一种在不增加操作频率的情况下提高总线带宽的方法是使片内总线的数据路径更宽。金属层数的增加和嵌入式DRAM等大型片上存储块的使用是鼓励使用更宽片上总线的驱动因素。
指定固定的总线宽度意味着,在许多情况下,总线宽度对于应用程序来说不是最佳的。因此,已经采用了一种方法,该方法能够实现总线宽度的灵活性,但仍然确保模块在设计之间高度便携。
该协议允许数据总线为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 在宽总线上实现主机
主设备可以被修改为在比原来更宽的总线上工作,就像从设备被修改为在更宽的总线上工作一样。通过以下方式实现:
- 多路复用输入总线。
- 复制输出总线。
(除非主机中包含某种机制来限制主机尝试的传输宽度,否则主机无法在比最初预期更窄的总线上工作。主机绝不能尝试宽度(如HSIZE
所示)大于其所连接的数据总线的传输。)
七. 时钟与复位
7.1 时钟和复位要求
本节描述实现HCLK
和HRESETn
信号的要求。
7.1.1 时钟
每个组件使用一个时钟信号HCLK
。所有输入信号都在HCLK
的上升沿采样。所有输出信号变化必须发生在HCLK
的上升沿之后。
7.1.2 复位
复位信号HRESETn
是协议中唯一低电平有效的信号,也是所有总线元件的主要复位信号。复位可以异步置位,但在HCLK
上升沿后同步取消置位。
元件必须定义复位信号必须置位的最小周期数,以确保元件完全复位且输出处于所需的复位值。
复位期间,所有主机必须确保地址和控制信号处于有效电平,并且HTRANS[1:0]
指示IDLE。
复位期间,所有从机必须确保HREADYOUT
为高电平。
八. 独占传输
8.1 介绍
AHB5定义了Exclusive_Transfers属性。此属性定义接口是否支持独占传输的概念。如果未定义此属性,则接口不支持独占传输。
独占传输提供了一种支持信号量类型操作的机制。
独占访问序列是来自单个主机的独占传输序列,使用以下步骤操作:
- 从一个地址执行独占读取传输。
- 基于从独占读取获得的数据值,计算要存储到该地址的新数据值。
- 在独占读取和独占写入之间,可以有其他非独占传输。
- 使用新数据值对同一地址执行独占写入传输:如果独占读取传输后没有其他主机写入该位置,则独占写入传输成功并更新内存。如果自独占读取传输后,另一个主机已写入该位置,则独占写入传输失败,并且不会更新存储位置。
- 对独占写入传输的响应指示传输是成功还是失败。
该序列确保只有在存储到存储器的位置仍然保持用于计算要写入该位置的新值的相同值时,才更新存储器位置。
如果独占写入传输失败,预计主机将重复整个独占访问序列。
实施定义在独占读取传输后,同一主机对相同或重叠位置的更新是否会导致关联的独占写入传输成功或失败。
8.2 独占访问监视器
需要独占访问监视器来支持独占访问序列,并且该监视器必须确定独占写入传输是成功还是失败。
独占访问监视器必须能够同时监视系统中每个独占访问主机的至少一个地址位置。
独占访问监视器在系统中的位置未定义。但是,它的位置必须能够观察到对用于独占访问序列的所有地址位置的访问。例如,如果一个系统包括多个内存控制器,要么所有访问都通过包含独占访问监视器的中心点路由,要么每个内存控制器都需要一个单独的独占访问监视器。
不要求系统支持对所有地址位置的独占访问序列。为对不支持独占访问序列的位置的访问提供了故障安全机制。通常,系统应该支持对主存储器的独占访问序列,但不支持对任何外围设备的独占访问序列。
8.3 独占访问信号(HEXCL,HMASTER,HEXOKAY)
与独占传输相关的附加信号有:
HEXCL
:
独占传输。指示传输是独占访问序列的一部分。该信号是一个地址相位信号,具有与HADDR
相同的有效性约束。
HMASTER[m:0]
:
主机标识符。拥有多个具有独占功能的线程的主线程必须生成此信号来区分线程。主机生成的HMASTER
值将与互连生成的值相结合,以确保呈现给独占访问监视器的结果HMASTER
值是唯一的。该信号是一个地址相位信号,具有与HADDR
相同的有效性约束。
HEXOKAY
:
独占OKAY。增加了一个额外的响应信号来指示独占传输的成功或失败。
HMASTER[m:0]
信号的宽度由实现定义。但是,本规范建议以下宽度:
- 对于主机组件,实现支持的可独占线程数所需的位数。
- 对于主机连接的互连端口,实现4位。可选地,互连可以支持更大位宽的配置。
- 对于从机或监控器组件,实现8位。可选地,从属或监控组件可以支持更大位宽的配置。
HMASTER
信号允许用于专用传输以外的目的。允许系统中的互连和从属组件使用该信号来区分系统中的不同主机,并适当地调整它们的行为。因此,必须为所有传输提供有效的HMASTER
指示,而不仅仅是独占传输。
8.3.1 响应信号
HEXOKAY
信号用于指示独占传输的成功或失败:
- 置位时,
HEXOKAY
表示独占传输已成功,对于独占写入传输,存储位置已更新。 - 解除置位时,
HEXOKAY
表示独占传输失败。这可能是因为:已尝试对不支持独占传输的地址位置进行独占传输。独占写入传输失败,因为自匹配的独占读取传输以来,内存位置没有保持不变。在这种情况下,存储位置不会更新。
通过确保总是首先对不支持独占传输的地址位置执行独占读取传输,主机可以确保不会尝试对该位置执行独占写入传输。
以下约束适用于HEXOKAY
:
HEXOKAY
必须仅在与HREADY
相同的周期内有效。HEXOKAY
不得在与HRESP
相同的周期内置位。
8.4 独占传输限制
以下限制适用于独占传输:
- 必须进行单次数据传输。
- 必须显示为突发类型SINGLE或突发类型INCR。
- 不得包含BUSY传输。
- 地址必须与高速缓存指示的数据大小一致。
HPROT
信号的值必须保证独占访问监视器能够看到传输。
(HPROT
信号必须保证独占访问监视器能够看到传输。如果独占访问监视器位于系统缓存的下游,则传输必须是不可缓存的。如果独占访问监视器位于系统缓存的上游,则允许传输是可缓存的。)
要将独占读取传输和独占写入传输视为同一独占访问序列的一部分,以下信号对于两次传输必须相同:
HADDR
,地址。HSIZE
,数据大小。HPROT
,保护控制。HBURST
,突发类型。HMASTER
,主机标识符。HNONSEC
,不安全,如果适用。
允许主机发出独占读取传输,并且绝不在同一独占访问序列中进行独占写入传输。
允许主机发出独占写入传输,在同一独占访问序列中,该传输之前没有独占读取传输。在这种情况下,独占写入传输必须失败,并且必须取消置位HEXOKAY
响应信号。
一个主设备不得在同一时间点有两个未完成的独占传输。当先前独占传输的数据阶段正在进行时,不能发布独占传输的地址阶段。无论传输是否属于同一独占访问序列,这都适用。
允许发布具有特定HMASTER
值的独占传输的地址阶段,而具有不同HMASTER
值的早期独占传输的数据阶段正在进行中。
(独占传输的地址阶段被定义为当HEXCL
被置位,并且HTRANS
指示NONSEQ时。当HTRANS
指示IDLE时,HEXCL
的断言没有被定义为独占传输的地址阶段。)
九. 原子性
9.1 单副本原子性大小
单拷贝原子性大小定义了传输保证原子性更新的数据字节数。
单副本原子性大小是为一组正在通信的组件定义的。例如:
- 处理器、DSP和DRAM控制器属于64位单拷贝原子组。
- 更大的组,包括处理器、DSP、DMA、DRAM、SRAM和外围设备,属于32位单拷贝原子组。
传输的单副本原子性保证永远不会大于其起始地址的对齐。例如,64位单拷贝原子组中未与8字节边界对齐的突发没有任何64位单拷贝原子性保证。
当写传输更新内存位置时,必须保证观察者会看到:
- 位置没有更新。
- 更新到至少单副本原子大小的数据量。
不允许另一个观察者在某个时间点看到单拷贝原子性大小内的一些数据字节被更新,然后在稍后的时间点看到同一单拷贝原子性大小内的其他数据字节被更新。
与传输相关联的字节选通不影响单拷贝原子性大小。
要求大于单副本原子性大小的传输必须以至少为单副本原子性大小的块来更新内存。
(在确定单副本原子性大小时,不考虑数据值更新的确切时刻。必须确保的是,没有一个主机能够观察到原子数据的部分更新形式。例如,在许多系统中,数据结构(如链表)由32位原子元素组成。这些元素之一的原子更新需要同时更新整个32位值。任何主机都不能在某个时间点仅观察到16位的更新,然后在稍后的时间点观察到其他16位的更新。)
更复杂的系统需要支持更大的原子元素,特别是64位原子元素,以便主机可以使用基于这些更大原子元素的数据结构进行通信。
9.2 多副本原子性
AHB5定义了Multi_Copy_Atomicity属性。定义该属性是为了指定系统提供多副本原子性。
如果Multi_Copy_Atomicity属性设置为真,则系统被定义为具有此属性。
不支持Multi_Copy_Atomicity属性的系统的默认值为假。
在下列情况下,系统被定义为多副本原子系统:
- 所有代理都以相同的顺序观察对相同位置的写入。
- 对发行人以外的代理人可观察到的位置的写入可被所有代理人观察到。
可以通过避免使用转发缓冲区来确保多副本原子性,这可以使传输对系统中的一些代理可见,但对所有代理不可见。
十. 用户信号
10.1 用户信号描述(HAUSER,HWUSER,HRUSER)
为每个通道定义的用户信号名称有:
HAUSER
:用户信号地址通道。
HWUSER
:写数据通道用户信号。
HRUSER
:读数据通道用户信号。
这些信号具有与相关通道相同的时序和有效性要求。
对于数据通道用户信号,本规范建议:
- 用户位数是接口宽度的整数倍,以字节为单位。
- 每个字节的用户位被打包在相邻的位中。
数据通道的用户位位置定义为:
- 每个数据字节有m个与之相关的用户信号。
- 数据总线宽度为n字节。
- 用户位的总数为u,其中u = m × n。
用户发出字节y的信号,其中y = 0…(n–1),位于:
HWUSER[((y×m)+(m–1)):(y×m)]
HRUSER[((y×m)+(m–1)):(y×m)]
本规范建议在互连上包含用户信号,但是不要求在主设备或从设备上包含用户信号。
本规范建议互连组件支持用户信号,以便它们可以在主组件和从组件之间传递。用户定义信号的宽度由实现定义,每个通道的宽度可以不同。
10.2 用户信号互连建议
对于未被互连修改的传输,与传输相关联的用户信号可以未经修改地通过互连传输。
对于由互连修改的传输,本节中的信息提供了与生成的传输相关联的用户信号生成指南。
当一次转移转换为多次转移时:
- 原始传输的
HAUSER
信号被复制到每个生成的传输中。 - 对于包含原始传输的一些数据字节的每个生成的传输,生成的传输的
HWUSER
和HRUSER
信号使用传输中包含的数据字节的用户位。
如果多次转移转换为一次转移:
- 第一次转移的
HAUSER
信号用于产生所产生的转移的HAUSER
信号。后续传输的HAUSER
信号被丢弃。 - 生成传输的
HWUSER
和HRUSER
信号使用原始传输中相关数据字节的组合用户位。