本节所给的时序图主要表示总线以32位方式执行有关操作时,相应信号之间的关系。在具体图示中,当以信号以虚线画出时,则表示没有设备驱动它,但若此虚线处在基准位置时,仍然可表示它具有一个稳定的值;当三态信号以虚线方式画在高、低状态之间时,说明它的值是不稳定的(例如,AD线或C/BE#线);当一条实线编程连续的短线时,表明它由原来的被驱动状态变成了现在的三态;当一实线在由低向高跳变后变为连续的短线时,则说明该信号先经预充电变为高电平,然后变成三态(释放)。上述关于信号状态画法的约定在以后的章节中同样适用。
4.1、总线上的读操作
下图表示了总线上一次读操作中有关信号的变化情况。
从图中可以看出,一旦FRAME#信号有效,地址期就开始,并在时钟2的上升沿处稳定有效。在地址期内,AD[31..0]上包含有有效地址,C/BE[3..0]上含有一个有效的总线命令。数据期时从时钟3的上升沿处开始的,在此期间,AD[31..0]线上传送的时数据,而C/BE#线上的信息却指出数据线上的哪些字节是有效的(即哪几个字节时当前要传输的)。要特别指出的是无论是读操作还是后边讲的写操作,从数据期的开始一直到传输的完成,C/BE#的输出缓冲器必须始终保持有效状态。
图中的DEVSEL#信号和TRDY#信号是由被地址期内所发地址选中的设备(从设备)提供的,但要保证TRDY#在DEVSEL#之后出现。而IRDY#信号是发起读操作的设备(主设备)根据总线的占用情况自动发出的。数据的真正传输是在IRDY#和TRDY#同时有效的时钟前沿进行的,这两个信号的其中之一无效时,就表示需插入等待周期,此时不进行数据传输。这说明,一个数据期可以包含一次数据传输和若干个等待周期。在上图中,时钟4、6、8各进行了一次数据传输,而在时钟3、5、7处插入了等待周期。
在读操作中的地址期和数据期之间,AD线上要有一个交换周期,这需要由从设备利用TRDY#强制实现(也就是TRDY#的发出必须比地址的稳定有效慢一拍)。但在交换期过后并且有DEVSEL#信号时,从设备必须驱动AD线。
在时钟7处尽管是最后一个数据期,但由于主设备因某种原因不能完成最后一次传输(具体表现是此时IRDY#无效),故FRAME#不能撤销,只有在时钟8处,IRDY#变为有效后,FRAME#信号才能撤销。
3、总线上的写操作
下图表示总线上一次写操作的时序关系。
由上图可知,总线上的写操作与读操作类似,也是FRAME#信号的有效预示着地址周期的开始,且在时钟2的上升沿处达到稳定有效。整个数据期也与读操作基本相同,可以自行分析。只是在第三个数据期中由从设备连续插入了三个等待周期,时钟5处传输双方均插入了等待周期。
值得注意的是,当FRAME#撤销时必须要有IRDY#发出位前提,以表明时最后一个数据期。另外,从上图可看出,主设备在是时钟5处因撤销了IRDY#而插入等待周期,表明要写的数据将延迟发送,但此时,字节使能信号不受等待周期的影响,不得延迟发送。
要说写操作与读操作的不同点,那就是在写操作中,地址期与数据期之间没有交换周期,这是因为,在此类操作中,数据和地址是由同一个设备(主设备)发出的。
最后强调的是:上述的读/写操作均以多个数据期为例来说明的。如果是一个数据期时,FRAME#信号在没有等待周期的情况下,应在地址期(读操作应在交换周期)过后即撤销。若由等待周期时,请自行分析其时序关系。
3.3、传输的终止过程
无论是主设备还是从设备,都可以提出终止一次PCI总线传输的要求,但要求不等于具体实施,也就是说双方均无权力单方面实施传输停止工作,需要相互配合,这一点可从下面的叙述中体会到。不过有一点是肯定的,那就是传输的最终停止控制要由主设备完成,这是因为传输的结束必须满足系统的要求并且应是有秩序的,这只有主设备才能做到。同时,所有传输的结束标志是FRAME#信号和IRDY#信号均已撤销而进入总线空闲状态。
1、由主设备提出的终止
主设备是通过撤销FRAME#信号并建立IRDY#信号来提出终止请求的。实际上,这样做的目的就是告诉从设备,现在已进入了最后的数据期,此后IRDY#一直保持有效,直到出现TRDY#信号,完成最后一个数据的传输。接着IRDY#便撤销,从而达到完全终止的条件(FRAME#和IRDY#同时无效),结束传输,进入总线的空闲状态。
主设备一般在什么情况下会提出终止传输的要求呢,其原因有二:
1)这是一个最常见,也是一个最容易理解的原因,它就是主设备已做完要做的事。
2)当主设备的GNT#信号无效并且内部的延时计数器已满,从而不得不终止传输,即所谓的超时。究其超时的原因,不是从设备产生的访问延迟,便是要做的操作太久。
下面通过例子来进一步说明上述两种终止传输的具体情形。
如下图所示,在时钟3处,主设备撤销了FRAME#信号而建立了IRDY#,说明它已得知目前的操作已完成,便以此方式提出终止,而此时TRDY#也正好有效,故最后一个数据被传输,而当时钟4到来时,IRDY#已撤销,因为此时传输已经完成,所以IRDY#也在此刻失效。但实际上在时钟3处,TRDY#也可以无效,从而形成最终数据传输及终止的延迟,应注意的事此时应保证主设备发出的IRDY#的有效期维持到最终数据传输完成为止。
在上图中,也可认为是因超时而引起的传输终止。在这种情况下,FRAME#在时钟3处的无效就应看成是由于计时器已满而造成的。此时GNT#撤销并且主设备已准备好最终数据传输(因IRDY#有效),但因GNT#无效,不允许使用总线,应该终止,(不过,若使用的是存储器写并无效命令,则可继续使用总线,因该命令引起的传输不受延时计数器的限制,并且这种传输只有在一个Cache行的边界上才能停止进行传输)其终止的具体过程与第一种方式一样。如果TRDY#在时钟2处无效,则终止便后延,最后数据期也要后延,直到TRDY#有效为止。值得注意的是在这种情况下,不一定要做完原来进行的传输。
2、由从设备提出的终止
如果从设备希望终止一次传输,就应向主设备发出STOP#信号以示请求。只要STOP#信号一有效,就必须保持到FRAME#信号撤销为止。在此器件,IRDY#和TRDY#间的关系与STOP#和FRAME#间的关系是相互独立的,也就是说,在目标设备要求总之传输的操作中,数据的传输可有可无,具体情况取决于当时IRDY#和TRDY#的状态,但有一点应说明:当从设备发出STOP#信号同时又使TRDY#无效时,则表明从设备将不再传输任何数据,这也意味着,主设备在此时不必等待最后一次的数据传输,而使整个操作结束。
从设备之所以要求终止当前的传输操作,可能基于以下两种理由:
1)由于死锁,某些非PCI资源处于非空闲状态及该设备处于互斥访问的锁定状态等原因,使得当前从设备无法进行正常的传输,不得不要求终止相应的传输操作。也就是说,从设备目前尚无数据传输。通常把这种情况也称为再试。
2)此种情况下的终止,通常也称为断开。使由于从设备在八个时钟周期内不能对主设备作出响应,因而只要要求停止传输。但断开往往不会发生在第一个数据期,也就是说,一般在进行了一些数据传输之后才会发生。
对于大多数从设备都要求能实现再试功能,而其它终止方式可作为选项。对于哪些不支持互斥访问、不能检测思索条件、不会陷入需要它们拒绝的一个访问之中的设备,也可将再试作为选项。但对于主设备要能够处理从设备以任何方式提出的终止请求。
再试方式较为容易,下面举例再对断开方式作进一步的说明。
如上图所示,由于从设备再发出STOP#信号时,同时使TRDY#有效,从而表明它还要进行一次数据传输才终止。从图中可以看出,在时钟2处STOP#已稳定有效,因此接下来主设备就将FRAME#撤销并建立TRDY#,表示接受了从设备的终止请求,并为最后一次数据传输做好了准备。数据的传输发生在时钟3处。
同上例一样,在STOP#发出之后也又数据要传输,但不同之处在于例1的数据传输发生在FRAME#撤销之后,而本例中则发生在FRAME#撤销之前(时钟2处)。当从设备发现数据已经完成,就应该把TRDY#撤销,也就是说,在该例中,最后一个数据期没有数据传输。
从上图我们可清楚的看到,在整个的终止过程中,未发生任何数据传输,这也是它与前两个例子的重要区别。实际上,该例本质使属再试方式,使断开的一种特殊情况。另外,该例中的FRAME#的撤销被延迟到时钟3之后,使因为等待IRDY#的发出。
从上面三个例子,我们也可总结处从设备终止的一些特点:
1)一旦STOP#信号发出后,它就必须维持其有效状态直到FRAME#撤销为止。
2)STOP#信号发出后,FRAME#要尽快撤销,而FRAME#撤销后,STOP#也必须在接下来的周期内立即无效。
3)在STOP#有效期间,DEVSEL#也处于有效状态。
4)从设备可以决定在STOP#发出之后是否还进行一次数据传输,若希望在停止之前进行传输,就要使TRDY#在发STOP#的同时有效。
5)从设备不能再STOP#撤销后继续传输数据,如果主设备要想将一被终止的传输重新启动,那么它就要再稍后的时间内用下一个未传输的数据地址来启动。
6)在从设备发出STOP#信号之后的数据传输不能多于一次。
7)当现行的传输被从设备终止时,主设备必须撤销它的REQ#信号,并保持至少两个PCI周期;若主设备要继续完成被终止的传输,它必须在撤销REQ#两个时钟周期之后立即重置REQ#有效,否则就失去了机会,只有等到以后再次使用总线时再发REQ#信号。
总之,综合前述内容,在PCI总线上的所有传输操作中,FRAME#、IRDY#、TRDY#和STOP#这几个信号一般都遵循下列规则:
1)当STOP#信号有效时,FRAME#应在其后的2~3各时钟周期内尽快撤销,但在撤销时,应置IRDY#为有效。而目标设备应无条件地保持STOP#的有效状态直到FRAME#撤销为止。但是,一旦FRAME#撤销,紧跟着STOP#也必须取消。
2)任何时钟前沿,若STOP#和TRDY#同时有效就表示是传输的最终周期,IRDY#要在下一时钟的前沿之前撤销,也就是表示传输的结束。
3)对于被目标终止的对话,主设备若要继续完成它,就必须用下一个未传输数据的地址来再试访问。
4)一旦从设备发出了TRDY#或STOP#,它就不能改变DEVSEL#、TRDY#和STOP#信号,直到当前的数据期完成。