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 总线访问,而不是粗暴地忽略任何请求。