一、前言

           在之前的文章中我们讨论了AHB的很多传输细节,主要有控制信号,地址信号的译码,从机的响应等,其中重点介绍了双周期响应,最后介绍了数据总线及端结构,在本文中我们将继续介绍AHB传输的仲裁机制。

        仲裁机制被用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成 SPLIT 传输的请求。

        任何没有能力执行 SPLIT 传输的从机不需要了解仲裁的过程,除非它们需要检测因为总线所有权改变而导致突发传输不能完成的情况。

系列文章合集:AMBA总线协议(0)——目录与传送门

二、信号描述

        以下给出对每个仲裁信号的简短描述:

1、HBUSREQx(总线请求信号)

        被总线主机用来请求访问总线的总线请求信号。每个总线主机都有自己的连接到仲裁器的 HBUSREQx 信号,并且任何一个系统中都可以有高达 16 个独立的总线主机。

2、HLOCKx(锁定信号)

        由主机在请求总线的同时确定锁定信号。这提示仲裁器主机正在执行一系列不可分割的传输,并且一旦锁定传输的第一个传输已经开始,仲裁器不能授予任何其他主机访问总线。在寻址到所用的地址之前,必须保证HLOCKx信号在一个周期内有效,以防止仲裁器改变授权信号。

3、HGRANTx(授予信号)

        授予信号由仲裁器产生,并且表示相关主机是当前请求总线的主机中优先级最高的主机,(优先)考虑锁定传输和 SPLIT 传输。主机在 HGRANTx 为高时获取地址总线的所有权,并且在 HCLK 的上升沿 HREADY 为高电平。

4、HMASTER[3:0]

        仲裁器使用 HMASTER[3:0]信号表示哪一个主机当前被授予总线,并且该信号可被用来控制中央地址和控制多路选择器。有 SPLIT 传输能力的从机也可以请求主机的序号,以便它们能够提示仲裁器哪个主机能够完成一个 SPLIT 传输。

5、HMASTLOCK

        仲裁器通过生效 HMASTLOCK 信号指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。

6、HSPLIT[15:0]

        这是 16 位有完整分割能力的总线。被有分割(SPLIT)能力的从机用来指示哪个总线主机能够完成一个 SPLIT 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。

三、请求总线访问

        总线主机使用 HBUSREQx 信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求。然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。

        如果主机请求锁定访问(总线),那么主机也必须生效(assert,也有译作断言) HLOCKx 信号来提示仲裁器其他主机不应该被授予总线。

        当一个主机被授予总线,并且正在执行一个固定长度的猝发,那么就没有必要继续请求总线以便完成传输。仲裁器监视猝发的进程,并且使用 HBURST[2:0]信号来决定主机请求了多少个传输。如果主机希望在当前正在进行的传输之后执行另一个猝发,那么主机需要在猝发中重新生效请求信号。

        如果主机在一次猝发当中失去对总线的访问,那么它必须重新生效 HBUSREQx 请求线以重新获取访问总线。对未定长度的猝发,主机应该继续生效请求直到已经开始最后一次传输。

        在未定长度的猝发结束时,仲裁器不能预知何时改变仲裁。对于主机而言有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线,并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机并没请求访问总线,那么它驱动传输类型 HTRANS 来表示空闲传输显得很重要。  

四、授权总线访问

        仲裁器通过生效适当的 HGRANTx 信号来表示请求总线的主机中哪个是当前优先级最高的。当前传输完成(由 HREADY 为高时所表示),那么主机将被授予(总线)并且仲裁器将改变 HMASTER[3:0]信号来表示总线主机序号。

        下图表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程。

 

        下图表示在移交总线时等待状态的影响:

 

        数据总线的所有权延时在地址总线的所有权之后。一次传输无论何时完成(由HREADY为高时所表示),占有地址总线的主机才能使用数据总线,并且将继续占有数据总线直到传输完成。
        下图表示当在两个总线主机之间移交总线时数据总线的所有权是如何转移的:
 
        下图表示一个仲裁器如何能在一次突发传输结束时移交总线的例子:

         仲裁器在倒数第二个(最后一个之前的)地址被采样时改变 HGRANTx 信号。新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样。 图 3.19表示了HGRANTx和HMASTER信号是如何在系统中使用的: 
 

 五、猝发提前终止

        通常仲裁器在猝发传输结束之前不会将总线移交给一个新的主机。但是,如果仲裁器决定猝发必须被提前终止以防止过长的总线访问时间,那么它可能会在一个猝发完成之前将(总线)授予转移给另外一个总线主机。
        如果主机在猝发传输中间失去了对总线的所有权,那么它必须重新生效总线(请求)以完成猝发。主机必须确保 HBURST 和 HTRANS 信号都被更新,以反映主机不再执行一个完整的 4、8 或者 16 拍的猝发。
        例如,如果一个主机仅完成了一个 8 拍猝发的 3 个传输,那么当它重新获得总线时,必须使用一个合法的猝发编码来完成剩下的 5 个传输。主机可以使用任何合法组合,因此无论是5拍未定长度的突发或者是 4 拍固定长度的猝发,然后跟上一个单拍未定长度的猝发都是可以的。

六、锁定传输

         仲裁器必须监视来自各个主机的 HLOCKx 信号,以确定何时主机希望执行一个锁定连续传输。之后,仲裁器负责确保没有其他主机被授予总线,直到锁定传输完成。

        在一个连续锁定传输之后,仲裁器总是为一个附加传输保持主机被授予(总线),以确保锁定序列的最后一个传输成功完成,并且没有接收到 SPLIT 或者 RETRY 响应。因此,建议但不规定,主机在任何锁定连续传输之后插入一个空闲传输,以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。

        仲裁器也负责生效 HMASTLOCK 信号,HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的,因此必须在其他主机被授予总线之前被处理掉。

七、默认主机总线

        每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时,该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。

        如果没有请求总线,那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机。

        授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制,并且也是预先进入低功耗操作模式的有用步骤。

        如果其他所有主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。

 八、小结

        本文中,我们重点介绍了AHB传输的仲裁,首先介绍了仲裁相关的信号,然后分别介绍了请求总线访问,授权总线访问,猝发提前终止,锁定传输和默认主机总线,在后续文章中将继续介绍AHB的分割传输。