ARM中Round Robin的仲裁方案的详细介绍
在ARM架构的总线系统中(如AHB/AXI总线),Round Robin(轮询仲裁) 是一种常用的仲裁方案,用于公平地分配多个主设备(Master)对共享总线资源的访问权限。其核心思想是循环分配总线使用权,避免单一主设备长期独占总线,从而保证系统资源的公平性和实时性。
Round Robin仲裁的核心原理
-
循环队列机制
仲裁器维护一个主设备队列,按固定顺序(如设备0 → 设备1 → … → 设备N → 设备0)依次授予总线访问权。- 示例:假设有3个主设备(M0, M1, M2)请求总线:
- 第一轮:M0获得访问权
- 第二轮:M1获得访问权
- 第三轮:M2获得访问权
- 第四轮:重新回到M0
- 示例:假设有3个主设备(M0, M1, M2)请求总线:
-
请求检测与切换条件
- 当前主设备完成传输(如发送最后一次数据)后,仲裁器立即切换到下一个有请求的主设备。
- 若当前设备无请求,则跳过该设备继续轮询。
关键特性与优势
| 特性 | 说明 |
|---|---|
| 公平性 | 每个主设备在循环周期内获得均等机会,避免低优先级设备被"饿死"。 |
| 低延迟均衡 | 高优先级设备无需等待过长时间(与固定优先级仲裁相比)。 |
| 实现简单 | 硬件逻辑只需一个状态机或移位寄存器即可实现循环队列。 |
| 动态适应性 | 自动跳过空闲设备,将带宽分配给有需求的设备。 |
工作流程示例
假设三个主设备(M0, M1, M2)同时请求总线:
- 初始状态:仲裁器指针指向M0 → M0获得总线。
- M0传输结束:指针移到M1 → M1获得总线。
- M1传输结束:指针移到M2 → M2获得总线。
- M2传输结束:指针移回M0 → 开始新一轮循环。
✅ 跳过空闲设备:若M1无请求,则流程变为 M0 → M2 → M0 → ...
变种:加权轮询(Weighted Round Robin)
为不同主设备分配权重(优先级),允许高优先级设备在循环中获得更多访问机会:
- 示例:设置权重 M0:2, M1:1, M2:1
- 循环序列:M0 → M0 → M1 → M2 → M0 → M0 → M1 → M2...
- 高权重设备(M0)每轮可连续访问两次。
硬件实现方式
- 状态寄存器
记录当前轮到的主设备ID(如2-bit寄存器存储0/1/2)。 - 优先级编码器
检测下一个有效请求的设备(按循环顺序)。 - 移位寄存器
通过循环移位动态更新设备优先级顺序(如每次授权后左移一位)。
// 简化的Round Robin仲裁器Verilog伪代码
always @(posedge clk) begin
if (current_master_done) begin // 当前设备传输结束
for (int i=1; i<=NUM_MASTERS; i++) begin
next = (current + i) % NUM_MASTERS; // 查找下一个设备
if (request[next]) break; // 找到有请求的设备
end
current <= next; // 更新当前设备
end
end
与固定优先级仲裁的对比
| 特性 | Round Robin | 固定优先级 |
|---|---|---|
| 公平性 | ✅ 高 | ❌ 低(低优先级易饿死) |
| 实时性 | ⚖️ 均衡 | ✅ 高优先级响应快 |
| 适用场景 | 带宽敏感型设备(如DMA、GPU) | 实时关键设备(如CPU、中断控制器) |
| 硬件复杂度 | 中等 | 简单 |
在ARM总线中的应用
- AHB总线:Round Robin常用于多层互连矩阵(如ARM CoreLink NIC-400)中分配从设备(Slave)端口。
- AXI总线:支持基于Round Robin的交叉开关(Crossbar),优化多主设备并行访问。
⚠️ 注意:实际SoC中常采用混合策略(如高优先级设备用固定优先级,其余用Round Robin),以兼顾实时性与公平性。
Round Robin仲裁通过循环分配机制,在保证公平性的同时维持了系统吞吐量,是ARM总线架构中平衡多主设备竞争的核心方案之一。
浙公网安备 33010602011771号