接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(6)
PCI总线是一条共享总线,在一条PCI总线上可以挂接多个PCI设备。这些PCI设备通过对一系列信号与PCI总线相连,这些信号由地址/数字信号、控制信号、仲裁信号、中断信号等多种信号组成。
PCI总线是一条同步总线,每一个设备都有一个CLK信号,其发送设备与接收设备使用这个CLK信号进行同步数据传递。PCI总线可以使用33MHz或66MHz的时钟频率,PCI-X总线可以使用133MHz、266MHz或者533MHz的时钟频率(如上一回中的表格所示)。
除了RST#、INTA~D#、PME#和CLKRUN#等信号之外,PCI设备使用的绝大多数信号都使用这个CLK信号进行同步。其中,RST#是复位信号,而PCI设备使用INTA~D#信号进行中断请求。本书并不详细介绍PME#和CLKRUN#信号。
?
1.2.2?接口控制信号
在PCI总线中,接口控制信号的主要作用是保证数据的正常传递,并根据PCI主从设备的状态,暂停、终止或者正常完成当前总线事务,其主要信号如下:
(1)FRAME#信号
该信号指示一个PCI总线事务的开始与结束。当PCI设备获得总线的使用权后,将置该信号有效(即置为低),启动PCI总线事务;当结束总线事务时,将置该信号无效(即置为高)。PCI设备(包括HOST主桥)只有通过仲裁获得当前PCI总线的使用权后,才能驱动该信号。
(2)IRDY#信号
该信号由PCI主设备(包括HOST主桥)驱动,该信号有效时,表示PCI主设备的数据已经准备完毕。如果当前PCI总线事务为写事务,表示数据已经在AD[31:0]上有效;如果为读事务,则表示PCI目标设备已经准备好接收缓冲,目标设备可以将数据发送到AD[31:0]上。
(3)TRDY#信号
该信号由目标设备驱动,有效时表示目标设备已经将数据准备完毕。如果当前PCI总线事务为写事务,表示目标设备已经准备好接收缓冲,可以将AD[31:0]上的数据写入目标设备;如果为读事务,表示PCI设备需要的数据已经在AD[31:0]上有效。
该信号可以与IRDY#信号联合使用,在PCI总线事务上插入等待周期,对PCI总线上的数据传送进行控制。
(4)STOP#信号
该信号有效时,表示目标设备请求主设备停止当前PCI总线事务。一个PCI总线事务除了可以正常结束外,目标设备还可以使用该信号终止当前PCI事务。目标设备可以根据不同的情况,要求主设备对当前PCI总线事务进行重试(Retry)、断连(Disconnect),也可以向主设备报告目标设备夭折(Target Abort)。
目标设备要求主设备Retry和Disconnect并不意味着当前PCI总线事务出现错误。当目标设备没有将数据准备好时,可以使用Retry周期使主设备重试当前的PCI总线事务。有时,当目标设备不能接收来自主设备较长的Burst操作时,可以使用Disconnect周期,将一个较长的Burst操作分解为多个Burst操作。当主设备访问的地址越界时,目标设备可以使用Disconnect周期,终止主设备的越界访问。
而Target Abort表示在数据传送过程中出现了错误(这真正意味着当前PCI总线事务出现错误)。处理器系统必须对这种情况进行处理。在PCI总线中,出现Abort一般意味着当前PCI总线域出现了较为严重的错误。
(5)IDSEL信号
PCI总线在进行配置读写总线事务时,使用该信号选择PCI目标设备。配置读写总线事务与存储器读写总线事务在实现上略有不同。在PCI总线中,存储器读写总线事务使用地址译码方式访问外部设备;而配置读写总线事务使用“ID译码方式”访问PCI设备,即通过PCI设备的总线号、设备号和寄存器号访问PCI设备的配置空间。
IDSEL信号与PCI设备的设备号相关,相当于PCI设备配置空间的片选信号。
(6)DEVSEL#信号
该信号有效时,表示PCI总线的目标设备准备好。该信号与TRDY#信号的不同之处在于,该信号有效仅表示目标设备已经完成了地址译码。目标设备使用该信号通知PCI主设备,其访问对象在当前PCI总线上,但并不表示目标设备可以与主设备进行数据交换。而TRDY#信号表示数据有效,PCI主设备可以向目标设备写入或者从目标设备读取数据(不仅表示目标设备在当前PCI总线上,而且表示也目标设备可以与主设备进行数据交换)。
PCI总线规范根据设备的译码速度,将PCI设备分为快速、中速和慢速三种。在PCI总线上还有一种特殊的设备,即负向译码设备,在一条PCI总线上当快速、中速、慢速三种设备都不能响应PCI总线事务的地址时,负向译码设备将被动地接收这个PCI总线事务。如果在PCI主设备访问的PCI总线上,没有任何设备可以置DEVSEL#信号为有效,主设备将使用Master Abort周期结束当前总线事务。
(7)LOCK#信号
PCI主设备可以使用该信号,将目标设备的某个存储器或者I/O资源锁定,以禁止其它PCI主设备访问此资源,直到锁定这个资源的主设备将其释放。PCI总线使用LOCK#信号实现LOCK总线事务,只有HOST主桥、PCI桥或者其它桥片可以使用LOCK#信号。在PCI总线的早期版本中,PCI Agent设备也可以使用LOCK#信号,而目前PCI总线使用LOCK#信号仅是为防止死锁和向前兼容。LOCK总线事务将严重影响PCI总线的传送效率,在实际应用中,设计者应当尽量避免使用该总线事务。
更多内容请看下回。