第一章
为了便于说明,本规范中使用了32位数据总线。允许附加的数据总线宽度,见后面章节。

1.1关于此协议
AMBA AHB是适用于高性能可综合设计的总线接口。它定义了组件之间的接口,比如主组件、互连组件和从组件。    
       图1-1显示了单主AHB系统的设计,其中有AHB主机和三个AHB从机。总线互联逻辑是由一个地址解码器和一个从机到主机的多路复用器组成。解码器监控来自主机的地址以便选择适当的从机,多路复用器路由相应的从机输出数据到主机。
       AHB通过使用互连组件提供仲裁和从不同的主机到适当从机的路由信号,从而支持多主机设计。

图1-1只展示了主要的地址,数据总线和典型的数据路由,没有显示出全部信号。

1.1.1 Master

一个主机提供地址和控制信息从而启动读和写操作。图1-2显示了一个主机接口。
Note:图1-2中的图不包括AHB5中定义的附加信号。

1.1.2 Slave
从机响应系统中由主机发起的传输。当从机对总线传输响应时,从机使用来自解码器的HSELx选择信号去控制。
从机向主机发送信号:
—总线传输的完成或扩展
—总线传输的成功或失败
图1-3显示了一个从机接口.
Note:图1-3不包括定义在AHB5中的附加信号。

1.1.3 Interconnect
互连组件提供系统中主从之间的连接。
一个单一的主系统只需要使用解码器和多路复用器,如下面的章节所述。
一个多主系统要求使用一个互连,这个互联可以提供仲裁和从不同的主机到适当从机的路由信号。这种路由对于地址、控制和写数据信号都是必需的。本规范没有提供用于多主系统的不同方法的更多细节,例如单层或多层互连。有关实现多层的更多信息,请参见AHB多层技术概述(arm dvi 0045) AHB-Lite互连。
Decoder:
       该组件对每次传输的地址进行解码,并为参与传输的从机提供一个选择信号。它还为多路复用器提供一个控制信号。在所有使用两个或更多从器的实现中,都需要一个单一的中央解码器。
Multiplexor:
       从机到主机的多路复用器需要将从机到主机的读数据总线和响应信号进行多路复用。解码器为多路复用器提供控制。在所有使用两个或更多从机的实现中,都需要一个单一的集中式多路复用器。

1.3 Operation
主机通过驱动地址和控制信号开始一个传输。这些信号提供地址,方向,传输宽度和表明传输形式是否是一个突发传输等信息。传输可能是:
—Single.
—递增在地址边界处没有环回的突发。
—在特定地址边界的环回突发。
写数据总线移动数据从主机到从机,读数据总线移动数据移动数据从从机到主机。
每一个传输由以下组成:
—地址阶段 一个地址和控制周期
—数据阶段 数据的一个或多个周期
从机不能请求扩展地址阶段,因此所有从机必须能够在此期间对地址进行采样。然而,一个从机可以请求主机通过HREADY信号扩展数据阶段。这个信号,当LOW时,导致等待状态被插入到传输中,并使从机有额外的时间来提供或采样数据。从机使用HRESP来表明一次传输的成功或失败。

第二章

2.1 Global signals

Table 2-1列出了此协议的全局信号.

Name Source Description
HCLK Clock source 这个总线为所有的总线传输提供时序。所有的信号时序都与HCLK的上升沿有关。
HRESETn Reset controller 这个总线复位信号是低有效,并且复位系统和总线。这是唯一的低有效信号。

2.2 Master signals

Table 2-2列出了主机产生的协议信号。

Name Destination Description
HADDR[31:0] Slave and decoder 32位系统地址总线
HBURST[2:0] Slave 突发类型表示该传输是单个传输还是突发的一部分。支持固定长度的4,8和16拍的突发传输。突发传输可以是递增或环回。也支持未定义长度的递增突发。
HMASTLOCK Slave 当为高时,表明当前传输是锁定序列的一部分。它具有与地址和控制信号相同的时序。
HPROT[3:0] Slave 保护控制信号提供关于总线访问的附加信息,指示在系统中应该如何处理访问。这些信号指示传输是操作码获取还是数据访问,以及传输是特权模式访问还是用户模式访问。
HPROT[6:4] Slave HPROT信号的3位扩展,增加了扩展的内存类型。如果AHB5 Extended_Memory_Types属性为True,则支持该信号扩展。
HSIZE[2:0] Slave 指示传输的大小,通常为字节,半字或字。该协议允许更大的传输大小,最高可达1024位。
HNONSEC Slave and decoder 指示当前传输为非安全传输或安全传输。如果AHB5 Secure_Transfers属性为True,则支持此信号。
HEXCL Exclusive Access Monitor 独占传输. 指示传输是独占访问序列的一部分。如果AHB5 Exclusive_Transfers属性为True,则支持该信号。
HMASTER[3:0] Exclusive Access Monitor and slave 主机标识符. 如果有多个独占线程,则有一个主机生成。由互连修改,以确保每个主机都是唯一标识的。如果AHB5 Exclusive_Transfers属性为True,则支持该信号。
HTRANS[1:0] Slave 当前传输的传输类型。这个可以是以下选项:IDLE、BUSY、NONSEQUENTIAL、SEQUENTIAL.
HWDATA[31:0] Slave 写数据总线在写操作期间从主机向从机传输数据。建议数据总线宽度不小于32位。但是,这可以扩展以支持更高带宽的操作。
HWRITE Slave 传输方向。当信号为HIGH时,表示写传输;当信号为LOW时,表示读传输。它与地址信号具有相同的时序,然而,它必须在整个突发传输中保持恒定。

2.3 Slave signals

Table 2-3 列出从机产生的协议信号

Name Destination Description
HRDATA[31:0] Multiplexor 在读操作期间,读数据总线将数据从所选的从机传输到多路复用器。然后多路复用器将数据传输到主机。建议数据总线宽度不小于32位。但是,这可以扩展以支持更高带宽的操作。
HREADYOUT Multiplexor 当HIGH时,HREADYOUT信号表明总线上的传输已经完成。这个信号可以被驱动为LOW来扩展一个传输。
HRESP Multiplexor 传输响应,在经过多路复用器后,向主机提供关于传输状态的附加信息。当为LOW时,HRESP信号表示传输状态为ok。当HRESP信号为HIGH时,表示传输状态为ERROR。
HEXOKAY Multiplexor 独占Okay. 独占传输成功或失败。如果AHB5 Exclusive_Transfers属性为True,则支持该信号。

2.4 Decoder signals

Table 2-4 出解码器产生的协议信号。

Name Destination Description
HSELx a Slave 每个从机有它自己的从机选择信号HSELx ,这个信号表明当前的传输是为所选的从机准备的。当从机最初被选中时,它还必须监视HREADY的状态,以确保之前的总线传输已经完成,然后才响应当前的传输。HSELx信号是地址总线的组合解码。

a. 在HSELx中使用的字母x必须被更改为系统中每个slave的唯一标识符。例如HSEL_S1, HSEL_S2和HSEL_Memory.
Note:
通常解码器还为多路复用器提供HSELx信号,或由HSELx信号派生的信号/总线,以使多路复用器能够将适当的信号从所选的从机传送到主机。重要的是,这些额外的多路复用控制信号被重新定时到数据阶段。

2.5 Multiplexor signals

Table 2-5列出由多路复用器产生的协议信号

Name Destination Description
HRDATA[31:0] Master 读取数据总线,由解码器选择.a
HREADY Master and slave 当HREADY信号为HIGH时,HREADY信号向主服务器和所有从服务器表示之前的传输已经完成。
HRESP Master 传送响应,由解码器选择.a
HEXOKAY Master 独占OK,由解码器选择.a

a.由于HRDATA[31:0]、HRESP和HEXOKAY信号通过多路复用器并保留了相同的信号命名,因此在2-23页的表2-3中提供了这三个信号的完整的信号描述。

第三章

3.1 Basic transfers
传输由两个阶段组成:
Address:持续一个HCLK周期,除非它被之前的总线传输扩展。
Data:可能需要几个HCLK周期。使用HREADY信号控制完成传输所需的时钟周期的数量。
HWRITE控制数据向主机或从主机传输的方向。因此,当:
-HWRITE为高,表明是写传输,主机广播数据在写数据总线上HWDATA[31:0]
-HWRITE为低 ,执行读数据传输,从机必须在读数据总线上生成数据HRDATA[31:0].
最简单的传输是没有等待状态的传输,因此传输由一个地址周期和数据周期组成。
图 3-1 显示一个简单的读传输和图3-2显示一个简单的写传输.

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

  • 主机在HCLK上升沿后将地址和控制信号驱动到总线上。
  • 然后从机在HCLK的下一个上升沿上采样地址和控制信息。
  • 在slave对地址和控制进行采样后,它可以开始驱动适当的HREADYOUT响应。该响应由主控器在HCLK的第三个上升沿采样。

       这个简单的例子演示了传输的地址和数据阶段在不同的时钟周期是如何发生的。在前一个传输的数据阶段期间,任何传输的地址阶段产生。当仍然为从机提供足够的时间来对传输提供响应时,这种地址和数据的重叠是总线流水线性质的基础,能够实现高性能操作。


       从机可以在任何传输中插入等待状态,以增加完成的时间。每个从机都有一个HREADYOUT信号,它在传输的数据阶段驱动。互连负责组合所有从站的HREADYOUT信号,生成一个单独的HREADY信号,用于控制整个进程。
Figure 3-3 显示具有两个等待状态的读传输。

Figure 3-4 显示有一个等待状态的写传输。

Note
对于写操作,主机在整个扩展周期内保持数据稳定。对于读操作,直到传输即将完成之前,从机不必提供有效的数据
当一个传输以这种方式扩展时,当以这种方式扩展一个传输时,它具有扩展下一个传输的地址阶段的副作用。
图3-5所示为3个不相关地址A、B和C的传输,地址C有一个扩展的地址阶段。

在图3 - 5:

  • 对地址A和C的传输是零等待状态。
  • 传输到地址B有一个等待状态。
  • 对地址B的数据阶段的扩展传输对地址C的地址阶段传输由影响。

3.2 Transfer types

传输可分为四种类型之一,由HTRANS控制[1:0]。Table 3-1列出了这些传输类型编码。

HTRANS[1:0] Type Description
0b00 IDLE 表示不需要数据传输。当主机不想执行数据传输时,它使用IDLE传输。建议主机用IDLE传输终止锁定传输。从机必须始终为IDLE传输提供一个零等待状态的OKAY响应,并且该传输必须被slave忽略
0b01 BUSY BUSY传输类型使主机在突发传输中插入idle周期。这种传输类型表明主机正在以突发传输继续,但下一个传输不能立即发生。当主机使用BUSY传输类型时,地址和控制信号必须反映在突发中的下一个传输。只有未定义长度的突发才能将BUSY传输作为突发的最后一个周期。参见第3-35页的BUSY传输后突发终止。从机必须始终为BUSY传输提供一个零等待状态的OKAY响应,并且传输必须被从机忽略。
0b10 NONSEQ 表明一个SINGLE传输或突发传输第一个传输。地址和控制信号与之前的传输无关。总线上的SINGLE传输被视为长度为1的突发,因此传输类型是NONSEQUENTIAL。
0b11 SEQ 在一个突发中,剩余的传输是顺序的,地址与前一次传输有关。控制信息与前一次传输相同。该地址等于前一个传输的地址加上传输大小(以字节为单位),传输大小由HSIZE[2:0]信号发出。在环回突发传输的情况下,传输的地址在地址边界环回

 NONSEQ、BUSY和SEQ三种传输类型的使用如图3-6所示。

 

 

在图3 - 6:
T0-T1 四拍读取从NONSEQ传输开始。
T1-T2 主机无法执行第二个节拍,并插入一个BUSY传输来延迟第二个节拍的开始。从机为第一个节拍提供读数据。
T2-T3 主机现在准备开始第二个传输,因此一个SEQ传输被信号标识。主机忽略从机提供在读数据总线上的数据。
T3-T4 主机执行第三个节拍。从机为第二个节拍提供数据。
T4-T5 主机提供最后一个节拍。从机不能完成传输,使用HREADYOUT
插入一个等待状态。
T5-T6 从机为第三个节拍提供读数据。
T6-T7 从机为最后一拍提供读数据。

3.3 Locked transfers

如果主机需要锁定访问,那么它还必须插入HMASTLOCK信号。这个信号指示任何slave当前的传输序列是不可分割的,因此必须在任何其他传输被处理之前被处理。通常,锁定传输用于维护信号量的完整性,通过确保从机在微处理器SWP指令的读和写阶段之间不执行其他操作。
图3-7显示了带有微处理器SWP指令的HMASTLOCK信号。

Note:
在锁定传输之后,建议主机插入IDLE传输。
大多数从机没有实现HMASTLOCK的要求,因为它们只能按照接收到的顺序执行传输。从机可以被多个主机访问。例如,一个多端口内存控制器(MPMC)必须实现HMASTLOCK信号。
允许主机在一个锁定传输序列的开始、中间或结尾为IDLE传输插入HMASTLOCK。允许在锁定传输序列的开始或结束处使用锁定的IDLE传输,但不推荐,因为这种行为会对系统的仲裁产生不利影响。
也允许(但不建议)对主机插入HMASTLOCK一定数量的IDLE传输,然后在不执行非idle传输的情况下去解除断言HMASTLOCK。这种行为会对系统的仲裁产生不利影响。
要求在锁定序列中的所有传输都是到相同的从机地址区域。
Note
在本规范的版本A中,不存在确保在一个锁定序列中的所有传输都是到同一从地址区域的要求。必须对遗留组件进行验证,以确保它不会出现这种行为。

3.4 Transfer size

HSIZE[2:0]表示数据传输的大小。可能的传输大小如表3-2所示。
Table 3-2传输大小编码

Note
HSIZE设置的传输大小必须小于或等于数据总线的宽度。例如,对于32位数据总线,HSIZE必须只使用值0b000、0b001或0b010。
将HSIZE与HBURST结合使用,以决定环回突发的地址边界。
HSIZE信号与地址总线具有完全相同的时序。然而,它们必须在整个突发传输过程中保持恒定。

3.5 Burst operation

在此协议中定义了4拍,8拍和16拍,未定义长度的突发,SINGLE传输。它支持递增和环回突发:
– 在突发中每一次传输的递增突发访问顺序位置和地址是前一个地址的增量。
– 当跨越地址边界时,环回突发会环回。地址边界计算为突发中节拍数与传输大小的乘积。节拍数由HBURST控制,传输大小由HSIZE控制。
例如,一个四拍的字(4字节)访问在16字节边界处环回。因此,如果burst的起始地址是0x34,那么它包含了对地址0x34、0x38、0x3C和0x30的4次传输。
HBURST[2:0]控制突发类型.
Table 3-3 列出可能的突发类型.

master不能尝试启动一个跨越1KB地址边界的递增突发。
master可以使用以下任意一种方式执行SINGLE传输:
– SINGLE传输突发.
– 长度为1的未定义长度的突发
Note
突发大小是指突发中的节拍数,而不是传输的字节数。用节拍数乘以每个节拍的数据量,如HSIZE[2:0]所示,计算出突发中传输的数据总量。

在一个突发中的所有传输必须与地址边界对齐,地址边界等于传输的大小。例如,字传输必须对齐到字地址边界(HADDR[1:0] = 0b00),半字传输到半字地址边界(HADDR[0] = 0)。IDLE传输的地址也必须对齐,否则在仿真过程中,总线监视器很可能报告虚假的警告。

3.5.1 Burst termination after a BUSY transfer

在突发开始后,如果需要更多的时间才能继续进行突发中的下一个传输,主机就会使用BUSY传输。
在未定义长度突发INCR期间,主机可能插入BUSY传输,然后决定不再需要更多的数据传输。在这些情况下,主机可以执行NONSEQ或IDLE传输,然后有效地终止未定义的长度突发。
对于固定长度的突发类型,协议不允许master用BUSY传输结束突发:
– 递增INCR4, INCR8, and INCR16.
– 环回WRAP4, WRAP8, and WRAP16.
这些固定长度的突发类型必须以SEQ传输结束。
主机不允许在SINGLE突发后立即执行BUSY传输。SINGLE突发必须紧随一个IDLE传输或一个NONSEQ传输。

3.5.2 Early burst termination

突发可以通过以下两种方式终止:
– 从机错误响应
– 多层互联终止
从机错误响应:
如果从机提供了一个ERROR响应,那么主机可以取消突发中剩余的传输。然而,这不是一个严格的要求,对于主机来说,在突发中继续剩余的传输也是可以接受的。
如果主机取消了突发中剩余的传输,那么它必须在两个周期的Error响应期间更改HTRANS以表明IDLE。
如果主机没有完成这个突发传输,那么当它下次访问那个从机时,没有要求去重建这个突发。例如,如果一个主机只完成了一个8拍脉冲的3拍,那么当它下次访问这个从机时,它不需要完成剩下的5次传输。
多层互联中止:
虽然主机不允许提前终止突发请求,但从机必须在突发未完成时能够正常工作。当多层互连组件在多主系统中使用时,它可以终止突发,这样另一个主机就可以访问从机。如果发生这种情况,从机必须终止来自原始主机的突发,然后对新主机作出适当的响应。

3.5.3 Burst examples

以下部分展示了集中突发的实例:
– 四拍环回突发, WRAP4.
– 四拍递增突发, INCR4 on page 3-37.
– 八拍环回突发, WRAP8 on page 3-37.
– 八拍递增突发, INCR8 on page 3-38.
-未定义长度突发, INCR on page 3-38.
四拍环回突发, WRAP4
图3-8显示了一个使用四拍环回突发的写传输,并为第一次传输增加了一个等待状态。
因为这个突发是字传输的四拍突发,地址环回在16字节边界,向地址0x3C的传输之后是向地址0x30的传输。
四拍递增突发, INCR4
图3-9显示了一个使用四拍递增突发的读传输,并且第一个传输具有等待状态。在这种情况下,地址在16字节边界没有环回,地址0x3C之后是地址0x40的传输。

八拍环回突发, WRAP8
图3-10展示了一个使用八拍环回的读传输。

因为这个突发是一个八拍的字传输,地址环回在32字节边界处,地址0x3C的传输之后是到地址0x20的传输。
八拍递增突发, INCR8
图3-11展示了使用八拍递增突发的写传输。

这个突发使用半字节传输,因此地址增加2。因为突发是递增的,地址继续增加到超过16字节边界。
未定义长度突发, INCR
图3-12展示了未定义长度的递增突发。

图3-12显示了两个突发:
– 第一个突发是由两个从地址0x20开始的半字传输组成的写。这些传输地址地递增2。
– 第二个突发是由从地址0x5C开始的三个字传输组成的读取。这些传输地址递增4。

3.6 Waited transfers

如果需要更多的时间来提供数据或对数据进行采样,从机可以使用HREADYOUT来插入等待状态。在等待的传输期间,主机被限制为它可以对传输类型和地址做什么更改。这些限制将在以下章节中描述:
– 在等待状态期间传输类型更改。
– 在3-42页的等待状态期间的地址变化。

3.6.1 Transfer type changes during wait states

当从机处于请求等待状态时,master不能改变传输类型,除非如下所述:
– IDLE传输
– BUSY传输, 固定长度突发on page 3-40.
– BUSY传输, 未定义长度突发on page 3-41.
IDLE传输
在等待状态传输期间,主机允许可以将传输类型从IDLE更改为NONSEQ。当HTRANS传输类型变为NONSEQ时,主机必须保持HTRANS不变,直到HREADY为高。
图3-13显示了一个SINGLE突发的等待状态,传输类型熊IDLE更改为NONSEQ。

在图3-13:
T0-T1 主机发起一个SINGLE突发到地址A。
T1-T2 主机发起一个IDLE传输到地址Y。从机插入一个具有HREADYOUT = LOW的等待状态。
T2-T3 主机插入一个IDLE传输到地址Z。
T3-T4 主机将传输类型更改为NONSEQ,并向地址B发起INCR4传输。
T4-T6 HREADY LOW时,主机必须保持HTRANS恒定。
T5-T6 SINGLE突发到地址A以HREADY HIGH完成,主机开始第一拍带地址B。
T6-T7 INCR4向地址B传输的第一个节拍完成,主机开始向地址B+4传输的下一个节拍。

BUSY传输, 固定长度突发
在固定长度突发的等待状态传输过程中,主机允许传输类型从BUSY改变到SEQ。当HTRANS传输类型更改为SEQ时,主机必须保持HTRANS不变,直到HREADY为HIGH。
Note
因为BUSY传输必须只插入连续的突发节拍之间,这不适用于SINGLE。 因此,这种情况适用于以下几种突发类型:
• INCR4, INCR8, and INCR16.
• WRAP4, WRAP8, and WRAP16.
图3-14所示为固定长度突发的等待传输,传输类型从BUSY转换为SEQ。

n Figure 3-14:
T0-T1 主机启动INCR4的下一个节拍到地址0x24。
T1-T3 主机向地址0x28插入一个BUSY传输。从机插入HREADYOUT = LOW的等待状态。
T3-T4 主机改变传输类型到SEQ,启动突发的下一拍到地址0x28。
T4-T5 HREADY LOW时,主机必须保持HTRANS恒定。
T5-T6 HREADY HIGH时,到地址0x24这一拍完成。
T6-T7 INCR4向地址0x28传输的第三个节拍完成,主机开始向地址0x2C传输的最后一个节拍。


BUSY传输, 未定义长度突发
在一个未定义长度的突发(INCR)等待传输期间,当HREADY为LOW时,允许主机从BUSY切换到任何其他传输类型。如果SEQ传输被执行,突发将继续,但是如果IDLE或NONSEQ传输被执行,突发将终止。
图3-15显示了一个未定义长度突发的等待传输,传输类型从BUSY转换为NONSEQ。

在图3-15中:
T0-T1 主机启动INCR突发的下一拍到地址0x64。
T1-T3 主机插入BUSY传输到地址0x68。从机插入HREADYOUT = LOW的等待状态。
T3-T4 主机改变传输类型为NONSEQ,并且启动一个新的突发到地址0x10。
T4-T6 HREADY LOW时,主机必须保持HTRANS恒定。
T5-T6 未定义长度的突发以HREADY HIGH结束,master开始第一个节拍到地址0x10。
T6-T7 INCR4向地址0x10传输的第一个节拍完成,主机开始向地址0x14传输的下一个节拍。

3.6.2 Address changes during wait states

当从机处于请求等待状态时,主机只能修改一次地址,除非有如下描述:
– 在IDLE传输期间。
– 在3-43页的错误响应后。
在IDLE传输期间
在等待传输期间,允许主机为IDLE传输更改地址。当HTRANS传输类型改变为NONSEQ时,主机必须保持地址不变,直到HREADY为HIGH。
图3-16所示为SINGLE突发等待传输,在IDLE传输过程中地址发生了变化。

在图3-16:
T0-T1 主机启动一个SINGLE突发到地址A。
T1-T2 主机插入一个IDLE传输到地址Y。从机插入一个HREADYOUT = LOW的等待状态。
T2-T3 主机插入一个IDLE传输到地址Z。
T3-T4 主机将传输类型更改为NONSEQ,并向地址B发起INCR4传输,直到HREADY达到HIGH,不再允许地址更改。
T5-T6 到地址A的SINGLE突发以HREADY HIGH结束,主机开始到地址B的第一拍。
T6-T7 INCR4向地址B传输的第一个节拍完成,主机开始向地址B+4传输的下一个节拍。


在错误响应之后
在一个等待的传输过程中,如果从机响应一个ERROR响应,那么当HREADY为LOW时,主机被允许改变地址。关于ERROR响应的更多信息,请参见5-57页的ERROR响应。
图3-17显示了一个等待的传输,地址改变后,从站的错误响应。
在图3-17:
T0-T1 主机启动突发的下一拍到地址0x24。
T1-T3 主机启动突发的下一拍到地址0x28。从机以OKAY响应。
T3-T4 从机以ERROR响应。
T4-T5 当HREADY为LOW时,主机改变传输类型为IDLE,并且允许改变地址。从机完成ERROR响应。
T5-T6 从机在地址0xC0以OKAY响应。

3.7 Protection control

本规范的版本A定义了一个4bit的HPORT信号,这个信号在这一部分描述。
本规范的版本B增加了扩展内存类型,在3-45页的内存类型中有更详细的描述。
Note
HPROT[3]的名称在本规范的Issue A和Issue B之间发生了变化,但定义保持不变。在Issue A中HPROT[3]被指定为可缓存的,在Issue B中被指定为可修改的。
保护控制信号,HPROT[3:0],提供关于总线访问的附加信息,主要用于实现某种级别保护的任何模块。
信号指示此传输是否是:
– 一种操作码提取或数据存取。
– 特权模式访问或用户模式访问
对于具有内存管理单元的主机,这些信号还表明当前访问是可缓存的还是可缓冲的。HPROT信号编码如表3-4所示。
表3-4保护信号编码
Note
许多主机无法生成准确的保护信息。如果主机无法生成准确的保护信息,本规范建议:
– 主节点将HPROT设置为0b0011,以对应非缓存、非缓冲、特权的数据访问。
– 除非绝对必要,从机不会使用HPROT。
HPROT控制信号与地址总线具有完全相同的时序。然而,它们必须在整个突发传输过程中保持恒定。

3.8 Memory types

AHB5定义了Extended_Memory_Types属性。此属性定义接口是否支持本节中描述的扩展内存类型。如果没有定义此属性,则接口不支持扩展内存类型
该规范的这一版本增加了额外的HPROT信号,并为每种内存类型提供了更详细的需求列表。
每个HPROT位的含义如表3-5所示,第3-46页的表3-6给出了HPROT[6:2]与内存类型的对应关系。
Table 3-5 Meaning of the HPROT bits

3.8.1 Data or Instruction

所有传输包括数据或指令保护位HPROT[0]:
-当生效时,此位表示这个传输是数据访问。
-当无效时,该位表示传输是指令存取。
协议将此指示定义为提示。它并不是在所有情况下都是准确的,例如,当一个事务包含指令和数据项的混合时。
本规范建议主机将HPROT[0]设置为HIGH,以指示数据访问,除非该访问是明确知道的指令访问。

3.8.2 Unprivileged or Privileged

所有传输包括特权或非特权保护位,HPROT[1]:
– 当生效时,该位表示传输是特权访问。
– 当无效时,该位表示传输为非特权访问。
Note
有些处理器支持多种级别的特权,请参阅所选处理器的文档来确定到AHB特权级别的映射。所提供的唯一区别是特权访问和非特权访问。

3.8.3 Memory type

本节提供了关于HPROT保护控制信号的附加信息,以及这些信号如何与不同的内存类型相关联。HPROT[6:2]信号与内存类型的对应关系如表3-6所示。不允许表3-6中未显示的组合位。
设备内存类型E后缀表示允许提前写响应。
设备内存类型nE后缀表示不允许提前写响应,写响应必须来自最终目的地。
下面几节详细介绍每种内存类型的需求。

3.8.4 Device memory requirements

对于所有的设备内存,即“Device- nE”和“Device-E”,需要的行为为:
– 读数据必须从最终目的地获得。
– 传输不能分隔为多次传输,或与其它传输合并。
– 读取不能预取或推测的执行。
– 写不能被合并。
– 从同一主服务器到同一从服务器的所有读和写传输必须保持顺序。
– 传输的大小,如HSIZE所示,不能更改。
– 传输的突发可以被分解成若干个较小的突发。但是,原始突发中NONSEQ和SEQ传输的总数必须与由此产生的较小突发中NONSEQ和SEQ传输的总数相同。
– HPROT允许的惟一更改是将传输从Bufferabe转换为Non-bufferable。
此外, 对Device-nE:
– 写响应必须从最终目的地获得。
此外, 对Device-E:
– 写响应可以从中间点获得。
– 写传输必须在给出写响应时对所有其他主机都是可观察的。
– 写传输必须及时到达最终目的地。

3.8.5 Normal memory requirements

对于所有普通内存,即Normal Non-cacheable内存、Write-through和Write-back,所需的行为是:
– 读取可能是推测的。
– 读取可以获取比需要的更多的数据。
– 写可以被合并。
– 如HBURST和HSIZE所示,传输特性是可以改变的。
– 从同一个主服务器到重叠地址的读写传输必须保持有序。
– 对于可共享事务,响应必须只在传输对所有其他主机可见时才给出。
此外, 对于Normal Non-cacheable内存:
1写传输必须在最终目的地及时可见。
Note
没有机制来确定写传输何时到达最终目的地。
2 读数据必须获得从:
– 最终目的地。
– 正在进行到最终目的地的写传输。
3 如果读数据从写传输获取:
– 它必须从写操作的最新版本中获取。
– 数据不能缓存为以后的读取服务。
4 读取操作不能缓存获得的数据以供以后使用。
Note
对于一个Normal Non-cacheable内存,读数据可以从一个仍在向最终目的地前进的写传输中获得,这与同时传播到最终目的地的读和写传输是不可区分的。 以这种方式返回的读数据并不表示写传输在最终目的地是可见的。
此外, 对于Write-through:
– 写响应可以从中间缓存或缓冲区获得。
– 读数据可以缓存在中间的缓存或缓冲区中。
– 读写传输需要缓存查找。
– 写事务必须及时地在最终目的地可见。
Note
没有机制来确定写事务何时在最终目的地是可见的。
此外,对于Write-back:
– 写响应可以从中间缓存或缓冲区获得。
– 读数据可以缓存在中间的缓存或缓冲区中。
– 读写传输需要缓存查找。
– 写事务不需要在最终目的地可见。

3.8.6 Allocate attribute

Write-through和Write-back传输包括分配属性, HPROT[5]:
– 当生效时,出于性能原因,此规范建议在缓存中分配此传输。
– 当无效时,出于性能原因,该规范建议在缓存中不分配此传输。

3.8.7 Legacy Considerations

表3-7显示了本规范建议为仅包含HPROT[3:0]信号的组件提供HPROT[6:0]信号的映射。

当在只包含HPROT[3:0]的系统中使用支持HPROT[6:0]的组件时,高阶HPROT位可以被移除。
Note
这种方法导致了Non-cacheable 内存到 Non-cacheable内存的映射。但是,可以使用另一种方案,特别是在提供了其他信息以确定更合适的映射时。.

第四章

4.1 Interconnect

互连组件提供系统中主从之间的连接。
一个单一的主系统只需要使用解码器和多路复用器,如下面的章节所述。
一个多主系统需要使用一个互连提供从不同的主机到适当的从机的仲裁和路由信号。这种路由对于地址、控制和写数据信号都是必需的。 本规范没有提供用于多主系统的不同方法的更多细节,例如单层或多层互连。
有关实现多层AHB- lite互连的更多信息,请参阅多层AHB技术概述(arm dvi 0045)。

4.2 Address decoding

地址解码器为总线上的每个从机提供一个选择信号HSELx。选择信号是对高阶地址信号进行组合解码。鼓励采用简单的地址译码方案,以避免复杂的译码逻辑,并确保高速运行。
当HREADY为HIGH时,从机必须只采样HSELx、地址和控制信号,表明当前传输将要完成。在某些情况下,当HREADY为LOW时,HSELx是可能是有效的,但是所选的从机在当前传输完成时已经改变了。
可以分配给单个slave的最小地址空间为1KB,地址区域的起始和结束必须在1KB的边界上。所有主机都被设计成不会在1KB地址边界上执行增量传输。这确保了突发不会跨越地址解码边界。
解码器产生的HSELx从选择信号如图4-1所示。

4.2.1 Default slave

如果一个系统设计不包含一个完全填充的内存映射,那么当任何一个不存在的地址位置被访问时,必须实现一个额外的默认从机来提供响应。
如果一个NONSEQUENTIAL或SEQUENTIAL的传输试图访问一个不存在的地址位置,那么默认从站提供一个错误响应。
IDLE或BUSY传输访问不存在的位置会导致一个零等待状态的OKAY响应。

4.2.2 Multiple slave select.

一个从机接口允许支持多个从机选择、HSELx信号。每个HSELx信号对应于高阶地址位的不同解码。每个HSELx信号对高阶地址位的不同解码进行响应。
这允许一个从机接口提供多个逻辑接口,每个逻辑接口在系统地址映射中具有不同的位置。逻辑接口可分配的最小地址空间为1KB。这种方法不需要从机支持地址解码来区分逻辑接口。
多个HSELx信号的典型用例是一个外设,它的主数据路径和控制寄存器位于地址映射的不同位置。这两个位置都可以通过一个接口访问,而不需要从机执行地址解码。

4.3 Read data and response multiplexor

AHB协议与读数据多路复用互连方案一起使用。主机将地址和控制信号发送给所有从机,解码器选择合适的从机。任何来自所选从机的响应数据,经过读数据多路复用器传到主机。
图4-2显示了实现有三个从机的设计所需的多路互连结构。

Note
如果独占传输被支持,多路复用器还必须将适当的HEXOKAY信号路由到主机。

第五章

5.1 Slave transfer responses

在主机开始传输后,控制传输的进展。在传输开始后,主机不能取消传输。
对于支持AHB5 Exclusive_Transfers属性的组件,请参阅8-72页的Exclusive访问信号,了解额外的HEXOKAY传输响应信号的详细信息。
当被访问时,从机必须提供一个响应来指示传输的状态。传输状态由HRESP信号提供。
HRESP状态如表5-1所示。
由表5-1可知,完整的传输响应是HRESP和HREADYOUT信号的组合。
表5-1 HRESP信号响应
|HRESP| Response| Description|
| 0 | OKAY |传输已经成功完成,或者从站需要额外的周期来完成请求。HREADYOUT信号指示传输是挂起还是完成。|
|1| ERROR|传输过程中发生错误。必须向主机发出错误条件的信号,以便它意识到传输已不成功。对于在第二个周期中HREADYOUT生效,需要两个周期的响应。|
基于HRESP和HREADYOUT信号状态的完整传输响应如表5-2所示。

这意味着从机可以通过以下三种方式完成传输:
– 立即完成传输。
– 发出错误信号,表示传输失败。
– 插入一个或多个等待状态以使时间能够完成传输。
这三个从机传输响应描述如下:
– 传输完成。
– 待处理传输。
– 错误响应 on page 5-57.

5.1.1 Transfer done

当HREADY为高且HRESP OK时,表示传输成功完成。

5.1.2 Transfer pending

典型的从机使用HREADYOUT将适当数量的等待状态插入到传输的数据阶段。然后使用HREADYOUT HIGH和一个表示传输成功完成的OKAY响应完成出传输。
当从机在完成响应之前插入许多等待状态时,它必须将HRESP驱动到OKAY。
Note
通常,在完成传输之前,每个从机必须有一个预定的最大等待状态数。这允许计算访问总线的最大延迟。
建议从机不要插入超过16个等待状态,以防止任何单个访问在大量的时钟周期内锁定总线。然而,该建议不适用于某些设备,例如串行引导ROM。这种类型的设备通常只在系统启动时访问,如果使用大于16个等待状态,对系统性能的影响可以忽略不计。

5.1.3 ERROR response

从机使用ERROR响应来指示相关传输的某种形式的错误条件。通常,这表示保护错误,例如试图写入只读内存位置。
虽然OKAY响应可以在一个周期内给出,但ERROR响应需要两个周期。为了启动ERROR响应,从机驱动HRESP HIGH指示ERROR,同时驱动HREADYOUT LOW以扩展传输一个额外的周期。在下一个周期中,HREADYOUT被驱动为HIGH以结束传输,而HRESP仍然被驱动为HIGH以表示ERROR。
由于总线的流水线特性,需要两个周期的响应。当从机开始发出错误响应时,接下来的传输地址已经被广播到总线上了。两个周期的响应为主机提供了足够的时间来取消下一次访问,并在下一次传输开始之前将HTRANS[1:0]驱动到IDLE。
如果从机需要两个以上的周期来提供ERROR响应,那么可以在传输开始时插入额外的等待状态。在此期间,HREADY为LOW,响应必须设置为OKAY。
图5-1显示了具有错误响应的传输。
在图5 - 1:
T1-T2 从机插入一个等待状态并提供一个OKAY响应。
T2-T3 从机插入一个错误响应。因为HREADY是LOW,这是错误响应的第一个周期。
T3-T4 从机发出一个ERROR响应。因为HREADY当前是高,这是错误响应的最后一个周期。
主机将传输类型更改为IDLE。这取消了T2时刻从机注册到地址B的预定事务。
T4-T5 从机以OK响应。
如果从机提供了一个ERROR响应,那么主机可以取消突发中剩余的传输。然而,这不是一个严格的要求,对于主机来说,在突发中继续剩余的传输是可以接受的。

第六章

6.1 Data buses

实现AHB系统需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位,但可以按照第6-65页的数据总线宽度进行更改。
数据总线描述如下:
– HWDATA.
– HRDATA.
– Endianness on page 6-61.

6.1.1 HWDATA

在写传输过程中,主机驱动写数据总线。如果传输被扩展,那么主机必须保持数据有效,直到传输完成,传输完成用HREADY HIGH表示。关于保持信号在多个周期内有效的详细信息,请参见7-68页的时钟。
对于小于总线宽度的传输,例如32位总线上的16位传输,主机只需要驱动适当的字节通道。从机从正确的字节通道中选择写数据。关于小端和大端系统中活跃的字节通道的详细信息,请参见第6-61页的Endianness。

6.1.2 HRDATA

在读传输期间,合适的从机驱动读数据总线。如果从机通过保持HREADY LOW来扩展读传输,那么从机只需要在传输的最后一个周期中提供有效的数据,用HREADY HIGH表示。
对于小于总线宽度的传输,从机只需要在活跃字节通道上提供有效的数据。主机从正确的字节通道中选择数据。
当传输以OKAY响应完成时,从机只需要提供有效的数据。错误响应不需要有效的读数据。

6.2 Endianness

AHB同时支持大端和小端系统。支持两种大端数据存储方法。
AHB5引入了Endian属性来定义支持哪种形式的大端数据访问。
BE8–字节不变量大端格式. 这个词语,字节不变量的大端字节,源于字节访问(8位)使用相同的数据总线位作为小端访问相同的地址。
BE32–字不符变量大端格式。术语“字不变大端格式”源于一个事实,即字访问(32位)使用相同的数据总线位来访问最重要(MS)和最不重要(LS)字节,就像访问相同地址的小端序访问一样。
关于字节不变的大端字节数的更多信息可以在第6-63页的字节不变一节中找到。
下面的方程组定义了哪些数据位用于小端、字节不变的大端和字不变的大端访问。
方程使用以下变量:
Address–传输的地址.
Data_Bus_Bytes --8位数据总线字节通道的数量。
INT(x) --向下舍入x的整数值。

6.2.1 Little endian

当一个小端组件访问一个字节时,下面的公式显示使用哪些数据总线位:
Byte_Lane=Address–(INT(Address / Data_bus_Bytes))×Data_Bus_Bytes
数据在DATA[(8 × Byte_Lane) + 7 : (8 × Byte_Lane)]上传输。
当发生较大的小端传输时,数据的传输是这样的:
– LS字节被传输到传输地址。
– 增长的高位字节被传输到顺序递增的地址。

6.2.2 Byte-invariant big-endian

当一个字节不变的大端格式组件访问一个字节时,下面的公式显示使用哪些数据总线位:
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 Word-invariant big-endian

当一个字不变的大端格式元件访问一个字节时,下面的公式显示使用哪些数据总线位:
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位总线,Word_Offset总是0,因此方程简化为:
DATA[(8 × (3 – Byte_Offset)) + 7 : 8 × (3 – Byte_Offset)]
Note
这显示了字不变的大端和小端格式组件之间的关键区别。与小端和字节不变的大端组件相比,字不变的大端组件使用不同的数据总线位来传输字节数。
对于使用字不变大端格式的半字和字传输,数据的传输是这样的:
– 最高字节位被传送到传送地址。
– 递减的高位字节被转移到顺序递增的地址。
对于使用字不变大端格式的大于一个字的传输,数据被分割成字大小的块:
– 最低位字节被传输到传输地址。
– 递增的字位被传输到递增的地址。
表6-1、6-63页的表6-2和6-63页的表6-3中的32位数据总线可以扩展为更宽的数据总线实现。
传输大小小于数据总线宽度的突发传输对于突发的每个节拍有不同的有效字节通道。
第6-63页的表6-1和表6-2显示了在小端或字节不变的大端系统中有效的32位总线上的字节通道。在这两种情况下,有效的字节通道是相同的,但最高有效字节和最低有效字节的位置不同。
表6-3显示了32位总线上有效的字不变大端系统的字节通道。

6.2.4 Byte invariance

字节不变大端数据结构的使用简化了对单一内存空间中混合端数据结构的访问。
使用字节不变的大端和小端格式意味着,对于数据结构中的任何多字节元素:
– 该元素使用相同的连续内存字节,而不考虑数据的大小端。
– 大小端决定了这些字节在内存中的顺序,这意味着它决定了内存中的第一个字节是元素的MS字节还是LS字节。
– 到给定地址的任何字节传输都将同一数据总线上的8位数据传递到相同的地址位置,而不考虑字节所在的数据元素的字节顺序。
图6-1展示了一个需要字节不变访问的数据结构示例。在这个例子中,报头字段使用小端顺序,而数据负载使用大端顺序。

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

6.3 Data bus width

在不增加操作频率的情况下提高总线带宽的一种方法是使片上总线的数据路径更宽。 金属层的增加和嵌入式DRAM等大型片上内存块的使用是鼓励更宽片上总线使用的驱动因素。
指定总线的固定宽度意味着,在许多情况下,总线的宽度对应用程序来说不是最佳的。因此,采用了一种方法,使总线宽度具有灵活性,但仍然确保模块在设计之间具有高度可移植性。
该协议允许数据总线宽度为8、16、32、64、128、256、512或1024位。 但是,建议使用最小32位的总线宽度。 256位的最大总线宽度对于几乎所有的应用都是足够的。
对于读和写传输,接收模块必须从总线上正确的字节通道中选择数据。不需要跨所有字节通道复制数据。
以下部分将介绍:
– 在宽总线上实现窄从从机.
– 在6–66页上在窄总线上实现一个宽从机
– 在6-66页实现宽总线上的主机

6.3.1 Implementing a narrow slave on a wide bus

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

对于输出,当将窄总线转换为宽总线时,请执行以下操作之一:
– 在宽总线的两个半宽总线复制数据,如图6-2所示。
– 使用附加逻辑确保只更改适当的一半总线部分。这导致了电力消耗的减少。
从机只能接受与其自然接口一样宽的传输。如果主机尝试的传输宽度超过了从机的支持范围,那么从机可以使用ERROR传输响应。

6.3.2 Implementing a wide slave on a narrow bus

通过使用外部逻辑,预先设计或导入的从机可以适应在较窄的数据总线上工作。图6-3是在窄总线上实现的宽从机。

6.3.3 Implementing a master on a wide bus

主机可以被修改为工作在比原来更宽的总线上,就像从机被修改为工作在更宽的总线上一样。通过:
– 输入总线复用。
– 复制输出总线。
Note
主机不能在比最初计划的更窄的总线上工作,除非在主机中包含某种机制来限制主机尝试的传输宽度。主机绝不能尝试在HSIZE指示的宽度比它连接的数据总线宽的地方进行传输。

第七章

7.1 Clock and reset requirements

7.1.1 Clock

每个组件使用一个单一的时钟信号,HCLK。所有的输入信号都在HCLK上升沿上采样。所有输出信号的变化必须发生在HCLK上升沿之后。
在扩展传输中,当在不同的上升时钟边采样时,被描述为稳定的信号需要保持在相同的值。然而,这些信号可能在时钟边缘后出现脉冲,返回到先前驱动的相同值。
Note
当使用典型的综合设计流程时,可以观察到这种行为,其中输出多路复用器的控制信号可以在扩展传输期间改变,但它们会导致使用相同的输出值。
它定义了一个接口在上升时钟边缘之间是否有脉冲。
AHB5定义了Stable_Between_Clock属性。定义此属性是为了决定接口是否需要保证稳定的信号在上升时钟边缘之间保持稳定。
如果该属性为True,则保证需要稳定的信号在上升时钟边缘之间保持稳定和没有脉冲。
如果该属性为False或未定义,信号可能会在上升时钟边缘之间出现脉冲。

7.1.2 Reset

复位信号HRESETn是协议中唯一LOW有效的信号,是所有总线元素的主要复位。复位可以异步生效,但在HCLK上升沿之后同步失效。
一个组件必须定义一个最小的周期数,在这个周期内必须使复位信号生效,以确保该组件完全复位,并且输出处于所需的复位值。
在复位期间,所有主机必须确保地址和控制信号在有效的水平,并且HTRANS[1:0]指示IDLE。
在复位过程中,所有从机必须确保HREADYOUT为HIGH。

第八章

8.1 Introduction

AHB5定义了Exclusive_Transfers属性。此属性定义接口是否支持独占传输的概念。如果没有定义此属性,则接口不支持独占传输。
独占传输提供了一种支持旗语类型操作的机制。
一个独占访问序列是一个来自单个主机的独占传输序列,它使用以下步骤操作:

从某个地址执行独占读传输。
根据从Exclusive Read获得的数据值,计算一个新的数据值存储到该地址。
在独占读和独占写之间可以有其他非独占传输。
对同一个地址执行独占写传输,新的数据值为:
– 如果在独占读传输之后没有其他主机写入该位置,独占写传输成功并更新内存。
– 如果在独占读传输之后,另一个主机已经写入该位置,那么独占写传输将会失败,并且内存位置不会被更新。
对独占写传输的响应表明传输是成功的还是失败的。
这个序列确保只有当存储到内存的位置仍然保存着用于计算要写入到该位置的新值时,内存位置才会被更新。
如果独占写传输失败,预计主机将重复整个独占访问序列。
在一个独占读传输之后,同一个主机对同一个或重叠的位置进行更新是否会导致相关的独占写传输成功或失败,这是由IMPLEMENTATION定义的。

8.2 Exclusive Access Monitor

需要一个独占访问监视器来支持独占访问序列,并且这个监视器必须决定独占写传输是成功还是失败。
独占访问监视器必须能够同时监视系统中每个具有独占访问能力的主机的至少一个地址位置。
独占访问监视器在系统中的位置没有定义。但是,必须对它进行定位,使它能够观察到所有用于独占访问序列的地址位置的访问。例如,如果一个系统包含多个内存控制器,要么所有访问都通过包含独占访问监视器的中心点路由,要么在每个内存控制器上都需要一个单独的独占访问监视器。
系统不需要支持对所有地址位置的独占访问序列。为访问不支持独占访问序列的位置提供了故障安全机制。通常,系统应该支持对主存的独占访问序列,而不是对任何外围设备的独占访问序列。

8.3 Exclusive access signaling

与独占传输相关联的其他信号有:
HEXCL – 独占传输. 指示传输是独占访问序列的一部分。 该信号是一个地址阶段信号,具有与HADDR相同的有效性约束。
HMASTER[m:0] – 主机标识符. 有多个具有独占能力的线程的主机必须生成这个信号来区分线程。由主机生成的HMASTER值将与互连生成的值相结合,以确保呈现给独占访问监视器的HMASTER值是唯一的。该信号是一个地址阶段信号,具有与HADDR相同的有效性约束。
HEXOKAY – 独占成功。添加一个附加的响应信号来指示独占传输的成功或失败。
HMASTER[m:0]信号的宽度是IMPLEMENTATION DEFINED实现定义的。然而,本规范推荐以下宽度:
– 对于主机组件,实现支持的具有独占能力的线程数量所需的位数。
– 对于主机连接的互连端口,实现4位。可选地,互连可以支持更大位宽的配置。
– 对于从组件或监控组件,实现8位。可选地,从组件或监视器组件可以支持更大的位宽配置。
允许将HMASTER信号用于独占传输以外的目的。允许系统中的互连和从机组件使用该信号来区分系统中的不同主机,并适当地调整它们的行为。因此,必须为所有传输提供有效的HMASTER指示,而不仅仅是独占传输。

8.3.1 Response signaling

HEXOKAY信号用来指示Exclusive Transfer的成功或失败:
– 当有效时,HEXOKAY表示独占传输已经成功,对于一个独占写传输,内存位置已经更新。
– 当无效时,HEXOKAY表示独占传输失败。这可能是因为:

试图向不支持独占传输的地址位置进行独占传输。
独占写传输失败,因为自匹配的独占读传输以来,内存位置没有保持不变。在这种情况下,内存位置不会更新。
如果一个地址位置不支持独占传输,主机可以通过确保它总是先执行独占读传输来确保它不会尝试执行独占写传输到该地址位置。主机可以通过确保它一直对那个位置首先执行一个独占读传输确保它不会试图对一个不支持独占传输地址位置执行独占写传输。
以下约束应用于HEXOKAY:
– HEXOKAY必须只和HREADY在同一个周期中有效。
– HEXOKAY不能在与HRESP相同的周期中有效。

8.4 Exclusive Transfer restrictions

以下限制应用于独占传输:
– 必须有一个单一的数据传输。
– 必须注明为突发类型SINGLE或突发类型INCR。
– 必须不包括一个BUSY传输
– 地址必须与HSIZE表示的数据大小对齐。
– HPROT信号的值必须保证独占访问监视器有传输可见性。
Note
HPROT信号必须保证独占访问监视器有传输可见性。如果独占访问监视器位于系统缓存的下游,则传输必须是不可缓存的。如果独占访问监视器位于系统缓存的上游,则允许传输为可缓存的。
对于一个独占读传输和一个独占写传输,被认为是同一个独占访问序列的一部分,以下信号对于两个传输必须是相同的:
– HADDR, 地址.
– HSIZE, 数据大小.
– HPROT, 保护控制.
– HBURST, 突发类型.
– HMASTER, 主机标识符.
– HNONSEC, 不安全,如果适用的话。
允许主机发出一个独占读传输,但绝不允许在相同的独占访问序列跟随一个独占写传输。
允许主机发出一个独占写传输,在这个传输之前没有在相同的独占访问序列下的独占读传输。在这种情况下,独占写传输必须失败,HEXOKAY响应信号必须无效。主机不能在同一时间点有两个独占传输未完成。在之前的独占传输的数据阶段进行时,不得发出独占传输的地址阶段。这应用于传输是否属于相同的独占访问序列。
允许在具有特定HMASTER值的独占传输的地址阶段发布,而具有不同HMASTER值的更早的专有传输的数据阶段正在进行。当之前具有不同HMASTER值得独占传输的数据阶段在进行时,允许具有特定HMASTER值的独占传输的地址阶段发出。
Note
独占传输的地址阶段定义为HEXCL有效并且HTRANS表明NONSEQ。当HTRANS指示IDLE时,HEXCL有效不是定义为Exclusive Transfer的地址阶段。

第九章

9.1 Single-copy atomicity size

单次拷贝原子性大小定义了传输中保证以原子方式更新的数据字节数。
单次拷贝原子性大小是为一组正在通信的组件定义的。例如:
– 处理器、DSP和DRAM控制器在一个64位的单拷贝原子组中。
– 一个更大的组,包括处理器、DSP、DMA、DRAM、SRAM和外设,属于一个32位的单拷贝原子组。
传输的单副本原子性保证永远不会大于其起始地址的对齐。例如,64位单副本原子组中没有对齐到8字节边界的突发没有任何64位单副本原子性保证。
当写传输更新内存位置时,必须保证观察者可以看到:
– 没有更新位置。
– 更新到至少一个单副本原子性大小的数据量。
不允许另一个观察者在某个时间点看到单副本原子性大小内的一些数据字节的更新,然后在稍后的时间点看到相同单副本原子性大小内的其他数据字节的更新。
与传输相关的字节选通不影响单副本原子性大小。
要求大于单副本原子性大小的传输必须以至少为单副本原子性大小的块更新内存。
Note
在确定单副本原子性大小时,不会考虑更新数据值的确切时刻。必须确保的是,没有主机能够观察到部分更新的原子数据形式。
例如,在许多系统中,诸如链表之类的数据结构是由32位的原子元素组成的。 这些元素之一的原子更新要求同时更新整个32位值。对于任何主机来说,在一个时间点上只观察16位的更新,然后在稍后的时间点上观察其他16位的更新,都是不可接受的。
更复杂的系统需要支持更大的原子元素,特别是64位的原子元素,以便主机可以使用基于这些更大的原子元素的数据结构进行通信。

9.2 Multi-copy atomicity

AHB5定义了Multi_Copy_Atomicity属性。定义此属性是为了指定系统提供多副本原子性。
如果Multi_Copy_Atomicity属性设置为True,则系统被定义为具有该属性。
不支持Multi_Copy_Atomicity属性的系统默认值为False。
一个系统被定义为多拷贝原子,如果:
– 所有代理都以相同的顺序观察到对相同位置的写操作。
– 一个写入到代理可观察的位置的操作,而不是发布者被所有代理都可观察。
通过避免使用转发缓冲区,可以确保多副本原子性,转发缓冲区可以使传输对系统中的某些代理可见,但对所有代理都不可见。
Note
在包含某种形式的硬件缓存一致性的系统中,还存在其他要求,以确保多副本原子性。这些额外的要求在本规范中没有进一步详细讨论。

第十章

用户信号(略)

Note
通常,本规范建议不使用User信号。AHB协议没有定义这些信号的功能,如果两个组件以不兼容的方式使用相同的用户信号,可能会导致互操作性问题。

posted on 2022-06-11 16:36  哈哈12345789  阅读(1403)  评论(0)    收藏  举报