一、前言
在之前的文章中我们讨论了AHB的很多传输细节,主要有控制信号,地址信号的译码,从机的响应等,其中重点介绍了双周期响应,最后介绍了数据总线及端结构,在本文中我们将继续介绍AHB传输的仲裁机制。
仲裁机制被用来确保任意时刻只有一个主机能够访问总线。仲裁器的功能是检测许多不同的使用总线的请求和决定当前请求总线的主机中哪一个的优先级最高。仲裁器也接收来自从机需要完成 SPLIT 传输的请求。
任何没有能力执行 SPLIT 传输的从机不需要了解仲裁的过程,除非它们需要检测因为总线所有权改变而导致突发传输不能完成的情况。
二、信号描述
1、HBUSREQx(总线请求信号)
被总线主机用来请求访问总线的总线请求信号。每个总线主机都有自己的连接到仲裁器的 HBUSREQx 信号,并且任何一个系统中都可以有高达 16 个独立的总线主机。
2、HLOCKx(锁定信号)
由主机在请求总线的同时确定锁定信号。这提示仲裁器主机正在执行一系列不可分割的传输,并且一旦锁定传输的第一个传输已经开始,仲裁器不能授予任何其他主机访问总线。在寻址到所用的地址之前,必须保证HLOCKx信号在一个周期内有效,以防止仲裁器改变授权信号。
3、HGRANTx(授予信号)
授予信号由仲裁器产生,并且表示相关主机是当前请求总线的主机中优先级最高的主机,(优先)考虑锁定传输和 SPLIT 传输。主机在 HGRANTx 为高时获取地址总线的所有权,并且在 HCLK 的上升沿 HREADY 为高电平。
4、HMASTER[3:0]
5、HMASTLOCK
6、HSPLIT[15:0]
三、请求总线访问
总线主机使用 HBUSREQx 信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求。然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。
如果主机请求锁定访问(总线),那么主机也必须生效(assert,也有译作断言) HLOCKx 信号来提示仲裁器其他主机不应该被授予总线。
当一个主机被授予总线,并且正在执行一个固定长度的猝发,那么就没有必要继续请求总线以便完成传输。仲裁器监视猝发的进程,并且使用 HBURST[2:0]信号来决定主机请求了多少个传输。如果主机希望在当前正在进行的传输之后执行另一个猝发,那么主机需要在猝发中重新生效请求信号。
如果主机在一次猝发当中失去对总线的访问,那么它必须重新生效 HBUSREQx 请求线以重新获取访问总线。对未定长度的猝发,主机应该继续生效请求直到已经开始最后一次传输。
在未定长度的猝发结束时,仲裁器不能预知何时改变仲裁。对于主机而言有可能当它未申请总线时却被授予总线。这可能在没有主机请求总线,并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机并没请求访问总线,那么它驱动传输类型 HTRANS 来表示空闲传输显得很重要。
四、授权总线访问
仲裁器通过生效适当的 HGRANTx 信号来表示请求总线的主机中哪个是当前优先级最高的。当前传输完成(由 HREADY 为高时所表示),那么主机将被授予(总线)并且仲裁器将改变 HMASTER[3:0]信号来表示总线主机序号。
下图表示了当所有传输都为零等待状态并且HREADY信号为高时的处理过程。
下图表示在移交总线时等待状态的影响:
五、猝发提前终止
六、锁定传输
仲裁器必须监视来自各个主机的 HLOCKx 信号,以确定何时主机希望执行一个锁定连续传输。之后,仲裁器负责确保没有其他主机被授予总线,直到锁定传输完成。
在一个连续锁定传输之后,仲裁器总是为一个附加传输保持主机被授予(总线),以确保锁定序列的最后一个传输成功完成,并且没有接收到 SPLIT 或者 RETRY 响应。因此,建议但不规定,主机在任何锁定连续传输之后插入一个空闲传输,以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。
仲裁器也负责生效 HMASTLOCK 信号,HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的,因此必须在其他主机被授予总线之前被处理掉。
七、默认主机总线
每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时,该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。
如果没有请求总线,那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机。
授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制,并且也是预先进入低功耗操作模式的有用步骤。
如果其他所有主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。