双主设备间的仲裁举例
图5-4显示双主设备访问PCI总线仲裁间的总线使用。为了正确解释这个例子,作出下列假设:
■ 总线主设备A要求总线执行两次交易,第一次交易包含三个数据段写,第二次交易类型是单数据段写。
■ 仲裁机理是固定的,总线主设备B比总线主设备A具有更高的优先权,或者仲裁机理是循环式且B是下一个交易。
■ 总线主设备B仅要求总线执行包含一个数据段的单交易。
重要的是记住在PCI CLK信号上升沿采样的全部PCI信号。如果总线的当前所有者在完成当前交易后,要求总线执行附加交易,它应该在当前交易的FRAME#有效后,保持REQ#线有效。如果没有其他总线主设备要求使用总线,或当前总线主设备具有最高优先权,总线仲裁器在当前交易完成后,继续将总线授权给当前主设备。
图5-4中采样仲裁顺序进行如下:
时钟1:在时钟边沿一之前,总线主设备A有效REQ#,请求访问PCI总线。仲裁器在时钟一的上升沿采样有效。此时,总线主设备B还没有要求总线。在时钟单元一,仲裁器有效总线主设备A的GNT#,授权为总线的所有者。在同一个时钟阶段,总线主设备B有效REQ#,表示它希望执行交易。
时钟2:总线主设备A在时钟二的上升沿采样GNT#有效。它也采样IRDY#和FRAME#无效,表示总线在空闲状态。总线主设备A作出反应,起动两个交易的第一个。它有效FRAME#,并开始驱动起始地址到AD[31:0],并驱动命令到命令/字节总线。如果主设备A在这次交易后没有另一个交易要执行,它会在时钟单元二无效REQ#线。在此例中,它有另一个交易要执行,因此它保持REQ#线有效。PCI总线仲裁器在时钟二的上升沿采样主设备A和B的有效请求,并开始仲裁过程,以确定下一个总线主设备。在时钟单元二,仲裁器从主设备A取走GNT#。
时钟3:在时钟三的上升沿,主设备A确定它先占有总线,因为它的LT(延迟定时器)还没有到期,将继续交易。在时钟单元,仲裁器有效总线主设备B的GNT#。在时钟单元三,主设备A开始驱动第一个数据项到AD总线(这是一次写交易),有效适当的命令/字节使能(表示传送所使用的数据路径),同时有效IRDY#,表明在总线上存在数据的目标。
时钟4:在时钟的上升沿,主设备B采样有效的GNT#,表示它可以是总线的下一个所有者。它必须在后继时钟的每个上升沿连续采样GNT#直到她获取总线。这样是必要的,因为仲裁器可以取回授权,并在总线空闲前将总线授予另一个具有更高优先权的主设备。直到总线返回空闲状态,主设备B才能开始使用总线。在时钟4的上升沿,采样到有效的IRDY#和TRDY#并开始第一个数据传送。
时钟5:在时钟5的上升沿,采样有效的IRDY#和TRDY#并开始第二个数据传送。在时钟单元五,主设备A保持IRDY#有效并无效FRAME#,表示最后数据段在进行中。
时钟6:在时钟6的上升沿,采样有效的IRDY#和TRDY#,而且第三个和最后的数据传送完成。在时钟单元六,总线主设备A无效IRDY#,将总线返回空闲状态。
时钟7:在时钟7的上升沿,主设备B采样无效的FRAME#和IRDY#,并确定总线现在空闲。它也采样到GNT#仍有效,表示它获取总线。在时钟单元7,它作出反应,起动交易并关闭REQ#线(因为它仅要求总线执行这一个交易)。当它在时钟7有效FRAME#,主设备B也开始驱动地址到AD总线上,并驱动命令到命令/字节使能总线上。
时钟8:在时钟8的上升沿,仲裁器采样到主设备B的REQ#无效,且主设备A的REQ#仍有效。仲裁器在时钟单元8作出反应,无效主设备B的GNT#,并有效主设备A的GNT#。因为主设备A想用总线作另一次交易,它保持REQ#线有效。主设备A在每个时钟的上升沿采样IRDY#和FRAME#,直到总线空闲,到那时,它能开始下一个交易。在时钟单元8,主设备B无效FRAME#,表示它的第一个(也是唯一的)数据段在进行中。在时钟单元8,它也开始驱动写数据到AD总线上,以及适当的设置到命令/字节使能总线,它有效IRDY#,表明AD总线存在数据的目标。
时钟9:在时钟9的上升沿,IRDY#和TRDY#采用有效,并开始数据传递。然后,主设备B无效IRDY#(在时钟单元9)以返回总线空闲状态。
时钟10:在时钟10的上升沿,主设备A采样总线空闲和有效的GNT#,然后在时钟单元10起动第二个交易。当它有效FRAME#时无效REQ#,通知仲裁器完成交易后它不再要求总线。
在复位(RST#)时请求信号(REQ#)和确认信号(GNT#)的状态
当RST#有效时,所有主设备必须使REQ#输出驱动三态,并且必须忽略GNT#输入。
从插入式连接器的请求信号(REQ#)上拉
在具有PCI插入式连接器的系统中,仲裁器必须在连接到插入式连接器的REQ#输入上要求一个弱的上拉,当连接器未占用时,这有助于它们没有漂移。
损坏的主设备
如果仲裁器已经发出GNT#到主设备,仲裁器可以假设主设备是坏的,总线已经16个时钟是空闲的,同时主设备未有效FRAME#以开始交易。允许仲裁器忽略来自损坏主设备的所有的进一步请求,并且向操作系统报告这一失败(可选的)。