1-PCI局部总线note1

来源:互联网 发布:floyd算法理解 编辑:程序博客网 时间:2024/05/16 09:27

第三章 PCI局部总线的操作

3.1总线命令

0010  I/O读;0011  I/O写;

0110  存储器读;0111  存储器写;

1010  配置读;1011  配置写

I/O读:从一个映射到I/O地址空间的设备中读取数据。AD[31:0]提供一个字节地址,全部32位译码。

I/O写:类似I/O读。

存储器读:从一个映射到存储器地址空间的设备中读取数据。

存储器写:类似存储器读。

配置读:从每个设备的配置空间中读取数据。在配置交易的地址期内,IDSEL引脚有效,且AD[1:0]=00时,设备被选作配置读的目标。AD[7:2]用于从每个设备的配置空间内的64个双字寄存器中选择一个,AD[10:8]表示选中设备的哪个功能,AD[31:11]无意义。

配置写:类似于配置读。

以上命令中,配置读和配置写命令要求所有的PCI设备(除主总线桥)都以目标设备的形式予以实现并响应,其他命令为可选实现的命令项。但如果一个设备实现了基本的存储器命令,它就必须支持所有的存储器命令;否则就需要将这些命令转变为基本的存储器命令来实现。

3.2 总线协议

3.2.1 交易控制:PCI局部总线的数据交易由FRAME#, IRDY#, TRDY#三条信号线来控制。IRDY#TRDY#跟主设备和从设备是否准备和建立好自己所要驱动的数据/地址总线或命令/字节使能总线有关;DEVSEL#跟目标设备是否完成地址译码并声明交易有关。

       FRAME#IRDY#均无效,总线处于空闲状态;FRAME#有效后的第一个时钟周期上升沿是地址期的开始,再下一个时钟周期的上升沿开始一个(多个)数据期;每逢IRDY#TRDY#同时有效时,在时钟前沿数据在主从设备间传输。主从设备可以分别利用IRDY#TRDY#无效来插入等待周期,但须满足相应的延迟要求。当数据有效时,发送数据方(写交易时为IRDY#,读交易为TRDY#)就要设置XRDY#有效,接收方在准备好接收数据后设置XRDY#有效,否则推迟接收数据。

       对于主设备,一旦设置了IRDY#,就不能改变FRAME#IRDY#,直到完成当前数据期,而一旦FRAME#撤消为无效,在同一个交易传输期即不能重新设置为有效。

       对于从设备,一旦设置了TRDY#STOP#信号,就不能改变DEVSEL#TRDY#STOP#直到完成当前数据期。而IRDY#TRDY#或是IRDY#STOP#同时有效后,一个数据期才得以完成。

3.2.2 PCI局部总线的编址

       PCI目标设备必须实现基地址寄存器,以请求一个能够用来提供访问设备内部寄存器和功能的地址范围。当一个交易在接口上启动时,所有的目标设备要根据自身的基地址寄存器对地址进行译码,以确定自己是否是交易要访问的对象,以决定是否使DEVSEL#有效以声明访问。译码的方式有正向译码和方向译码。

(1)       I/O地址空间

I/O地址空间中,地址期全部32AD线都被用来提供一个完整的地址编码。其中,AD[1:0]表示传输涉及的最低有效字节,而在数据期的字节使能信号C/BE[3:0]须与之相配合,以传输地址期所表示的有效字节。

(2)       内存地址空间

在存储器地址空间中,地址期AD[31:2]总线上提供双字地址,AD[1:0]不是地址译码的一部分,它用于表明主设备请求突发数据传输的顺序。若目标设备不支持所要求的突发顺序,它就要在完成一个数据期后用断开终止请求,这时可以选择在第一个数据期使用有数据断开或者在第二个数据期使用无数据断开。

(3)       配置地址空间:配置地址空间为设备的每一个功能分配了一个惟一的容量等于256字节的空间区域。

同一条PCI局部总线上的设备是 0类设备,而PCI-PCI桥后的设备是1类设备。在地址期,0类配置和1类配置访问的地址格式是不一样的。(具体可参看协议中配置访问地址格式定义)

需要注意的是,配置访问的地址中没有包含设备寻址的内容。实际上,在配置交易中,设备是通过IDSEL信号来选择的,而不是通过地址来寻址的。

3.2.3 字节校正和字节使能的用法

       1)在进入数据期时出现的字节使能:进入数据期,主设备立即驱动字节使能信号有效,以表明当前的双字或四字中传送的是那些字节。即使进入数据期时,主设备IRDY#仍然无效,(表明主设备不准备传送当前数据项)它也同样发出正确字节使能,并在此数据期中保持不变。

       2)在不同数据期中字节使能可以改变:主设备可以随着数据期的不同而改变字节使能,但同一数据期中应保持不变,且主设备允许使用任意的字节使能设置。

       3)没有有效字节使能的数据期:多种情况都可能引发一个数据期没有有效地字节使能。在这种情况下,目标设备要做出相应的反应:读操作中,目标设备必须在全部数据通道上提供稳定的状态,并在PAR位上产生正确的奇偶校验;写操作中,目标设备不能存储任何数据,主设备必须在全部数据通道上提供稳定的状态,并驱动PAR位。

       4)可以忽略字节使能的情况:预提取存储器的情况。

       5)字节使能的采样规则

       除了预提取存储器等可以忽略字节使能的情况,在每个数据传输期中,目标设备要求采样字节使能信号以确定在当前寻址的双字中传送哪些字节,那么在完成传输前它必须在每个数据期等待字节使能信号有效。若目标设备忽略字节使能,那么必须提供全部四个字节。

3.2.4 总线驱动与过渡

       为了避免多个设备同时驱动一个信号到PCI总线而产生竞争,在一个设备驱动总线转换到另一个设备驱动之间设置了一个过渡期,又称为交换周期。

       IRDY#TRDY#DEVSEL#STOP#利用地址期作为它们的交换周期。

       FRAME#, C/BE[3:0]#, AD[3:0]利用数据传输之间的空闲期作为它们的交换周期。

3.3 总线交易

3.3.1 总线上的读交易

       1.注意以下几点:

       1)从数据期一开始直到传输完成,在整个数据期中,C/BE#线上包含有效的字节使能信息,并且不受IRDY#状态的约束,以保证C/BE#线不会出现长时间的浮动。

       2)读交易的第一个数据期要求一个交换周期,需要由目标设备利用TRDY#来实现。在交换期过后并且DEVSEL#信号有效时,目标设备必须驱动AD线。

       3)在地址期,IRDY#, TRDY#, DEVSEL#作为交换周期,完成驱动过渡。

       4)在最后一个数据期,主设备因某种原因不能完成一次传输而致IRDY#无效时,FRAME#不能撤销,必须得等到IRDY#变为有效时,FRAME#信号才能撤销,以向目标设备指出这是最后一个数据期。若FRAME#IRDY#同时撤销,则表明传输结束,总线进入空闲状态。IRDY#在传输中科撤销为无效插入等待周期后再置为有效,但FRAME#一经撤销就不能再更改直到传输结束。

       2.单数据期读交易

       3.突发读交易举例

       注意以下几点:

(1)       在数据期中,主设备可以通过撤销IRDY#以插入等待周期,但在任意的数据期,主设备不能保持IRDY#无效超过7PCI时钟周期。

(2)       在数据期和地址期中,数据传输和地址命令锁存在时钟上升沿处完成。但一个数据期一般在时钟周期内下降沿附近开始。主设备驱动字节使能线,从设备驱动数据线一般都从这个时候开始。当从设备前一个数据期已经完成,但后一个数据期需要使TRDY#无效插入等待周期时,必须继续驱动前一数据到AD总线直到TRDY#有效,开始驱动新数据。当主设备完成前一个数据期,后一个数据期需要使IRDY#无效插入等待周期时,在等待周期即要开始驱动下一个数据期的字节使能信号直到完成下一数据期。

从这里可以看出,TRDY#有效与否会影响从设备驱动数据线AD,但IRDY#有效与否不会影响主设备驱动字节使能线。当然,这里是指在数据期中。

3.3.2 总线上的写交易

       1.注意以下几点:

       1)在写交易中,由于数据和地址都由主设备驱动,因此地址期之后没有交换周期。字节使能始终由主设备驱动,与读交易中情况一样。

       2)与读交易中相同,FRAME#的撤销必须以IRDY#的有效为前提,以表明最后一个数据期。

       3)与读交易中相同,主设备撤销了IRDY#而插入等待周期时,表明数据要延迟发送。此时等待周期中数据线AD上仍旧驱动上一数据期数据,但是字节使能信号不受等待周期影响,不得延迟发送。这与读交易中情况类似。

       2.单数据期写交易和多数据期写交易的注意事项同上面所述。

       疑问:单数据期写时,主设备在进入数据期后的7个时钟周期内使IRDY#有效,符合规范;突发写交易时,主设备在进入数据期后的8个时钟周期内提供数据,符合规范。在写交易中,主设备置IRDY#有效的同时,向AD线提供数据。这么说两个规范对数据期延迟的规定不一致?这是因为,主设备延迟规定主设备在初始数据期中FRAME#有效后的8个时钟周期(其中第一个时钟周期是地址期)内使IRDY#有效,在所有后续数据期的8个时钟周期内使IRDY#有效。

3.3.3 交易的终止过程

1.由主设备发起的终止

       主设备通过在建立IRDY#信号时撤销FRAME#信号提出终止请求。引起主设备终止请求的原因大致可以分为两类:交易完成和超时。

       主设备完成交易终止的过程与一般过程无异,属于正常交易过程。

       主设备废止终止是另一种不正常的情况。在主设备建立FRAME#信号,发起交易开始,若在其后的四个时钟周期内,DEVSEL#始终无效,则主设备会在第五、第六两个时钟周期内依次撤销FRAME#信号和IRDY#信号,以终止交易。这里的疑问是,若在FRAME#建立后的第五个时钟周期,DEVSEL#TRDY#由无效建立为有效,那么此时,FRAME#已经撤销,但IRDY#此时仍然有效,是否会进行一个时钟周期的数据传输呢?

2. 由目标设备发起的终止

1)重试:在初始数据期,在任何数据被传输前请求的终止。在一个交易的初始数据期,目标设备通过使STOP#有效而TRDY#无效来表示重试(在地址期和读交易期的地址期与第一个数据期之间的交换周期,STOP#不能有效),因此重试没有数据传输。

2)断开:断开发生于数据期数据传输同时或完成之后请求的终止。在断开操作的数据期中,数据的传输可有可无。目标设备通过同时使TRDY#STOP#有效,可在任何数据期发起有数据的断开。这种终止用于目标设备只想完成当前数据期而没有其他数据期的场合。目标设备通过使STOP#有效同时TRDY#无效,可在前一数据期有数据传输的任何后续的数据期发起无数据的断开。

3)目标设备废止:目标设备废止可发生于DEVSEL#声明了一个交易后的任何后续时钟上。目标设备通过撤销DEVSEL#并使STOP#有效来标识目标设备废止,同时必须撤销TRDY#信号。

4)目标设备终止中的信号规则:

       IRDY#有效地条件下,STOP#TRDY#有效地时钟上升沿都可以完成一个数据期。TRDY#有效时,完成数据传输;STOP#有效时,属于目标终止的情况,TRDY#有效,有数据终止,TRDY#无效,无数据终止。

       一个数据的传输发生于IRDY#TRDY#同时有效所对应的时钟上升沿,此时无论STOP#有效与否,都会完成数据传输。

       目标设备一旦建立STOP#信号后,必须维持其有效状态直至FRAME#撤销。之后,交易完成,STOP#也撤销。但目标设备不必考虑STOP#有效和FRAME#无效之间的时间关系。

       ④一旦目标设备发出了TRDY#STOP#信号,它就不能更改DEVESEL#,TRDY#STOP#信号直到当前数据期完成,即不允许它改变承诺。因为TRDY#STOP#中一个有效时,表明目标设备将以以下四种方式中的一种完成数据期。四种方式是不兼容的,目标设备能且只能选择其中一种方式来完成数据期:

a.     TRDY#有效,STOP#无效,完成当前数据传输,继续正常交易;

b.       TRDY#STOP#均有效,完成当前数据传输,终止交易;

c.       TRDY#无效,STOP#有效,当前数据期无数据传输,终止交易;

d.       TRDY#无效,STOP#有效,DEVSEL#无效,当前数据期无数据传输,目标设备废止。

STOP#有效后,主设备必须在IRDY#有效后的第一个时钟周期撤销FRAME#。该操作发生于STOP#有效后的1-3个时钟周期内。若此时TRDY#无效,说明不需进行数据传输,主设备可以立即使IRDY#有效;若此时TRDY#有效,则主设备要视自身情况可能插入等待周期。

⑥如果FRAME#已经撤销,那么TRDY#,STOP#DEVSEL#必须在最后数据期完成后的第一个时钟处撤销,并在下一个时钟处于三态。