八、PCI总线的其它操作

8.1、设备选择

一个设备是否被选中,是由DEVSEL#信号来指示的。DEVSEL#由当前传输中的目标设备所驱动,如下图所示。

DEVSEL#信号可在地址期之后的1个、2个或3个时钟处被驱动,具体时刻可在配置空间的状态寄存器中指定。DEVSEL#的发出必须早于或者同时于目标设备TRDY#、STOP#或读的时钟边沿,也就是说,一个目标设备要先置DEVSEL#有效后才能发出其它目标响应信号。一旦目标设备确定了DEVSEL#信号,就不能在FRAME#被撤销而IRDY#有效时和最后数据期完成之前撤销它。在正常的主设备终止情况下,DEVSEL#的撤销必须与TRDY#的撤销同时发生。

如果在FRAME#有效后的3个时钟周期内,没有设备发出DEVSEL#信号,则按负向译码的设备便可以置DEVSEL#有效并拥有传输的权力。倘若整个系统中没有一个负向译码的设备,则主设备就收不到有效的DEVSEL#信号,它便以自己的方式终止传输。

一个目标设备必须在进行了完全的地址译码之后才能发出DEVSEL#或任何其它的目标响应信号,否则设置DEVSEL#有效是非法的,因为这样可能造成冲突。在非配置命令中,目标设备必须先用FRAME#信号来认可AD线上的信息,然后才能设置DEVSEL#信号;而在配置命令中,目标设备要先用FRAME#和AD[1..0]来认可IDSEL信号后再设置DEVSEL#信号。一般来说,大部分目标设备都能再FRAME#有效之后的1~2个时钟周期内完成地址译码并发出DEVSEL#信号,如上图中的快速档和中速档。

如果一个访问中的地址落入目标节点的地址范围,这个目标就会发出DEVSEL#信号,表示承担这个传输访问。但是,如果主备企图跨越资源边界以继续它的突发传输时,目标节点就应该发出断开信号。

当一个目标设备许诺了一个I/O访问,同时字节使能信号又表示1个或更多的字节不再该设备的地址范围之内时,它就必须发出目标废止信号。对于一个负向译码的设备,如扩展总线桥,为了适应这类I/O问题,可采用如下之一的做法:

1)凡是发现有不同的设备公用一个双字地址时,就以该地址作正向译码,然后再用字节使能信号进行检测,发现问题就实现目标废止。

2)将整个访问都放到扩展总线上,没法服务的部分就丢掉。

8.2、特殊周期命令

该命令提供了PCI总线上简单的信息发布机制(消息广播),用以传达处理机状态,或者发送各个从设备之间的信号。如果不要求精确的时间关系或物理信号同步的情况下,此命令也可用来再PCI设备之间做逻辑的侧面连接信号。

由于特殊周期命令的目的是提供一种消息广播机制,因此该命令的发送中没有明显的目标地址,而是广播给所有的设备,每个接受设备必须自我确定广播的消息是否适合它。PCI总线上的设备不能设置DEVSEL#信号作为对特殊周期命令的响应,也就是说在此类传输中,不需要任何目标握手信号;同时,采用负向译码的桥也不能把特殊周期命令传到它的次级总线上去,即特殊周期命令不能跨桥传播。

一个特殊周期命令可以含有可选的、由消息决定的数据,而且这些数据不需要由PCI序列器本身来解释,它是根据需要传送给与PCI序列器相连的硬件。通常情况下,显式寻址的消息一般不采用特殊周期命令来处理,而是利用PCI总线上的三种物理地址空间的其中之一来处理。

就像其它总线命令一样,特殊周期命令中也包含一个地址期和一个数据期。地址期也是在FRAME#信号有效之时开始,当FRAME#和IRDY#同时撤销时,也表示该命令已经完成,要说它与其它总线命令的唯一区别,那就是没有目标设备给出DEVSEL#响应信号,它时广播给所有设备,然后由感兴趣的设备予以接受并加以处理。

该命令在地址期中,除了发送命令之外不包含其它有效信息。但是,有一点要注意,尽管该命令不含有明显的地址信息,可AD[31..0]要被驱动到一个稳定的电平,同时也要产生奇偶位。在数据期内,AD[31..0]上含有信息类型和一个选型的数据字段,其中低16位AD[15..0]表示i信息类型;高16位AD[31..16]表示选项数据,但并不是所有的信息类型都要求高16位。主设备可以像对待其它总线命令一样,在特殊周期命令中插入等待周期,但是,由于没有固定目标,所以目标设备不能插入等待周期。消息和数据只在IRDY#有效的第一个时钟处有效,而其后数据期中所含信息及时序关系则由消息类型确定。

在地址期中,若C/BE[3..0]# = 0001,则表示特殊周期命令,此时,AD[31..0]别驱动为随机值且必须忽略;在特殊周期命令的数据期中,C/BE[3..0]#要处于有效状态,而AD[31..0]的各位如下表所示。

PCI序列器启动特殊周期命令的方式与其它的总线命令相同,但该命令的终止则要依靠主设备废止方式。响应的目标设备只要发现主设备废止时就直到访问已经完成,在此情况下,不能将配置空间的状态寄存器的“接收主设备废止位”置为“1”。一般来说,一个特殊周期命令最快可以在5个时钟周期内完成,同时要附加1个时钟周期作为下个访问开始之前的过渡周期(交换周期),换而言之,从一个特殊周期命令的开始到下一个访问之间,需要6个时钟周期。

8.3、数据/地址的渐进

PCI总线上的“事务代理”将一个设备发出的信号拓展到几个时钟周期之内逐步驱动,而不是在一个时钟内完成,这种能力成为渐进(Steping)。此概念的应用,可以使一个设备以“弱的”输出缓冲将一组信号在几个时钟周期内逐渐驱动到有效状态,从而减少了由每个输出驱动所产生的地电流负载。还有以各种渐进的方法是:允许设备以”强的“输出驱动在几个时钟内分批驱动,每个时钟周期驱动一部分信号,直到全部被驱动到有效状态为止,成为分批渐进,此方法可以减少同时开关的信号数量。

上述两种渐进方法,无论哪一种都能使一个芯片的电源线与地线输减少,从而使得设备的性能与价格之间具有取舍自由。但应注意,在采用全部渐进时,必须避免哪些要求严格的控制信号之间的相互耦合,这是因为,本应在各个时钟边沿上取样的信号此时可能在一个时钟边沿上出现跳变,所以,对性能要求较高的设备应慎用这种方法。

并非所有的信号都可以渐进,只要AD[31..0]、AD[64..32]、PAR、PAR64及IDSEL这些信号才行,因为它们总是要由控制信号来认可,或者说,这些信号只有在它们被认可的时钟边沿上才被认为是有效的。我们知道,AD线的确认,在地址期是依靠FRAME#信号,在数据期则是根据数据的传输方向分别依靠IRDY#或TRDY#信号;PAR是在每个认可AD的时钟之后一个周期内隐含确认的;IDSEL信号的确认则是通过FRAME#和译码得到的配置命令相结合来完成的。

下图表示了全部AD线的渐进情况。可以看出,一个主设备将FRAME#的建立一直推迟到该设备成功地驱动了全部AD线时为止。对于主设备来讲,一旦它的总线使用请求得到批准并且总线又处于空闲状态时,那么该设备对AD线和C/BE#线的驱动时允许的,也是必要的,但是它可以利用多个时钟周期来驱动使其达到有效值,然后再发FRAME#信号。

不过,这种延迟建立FRAME#信号的做法,使得主设备有可能失去总线的控制权,因此,对于任何设备,GNT#信号在FRAME#信号建立之前的一个时钟沿处必须有效,如果此时(上图中标A的时钟边沿)GNT#已被置为无效,仲裁器就会将总线批准给另外一个主设备使用,从而使当前主设备失掉中线控制权,从图中可明显看到,只要GNT#信号在B或C多对应时钟边沿处撤销,那么FRAME#信号就能够建立,并且传输将继续进行。需要说明的是,如果当前主设备失去总线控制时,它应立即将AD线置为第三状态。

8.4、配置周期

PCI的驱动软件提供了一个初始化的配置通道和一块独立的地址空间。为此,PCI设备应具有256字节的配置寄存器,有关这些寄存器的说明见后面章节。本节只讨论位访问PCI配置空间而设立的配置命令,即配置读命令和配置写命令。

一、配置访问

在前面的章节中我们已讨论过,正常的访问中,每个设备都对它自己的地址进行译码。然而,对于配置地址空间的访问,则要求采用另外的方法进行设备选择译码,即通过IDSEL引脚来选择PCI设备,也就时将IDSEL引脚作为”芯片选择“信号。对于某一PCI设备,只有当它的IDSEL引脚上有信号并且AD[1..0]在地址期内为00时,该设备才会被作为配置(读或写)命令的目标设备。64个双字寄存器的内部寻址是通过AD[7..2]和字节使能信号来完成的。

配置命令跟其它总线命令一样,允许以字节、字、双字或者突发操作的方式进行访问;访问过程中的其它操作及终止方式也和一般的命令没有什么差异。如果没有设备响应配置命令,则应由主设备废止。扩展总线桥绝对不能将配置命令传到扩展总线上去。

关于如何准确驱动IDSEL引脚的问题,一般由主桥或系统的设计者去决定。但是,才过去的设计中,该选择信号可以与高21位地址线中的其中一位相连,这是因为在配置访问中,高21位地址线没有别的用途。至于如何用高21位地址来决定IDSEL,还没有现成的或标准的方法可遵循,所以,设备必须留有IDSEL引脚。换而言之,PCI设备不能为了节省一个引脚而在内部将IDSEL信号连到一个条AD线上。唯独总线主桥可以例外,因为它可以决定如何映射IDSEL。

AD[31..0]在地址期中必须全部被驱动为有效状态,其中的每一条可连接一个设备,每次确定AD[31..11]当中的一条为IDSEL信号,从而可以从21一个设备中选择一个设备进行配置读写。

上述利用高21位地址线来决定IDSEL的方法会使AD线上增加一个负载,为此,可以将IDSEL利用电阻耦合到适当的AD上来解决负载加重这一问题。然而这样做,又带来了一个新的问题,那就是使得IDSEL的变化率大为减慢,并且在大部分时间内处于无效的逻辑状态。如下图中的”XXXX“所示的数据区段。

万幸的是,IDSEL信号只有在一个配置命令的地址期内才会用到,所以可以在FRAME#建立之前的几个时钟周期内,将与IDSEL相连的地址线进行预先驱动,以保证IDSEL信号在需要被采样时是稳定有效的。地址总线的预先驱动方法与前述的地址/渐进相类似。

为了支持分层的PCI总线,采用了两种类型的配置访问,分别成为0类配置访问和1类配置访问,其格式如下:

从上面的格式表示中可以看出,它们的实质是表示了AD线在配置命令的地址其中的用法。两类访问的区别在于AD[1..0]线上的取值不同。对于0类配置访问,AD[1..0] = 00,用来在运行的PCI总线上选择一个设备;对于1类配置访问,AD[1..0] = 01,用来将一个配置请求传递到另一条PCI总线上。可见,在此处AD[1..0]相当于标志位。

两类配置访问中的寄存器编号和功能编号字段具有相同的含义;设备编号和总线编号字段只用于1类配置访问中;目标设备对保留字段应予以忽略,不能做出任何响应。

下面对上述各字段的具体含义做一说明:

寄存器号:选择目标设备配置空间中的一个双字(DWORD)。

功能号:用来选择多功能设备的某一个功能,有八种功能供选择。

设备号:用以在一条给定的总线上选择32个设备的其中之一。但是如果采用IDSEL与一条AD线相连,只能选择到21个设备。

总线号:用以在一个系统中从256条总线中选择一条。

无论是主桥还是PCI到PCI的桥,如果需要残生一个0类配置访问时,要用设备号决定建立哪一条IDSEL信号;在AD[10..8]上提供功能号;在AD[7..2]上给出寄存器号;AD[1..0]此时必须为00以表示为0类配置空间。0类配置访问不会传播到本地PCI总线以外的总线上去,因此,必须要有一个本地设备对其做出响应,否则,主设备就会将该次访问废止。

倘若配置访问的目标不再本地总线上,而是在另一条PCI总线上,那就必须用1类配置访问。也就是说,1类访问只适用于PCI到PCI的桥,其它所有目标设备都将其忽略,不作任何响应。这些桥对总线号字段进行译码,以判断配置访问的目标是否驻留在自己的桥路之后。如果总线号不是只想自己桥路后面的一条总线,就将它忽略,如果访问的目标时本桥路后面的一条总线,此桥就要接收这次配置访问,其具体的响应又分为两种情况:①如果总线编号与该桥路所带总线相符,此桥就要把这个1类访问变换成0类配置访问,也就是将AD[1..0]由01转变为00,而AD[10..2]保持原值不变,同时对设备号进行译码从而选择一个IDSEL在相应的线上发出,开始一次配置访问;②如果总线编号与该桥路所带的总线不相符,此桥就会将配置访问直接向下一级传递。

有两种类型的设备可以响应0类配置访问:其一为单功能设备,是为了做到向后兼容而设定的,响应于否只需要利用它的IDSEL引脚和AD[1..0] = 00来决定;其二为多功能设备,能够接收功能编号字段,需要利用它的IDSEL引脚、AD[1..0] = 00及AD[10..8]的编码值这三个条件来决定是否响应相应的配置访问。这两类设备的却别在于它们的配置空间的头标区的编码值不同。

对于多功能设备,必须能对AD[10..8]进行完全译码。 以选择相应的功能,而且,只有那些在配置空间寄存器组中实现的功能才能得到响应。在它们所实现的功能中,必须具有0号功能,其它的功能都是可选的,并且功能编号可任意选择。例如,有一个2功能设备,那它必须有0号功能,而第二个功能的编号可以是1~7中当中的任何一个号码。

配置编码(程序)将会按照设备号的顺序在总线上进行探测。如果得知某一设备是单功能设备,就不会对该设备再作进一步探测;如果发现是一多功能设备,将会对其所有的功能进行检查。

二、配置周期的产生

在系统中必须提供一个可以由软件产生PCI配置周期的机制,通常将这种机制置于主桥路中。PCI总线规范支队PC-AT兼容的系统规定了产生配置周期的机制,而对其它系统未作规定。

对于PC-AT兼容机,PCI总线规范中定义了两种截然不同的机制,以允许软件产生配置周期,这两种机制成为配置机制#1和配置机制#2。下面分别予以叙述。

对于配置机制#1要求优先考虑并实现之。将来所有的主桥都必须实现配置机制#1,现有的桥如果有可能的话,也应该设法转变以实现它;配置机制#2的设立是为了做到向后兼容,因此,新的设计中绝对不能采用它。凡是在PC-AT兼容系统中使用的主桥,至少应实现这两种机制的其中之一。

1、配置机制#1

在配置机制#1中,使用两个DWORD(双字)的I/O单元。第一单元(CF8H)表示一个可读写的寄存器,叫做CONFIG-ADDRES;第二个单元(CFCH)成为CONFIG-DATA寄存器。

访问配置空间的一般机制是:在CONFIG-ADDRES中写入一个值,用以指定总线编号、设备编号、配置寄存器编号,这样一来,凡是对CONFIG-DATA寄存器的读写操作,都会使桥路把CONFIG-ADDRES的值转变为PCI总线上所要求的配置访问周期。

CONFIG-ADDRES寄存器为32位,其格式如下:

其中,位1和位0两位是只读位,读出值必须为00;位7到位2用以在设备的配置空间中选择一个DWORD;位10到位8用来选择一多功能设备中一个指定的功能;位15到位11用来在指定的总线上选择一个指定的设备;位23到位16用以在系统中选择一个指定的总线;位30到位24位保留位,只能读且读出值必须全为0;最高位是使能位,用来决定何时把对CONFIG-DATA寄存器的访问转变成PCI总线上的配置访问。当该位为”1“的时,表示允许,反之表示不允许。

任何时候,只要主桥发现一个对CONFIG-ADDRESS全部DWORD的I/O写命令,该桥就必须把数据存入它的CONFIG-ADDRES寄存器。如果主桥发现一个对CONFIG-ADDRES寄存器整个DWORD的I/O读命令时,它就必须送回CONFIG-ADDRES寄存器中的数据。对于此地址的其它任何类型的访问(即非DWORD),主桥必须将其按一次正常的I/O访问来处理,而不能产生特殊的响应。

CONFIG-ADDRES寄存器在I/O空间耗费的仅仅是给定地址上的一个DWORD(双字),使用字节或字寄存器的设备不会收到影响,因为这些内容将会原封不动的被传递。

当一个桥发现一个I/O访问落入CONFIG-DATA地址开始的DWORD中,它就要检查CONFIG-ADDRES寄存器中的使能标志位和总线编号字段,如果使能标志位为1,同时总线编号与该桥路或任何在该桥路之后的总线编号相符时,则该桥路就必须进行一次配置周期的转换。

配置周期的转换有两种类型可采用:第一种为0类,此类转换用在被寻址的设备位于桥路所连接的PCI总线上的情况下;第二种为1类,当设备位于桥路后面的另一条总线上时采用该类转换。

下图表示了0类配置周期在桥路上的转换情况。桥路对设备编号字段进行译码并在适当的IDSEL线上建立信号,从而在PCI总线上完成一次配置访问。从图中可以看出发送到PCI总线的AD线上各部分信息的转换关系,其中AD[10..2]直接取自CONFIG-ADDRES寄存器的相应位,AD[1..0] = 00。

对于1类配置周期的转换,其具体过程时桥路在一个配置命令的地址期中,直接将CONFIG-ADDRES寄存器的内容复制到PCI总线的AD线上,并且保证使AD[1..0] = 01。

在上述两种转换情况下,配合数据传输的字节使能信号必须从处理机总线上直接复制得到。

对于在处理机总线上具有与主桥同等功能的桥路系统,其中的同等桥路对CONFIG-ADDRESS的访问,一般被设计成以应答方式进行的,而处理机总线上的其它桥路将监听对CONFIG-ADDRESS寄存器的写操作。至于对CONFIG-DATA寄存器的访问,一般由主桥在进行配置转换中以应答的方式进行。

主桥和PCI到PCI的桥一般都要求两个配置空间寄存器,其内容用以决定神那么时候该桥路应进行配置周期的转换。一个寄存器成为总线编号寄存器,用来制定本桥路后面直接相连的PCI总线的编号;另一个寄存器叫做从属总线编号寄存器,用它来制定桥路后面最后一次总线的编号。这些寄存器均由POST历程负责将它们置以适当的初始值。

2、配置机制#2

配置机制#2实际上是为了PCI配置空间的访问提供了一种模式,在该模式中,把PCI的配置空间映射到4K字节的CPU I/O空间。如果该模式处于允许状态,则对C000H~CFFFH范围内I/O空间的任何CPU访问,都会变换成一个PCI配置周期。反之,当该模式设置为禁止状态时,对上述范围内的I/O空间的所有CPU访问,都成为对系统中响应I/O端口的访问。该机制不支持处理机总线上的同等桥路。

在这种机制下,要用到两个寄存器,现分述如下:

1)配置空间使能寄存器(CSE)

该寄存器位于I/O端口地址CF8H上,其作用是通过对该寄存器的写入来完成配置空间到I/O空间的映射。CSE寄存器各位的含义如下:

可见,CSE寄存器只有8位,因此,所有对该寄存器的访问必须是单一字节的操作。另外该寄存器是一个可读可写的I/O端口,在逻辑上它驻留于主桥路。各位的功能是:

a)、0位为使能位,当该位为0时,表示要产生配置周期,若将该位置1,则表示要用配置机制产生特殊周期(详细说明见后);

b)、位1~位3是为配置周期提供功能号,它们在产生配置周期时被传送到AD[10..8]线上;

c)、位3~位7叫开关字段,用来决定映射功能,可以把I/O空间的读写变成PCI配置空间的读写。

主桥对于读CSE寄存器的响应是把最后一次写入该寄存器的数据返回。系统复位之后,CSE寄存器被清零,主桥进入缺省状态,此时它对所有的I/O访问都按正常方式处理。

2)路径寄存器

该寄存器位于I/O地址CFAH处,用来指明访问哪一条PCI总线。它是一个可读可写的寄存器,且复位后的初始值为0,也是一个8位的寄存器。读这个寄存器时,它返回的是上次写入的值。如果该寄存器为“00”时,则表明要访问的总线是与桥路直接相连的PCI总线,而且是0类配置访问;如果该路径寄存器的值为非零时,则形成了1类配置访问,而且其值被映射到AD[23..16]线上,并在配置访问的地址期内送出。

3、配置空间的映射及配置周期的形成

下面介绍如何利用I/O地址、CSE寄存器及路径寄存器进行配置空间的映射和两类配置周期的产生。

如果CSE寄存器的开关字段不为0时,说明允许桥路进行配置空间的映射,这时,桥路必须把C000H~CFFFH范围内的所有I/O访问转变为PCI配置周期。这种变换首先要利用I/O访问的I/O地址,很明显,由于是对C000H~CFFFH范围内I/O访问的变换,因此,I/O地址的位15~位12必然为“1100”。至于I/O地址的其余位,其用途是位11~位8用来对每个总线上的16个PCI设备进行寻址,也就是从16个设备中选择其中之一;位7~位2用以选择设备配置空间中某一个特定的DWORD。

具体的变换又分为两种情况:其一是当路径寄存器位0时的情况,此时表明被访问的设备位于PCI总线编号为0的总线上,也就是说,该总线直接连在桥后,此时的变换结果是形成一个0类配置访问。如下图所示。

其二为路径寄存器不为0的情况,这时说明所要访问的设备不在桥路直接相连的PCI总线上,此时,该桥路应产生1类配置周期,并将路径寄存器的值映射到PCI总线的AD[23..16]线上,如下图所示。

4、利用配置机制形成特殊周期

这部分内容主要说明对于具有配置机制#1和配置机制#2的主桥如何实现软件产生特殊周期,而且不需要为次目的提供一个机构给主桥。

在具有配置机制#1的主桥上,当CONFIG-ADDRESS寄存器中的总线编号等于桥路的总线号,设备编号字段和功能编号字段均为全1且寄存器编号字段为全0时,则在下一次对CONFIG-DATA寄存器进行写操作时便会形成一个特殊周期。此时,当写CONFIG-DATA寄存器时,桥路就不会发出配置写命令,而是在C/BE[3..0]#上发出一个特殊周期命令,并在第一个数据期将I/O写数据放到AD[31..0]线上。在这种情况下,对CONFIG-DATA的读操作结果时不确定的。

假如CONFIG-ADDRESS的总线编号和桥路的总线编号不相符时,该桥路便把对CONFIG-DATA寄存器的写命令当作1类配置周期通过PCI总线向下传递。

对于具有配置机制#2的主桥,当CSE寄存器的位0置为“1”,并且该寄存器的功能编号字段为全“1”、开关字段为非零时,则允许该桥路在下次遇到CPU的I/O写访问地址CF00H的情况,形成一个特殊周期或者一个1类配置周期。

此时,不禁要问,如何判断时特殊周期还是1类配置周期呢?方法是:在上述条件满足的情况下,桥路还要检查路径寄存器的内容。如果该寄存器为全0,则主桥路在PCI总线上发出的是特殊周期命令,并在地址期内将特殊周期命令代码放到C/BE[3..0]#线上,在第一数据期把对地址CF00H的I/O写数据放到AD[31..0]线上;如果路径寄存器不是全0,则主桥路在PCI总线发出的是1类配置周期,其中的设备编号字段和功能编号字段(AD[15..0])全为“1”,寄存器编号(AD[7..2])为00.

在上述情况下,对地址CXXXH的读访问将会产生不确定的读出结果。

8.5、快速的背对背传输

对于一个主设备,可以采用两种方式进行快速的背对背传输,一种是访问同一设备,另一种是访问不同设备。但是不论是哪一种快速的背对背传输,只有在TRDY#、DEVSEL#或者STOP#不发生竞争的前提下才可以进行。

第一种快速的背对背传输允许将避免竞争负担加在主设备上,而第二种则是将这种负担加于所有潜在的目标设备上。如果主设备能够保证竞争不会发生,就可以将两次传输之间的空闲周期取消,具体地讲就是,如果主设备的第二次传输与第一次传输的目标是同一个,并且第一次传输又是一个写操作的情况下,便可取消两次传输之间的空闲周期。

在第二种快速背对背传输当中,要求主设备应知道潜在目标的地址边界,否则可能发生竞争。对于主设备可以将这种快速背对背作为选项,但目标设备必须对这种快速背对背进行译码。

由于第二种快速背对背允许将避免竞争的任务放在所有潜在的目标设备上完成,因此状态寄存器当中的快速背对背允许位可以接在高电平上,但是一个总线目标设备要这样作必须满足下列要求:

1)目标设备保证既不会独钓一个总线传输的开始部分,也不会丢掉地址,哪怕是传输开始之前没有一个空闲周期时也应如此。也就是说,在连续的时钟周期内,目标设备要能够跟上总线状态从一个最终数据传输(FRAME#为高,IRDY#为低)直接变到一个地址期(FRAME#为低,IRDY#为高)这样一种快速的跳变。

2)目标设备必须能避免DEVSEL#、TRDY#和STOP#信号的冲突。如果目标设备不实现最快的DEVSEL#响应时间,就可以保证这一点。而对于那些实现0等待译码的目标设备,除了下列两种情况之外,必须将上述三个信号延迟一个时钟周期再发送。

①当前的传输紧跟在一个总线空闲周期之后,这时就不是一个背对背传输。

②当前的目标设备已经在前次传输中设置了DEVSEL#信号,此时,尽管属于背对背传输,但所涉及的目标设备与前次相同。

对于背对背传输需要目标机构支持才能完成的主设备,就要使用命令寄存器中的快速背对背使能位(该位仅对作为总线主设备的设备有意义,且是一个可选项)。该位可读可写,如果这个使能位为“1”时,只要前一次传输时由当前总线主设备发动的写操作,那么该主设备就可以利用快速背对背的时续关系启动一次PCI传输,而不必考虑哪个目标设备被寻址。反之,如果这个使能位为“0”或者没有实现,那么只有在主节点能够确保新的传输所对应的目标设备与前一次相同的情况下,才可以进行快速背对背传输。该位的设置也许要由系统的POST例程来完成。但在设定时应确保同一条总线上的所有目标设备的快速背对背使能位均被设置。

PCI总线之所以提供快速背对背传输功能,是由于这种配置中将PCI总线作为处理机到主存的通路,从而使得在“低档”系统配置中可实现性能方面的改进。尤其使这种功能的实现代价几乎可忽略不计,所以建议所有新出的目标设备或者准备用于这种配置的设备都应实现这个功能。但是,对于现有的设备,没有必要仅为此功能而进行重新设计,这时因为如此做法对现有应用可能不会带来多少好处。

在其它所有条件下,主设备必须至少插入一个总线空闲周期,即就是在不同的主设备传输之间也要保证至少有一个总线空闲周期。值得注意的是,对于多端口目标设备,当它在快速背对背传输中被锁住时,只能锁定它本身。

有一点是重要的,在快速背对背传输过程当中其设备未被涉及的节点,不能也不需要利用FRAME#和IRDY#信号来区分中间传输边界。只要在快速背对背传输期间涉及到的主设备和目标设备才需要区分这些边界。

在一次背对背传输过程中,主设备可以直接启动下一次传输而不用插入一个总线空闲周期,当FRAME#信号撤销而IRDY#和TRDY#信号都有效时,表明最后数据期已经完成。当前主设备可以在前一次传输的最后数据传输期开始之时,启动下一次传输。如下图所示。

在上图中,主设备CLK3处完成了一个写操作,并且在下一次传输的地址期紧接着在CLK4上出现。目标设备必须在当前传输完成之后的下一个时钟上采样FRAME#信号。尽管背对背操作对主设备来讲可以是选项,但目标设备对此操作必须能够全部译码,即使支持第二种背对背机制的目标设备也必须能够区分全部PCI传输的完成,并能检测到所有的地址期。如果一个目标设备通过设置DEVSEL#信号而确立了从属关系后,它可以对传输请求发出再试响应。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值