PCI总线仲裁机制
6 w+ l9 @/ E& @ 为了使访问等待时间最小,PCI总线仲裁基于访问而不基于时间。总线管理必须为总线上的每一次访问进行仲裁。PCI总线采用中央仲裁方案:每个主设备都设有自己的总线占用请求线REQ#和总线占用允许线GNT#,系统中设立一个中央仲裁电路,想得到总线控制权的主设备都要发出各自的请求,由中央仲裁电路进行裁决。PCI总线的仲裁是“隐含的”,即一次仲裁可以在上一次访问期间完成,这样,就使得仲裁的具体实现不必占用PCI总线周期。但是,如果总线处于空闲状态,仲裁就不一定采用隐含方式。
0 Y- R9 t2 l3 g N
PCI总线仲裁的基本规则如下:
3 [' `- |2 s: W0 z7 D0 G. S
①若GNT#信号无效而FRAME#有效时,当前的数据传输合法且能继续进行。
( c% i# j% X5 ^ ②如果总线不处在空闲状态,则一个GNT#信号无效与下一个GNT#信号有效之间必须有一个延迟时钟,否则在AD线和PAR线上会出现时序竞争。
7 |+ J# l7 ^" O# [- `
③当FRAME#无效时,为了响应更高优先级主设备的占用请求,可以在任意时刻置GNT#和REQ#无效。若总线占有者在GNT#和REQ#设置后,在处于空闲状态16个PCI时钟后还没有开始数据传输,则仲裁机构可以在此后的任意时刻移去GNT#信号,以便服务于一个更高优先级的设备。
3 A. C* Y4 ?. [6 E$ j. w" r
如图9.8所示,通过两个设备对总线的占用情况来说明仲裁的基本过程。从中可以看出,在时钟1或此前,设备A发出了总线请求REQ#-A,仲裁器根据总线的使用情况,在时钟2处回以GNT#-A信号,于是设备A的请求得到批准,可以使用总线。由于此时只有GNT#-A有效而FRAME#和IRDY#无效(总线为空闲状态),所以,设备A可以在时钟2处启动传输。到了时钟3,FRAME#信号有效,设备A便开始其数据的真正传送。由于总线请求REQ#-A一直未撤消,说明它还要进行传输。
0 K# ]6 h& h: F+ D; T n 注意
+ i2 J7 y6 P9 w: {$ ]/ c2 P 设备B在时钟1期间也提出了总线占用请求REQ#-B,而它的优先级比设备A高,所以仲裁器在设备A进行第一次传输期间撤消了REQ#-A而置REQ#-B有效(总线的仲裁是隐含的,不占用单独的PCI总线周期),允许设备B使用总线。这样,设备A在时钟4之后就释放总线,同时FRAME#和IRDY#信号也消失,从而使得所有的PCI设备都能够判断出当前数据传输已经结束。设备B在时钟5处成为总线的拥有者。
& N/ T' v m- ^& e# y! L
' a5 E4 e7 [2 f9 \1 _6 f
S- E7 r* h. n1 i5 }; I3 i' U0 H7 P: K J% u
8 p- t \, h. P4 [# d8 Z+ g9 T
6 C g, H! ~' N8 v( v9 | 另外,从图中还可看到,REQ#-B信号在时钟6处撤消,而FRAME#信号有效,这表明设备B只请求进行一次数据传输,因而仲裁器便在此期间准许设备A为下一个主设备(由于REQ#-A仍然存在)。
a1 z6 `0 M, i$ i! P* ]( T 在总线仲裁中还用到一个概念——停靠。所谓停靠,是指总线仲裁器在没有设备使用总线或没有设备请求使用总线的情况下,根据一定方式选定一个设备,给它发出GNT#信号,从而选择一个缺省的总线拥有者。这类似于计算机常用的缺省设置。一般固定某一设备或选择最后一次使用总线的设备作为停靠设备。有时,也可能指定仲裁器本身为缺省的总线拥有者。