公平仲裁举例
系统可以将PCI总线上的全部总线主设备分为两部分:
1. 为了达到高性能,要求快速访问总线或高流通量的总线主设备。例如显示适配器、ATM网络接口或FDDI网络接口。
2. 不要求快速访问总线或高流通量以达到高性能的总线主设备。例如,SCSI主总线适配器或规范扩展总线主设备。
仲裁器将REQ#/GNT#分为两组,其中一组具有更大的优先权。假设总线主设备A与B在要求快速访问的组中,主设备X、Y、Z在另一组,对仲裁器编程或设计,将每个组都设计成循环优先权,而两组之间也是循环优先权,如图5-3所示。
假设下列情况:
■ 在第一组中下一个接收总线的设备是主设备A;
■ 在第二组中下一个接收总线的设备是主设备X;
■ 在第一组中下一个接收总线的设备是某个主设备;
■ 所有主设备都有效REQ#并希望执行多次交易(在起动交易后,它们仍保持相应的REQ#有效)。
接收访问总线的主设备次序是:
1. 主设备A;
2. 主设备B;
3. 主设备X;
4. 主设备A;
5. 主设备B;
6. 主设备Y;
7. 主设备A;
8. 主设备B;
9. 主设备Z;
10. 主设备A;
11. 主设备B;
12. 主设备X等。
第一组中的主设备比第二组更频繁地被允许访问总线。
主设备希望执行多次交易
如果主设备在一次交易刚起动之后有另一个交易立即执行,那么它在有效FRAME#开始当前交易时,应该保持REQ#线有效(图5-4中的时钟2)。这样它就通知了仲裁器,它希望在完成当前交易后保持总线的所有权。仲裁器是否允许取决于其他未决的请求。如果没有保持住所有权,主设备应该保持REQ#有效,直到它又成功取得了总线所有权。
在任意时刻,只有一个总线主设备使用总线。这意味着在任意PCI时钟周期内,仲裁器仅有效一条GNT#线。
隐式总线仲裁
与一些仲裁机理不同,在当前主设备正在执行数据传送时,PCI机理允许总线仲裁发生。如果仲裁器决定将下一次交易的总线所有权授予某个主设备,而不是当前交易的主设备,它从当前主设备取回GNT#(即先取得)并将之发送给总线的下一个拥有者,但是,直到当前主设备让总线空闲,下一个所有者才取得总线所有权。在执行仲裁总线周期的时间里没有浪费总线时间,这称作隐式仲裁。
总线停放
主设备必须在有效其REQ#输出,表明对总线当前的需要,换言之,主设备必须不将REQ#输出“停放”在总线上。如果系统设计者实现总线停放机理,那么当没有未决的总线主设备请求时,总线仲裁器设计应该通过有效设备的GNT#信号,指出缺省总线所有者。在这种方式中,缺省总线主设备的REQ#被立即授予(如果没有其他总线主设备要求使用PCI总线)。
如果总线仲裁器实现总线停放,那么在没有有效的REQ#线时,它有效缺省总线主设备的GNT#。这种方式下,如果缺省总线主设备要求使用总线(并且没有其他未决的高优先级请求),那么它立即得到总线。如果停放总线的主设备随后要求访问PCI总线,那么它不必有效REQ#。当采样到总线空闲时(FRAME#和IRDY#无效),并且GNT#有效,它立即起动交易。选择那个主设备停放总线,由总线仲裁器的设计者定义。可以采用任意过程,如使用总线的最后一个总线主设备,或预定义的缺省总线主设备。
当实现总线停放时,应用的方法有两种可能的情况:
方法1:仲裁器可以监视FRAME#和IRDY#,以确定在停放总线前总线是否忙。假设主设备请求总线,收到GNT#,并开始多数据段突发交易,在这次交易完成后,如果没有另一次交易,那么它在有效FRAME#时无效REQ#。在此情况下,仲裁器可以识别出总线是否忙,如果没有无效当前主设备的授权,以停放总线在另一个主设备上(极力推荐采用此法)。
方法2:仲裁器没有监视总线空闲。假设主设备请求总线,收到GNT#并开始多数据段突发交易,在这次交易完成之后,如果没有另一次交易,那么在有效FRAME#时无效REQ#。在此情况下,虽然没有其他主设备的请求,但仲裁器仍可以从当前主设备拿走GNT#,并向准备停放总线的主设备发生GNT#。在当前主设备用完主设备延迟,并确定已经失去授权时,它被迫放弃总线,等待两个时钟,然后重新仲裁,在失去总线之处重新开始交易。
规范建议总线应该停放在最后一个取得总线的主设备上。在第二种情况下,仲裁器连续向突发主设备发出GNT#,并能继续交易,直到交易完成或收到另一个主设备的请求。
当仲裁器在主设备上停放总线(通过有效其授权),并且总线空闲,主设备负责保持AD总线、C/BE总线和PAR不要漂移(保持所有设备的CMOS输入缓冲区不要震荡和过大漏电流)。主设备必须使能其AD[31:0]、C/BE[3:0],以及PAR输出驱动器(一个时钟之后)。主设备不必在一个时钟打开全部输出驱动器(它可以多达8个时钟,但建议两到三个时钟)。这一过程保证了在总线空闲过程总线不全漂移。如果仲裁器没有停放总线,仲裁器应该在总线空闲阶段驱动AD总线,C/BE#线和PAR。
请求/确认时序
当仲裁器确定主设备使用总线时,它有效主设备的GNT#线。仲裁器可以在任意PCI时钟无效主设备的GNT#。主设备必须保证在它希望起动一次交易的时钟上升沿有效其GNT#。如果GNT#无效,那么就不会进行交易。一旦仲裁器有效GNT#,GNT#可以在下述情况下无效:
■ 如果GNT#无效且FRAME#有效,那么传送有效而且连续。仲裁器无效GNT#表明,主设备在当前交易完成时不再拥有总线;当前交易仍在过程中时,主设备保持FRAME#有效;当它准备完成最后数据段时无效FRAME#。
■ 如果总线不在空闲状态,主设备的GNT#无效,与另一个主设备GNT#的有效同时发生。空闲状态定义为FRAME#和IRDY#同时无效的时钟周期。如果总线空闲,正在失去GNT#的主设备可以使用步进驱动总线(尽管它还没有有效的FRAME#)。伴随另一个主设备的GNT#有效,此主设备GNT#同时无效,导致AD总线上的冲突。另一个主设备可能立即开始交易(因为总线在技术上是空闲的)。通过向另一个主设备延迟一个周期授权来防止这个问题。表5-1定义了FRAME#和IRDY#的当前状态指出的总线状态。
■ 在最后数据段(FRAME#无效)GNT#可以无效,反应出当前总线主设备的REQ#无效。