AHB是新一代的AMBA总线,其目的用于解决高性能可同步的设计要求。AMBA是一个新级别的总线,高于APB,用于实现高性能、高时钟频率系统的特征要求,这些要求包括猝发传输、分割交易、单周期总线主设备交接、单时钟沿操作、无三态实现,以及更宽的数据总线配置(64/128bit)。
本节介绍AMBA AHB结构,包括典型结构和总线互连。
1.AMBA AHB典型结构
包含AHB和APB总线结构的AMBA系统如图3.8所示。基于AMBA规范的微控制器,包括高性能系统背板总线,该总线支持外部存储器的带宽。这个总线存在CPU和DMA设备,以及AHB转APB的桥接器。在APB总线上连接了较低带宽的外设。表3.2给出了AHB和APB总线的特性比较。
图3.8 包含AHB和APB总线结构的AMBA系统
表3.2 AHB和APB总线的特性比较
2.AMBA AHB总线互连
基于一个中心多路复用器互连机制,设计AMBA AHB总线规范。使用这个机制,总线上所有主设备都可以驱动地址和控制信号,用于表示它们所希望执行的传输。仲裁器用于决定将哪个主设备的地址和控制信号连接到所有的从设备。译码器要求控制读数据和响应信号的切换,用于从从设备中选择合适的包含用于传输的信号。一个AMBA AHB总线互连结构中有3个主设备和4个从设备,如图3.9所示。
图3.9 AMBA AHB总线互连结构
本节介绍AMBA AHB操作,内容包括AMBA AHB操作概述、AMBA AHB基本传输。
1.AMBA AHB操作概述
在一个AMBA AHB传输开始前,必须授权总线主设备访问总线。通过主设备对连接到仲裁器请求信号的确认,启动该过程,然后,指示授权主设备将要使用总线。
通过驱动地址和控制信号,授权的总线主设备启动AHB传输。该信号提供了地址、方向和传输宽度的信息,以及指示传输是否是猝发的一部分。AHB允许两种不同的猝发传输,包括:
(1)增量猝发,在地址边界不回卷;
(2)回卷猝发,在一个特殊的地址边界回卷。
写数据总线用于将数据从主设备移动到从设备,而读数据总线用于将数据从从设备移动到主设备。每个传输包括一个地址和控制周期,以及一个或多个数据周期。
不能扩展地址,因此在此期间内,所有的从设备必须采样地址。然而,通过使用HREADY信号,允许对数据进行扩展。当HREADY信号为低时,允许在传输中插入等待状态。因此,允许额外的时间用于从设备提供或者采样数据。
在一个传输期间内,从设备使用响应信号HRESP[1:0]显示状态。
(1)OKAY。用于指示正在正常处理传输过程。当HREADY信号变高时,表示成功结束传输过程。
(2)ERROR。用于指示传输过程发生错误,传输过程不成功。
(3)RETRY和SPLIT。这两个传输响应信号指示不能立即完成传输过程,但总线主设备应该继续尝试传输。
在正常操作下,在仲裁器授权其他主设备访问总线前,允许一个主设备以一个特定的猝发,完成所有的传输。然而,为了避免太长的仲裁延迟,仲裁器可能分解一个猝发。在这种情况下,主设备必须为总线重新仲裁,以便完成猝发中剩余的操作。
2.AMBA AHB基本传输
AMBA AHB基本传输由两个不同的部分组成。
(1)地址阶段。持续一个单周期。
(2)数据阶段。可能要求几个周期,通过使用HREADY信号实现。
没有等待状态的传输过程如图3.10所示。
图3.10 没有等待状态的传输过程
(1)在HCLK的上升沿,主设备驱动总线上地址和控制信号。
(2)在下一个时钟上升沿,从设备采样地址和控制信息。
(3)当从设备采样地址和控制后,驱动正确的响应。在第三个时钟上升沿,总线主设备采样这个响应。
这个简单的例子说明了在不同的时钟周期,产生地址和数据周期的方法。实际上,任何传输的地址阶段可以发生在前一个传输的数据阶段。这个重叠的地址和数据是总线流水线的基本属性,它将允许更高性能的操作,同时为一个从设备提供了充足的时间,用于对一个传输进行响应。
在任何传输中,从设备可能插入等待状态,包含等待状态的传输过程如图3.11所示。
图3.11 包含等待状态的传输过程
(1)对于写传输,在扩展周期内,总线主设备应该保持总线稳定。
(2)对于读传输,从设备不必提供有效数据,直到将要完成传输。
当以这种方式扩展传输时,对随后传输的地址周期有副作用。三个无关地址A、B、C的传输过程如图3.12所示。
图3.12 三个无关地址的传输过程
(1)传输地址A和C,都是零等待状态。
(2)传输地址B是一个等待周期。
(3)传输的数据周期扩展到地址B,传输的扩展地址周期影响地址C。
每个传输可以分为四个不同类型中的一个。由HTRANS[1:0]信号表示,传输类型编码如表3.3所示。
表3.3 传输类型编码
使用不同的传输类型如图3.13所示。
图3.13 使用不同的传输类型
(1)第一个传输是一次猝发的开始,所以传输类型为非连续传输。
(2)主设备不能立刻执行猝发的第二次传输,所以主设备使用了忙传输来延迟下一次传输的开始。在这个例子中,主设备在它准备开始下一次猝发传输之前,仅要求一个忙周期,下一次传输完成不带有等待状态。
(3)主设备立刻执行猝发的第三次传输,但此时从设备不能完成传输,并用HREADY来插入一个等待状态。
(4)猝发的最后一个传输以无等待状态完成。
本节介绍AMBA AHB猝发操作,包括AMBA猝发操作概述和猝发早期停止。
1.猝发操作概述
AMBA AHB规范定义了4、8和16拍猝发,也有未定长度的猝发和信号传输。该协议支持递增猝发和回卷猝发。
(1)递增猝发。访问连续地址,并且猝发中每次传输地址仅是前一次地址的一个递增。
(2)回卷猝发。如果传输的起始地址并未和猝发( x 拍)中字节总数对齐,那么猝发传输地址将在达到边界处回卷。例如,一个4拍回卷猝发的字(4B)访问将在16B边界回卷。因此,如果传输的起始地址是0x34,那么它将包含四个到地址0x34、0x38、0x3C和0x30。
通过HBURST[2:0]提供8种猝发类型编码,如表3.4所示。
表3.4 8种猝发类型编码
猝发不能超过1KB的地址边界。因此,主设备不要尝试发起一个将要超过这个边界的定长递增猝发,可以接受只有一个猝发长度和未指定长度的递增猝发来执行单个传输。一个递增猝发可以是任意长度,但是其地址的上限不能超过1KB边界。
注: 猝发大小表示猝发的节拍个数,并不是一次猝发传输的实际字节个数。一次猝发传输的数据总数可以用节拍数乘以每拍数据的字节数来计算,每拍字节数由HSIZE[2:0]指示。
所有猝发传输必须将地址边界和传输大小对齐。例如,字传输必须对齐到字地址边界(也就是A[1:0]=00),半字传输必须对齐到半字地址边界(也就是A[0]=0)。
2.猝发早期停止
对从设备来说,在不允许完成一个猝发的特定情况下,如果提前停止猝发,那么利用猝发信息能够采取正确的行为就显得非常重要。通过监控HTRANS信号,从设备能够决定一个猝发提前终止的时间,并且确保在猝发开始之后每次传输都有连续或者忙标记。如果产生一个非连续或者空闲传输,那么表明已经开始了一个新的猝发。因此,这时一定已经终止了前一次猝发传输。
如果总线主设备因为失去对总线的占有而不能完成一次猝发,那么它必须在下一次获取访问总线时正确地重建猝发。例如,如果一个主设备仅完成了一个4拍猝发中的一拍,那么,它必须用一个未定长度猝发来执行剩下的3拍猝发。
4拍回卷猝发传输如图3.14所示,4拍递增猝发传输如图3.15所示,8拍回卷猝发传输如图3.16所示。作为一次4拍字猝发传输,地址将会在16B边界回卷。因此,传输到地址0x3C之后接下来传输的地址是0x30。
图3.14 4拍回卷猝发传输
从图3.14和图3.15中可知,回卷猝发和递增猝发的唯一不同是地址连续通过16B边界。从图3.16中可知,地址将在32B边界处回卷。因此,地址0x3C之后的地址是0x20。
图3.15 4拍递增猝发传输
8拍递增猝发传输如图3.17所示,该猝发使用半字传输,所以地址每次增加2B,并且猝发在递增。因此,地址连续增加,通过了16B边界。
图3.16 8拍回卷猝发传输
图3.17 8拍递增猝发传输
未定义长度的猝发传输如图3.18所示,图中表示两个猝发。
(1)在地址0x20处,开始传输两个半字(半字传输地址增加2)。
(2)在地址0x5C处,开始三个字传输(字传输地址增加4)。
图3.18 未定义长度的猝发传输
传输类型和猝发类型一样,每次传输都会有一组控制信号,用于提供传输的附加信息。这些控制信号和地址总线有严格一致的时序。然而,在一次猝发传输过程中它们必须保持不变。
(1)传输方向。当HWRITE为高时表示写传输,并且主设备将数据广播到写数据总线HWDATA[31:0]上;当该信号为低时将会执行读传输,并且从设备必须产生数据到读数据总线HRDATA[31:0]上。
(2)传输大小/位宽。
HSIZE[2:0]用于表示传输的大小/位宽,如表3.5所示。将传输大小和HBURST[2:0]信号组合在一起,以决定回卷猝发的地址边界。
表3.5 传输的大小/位宽
(3)保护控制。保护控制信号HPROT[3:0],提供总线访问的附加信息,并且最初是给那些希望执行某种保护级别的模块使用的,表3.6给出了保护信号编码。
这些信号表示传输是否为:
(1)一次预取指或者数据访问;
(2)特权模式访问或者用户模式访问。
对于包含存储器管理单元的总线主设备来说,这些信号也表示当前访问是带高速缓存的还是带缓冲的。
表3.6 保护信号编码
并不是所有总线主设备都能产生正确的保护信息,因此,建议从设备在没有严格必要的情况下不要使用HPROT信号。
对每个总线上的从设备来说,使用一个中央地址译码器提供选择信号HSELx。选择信号是高位地址信号的组合译码,并且建议使用简单的译码方案以避免复杂译码逻辑和确保高速操作。
从设备只能在HREADY信号为高时,采样地址、控制信号和HSELx信号。当HSELx为高时,表示当前传输已经完成。在特定的情况下,有可能在HREADY为低时采样HSELx信号。但是,这样会在当前传输完成后,更改选中的从设备。
能够分配给单个从设备的最小地址空间是1KB。所设计的总线主设备,不能执行超过1KB地址边界的递增传输。因此,应保证一个猝发不会超过地址译码的边界。
在设计系统时,如果有包含一个存储器映射,但其并未完全填满存储空间的情况,则应该设置一个额外的默认从设备,以便在访问任何不存在的地址空间时提供响应。如果一个非连续传输或者连续传输尝试访问一个不存在的地址空间,则这个默认从设备应该提供一个ERROR响应。当空闲或者忙传输访问不存在的空间(默认从设备)时,应该给出一个零等待状态的OKAY响应。典型的设计是,默认从设备的功能将以作为中央地址译码器的一部分来实现。
包含地址译码和从设备选择信号的系统如图3.19所示。
在主设备发起传输后,由从设备决定传输的方式。AMBA AHB规范中没有规定总线主设备在传输已经开始后取消传输的方法。
只要访问从设备,那么它必须提供一个表示传输状态的响应。使用HREADY信号,用于扩展传输并且和响应信号HRESP[1:0]相结合,以提供传输状态。
图3.19 包含地址译码和从设备选择信号的系统
从设备能够用许多种方式来完成传输。
(1)立刻完成传输。
(2)插入一个或者多个等待状态,以有时间来完成传输。
(3)发出一个错误信号,来表示传输失败。
(4)延时传输的完成,但是允许主设备和从设备放弃总线,把总线留给其他传输使用。
1.传输完成
HREADY信号用于扩展AHB传输的数据周期。当HREADY信号为低时,表示将要扩展传输;当该信号为高时,表示传输完成。
注: 在从设备放弃总线之前,每个从设备必须有一个预先确定的、所插入最大等待状态的个数,以便能够计算访问总线的延时。建议但不强制规定,从设备不要插入多于16个等待状态,以阻止任何单个访问将总线锁定较长的时钟周期。
2.传输响应
通常,从设备会用HREADY信号。在传输中插入适当数量的等待状态,当HREADY信号为高,并且给出OKAY响应时,表示成功完成传输过程。
从设备用ERROR响应来表示某种形式的错误条件和相关的传输。通常,它用于保护错误。例如,尝试写一个只读的存储空间。
SPLIT和RETRY响应组合允许从设备延长传输完成的时间。但是,这会释放总线给其他主设备使用。这些响应组合通常仅由有高访问延时的从设备请求。并且,从设备能够利用这些响应编码来保证在长时间内并不阻止其他主设备访问总线。
HRESP[1:0]的编码、传输响应信号及其描述如表3.7所示。
表3.7 传输响应信号及其描述
续表
当决定将要给出的响应类型之前,从设备需要插入一定数量的等待状态。从设备必须驱动响应为OKAY。
3.双周期响应
在单个周期内,仅可以给出OKAY响应。需要至少两个周期响应ERROR、SPLIT和RETRY。为了完成这些响应中的任意一个,在最后一个传输的前一个周期,从设备驱动HRESP[1:0],以表示ERROR、RETRY或者SPLIT。同时,驱动HREADY信号为低电平,给传输扩展一个额外的周期。在最后一个周期内,驱动HREADY信号为高电平以结束传输,同时,保持驱动HRESP[1:0],以表示ERROR、RETRY或者SPLIT响应。
如果从设备需要两个以上的周期,以提供ERROR、SPLIT或者RETRY响应,那么可能会在传输开始时插入额外等待状态。在这段时间内,将HREADY信号驱动为低电平,同时,必须将响应设为OKAY。
因为总线通道的本质特征,所以需要双周期响应。在从设备开始发出ERROR、SPLIT或者RETRY中任何一个响应时,接下来传输的地址已经广播到总线上了。双周期响应允许主设备有足够的时间来取消该地址,并且在开始下一次传输之前驱动HTRANS[1:0]为空闲传输。
由于当前传输完成之前禁止发生下一次传输,所以对于SPLIT和RETRY响应,必须取消随后的传输。然而,对于ERROR响应,由于不重复当前传输,所以可以选择完成接下来的传输。
包含RETRY响应的传输如图3.20所示。
图3.20 包含RETRY响应的传输
(1)主设备从地址A开始传输。
(2)在接收到这次传输响应之前,主设备将地址移动到A+4。
(3)在地址A的从设备不能立刻完成传输,因此,从设备发出一个RETRY响应。该响应指示主设备,在地址A的传输无法完成,并且取消在地址A+4的传输,用空闲传输来替代。
在一个传输中,设备请求一个周期来决定将要给出的响应(在HRESP为OKAY的时间段),错误响应如图3.21所示。之后,从设备用一个双周期的ERROR响应来结束传输。
图3.21 错误响应
4.错误响应
如果从设备提供一个错误响应,那么主设备可以选择取消猝发中剩余的传输。然而,这并不是一个严格的要求,同时,从设备也接收主设备继续猝发中剩余的传输。
5.分割和重试响应
分割(SPLIT)和重试(RETRY)响应给从设备提供了在无法立刻给传输提供数据时释放总线的机制。这两种机制都允许在总线上结束传输,因此,允许更高优先级的主设备能够访问总线。
分割和重试的不同之处在于仲裁器在发生分割和重试后分配总线的方式。
(1)重试。仲裁器将继续使用常规优先级方案。因此,只有拥有更高优先级的主机才能获准访问总线。
(2)分割。仲裁器将调整优先级方案,以便其他任何主设备请求总线时,都能立即获得总线访问(即使是优先级较低的主设备)。为了完成一个分割传输,从设备必须通知仲裁器何时数据可用。
分割传输增加了仲裁器和从设备的复杂性,却有可以完全释放总线给其他主设备使用的优点。但是,在重试响应的情况下,就只允许较高优先级的主设备使用总线了。
总线主设备应该以同样的方式来对待分割和重试响应。主设备应该继续请求总线并尝试传输,直到传输成功完成或者遇到错误响应时终止。
为了不使用三态驱动,同时又允许运行AHB系统,所以要求读和写数据总线分开。最小的数据宽度规定为32位,但是,总线宽度可以增加。
1.HWDATA[31:0]
在写传输期间,由总线主设备驱动写数据总线。如果是扩展传输,则总线主设备必须保持数据有效,直到HREADY为高表示传输完成为止。
所有传输必须对齐到与传输大小相等的地址边界。例如,字传输必须对齐到字地址边界(也就是A[1:0]=00);半字传输必须对齐到半字地址边界(也就是A[0]=0)。
对于小于总线宽度的传输,例如,一个在32位总线上的16位传输,总线主设备仅需要驱动相应的字节通道,从设备负责从正确的字节通道选择写数据。表3.8和表3.9分别表示32位小端数据总线和大端数据总线的有效字节通道。如果有要求,则这些信息可以在更宽的总线应用中扩展。传输大小小于数据总线宽度的猝发传输将在每拍猝发中有不同有效的字节通道。
表3.8 32位小端数据总线的有效字节通道
表3.9 32位大端数据总线的有效字节通道
有效字节通道取决于系统的端结构。但是,AHB并不指定要求的端结构。因此,要求总线上所有主设备和从设备的端结构相同。
2.HRDATA[31:0]
在读传输期间,由合适的从设备驱动读数据总线。如果从设备通过拉低HREADY扩展读传输,那么在传输的最后一个周期提供有效数据,由HREADY为高表示。
对于小于总线宽度的传输,从设备仅需要在有效的字节通道提供有效数据,如表3.8和表3.9所示。总线主设备负责从正确的字节通道中选择数据。
当传输以OKAY响应完成时,从设备仅需提供有效数据。SPLIT、RETRY和ERROR响应不需要提供有效的读数据。
3.端结构
为了正确地运行系统,事实上所有模块都有相同的端结构。并且,任何数据通路或者桥接器也具有相同的端结构。在大多数嵌入式系统中,动态端结构将导致显著的硅片开销。所以,嵌入式系统不支持动态端结构。
对模块设计者来说,建议只有应用场合非常广泛的模块才设计为双端结构。通过一个配置引脚或者内部控制位来选择端结构。对于更多的特定用途的模块,将端结构固定为大端或小端,将产生体积更小、功耗更低、性能更高的接口。
使用仲裁机制来保证任意时刻只有一个主设备能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求,以及决定当前请求总线的主设备中哪一个的优先级最高。仲裁器也接收来自从设备需要完成分割传输的请求。
任何没有能力执行分割传输的从设备,不需要了解仲裁的过程。除非它们遇到需要检测由于总线所有权改变,而导致猝发传输不能完成的情况。
1.信号描述
下面给出对每个仲裁信号的简短描述。
(1)HBUSREQx(总线请求信号)。总线主设备使用这个信号请求访问总线。每个总线主设备各自都有连接到仲裁器的HBUSREQx信号。并且,任何一个系统中最多可以有16个独立的总线主设备。
(2)HLOCKx。在主设备请求总线的同时,锁定信号有效。该信号提示仲裁器,主设备正在执行一系列不可分割的传输。并且,一旦锁定传输的第一个传输已经开始,仲裁器就不能授权任何其他主设备访问总线。在寻址到所涉及的地址之前,HLOCKx必须至少有效一个周期,以防止仲裁器改变授权信号。
(3)HGRANTx(授权信号)。它由仲裁器产生,并且表示相关主设备是当前请求总线的主设备中优先级最高的主设备,优先考虑锁定传输和分割传输。
主设备在HGRANTx为高时,获取地址总线的所有权。并且,在HCLK的上升沿时,HREADY为高电平。
(4)HMASTER[3:0]。仲裁器使用HMASTER[3:0]信号,表示当前授权哪一个主设备使用总线。并且,该信号可被用来控制中央地址和控制多路选择器。有分割传输能力的从设备也可以请求主设备号,以便它们能够提示仲裁器哪个主设备能够完成一个分割传输。
(5)HMASTLOCK。仲裁器通过使HMASTLOCK信号有效来指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。
(6)HSPLIT[15:0]。这是16位有完整分割能力的总线。有分割能力的从设备用来指示哪个总线主设备能够完成一个分割传输。仲裁器需要这些信息,以便于授权主设备访问总线完成传输。
2.请求总线访问
总线主设备使用HBUSREQx信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样主设备请求,然后使用内部优先级算法来决定,哪个主设备将会是获得访问总线的下一个设备。如果主设备请求锁定访问总线,那么主设备也必须使HLOCKx信号有效,以提示仲裁器不给其他主设备授权总线。
当给主设备授权总线并正在执行固定长度的猝发时,那么就没有必要继续请求总线以便完成传输了。仲裁器监视猝发的进程,并且使用HBURST[2:0]信号来决定主设备请求了多少个传输。如果主设备希望在当前正在进行的传输之后,执行另一个猝发,则主设备需要在猝发中重新使请求信号有效。
如果主设备在一次猝发中失去对总线的访问,那么它必须重新使HBUSREQx请求线有效,以重新获取访问总线。
对未定长度的猝发,主设备应该继续使请求有效,直到已经开始最后一次传输为止。在未定长度的猝发结束时,仲裁器不能预知何时改变仲裁。
对主设备而言,有可能在它未申请总线时却被授予总线。这可能在没有主设备请求总线并且仲裁器将访问总线授权的一个默认主设备时发生。因此,如果一个主设备没请求访问总线,那么它驱动传输类型HTRANS来表示空闲传输。
3.授权总线访问
通过使合适的HGRANTx信号有效,仲裁器表示请求总线的当前优先级最高的主设备。当HREADY为高时表示当前传输完成,那么将授权主设备使用总线,并且仲裁器将通过改变HMASTER[3:0]信号来表示总线主设备序号。
所有传输都为零等待状态且HREADY信号为高时的处理过程(没有等待周期的授权访问)如图3.22所示。
图3.22 没有等待周期的授权访问
在总线移交时等待状态的影响的传输过程(有等待周期的授权访问)如图3.23所示。数据总线的所有权延时在地址总线的所有权之后。无论何时完成(由HREADY为高时所表示)一次传输,然后占有地址总线的主设备才能使用数据总线,并且将继续占有数据总线直到完成传输为止。
图3.23 有等待周期的授权访问
当在两个总线主设备之间移交总线时,转移数据总线所有权的过程如图3.24所示。
图3.25给出了一个仲裁器在一次猝发传输结束后移交总线的例子。
图3.24 转移数据总线所有权的过程
图3.25 猝发传输结束后移交总线
当开始采样最后一个地址之前,仲裁器改变HGRANTx信号。然后在采样猝发最后一个地址的同一点采样新的HGRANTx信息。
在系统中使用HGRANTx和HMASTER信号如图3.26所示。
图3.26 在系统中使用HGRANTx和HMASTER信号
注: 因为使用了中央多路选择器,每个主设备可以立刻输出它希望执行的地址,所以不需要等到授权总线。主设备使用HGRANTx信号用来决定它何时拥有总线,因此,需要考虑什么时候让合适的从设备采样地址。
HMASTER总线的延时版本,用于控制写数据多路选择器。
4.早期的猝发停止
通常仲裁器在猝发传输结束之前不会将总线移交给一个新的主设备。但是,如果仲裁器决定必须提前终止猝发以防止过长的总线访问时间,那么它可能会在一个猝发完成之前将总线授权转移给另一个总线主设备。
如果主设备在猝发传输期间失去了对总线的所有权,那么它必须重新断言总线请求,以完成猝发。主设备必须确保更新HBURST和HTRANS信号,以反映主设备不再执行一个完整的4拍、8拍或16拍的猝发。
例如,如果一个主设备仅能完成一个8拍猝发的3个传输,那么当它重新获得总线时必须使用一个合法的猝发编码来完成剩下的5个传输。主设备可以使用任何有效的组合,因此无论是5拍未定长度的猝发,还是4拍固定长度的猝发跟上一个单拍未定长度的猝发都是可以接受的。
5.锁定传输
仲裁器必须监视来自各个主设备的HLOCKx信号,以确定主设备何时希望执行一个锁定连续传输。之后,仲裁器负责确保没有授权总线给其他总线主设备,直至锁定传输完成。
在一个连续锁定传输之后,仲裁器将总是为一个额外传输保持总线主设备被授权总线的状态,以确保锁定序列的最后一个传输成功完成。并且,主设备没有接收到SPLIT或者RETRY响应。因此,建议但不规定,主设备在任何锁定连续传输之后插入一个空闲传输,以提供给仲裁器在准备另一个猝发传输之前改变总线授权的机会。
仲裁器也负责断言HMASTLOCK信号,HMASTLOCK信号和地址以及控制信号有相同的时序。该信号指示每个从设备当前传输是锁定的。因此,在其他主设备被授权总线之前,它必须被处理掉。
6.默认总线主设备
每个系统必须包含一个默认总线主设备。当所有其他主设备不能使用总线时,授权该主设备使用总线。当主设备授权使用总线时,默认主设备只能执行空闲(IDLE)传输。
如果没有请求总线,那么仲裁器可以授权默认主设备访问总线,或者访问总线延时较低的主设备。
授权默认主设备访问总线,也是为确保在总线上没有新的传输开始提供一个有用的机制,并且,这也是预先进入低功耗操作模式的有用步骤。
当其他所有主设备都在等待分割传输完成时,必须给默认主设备授权总线。
分割传输是根据从设备的响应操作来分离(或者分割)主设备操作的,以给从设备提供地址和合适的数据,从而提高了总线的整体利用率。
当发生传输时,如果从设备认为传输将需要大量的时钟周期,那么从设备能够决定发出一个分割响应信号,该信号提示仲裁器不给尝试这次传输的主设备授权访问总线,直到从设备表示它准备好了完成传输为止。因此,仲裁器负责监视响应信号,并且在内部屏蔽已经是分割传输的主设备的任何请求。
在传输的地址阶段,仲裁器在HMASTER[3:0]产生一个标记或者总线主设备号,以表示正在执行传输的主设备。任何一个发出分割响应的从设备必须表示它有能力完成这个传输,并且通过记录HMASTER[3:0]信号上的主设备号来实现这一点。
当从设备能够完成传输时,它就根据主设备号在从从设备到主设备的HSPLITx[15:0]信号上使合适的位有效。然后,仲裁器使用该信息来解除对来自主设备请求信号的屏蔽,并且及时授权主设备访问总线以尝试重新传输。仲裁器在每个时钟周期采样HSPLITx总线。因此,从设备只需要一个周期使合适的位有效,仲裁器就能够识别它。
如果系统中有多个具有分割能力的从设备,则可以将每个从设备的HSPLITx总线通过逻辑“或”组合在一起,以提供给仲裁器单个HSPLIT总线。
在大多数系统中,并不会用到16个总线主设备的最大容量,因此仲裁器仅要求一个位数和总线主设备数量一样的HSPLIT总线。但是,建议将所有具有分割功能的从设备设计为最多支持16个主设备。
1.分割传输顺序
分割传输顺序如下。
(1)主设备以和其他传输一样的方式,发起传输并发出地址和控制信息。
(2)如果从设备能够立刻提供数据,则从设备给出所需要的数据。如果从设备确认获取数据可能会花费多个周期,则它将给出一个分割传输响应。
每次传输期间,仲裁器广播一个号码或者标记,显示正在使用总线的主设备。从设备必须记录该数字,以便稍后使用它来重新启动传输。
(3)仲裁器授权其他主设备使用总线,并且分割响应的动作允许发生主设备移交总线。如果所有其他主设备也接收到分割响应,则将授权默认主设备使用总线。
(4)当从设备准备完成传输时,它会使HSPLITx总线中合适的位有效,这样指示仲裁器应该重新授权访问总线的主设备。
(5)仲裁器每个时钟周期监视HSPLITx信号,并且当使HSPLITx中的任何一位有效时,仲裁器将恢复对应主设备的优先级。
(6)最后仲裁器将授权主设备,这样它可以尝试重新传输。如果一个高优先级的主设备正在使用总线,则传输可能不会立刻发生。
(7)当最终开始传输后,从设备以一个OKAY响应来结束传输。
2.多个分割传输
总线协议只允许每个总线主设备有一个未完成的处理。如果任何主设备模块能够处理多个(多于一个)未完成的处理,那么它需要为每个未完成的处理设置一个额外的请求和授权信号。在协议级上,一个信号模块可以表现为许多不同总线主设备,每个主设备只能有一个未完成的处理。
然而,具有分割能力的从设备会接收比它能同时处理传输还要多的传输请求。如果发生这种情况,那么从设备可以不用记录对应传输的地址和控制信息,而仅需要记录主设备号就发出分割响应。之后,从设备可以通过使HSPLITx总线中适当的位有效,提供之前被给出分割响应的所有主设备表示它能处理另一个传输。但是,从设备没有记录地址和控制信息。
然后,仲裁器能够重新授权这些主设备访问总线,并且它们将尝试重新传输,提供从设备所要求的地址和控制信息。这意味主设备可以在最终完成所要求的传输之前,多次授权使用总线。
3.预防死锁
在使用分割和重试传输响应时,必须注意预防总线死锁。单个传输决不会锁定AHB,这是因为将每个从设备都设计成能在预先确定的周期数内完成传输。但是,如果多个不同主设备尝试访问同一个从设备,从设备发出分割或重试响应以表示从设备不能处理,那么就有可能发生死锁。
(1)分割传输。
从设备可以发出分割传输响应,通过确保从设备能够承受系统中每个主设备(最多16个)的单个请求来预防死锁。从设备并不需要存储每个主设备的地址和控制信息,它只需要简单地记录传输请求已经被处理和分割响应已经发出的事实即可。所有主设备将处在低优先级。然后,从设备可以有次序地处理这些请求,指示仲裁器正在服务于哪个请求,因而确保最终服务所有请求。
当从设备有许多未完成的请求时,它可能会以任何顺序随机地选择处理这些请求。然而,从设备需要注意锁定传输,必须在任何其他传输继续之前完成。
从设备使用分割响应而不使用锁存地址和控制信息的方法是非常合适的。从设备仅需要记录特定主设备做出的传输尝试,并且在稍后的时间段,从设备通过指示自己已经准备好完成传输,就能获取地址和控制信息。授权主设备使用总线并将重新广播传输,以允许从设备锁存地址和控制信息。另外,从设备立刻应答数据或发出另一个分割响应(如果还需要额外的时钟周期)。
理想情况下,从设备不应有多于其能支持的未完成的传输,但是要求支持这种机制以防止总线死锁。
(2)重试传输。
发出分割响应的从设备一次只能被一个主设备访问。虽然总线协议并没有强制要求,但是在系统体系结构中应该确保这一点。在大多数情况下,发出重试响应的从设备必须是一次只能被一个主设备访问的外设。因此,这会在一些更高级协议中得到保证。
硬件保护和多主机访问重试响应的从设备冲突并不是协议中的要求,但是可能会在下文描述的设计中得到执行。仅有的总线级要求是,从设备必须在预先确定的时钟周期内驱动HREADY为高。
如果要求硬件保护,那么它可以被重试响应的从设备自己执行。当一个从设备发出一个重试信号后,它能够采样主设备号。在这之后和传输最终完成之前,重试的从设备可以检查所做的每次传输尝试以确保主设备号相同。如果从设备发现主设备号不一致,那么它可以采取下列的行为,包括一个错误响应、一个信号给仲裁器、一个系统级中断,以及一个完全的系统复位。
4.分割传输的总线移交
协议要求主设备在接收到一个分割或者尝试重新响应后立刻执行一个空闲传输,以允许总线转移给另一个主设备。分割传输后的移交如图3.27所示。
图3.27 分割传输后的移交
(1)传输的地址在时间T1之后出现在总线上。在时钟沿T2和T3后,从设备返回两个周期的SPLIT响应。
(2)在第一个响应周期的末尾,也就是T3,主设备能够检测到将要分割传输。因此,主设备改变接下来的传输控制信号,以表示一个空闲传输。
(3)同样在时间T3处,仲裁器采样响应信号并确定已经分割传输。之后,仲裁器可以调整仲裁优先权,并且,在接下来的周期改变授权信号。这样,能够在时间T4后授权新的主设备访问地址总线。
(4)因为空闲传输总是在一个周期内完成的,所以新的主设备可以保证立即访问总线。
复位信号HRESETn是AMBA AHB规范中唯一的低有效信号,并且是所有总线设备的主要复位源。复位可以是异步有效,但是在HCLK的上升沿后同步无效。
在复位期间,所有主设备必须确保地址和控制信号处于有效电平,并且使用HTRANS[1:0]信号表示空闲。
在不提高工作频率的情况下增加总线带宽的一种方法是使片上总线的数据路径更宽。增加金属层和使用大容量片上存储模块(如嵌入式DRAM)是推动使用更宽片上总线的因素。
指定固定总线宽度意味着在大多数情况下总线宽度不是应用的最佳选择。因此,这里采用了一种允许可变总线宽度的方法,但仍确保模块在设计之间具有高度的可移植性。
该协议允许AHB数据总线可以是8位、16位、32位、64位、128位、256位、512位或1024位。然而,建议使用32位的最小总线宽度,并且预计最多256位将适用于几乎所有的应用。
对读写传输来说,接收模块必须从总线上正确的字节通道选择数据,而无须将数据复制到所有字节通道上。
1.在宽总线上实现窄从设备
在32位数据总线上运行64位从设备模块的结构,如图3.28所示。在该结构中,仅需要增加外部逻辑,而不需要修改任何内部的设计,因此该技术也适用于硬宏单元。
图3.28 在32位数据总线上运行64位从设备模块的结构
对于输出,在将窄总线转换成宽总线时,可以执行以下操作之一。
(1)将数据复制到宽总线的下两半,如图3.28所示。
(2)使用额外的逻辑以确保修改总线上适当的那一半。这会导致功耗降低。
从设备只接收与其接口相同宽度的传输。如果一个主设备尝试一个比从设备能支持宽度更宽的传输,则从设备可以使用ERROR响应错误传输。
2.在窄总线上实现宽从设备
在窄总线上实现宽从设备的例子如图3.29所示。同样,由于只需要外部逻辑,因此可以轻松修改预先设计或导入的块以使用不同宽度的数据总线。
图3.29 在窄总线上实现宽从设备的例子
与最初尝试通过用相同的方式修改从设备以使其工作在宽的总线上相比,总线主设备可以用以下方式,经过简单修改便能工作在宽总线上:多路选择输入总线和复制输出总线。
然而,总线主设备不能工作在比原先设计更窄的总线上,除非有一些限制,这些限制包括:总线主设备包含某种机制来限制总线主设备尝试的传输宽度。禁止主设备尝试的传输宽度(由HSIZE表示)大于连接的数据总线的传输宽度。
AMBA AHB接口设备包括AMBA AHB总线从设备、AMBA AHB总线主设备、AMBA AHB总线仲裁器,以及AMBA AHB总线译码器。
1.AMBA AHB总线从设备
AMBA AHB总线从设备符号如图3.30所示。该总线从设备响应系统内总线主设备发起的传输。从设备使用来自译码器的HSELx选择信号来确定它何时应该响应总线传输。传输所需要的所有其他信号,如地址和控制信息,将由总线主设备生成。
图3.30 AMBA AHB总线从设备符号
2.AMBA AHB总线主设备
AMBA AHB总线主设备符号如图3.31所示。在AMBA系统中,总线主设备具有复杂的总线接口。通常,AMBA系统设计者会使用预先设计的总线主设备,因此无须关注总线主设备接口的细节。
图3.31 AMBA AHB总线主设备符号
3.AMBA AHB总线仲裁器
AMBA AHB总线仲裁器符号如图3.32所示。在AMBA系统中,仲裁器的作用是控制哪个主设备可以访问总线。每个总线主设备都有一个到仲裁器的请求/授权接口,仲裁器使用优先级方案来确定哪个总线主设备是当前请求总线的最高级主设备。
图3.32 AMBA AHB总线仲裁器符号
每个主设备还会生成一个HLOCKx信号,用于指示主设备需要对总线进行独占访问。
优先级方案的细节没有指定,而是根据每个应用进行定义。仲裁器可以使用其他信号(无论是AMBA还是非AMBA)来影响正在使用的优先级方案。
4.AMBA AHB总线译码器
AMBA AHB总线译码器符号如图3.33所示。在AMBA系统中,译码器用于执行集中地址译码功能,通过使用独立于系统存储器映射的外设,提高外设的可移植性。
图3.33 AMBA AHB总线译码器符号