AHB 仲裁器就是为了解决多个 Master主设备同时访问同一个 Slave从设备的问题而存在的。当多个 Master 申请访问同一个 Slave 时仲裁器会根据预设的优先级选出“获胜者”而所有失败的请求都会被“HOLD 住”即被挂起不是被忽略而是等待。这个等待机制的核心是 AHB 总线协议中的HREADY信号。仲裁器通过它向低优先级的 Master 插入等待周期使其传输暂时“冻结”直到获得总线使用权为止。同时Master 自身通常不需要复杂的缓存因为它的请求和地址信息在获得授权前会被总线矩阵内的寄存器或触发器保持住。 工作流程仲裁器如何应对冲突当多个 Master 发起请求时仲裁器的基本工作流程如下发起请求需要占用总线的 Master 向仲裁器发出请求信号 (HBUSREQx)。仲裁裁决仲裁器依据预设的优先级策略如固定优先级[reference:0]或轮询优先级[reference:1]进行裁决决定下一个总线周期的使用权归属。授权与等待仲裁器会为获胜的 Master 置位授权信号 (HGRANTx)而所有未获胜的 Master 则进入等待状态。执行传输获胜的 Master 在下一个时钟周期开始驱动地址和控制信号进行数据传输。 “HOLD住”的奥秘HREADY信号低优先级的 Master 正是通过HREADY信号被“Hold 住”的。HREADY信号的功能是向 Master 指示上一个传输是否已完成[reference:2]。工作原理当低优先级 Master 未获得授权但已经尝试发起传输时总线矩阵会将其HREADY信号拉低[reference:3]。Master 的反应Master 在检测到HREADY为低后会主动延长其当前传输的地址/数据阶段即“暂停”自己保持所有信号地址、控制、写数据等不变耐心等待[reference:4]。传输恢复当高优先级 Master 完成传输仲裁器将总线授权移交给下一个 Master 时总线矩阵会拉高其HREADY信号被暂停的 Master 随即恢复传输从断点处继续执行[reference:5]。 “缓存”与“事务完成”Master的“缓存”通常Master不需要复杂的内部缓存。一个简单的寄存器或触发器就足够了。因为HREADY机制已经让 Master 在硬件层面冻结地址和控制信号会由总线矩阵内的寄存器保持住。所以严格来说是仲裁器和总线互连逻辑在保持这些命令等待被授予总线使用权。“事务完成”的含义这里说的“等待当前操作结束”指的是等待当前正在进行的整个传输transaction完成。在 AHB 协议中一个传输可能只是复杂“事务”的一部分。例如一个 Master 可能在进行一次突发传输 (Burst Transfer)即一次性传输多个数据。如果高优先级 Master 恰好在这个 Burst 传输的中间请求总线仲裁器可以选择在 Burst 传输完全结束后才进行授权[reference:6][reference:7]。当然为了防止高优先级 Master 等待过久一些高级仲裁器也支持“提前终止突发 (Early Burst Termination)”即允许在当前 Burst 未完成时就打断它转而服务高优先级请求[reference:8][reference:9]。 高级机制与潜在问题防饿死机制单纯的固定优先级可能导致低优先级 Master“饿死”。现代仲裁器会引入轮询 (Round-Robin)[reference:10]或加权令牌 (Weighted Token)[reference:11]等公平算法来避免这个问题。锁定传输 (Locked Transfer)对于需要原子操作的场景Master 可断言HLOCKx信号[reference:12]锁定总线以完成整个不可分割的传输序列仲裁器在此期间不会进行重新仲裁[reference:13]。AHB 仲裁器通过HREADY信号的“暂停”机制实现了高效有序的多 Master 总线访问而不是粗暴地忽略任何请求。