6.3.5 PCI 总线仲裁 在PCI多主系统中,某个总线主设备要想使用总线时,必须向总线仲裁器申请总线权,多个主处理器的系统不是本书的重点,这里仅以包含两个主设备的系统为例,对PCI总线仲裁时序做一个简单介绍。 每个主设备都是通过一对独立的REQ#/GNT#信号与总线仲裁器相连的。总线仲裁器通常集成在芯片组HOST/PCI或者PCI/扩展总线桥中。 图6-24 是两个主设备A和B访问PCI总线时总线仲裁的时序关系,首先做下列假设: ● 总线主设备A要求执行两次总线交易,第一次交易是包含三个数据段的猝发写,第二次是单数据段写交易。 ● 总线主设备B要求执行包含一个数据段的写交易。 ● 总线主设备B比A具有更高的优先级,仲裁机制是循环优先。 正如前面所提到的,PCI都是在PCI CLK的上升沿采样所有总线信号的。如果一个总线主要求执行连续的总线交易,它应该在当前交易的FRAME#有效以后保持REQ#有效。如果没有其他总线主设备要求使用总线,或者当前总线主设备具有最高优先权,则总线仲裁器在当前交易完成后继续将总线权授予当前的主设备。 在CLK1上升沿以前,总线主设备A的REQ#-A有效,请求访问PCI总线。仲裁器在CLK1的上升沿采样到A设备有效的REQ#-A,此时总线主设备B没有总线请求,仲裁器将总线权授予设备A,令连接A的GNT#-A有效。在CLK1周期中,总线主设备B希望执行总线交易,B驱动REQ#-B有效。 总线主设备A在CLK2的上升沿采样到GNT#-A有效,同时检测到IRDY#和FRAME#为无效状态,说明总线当前处于空闲状态。于是,总线主设备A启动其第一次交易。它令FRAME#为低,将地址送到地址总线AD[31:0],并将猝发写命令送到命令/字节使能总线。如果主设备A在这次交易之后不需要执行另外一个交易,它便会在CLK2时使REQ#-A无效。但在此例中设备A还需要执行一次总线交易,因此它继续保持REQ#-A为有效状态。总线仲裁器在CLK2的上升沿采样到主设备A和B同时请求总线,经过仲裁设备B的优先级高于设备A,因此仲裁器收回给A的总线权,驱动GNT#-A为高。 在CLK3的上升沿,主设备A确定其已经优先占有了总线。它将第一个数据项送到数据总线上并有效命令/字节使能总线,以选择适当的数据通道。同时有效IRDY#,表明主设备A已将数据准备好。在CLK3,仲裁器令连接主设备B的GNT#有效。 CLK4的上升沿,主设备B采样到GNT#-B有效,知道其可成为下一个总线主。此时A正在进行猝发写传送,因此设备B在每个后续时钟的上升沿不断采样GNT#直至它获取总线权为止。在时钟4的上升沿,设备A检测到IRDY#和TRDY#有效并开始传送第一个数据项。 CLK5,主设备A采样到有效的IRDY#和TRDY#并开始第二个数据传送。此外,它保持IRDY#有效并令FRAME#无效,表示正在进行最后数据段的传送。 在时钟6的上升沿,IRDY#和TRDY#有效,表示第三个也是最后一个数据传送完成。 总线主设备A 令IRDY#无效,使总线返回空闲状态。 设备B从CLK4的上沿采样到GNT#-B有效以后,由于总线一直处在忙碌状态,所以未能得到总线权。直到CLK7,FRAME#和IRDY#变为高,表示总线空闲。设备B采样到GNT#仍然有效,表示它可以使用总线。设备B启动交易并撤消REQ#信号。因为目前B只需要执行一次总线交易。B有效FRAME#,驱动地址到AD总线,并驱动命令到命令/字节使能总线上。 在CLK8的上升沿,仲裁器采样到主设备B撤消了REQ#,而主设备A的REQ#仍有效。 仲裁器令B的GNT#无效,A的GNT#有效。主设备A在每个时钟的上升沿采样IRDY#和FRAME#,直到总线空闲开始下一个交易。在CLK8中,主设备B 驱动FRAME#无效,表示它的第一个也是最后一个数据段传送正在进行。B同时将数据写到AD总线,将字节选择信号送C/BE#总线,驱动IRDY#为低,通知目标已将数据准备好。 在CLK9上升沿,IRDY#和TRDY#同时有效,主设备B将数据写入目标。之后,主设备B令IRDY#为无效状态,释放总线至空闲态。 主设备A在CLK10的手术沿采样到总线空闲且GNT#-A仍然有效,便启动第二次总线写交易。A令FRAME#有效、REQ#无效,通知仲裁器本次交易之后没有紧跟着的总线请求。 |