专用周期命令
概述
主设备发出专用周期命令将一个消息广播给一个或更多驻留在目标PCI总线上的目标。在PCI总线上的每个目标必须检查此消息,确认此消息是否适用目标(指所设计的目标不能识别任何消息或仅识别特殊消息,大部分目标不关心经过专用周期传送的信息)。在目标的配置命令寄存器(图7-3)中经它的专用周期位,目标有能力监视使能的或禁用的专用周期消息。作为利用专用周期通过消息的实例,INTEL X86处理器可利用专用周期来指明什么时候它们正进入停止或关闭状态。
在地址段中,一个有效地址不能驱动到AD总线上(因为INTEL X86处理器在开始一个专用周期交易时不能提供有效地址),AD总线必须以稳定的方式驱动,以至对AD总线的奇偶校验(PAR信号)和命令总线内容检查正确性。在地址段,主设备利用C/BE[3:0]来表明这是个专用周期交易。
在地址段,主设备在AD[15:0]上广播消息类型和一个可选项,相关的消息单元出现在AD[31:16]上,消息和相关数据仅在IRDY#有效的时钟内有效。包含的数据和后继数据段的时序取决于消息。如果必要,主设备通过使IRDY#无效插入等待状态到交易中,但目标不能插入等待状态。另外,当目标识别到一个消息时,不能使DEVSEL#有效。因为多个目标都可识别消息类型,如果它们通过有效DEVSEL#都在努力声明交易,那么它们需要在DEVSEL#线上竞争。目标必须观察IRDY#以确定主设备发送消息存在。由于所有专用周期都只将消息传送给PCI目标,因此当负向译码桥不能通过有效DEVSEL#看到任何目标声明交易时,就不能将交易传到扩展总线上(如ISA或EISA)。
因为目标不允许回应专用周期交易(DEVSEL#是不可能有效的),那么就必须用另一种方法来结束交易。主设备必须执行一个主设备失败命令来结束交易(即,以有序的方式使总线回到空闲状态)。必须注意当主设备用主设备失败中断交易时(因为目标不能有效DEVSEL#),它在配置状态寄存器中就不必设置接收主设备失败位。接收设备失败位仅在DEVSEL#被请求但没有接收到交易中需置位。
表7-2给出了本版规范当前定义消息类型。前两个消息代码0000h和0001h定义了关闭和停止。消息代码0002h是为X86处理器所使用为将来广播X86消息而定义的。因此,数据段AD[15:0]中应含有0002h,同时AD[31:16]应含有X86的消息。X86消息代码在INTEL X86产品文档中定义。消息代码0003h到FFFh为将来所使用。新的消息代码的分配要通过SIG处理,新的消息代码的请求应以文字方式向SIG提出。
在系统设计中,能够识别或广播消息类型的每一个PCI设备都必须将它所识别或广播消息类型紧密连接在一起。根据识别出的任何所分配的消息类型,一个PCI目标应该采取相应的应用行为,此行为由所接收的消息类型定义。
专用周期命令至少花费6个时钟周期来完成(若主设备通过延迟消息的出现和有效IRDY#来插入等待状态则需要更长时间)。总线上下一个交易开始前对于交接周期需要两个额外时钟,所以,假定主设备迅速输出消息后进入数据段,从专用周期开始到下一个周期开始总共需要7个时钟周期。
专用周期交易
单数据段专用周期交易
图7-4是专用周期交易的时序图。
时钟1:在数据段中,主设备驱动一个稳定的状态到AD总线和PAR上,这仅是为奇偶检验的目的,并没有驱动实际的地址。另外,主设备在地址段中驱动专用周期命令到C/BE总线上。
时钟2:在地址段结束,数据段开始,主设备驱动消息代码到AD[25:0]上,并驱动可选项和有关消息数据到AD[31:16]上。主设备也将相应的字节使能线有效(如:如果消息是停止或关闭,就是C/BE[1:0],如果是消息类型二就是C/EB[3:0])。当主设备使IRDY#有效时,消息仅允许在AD总线上出现一个时钟。主设备通过延迟使IRDY#有效,在数据段中插入等待状态,当消息驱动到AD总线上,主设备使IRDY#表明它的存在。作为举例,消息可以或不可以驱动超过一个时钟。当主设备使IRDY#有效时表明它正存在消息,同时使FRAME#无效以表明这是此交易的一个并且唯一的数据段。在输入一个数据段之后,主设备延迟使IRDY#有效(以及消息的出现),直到7个时钟都是合法的。
时钟3:当在时钟3的上升沿采样到IRDY#有效时,设计用于识别专用周期的目标可以获取AD总线上的消息信息。
时钟4:见时钟7;
时钟5:见时钟7;
时钟6:见时钟7;
图7-4 专用周期交易
时钟7:一旦主设备要显示消息,并使IRDY#有效来表明它的存在时,主设备必须保持IRDY#有效4个额外时钟,以给目标4个时钟允许处理时间来处理消息。如果要很快无效IRDY#,总线将回到空闲状态且另一个主设备开始一个交易,此交易面对的是接收到消息的目标之一,目标有可能不能轻松的处理。相反,接收到消息的目标必须处理它,并且准备处理另一个交易,此交易是消息传递后已开始4个时钟。
作为变化,假定主设备直到时钟周期4才有效IRDY#,主设备必须保持IRDY#有效直到9,所以需要延长交易,允许目标从传递消息(在时钟5)到处理它共需4个时钟。
多数据段专用周期交易
主设备在专用周期内传送多个消息信息包是允许的。但目前没有定义这种能力的消息。在IRDY#被第一次采样有效的时钟上升沿,目标锁存第一个消息包。在每个数据段,当IRDY#有效时,FRAME#将保持有效,表明至少有一个数据段。为了传送最后消息数据包,FRAME#将保持有效直到IRDY#有效,随着最后IRDY#有效的同时它也被无效。在AD[15:0]上编码的消息类型可以表明传送的额外数量,或在AD[31:16]上编码的消息单元可表明包的数量,在紧跟着第一个有效的IRDY#的时钟单元内第二个数据段开始。
尽管规范中没有清楚地说明这点,但作者间接地说明主设备可以在第二个(和任何序列)数据段中使IRDY#无效直到它把下一个消息包放置在AD总线上,当IRDY#被采样有效时完成每一个额外数据段。在最后数据段中,当主设备有效IRDY#时它无效FRAME#,表明这是最后数据段。当最后数据段完成时,主设备在执行一个“主设备失败”命令使总线回到空闲状态前必须保持IRDY#有效至少4个附加时钟。前面提过,需要给目标足够的时间段来“处理”消息。规范中没有解释这个“处理”可能的形式(因为它将由在系统规定)。