Ref: AMBA总线协议(7)——AHB(五):传输仲裁 http://t.csdnimg.cn/cvteK
---------------------------------------------------------------------------------------------------------------------------------
仲裁信号描述
1.HBUSREQx总线请求
后边那个x表示序号,就是x号主机发出的占用请求。
2.HLOCKx锁定
x不再解释,主机REQ总线的同时已经确定锁定信号,告诉仲裁机:主机在执行一些不能分割(存档)的传输。
一旦 锁定传输 的第一个传输已经开始,arbiter不能再授予其它主机访问权。
在寻址到所用的地址之前,必须保证HLOCKx信号在一个周期内有效,以防止仲裁器改变授权信号。
原因:在AHB总线工作机制中,每个时钟周期都会有一个特定的访问窗口,用于控制主设备对总线的访问一旦一个主设备被授权访问总线,它需要在一个时钟周期内完成其访问操作,否则可能会导致数据传输错误或冲突。
以 不定长连续传输 为例: 看Control、HADDR、HDATA等等的阴影部分,就是主机在执行访问操作
3.HGRANTx授予
仲裁器产生,发出给优先级最高的主机,优先考虑锁定传输和SPLIT。主机在 HGRANTx 为高时获取地址总线的所有权,并且在 HCLK 的上升沿 HREADY 为高电平。
上升沿CLK时HREADY为高电平: 表示可以开始传输
4.HMASTER[3:0]
仲裁器发出,表示哪一个主机当前被授予总线,用来控制中央地址、控制多路选择器。
有 SPLIT 传输能力的从机也可以请求主机的序号,以便它们能够提示仲裁器哪个主机能够完成一个 SPLIT 传输。
解释:在分布式系统中,有时候从机可能需要主机的帮助来完成一些复杂的任务,比如SPLIT传输。通过请求主机的序号,从机可以确定哪个主机有能力完成这个任务,然后告诉仲裁器,仲裁器可以根据这些信息来做出决策,确保任务能够顺利完成。这样可以提高系统的效率和可靠性。
5.HSPLIT[15:0]
这是 16 位有完整分割能力的总线。被有分割(SPLIT)能力的从机用来指示哪个总线主机能够完成一个 SPLIT 传输。仲裁器需要这些信息以便于授予主机访问总线完成传输。
6.HMASTLOCK
仲裁器通过生效 HMASTLOCK 信号指示当前传输是一个锁定序列的一部分,该信号和地址以及控制信号有相同的时序。
请求总线访问
总线主机使用 HBUSREQx 信号来请求访问总线,并且可以在任何周期请求总线。仲裁器将在时钟的上升沿采样(主机的)请求。然后使用内部优先级算法来决定哪个主机将会下一个获得访问总线。
如果主机请求锁定访问(总线),那么主机也必须生效(assert,也有译作断言) HLOCKx 信号来提示仲裁器其他主机不应该被授予总线。
关于锁定访问:
在某些情况下,如果主机不需要独占总线访问,可以不使用HLOCK信号。HLOCK信号通常用于锁定传输,确保主机独占总线访问,避免其他主机同时访问导致冲突。
然而,即使不是锁定传输,有时候也需要使用HLOCK信号来确保数据传输的准确性和稳定性。例如,在多主机系统中,如果主机需要优先访问总线以确保实时数据传输或避免数据丢失,那么也可以使用HLOCK信号来通知其他主机暂时不要访问总线。
如果一个主机被授予总线之后执行一个固定长度BURST,那么就不必要连续请求总线。
如果一个主机执行未定长度BURST,那么就需要连续请求知道开始最后一次传输
仲裁器监视猝发的进程,并且使用 HBURST[2:0]信号来决定主机请求了多少个传输:
如果主机希望在当前正在进行的传输之后执行另一个猝发,那么主机需要在猝发中重新生效请求信号。
如果主机在一次猝发当中失去对总线的访问,那么它必须重新生效 HBUSREQx 请求线以重新获取访问总线。
在未定长度的猝发结束时,仲裁器不能预知何时改变仲裁,对于主机而言有可能当它未申请总线时却被授予总线。
这可能在没有主机请求总线,并且仲裁器将访问(总线)授予一个默认的主机时发生。因此,如果一个主机并没请求访问总线,那么 它 驱动 传输类型HTRANS 来表示空闲传输显得很重要。
授权总线访问
仲裁器通过生效适当的 HGRANTx 信号来表示请求总线的主机中哪个是当前优先级最高的。
当前传输完成时(由 HREADY 为高时所表示),主机将被授予总线权 并且仲裁器将改变 HMASTER[3:0]信号来表示总线主机序号。
注意看这里:HGRANT为高之后,第一次采样的A之后的一个周期内的阴影也是上文说过的数据访问窗口(”LOCK要留一个周期有效“那一段)
下图表示在移交总线时等待状态的影响:
总的来说: 断言请求👉一些周期之后👉断言授予(grant拉高)👉grant和hready都高👉地址驱动👉hready高👉驱动数据
数据总线的所有权 延时在 地址总线的所有权之后。
一次传输无论何时完成(由HREADY为高时所表示),占有地址总线的主机才能使用数据总线,并且将继续占有数据总线直到传输完成。(二级pipeline)
下图表示当在两个总线主机之间移交总线时数据总线的所有权是如何转移的:
注意到:HGRANT表示的是优先权信号,表示下一次传输的目标主机
HMASTER表示选通控制信号,表示当前先让xxxx传数据
过程:M1请求+优先+ready👉M1主控+地址👉M1数据+下周期地址👉....M1倒数第二个地址+M1倒数第三个数据+ready👉M2请求 + 优先 + ready 👉 M2主控 + M1数据传完 👉M2地址👉.......
文字:仲裁器在倒数第二个(最后一个之前的)地址被采样时改变 HGRANTx 信号。
新的HGRANTx 信息将在突发的最后一个地址被采样的同时被采样
HGRANT & HMASTER在系统中:
猝发提前终止
通常仲裁器在猝发传输结束之前不会将总线移交给一个新的主机。
但是,如果仲裁器决定猝发必须被提前终止以防止过长的总线访问时间,那么它可能会在一个猝发完成之前将(总线)授予转移给另外一个总线主机。比如上边那个时序图。
如果主机在猝发传输中间失去了对总线的所有权,那么它必须重新生效总线(请求)以完成猝发。
主机必须确保 HBURST 和 HTRANS 信号都被更新,以反映主机不再执行一个完整的 4、8 或者 16 拍的猝发:本来传8拍,传了3拍,被中断了,现在拿回来就是再传5拍,你可以采用4+1或者1+4
锁定传输
仲裁器必须监视来自各个主机的 HLOCKx 信号,以确定何时主机希望执行一个锁定连续传输。
之后,仲裁器负责确保没有其他主机被授予总线,直到锁定传输完成。
在一个连续锁定传输之后,仲裁器总是为一个附加传输保持主机被授予(总线),以确保锁定序列的最后一个传输成功完成,并且没有接收到 SPLIT 或者 RETRY 响应,因此建议 但不规定,主机在任何锁定连续传输之后 插入一个空闲传输,以提供给仲裁器在着手另外一个突发传输之前改变(总线授予)的机会。
仲裁器也负责生效 HMASTLOCK 信号,HMASTLOCK 信号和地址以及控制信号有相同的时序。该信号指示每个从机当前传输是锁定的,因此必须在其他主机被授予总线之前被处理掉。
默认主机总线
每个系统必须包含一个默认总线主机,如果所有其他主机不能使用总线时,该主机被授予总线。当被授予总线时,默认主机必须只能执行空闲(IDLE)传输。
如果没有请求总线,那么仲裁器可以授予默认主机(访问总线)或者访问总线延时较低的主机。
授予默认主机访问总线也为确保在总线上没有新的传输开始提供了一个有用的机制,并且也是预先进入低功耗操作模式的有用步骤。
如果其他所有主机都在等待 SPLIT 传输完成时默认主机必须被授予总线。