在一个PCI应用系统中,如果某设备取得了总线控制权,就称其为“主设备”;而被主设备选中以进行通信的设备称为“从设备”或“目标节点”。对于相应的接口信号线,通常分为必备的和可选的两大类。如果只作为目标的设备,至少需要47条,若作为主设备则需要49条。利用这些信号线便可以处理数据、地址,实现接口控制、仲裁及系统功能。下面对主设备于目标设备综合考虑,并按功能分组将这些信号表示于下图。
图中#号表示低电平有效,否则为高电平有效。
1、系统信号定义
CLK_IN:系统时钟信号,对于所有的PCI设备都是输入信号。其频率最高可达33MHz,最低频率一般为0Hz(DC),这一频率也称为PCI的工作频率。对于PCI的其它信号,除了RST#、IRQB#、IRQC#、IRQD#之外,其余信号都在CLK的上升沿有效(或采样)。
RST#_IN:复位信号。用来使PCI专用的特性寄存器和定序器相关的信号恢复规定的初始状态。至于PCI定序器之外的设备复位后如何变化,本次不说明。但必要的PCI配置寄存器,其复位状态是明确规定的。每当复位时,PCI的全部输出信号一般都应驱动到第三态。SERR#信号为高阻状态,SBD#和SDONE可驱动到低电平(如果未能提供三态输出)。REQ#和GNT#必须同时驱动到第三态,不能再复位期间为高或为低。为放置AD、C/BE#及PAR在复位期间浮动,可由中心设备将它们驱动到逻辑低,但不能驱动为高电平。RST#和CLK可以不同步,但要保证其撤销的边沿没有反弹。当设备请求引导系统时,将相应复位,复位后相应系统引导。
2、地址和数据信号
AD[31..0]:它们是地址、数据多路复用的输入/输出信号。在FRAME#有效时,是地址期;在IRDY#和TRDY#同时有效时,是数据期。一个PCI总线的传输包含了一个地址信号期和接着的一个(或无限个)数据期。PCI总线支持突发方式的读写功能。地址期为一个时钟周期,该周期中AD[31..0]线上含有物理地址(32位)。对于I/O操作,它是一个字节地址;若是存储器操作和配置操作,则是双字地址。在数据期,AD[7..0]位最低字节,AD[31..24]位最高字节。当IRDY#有效时表示写数据稳定有效,而TRDY#有效时表示读数据稳定有效。
C/BE[3..0]#:它们是总线命令和字节使能多路复用信号线。在地址周期中,这四条线上传输的是总线命令;在数据期内,它们传输的是字节使能信号,用来表示在整个数据期中,AD[31..0]上哪些字节位有效数据。
3、接口控制信号
FRAME#:帧周期信号。由当前主设备驱动,表示一次访问的开始和持续时间。FRAME#的有效预示着总线传输的开始;在其存在期间,意味着数据传输继续进行;FRAME#失效后,是传输最后一个数据期。
IDRY#:主设备准备好信号。该信号的有效表明发起本次传输的设备能够完成一个数据期。它要与TRDY#配合使用,二者同时有效,数据方能完整传输,否则即为等待周期。在读周期,该信号有效时,表示数据变量已在AD[31..0]中;在写周期,该信号有效时,表示从设备已做好接收数据的准备。
TRDY#:从设备准好信号。该信号有效表示从设备已作好完成当前数据传输的准备工作,也就是说,可以进行相应的数据传输。同样该信号要与IRDY#配合使用,二者同时有效,数据才能完整传输。在写周期内该信号有效表示从设备已做好接收数据的准备;在读周期内,该信号有效表示有效数据已提交到AD[31..0]中。同理,IRDY#和TRDY#的任何一个无效时都为等待周期。
STOP#:停止数据传送信号。当它有效时,表示从设备要求主设备终止当前数据传送。很显然,该信号由从设备发出。
LOCK#:锁定信号。当该信号有效时,表示驱动它的设备所进行的操作可能需要多个传输才能完成。也就是说,对此设备的操作时排它性的。而此时,未被锁定的设备,对它的非互斥访问仍然可以进行。LOCK#信号的控制是由PCI总线上发起数据传输的设备,根据它自己的约定并结合GNT#信号来完成的。即使由几个不同设备在使用总线,但对LOCK#信号的控制权只属于一个主设备。如果某一设备具有可执行存储器,那么它也必须能实现锁定,以便实现对该存储器的完全独占性访问。对于支持锁定的目标设备,必须能提供一个互斥访问块,且该块不能小于16个字节。由于主桥后面是系统存储器,所以也应能实现锁定。
IDSEL_IN:初始化设备选择信号。在参数配置读写传输期间,用作片选信号。
DEVSEL#:设备选择信号。在该信号有效时,表示驱动它的设备已成为当前访问的从设备。换言之,它的有效说明总线某处的某一个设备已被选中。
3、仲裁信号
REQ#:总线占用请求信号。该信号一旦有效即表示驱动它的设备要求使用总线,它时一个点到点的信号线,任何主设备都有其REQ#信号。
GNT#:总线占用允许信号,用来向申请占用总线的设备表示,其请求已获得批准。这也是一个点到点的信号线,任何主设备都应由自己的GNT#信号。
4、错误报告信号
PERR#:数据奇偶检验错误报告信号。但该信号不报告特殊周期中的数据奇偶错。一个设备只有在响应设备选择信号(DEVSEL#)和完成数据期之后,才能报告一个PERR#。对于每个数据接收设备,如果发现数据有错误,就应在数据接收的两个时钟周期内将PERR#激活。该信号的持续时间与数据期的多少有关,如果是一个数据期,则最小持续时间为一个时钟周期;若是一连串的数据期并且每个数据期都有错,那么PERR#的持续时间将多于一个时钟周期。由于该信号是持续的三态信号,因此,该信号在释放前必须先驱动为高电平。另外,对于数据奇偶错的报告既不能丢失也不能推迟。
SERR#:系统错误报告信号。该信号的作用是报告地址奇偶错、特殊命令序列中的奇偶错,以及其它可能引起灾难性后果的系统错误。如果设备不希望产生非屏蔽中断,就应采用其它机制来实现SERR#的报告。由于SERR#是一个漏极开路信号,因此,报告此类错误的设备只需将该信号驱动一个PCI周期即可。SERR#信号的发出和时钟同步,因而满足总线上所有其它信号的建立时间和保持时间的要求。要使该信号复位,需要一个微弱的上拉作用,但这应由系统设计来提供,而不是靠报错的设备或中央资源。一般这种上拉复位需要2~3个时钟周期才能完成。
5、中断信号
中断信号在PCI总线中使可选项,不一定必须具有。并且中断信号属于电平敏感性,低电平有效,使用漏极开路方式驱动。同时,此类信号的建立和撤销与时钟不同步。对于单功能设备,只有一条中断线,而多功能设备最多可有四条中断线。在前一种情况下,只能使用INTA#,其它三条中断线没有意义。所谓的多功能设备是指:将几个相互独立的功能集中在一个设备中。
PCI局部总线中共有四条中断线,分别是:INTA#、INTB#、INTC#和INTD#,均为O/D(漏极开路)。其作用是:用以亲贵一个中断。后三个只能用于多功能设备。
一个多功能设备上的任何功能都可以连接到四条中断线的任意一条。也就是说,各功能与中断线之间的连接时任意的,没有附件限制,二者的最终对应关系是由中断引脚寄存器来定义的。这显然提供了很大的灵活性。如果一个设备要实现一个中断,就定义为INTA#;要实现两个中断,就定义为INTA#和INTB#,依此类推。对于多功能设备,可以多个功能共用同一条中断线,或者各自占一条中断线,或者是两种情况的组合,但是,对于单功能设备,绝对不能再多于一条中断线上发中断请求。
系统供应商再对PCI连接器的各个中断信号和中断控制器进行连接时,其方法是随意的,可以是线或方式、程控电子开关方式,或者是二者的结合,这就是说,设备驱动程序对于中断共享事先无法作出任何假定。
6、其它可选信号
1)高速缓存支持信号
为了使具有可缓存功能的PCI存储器能够和写穿式(Write-through)或者回写式(Write-back)的Cache相配合工作,可缓存的PCI存储器应该能实现两条高速缓存(Cache)支持信号作为输入。如果可缓存的存储器位于PCI总线上。那么,连接回写式Cache和PCI的桥要能够将这对信号作为输出,而连接写穿式Cache的桥只需要实现一个信号。上述的两个信号的定义如下:
SBO#:试探返回信号。当该信号有效时,表示命中了一个修改过的行。当该信号无效时,而SDONE信号有效时,表示有一个“干净”的试探效果。
SDONE:监听完成信号。用来表示当前监听的状态,该信号无效时,表明监听仍在进行,否则,表明监听已经完成。
2)64位总线扩展信号
必须注意的是,如果要进行64位扩展,一下信号都要使用。
AD[63..32]:扩展的32位地址和数据复用线。再地址期(如果使用了DAC命令且REQ64#有效时)这32条线上含有64位地址的高32位,否则,它们时保留的;在数据期,当REQ64#和ACK64#同时有效时,这32条线上含有高32位数据。
C/BE[7..4]#:总线命令和字节使能多路复用信号线。在数据期,若REQ64#和ACK64#同时有效时,该四条线上传输的是表示数据线上哪些字节是有意义的字节使能信号。在地址期里,如果使用了DAC命令且REQ64#信号有效,则表明C/BE[7..4]上传输的是总线命令,否则这些位是保留的且不确定。
REQ64#:64位传输请求。该信号是由当前主设备驱动,并表示本设备要求采用64位通路传输数据。它与FRAME#有相同的时序。
ACK64#:64位传输认可。表明从设备将用64位传输。此信号由从设备驱动,并且和DEVSEL#具有相同的时序。
PAR64:奇偶双字节校验,是AD[64..32]和C/BE[7..4]的检验位。当REQ64#有效且C/BE[3..0]#上是DAC命令时,PAR64将在初始地址期之后的一个时钟周期内有效,并在DAC命令的第二地址期过后的一个时钟处失效。当REQ64#和ACK64#同时有效时,PAR64在各数据期内稳定有效,并且在IRDY#或TRDY#发出后的一个时钟处失效。PAR64信号一旦有效,将保持到数据期完成之后的一个时钟周期处。该信号与AD[63..32]的时序相同,但拖后一个时钟周期,对于主设备是为了地址和写数据而发PAR64,从设备是为了读数据而发PAR64。