使用总线,是一个点到点的信号线。
GNT#:总线占用允许信号。用来向申请占用总线的设备表示其请求已经获得批准,也是一个点到点的信号线。
1.2.5 错误报告信号
PERR#:数据奇偶校验错误报告信号。只报告除特殊周期之外的所有 PCI 交易期间的数据奇偶错误。
其中数据奇偶错误的产生对于在AD总线上驱动地址和数据信息的所有PCI设备都是强制性的。
SERR#:系统错误报告信号。是报告地址奇偶、特殊周期命令的数据奇偶错误以及其它可能引起灾难性后果的系统错误。
1.2.6 中断信号
PCI 局部总线中共有四条中断线,分别为 INTA#、INTB#、INTC#、INTD#,其作用是用以请求一个中断。
1.2.7 附加信号
PRSNT[1﹕2]#:卡存在信号。由插件板提供的信号,用来指出 PCI 插卡上是否存在一个插件板,如果存在就为它提供电流。
CLKRUN#:时钟运行信号。可选信号,作为设备的输入信号,用来确定 CLK 的状态。
1.2.8 64 位总线扩展信号
AD[64﹕32]:扩展的 32 位地址和数据多路复用线。在地址周期,如果使用了 DAC 命令且 REQ64#有效时,这 32 条线上含有 64 位地址的高 32 位,否则是保留信号;在数据周期,当 REQ64#和 ACK64#同时有效时,这 32 条线上含有高 32 位数据。
C/BE[7﹕4]:扩展总线命令和字节使能多路复用信号线。
REQ64#:64 位传输请求信号,由当前主设备驱动,表示本设备要求采用 64 位通路传输数据。
ACK64#:64 位传输认可。表明从设备将用 64 位进行传输。 PAR64#:奇偶双字节校验。 1.2.9 JTAG/边界扫描信号
TCK:测试时钟信号。
TDI:测试数据输入信号。 TDO:测试数据输出信号。 TMS:测试模式选择信号。 TRST:测试复位信号。
1.3 PCI 局部总线命令简介
总线命令是用来规定主从设备之间的传输类型的,它出现于地址周期的C/BE[3﹕0]线上。当一个主设备获得总线的拥有权时,它就可以启动表 2–2 中的任何一种交易类型。在一个交易的地址周期,命令/字节使能总线C/BE[3﹕0]用于表明交易命令和类型。
表 2–2:PCI 总线命令编码
PCI 总线传输操作
PCI总线的数据传输采用突发(burst)方式,每次传输由一个地址周期和一个或多个数据周期组成。
PCI总线传输包含读、写和中止三个内容。 (1) 读传输:
当FRAME#有效时,读传送开始,在AD[31﹕0]上保持有效地址信号,同时C/BE上保持一个总线命令。如果总线命令为0110B(存储器读命令),同时AD[31﹕0]的地址又在目标设备的地址范围内,该目标设备将置DEVSEL#信号有效(低电平),然后主设备停止驱动地址总线AD[31﹕0],置IRDY#为低,表明主设备准备好接收数据。第一个数据节拍产生于第三个时钟周期(第二个时钟为转换周期)。在这个数据周期内,C/BE[3﹕0]信号是字节允许,以表示数据总线
的哪些字节有效。这设备在接下来的每个时钟周期的上升沿检查TRDY#信号,若TRDY#为高电平(无效),表示从设备没有准备好,主设备自动插入等待周期,反之,将传送数据,从而完成一个数据节拍。当主设备使FRAME#从有效变为无效,表示当前是最后一个数据节拍。图中的DEVSEL#信号和TRDY#信号是由被地址期内所发地址选中的从设备提供的,但要保证TRDY#在DEVSEL#之后出现,而IRDY#信号是发起读操作的设备(主设备)根据总线的占用情况自动发出的,数据的真正传输是在IRDY#和TRDY#同时有效的时钟前沿进行的,这两个信号的其中之一无效时,就表示需插入等待周期,此时并不进行数据传输,这说明一个数据期可以包含一次数据传输和若干个等待周期。
(2) 写传输:
在写传输中,由于地址和数据都是主设备提供,不存在AD[31﹕0]的切换驱动的问题,所以没有转换周期。除此之外,写传输和读传输类似,数据节拍完成的工作是相同的。
(3)交易的终止过程
无论是主设备还是从设备都可以提出终止PCI局部总线交易的要求,但是双方都没权单方面的实施交易终止的工作,需要相互配合,传输的最终停止控制要由主设备完成,这是因为交易的结束必须满足系统的要求并且应该是有秩序的,而这只有主设备才能做到。同时交易的结束标志是FRAME#信号和IRDY#信号均已撤消而进入总线空闲状态。
1. 由主设备发起的终止
主设备是通过撤消FRAME#信号并建立IRDY#信号来提出终止请求的。这样做的目的是为了告诉目标设备,现在已经进入最后数据周期了,此后IRDY#一直保持有效,直到TRDY#信号出现,即开始完成最后一次数据传送,传输结束后将进入总线空闲状态。
主设备提出的终止传输的情况:
(1) 完成: 这是最常见的情况,是指主设备已经完成了要做的事了。 (2) 超时: 当主设备的GNT#信号无效并且其内部的延时计数器已满,从而不得不终止传输的情况。
(3) 主设备废止: 在2.2版规范中,允许主设备在没有目标设备响应的情况下终止交易的情况。
2. 由目标设备发起的终止
在大多数情况下,目标设备能够发出或者接收主设备请求的数据直到主设备终止交易。但是,当目标设备不能完成请求时,它可以用STOP#信号发起交易终止。目标设备用STOP#信号和其它信号的不同组合来向主设备表明导致终止的情况。
(1) 重试: 指由于目标设备忙,暂时不能进行交易而在任何数据被传输前请求的终止。在一个交易的初始数据期,目标设备通过使STOP#有效而TRDY#无效来表示重试。当目标设备重试时是没有数据传输的。
(2) 断开: 指目标设备在一定时间内不能做出响应并且不能继续突发时,在初始数据周期的数据传输的同时或完成之后请求的终止。这可能是因为突发穿越资源边界或资源冲突造成的,目标设备通过同时使TRDY#和STOP#有效,在断开操作的数据期中,数据传输可有可无。
(3) 目标设备废止: 指因目标设备检测到一个致命错误或目标设备不能完成请求而产生的不正常终止。一旦目标设备利用有效的DEVSEL#声明了一个访问,它可在任何后续时钟上产生目标设备废止。目标设备通过撤消DEVSEL#并使STOP#有效来标识目标设备废止。
总之,在所有PCI交易中,FRAME#和IRDY#应遵守以下规则: (1) FRAME#和它相对应的IRDY#定义了总线的空闲状态和忙状态,当二者之一有效时,总线处于忙状态;当二者都无效时,总线处于空闲状态。
(2) 一旦FRAME#被撤消,那么在同一个交易期内不能重新有效。 (3) 除非IRDY#有效,否则,不能撤消FRAME#(IRDY#必须在撤消FRAME#的第一个时钟边沿有效)。
(4) 一旦主设备建立了IRDY#,在当前数据期完成之前,它不能改变IRDY#或FRAME#。
(5) 最后一个数据期完成后,主设备必须撤消IRDY#信号。
2 PCI 接口的实现方案介绍
PCI总线是一个地址/数据、命令/字节选择信号复用的总线。它采用主从信号双向握手的方式来控制数据的传输,其接口电路设计和传统总线接口电路设计
有较大的差别,所以必须严格遵守PCI总线规范所规定的技术规范。
一般说来,一个PCI接口电路应当完成以下几种主要功能: 1. 地址译码及命令译码
由于PCI总线可以采用正向方式和负向方式进行译码,因此用户应视实际情况选择适当的译码方式。一般选择正向译码方式,为防止地址冲突,最好采用全地址译码,命令信号线C/BE[3﹕0]必须参加译码。
2. 地址产生电路
PCI的突发传输方式包括一个地址周期和若干个数据周期,因此在PCI接口电路中必须包含地址产生部件,用于向后级应用电路提供连续的地址。
3. 控制信号的产生
PCI总线的数据传输基本上由FRAME#、IRDY#、TRDY#和DEVSEL#这4根信号线控制,因此必须根据主从设备的忙闲情况相应产生这些控制信号。
目前用于实现PCI总线控制器的有效方案有两种:采用可编程逻辑器件和采用专用接口芯片实现。下面我们将分别讨论这两种实现方案的可行性。
2.1 采用可编程逻辑器件 PLD
这种方法是用符合PCI总线规范的PLD芯片如CPLD或FPGA来做,例如Altera公司提供的CPLD器件FLEX8000系列和Xilinx公司提供的FPGA器件XC3100A系列等。这样做也有两种选择:一个是购买IP核,几乎所有的可编程器件生产厂商都提供经过严格测试的PCI接口功能模块,由用户进行简单的组合设计即可,如Xilinx公司的Logicore和Altera公司的AMPP(Altera Megafunction Partners Program)等等。用户可以根据应用的需要来裁剪IP核并与相关应用电路一起烧入CPLD或FPGA中。另一种是采用类似于QuickLogic公司的一次性可编程芯片来处理,它在可编程芯片内部内嵌PCI接口电路,可与上面一样,其也可根据需要来裁剪,但只能烧写一次。
采用CPLD或FPGA等可编程逻辑器件实现PCI接口最大的优点在于其灵活的可编程性,对于一个典型PCI设计来说,并非一定要实现PCI规范中的所有功能,只需实现其中的一个子集即可,其调试方便,易于修改,不受插卡功能限制,当系统升级时,只需对可编程器件重新进行逻辑设计,而无需更新PCB版图。但是,要实现PCI规定的功能如完成逻辑校验、地址译码、实现配置等所需的各类寄存器,大致需要10000个门电路,并且可编程器件生产厂商提供的经