系统总线:原理、协议与应用详解
1. 总线基础与仲裁机制
1.1 总线握手机制
在总线系统中,主设备生成请求后,确认信号(Ack)可能不会在请求信号(Req)发出后的多个周期内立即生成,这可能是由于正在进行的数据传输所致。图 4.13 展示了总线主设备与仲裁器在授予主设备总线所有权之前的握手机制时序图。Ack 信号上的双“*”表示该信号在仲裁器收到特定总线主设备的请求后多个周期才生成。当主设备在第 n 个周期收到 Ack 信号后,它会在第 (n + 1) 个周期将状态更改为 Start,并发送第一个地址 A1,而不考虑从设备的状态。如果从设备就绪,主设备会在接下来的周期发送第二个地址 A2 和第一个数据 WData1。
1.2 总线仲裁
当有多个总线主设备请求总线所有权时,总线仲裁是总线管理的重要组成部分。仲裁可以通过硬件编码实现为状态机,也可以是可编程的基于寄存器的方式。
1.2.1 两个总线主设备的仲裁
表 4.5 展示了两个总线主设备之间的硬件编码总线仲裁机制:
| Req1 | Req2 | Ack1 | Ack2 |
|------|------|------|------|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
该仲裁机制可以用状态机实现,仲裁器通常处于 IDLE 状态。当同时收到两个主设备的请求时,仲裁器会根据优先级从 IDLE 状态转移到 ACK1 状态,为总线主设备 1 生成 Ack1 = 1,并忽略总线主设