PCI peripheral component interconnect 外设部件互连标准
优点
1. 即插即用
2. 中断共享
3. 可扩展
4. 自动配置
缺点
1. 扩展性差:PCI总线结构限制了可挂载的设备数量,如66MHZ PCI总线负载能力为3
2. 安全性差:由于设备共享总线,系统难区分不同数据流而采用相应的保护措施
3. 容错性差:总线设备发生故障时,对故障设备的隔离和定位非常困难。任何单个I/O连接点的错误都能导致整个系统的崩溃
4. 系统整体I/O吞吐量地:所有设备共享一总线带宽,即外设越多,可用的带宽越少,从而噪声严重的系统I/O瓶颈。
同时,大量的引脚数目带来了电气特性和机械特性问题,使得PCB空间、信号频率以及传输距离均受到很大的制约。
主要性能:
1. 总线32位或64位,工作频率33MHZ/66MHZ,传输速率132MHZ/s、264MHZ/s 。
2. 32位地址和数据信号分时复用。
3. 支持64位寻址
4. 适用5V和3.3V电源供电
PCI-X总线位宽不改变的情况下,提高时钟频率:
PCI-X1.0的时钟频率66MHZ、100MHZ、133MHZ
PCI-X2.0的时钟频率有266MHZ、533MHZ、1066MHZ
此外,PCI-X还在传输协议上进行了改进,其采用了“寄存器到寄存器”的新协议
(“寄存器到寄存器”的新协议模式:发送方发出的数据信号会被预先送入一个专门的寄存器内,并在寄存器中保存一个时钟周期,接收端只要在这个时钟周期内做出响应,取走数据即可)
总线结构
PCI总线上可以挂载PCI设备和PCI桥片,PCI总线上只允许有一个PCI主设备,其他均为PCI从设备。而且读写只能在主从设备之间进行,从设备之间的数据交换需要通过主设备中转。
管脚信号
PCI主设备最少需要49根线,从设备最少需要47根线,剩下的线可选。
——管脚信号类型
A.in 输入信号
B.out 输出信
C.t/s 双向三态信号(Tri-state),无效时为高阻态
D.s/t/s 持续三态信号(Sustained Tri-state)
每次有且只有一个单元拥有并驱动的低有效、双向、三态信号。驱动一个s/t/s信号到低的单元在释放该信号浮空之前必须要将它驱动到高电平至少一个时钟周期。
E. o/d 漏记开路输出(Open Drain)
——管脚硬件处理
A.需要上拉的信号,上拉电阻10K[if !supportAnnotations][L1][endif]
FRAME#、TRDY#、IRDY#、DEVSEL#、STOP#、PERR#、SERR#、LOCK#、REQ64、REQ#、ACK64#、REQ#、GNT#、AD[63:32]、C/BE[7:4]、PAR64等
(未使用时也需要处理,避免悬空)
B. 不需要上拉的信号
AD[31:0]、C/BE[3:0]、PAR、IDSEL、CLK
① 系统引脚
CLK:in,系统时钟,为所有PCI上的传输及总线仲裁提供时序。除RST#外,所有PCI信号都在CLK的上升沿采样
RST#:in,异步复位信号
② 地址及数据引脚
AD[31:0]:t/s,地址数据复用引脚。地址和数据传输,必须在FRAME#有效器件进行。当FRAME#有效的第1个时钟周期,AD[31:0]传输的是地址信号,称为地址期;当IRDY#和TRDY#同时有效时,AD[31:0]传输是数据信号,称为数据期。传输数据是,AD[7:0]为最低字节
C/BE[3:0]#:t/s,总线命令和字节允许复用引脚。在AD[31:0]传输地址时,C[3:0]上传输的是总线命令;在AD[31:0]传输数据时,BE[3:0]用作字节允许,表示哪些通道上的数据有效。BE0#对应最低字节。
PAR:t/s,AD[31:0]和C/BE[3:0]#上的数据偶效验。PAR与AD[31:0]有相同的时序,但延迟一个时钟,在地址段后一个时钟,PAR稳定并有效;对于数据段,在写传输中,PAR在IRDY#有效一个时钟稳定有效,而在读传输中,PAR在TRAY#有效后一个时钟稳定并有效。一旦PAR有效,它必须保持有效值到当前数据段完成后一个时钟。在地址段和写数据段,主PCI设备驱动PAR;在读数据段,目标从PCI驱动PAR.
③ 接口控制引脚
FRAME#:s/t/s,帧开始信号。
IRDY#:s/t/s,Initiator Ready。在读操作中,IRDY#有效说明总线主设备已准备好接收数据;在写操作中,IRDY#有效说明AD[31:0]上已有有效数据。
TRDE#:s/t/s,Target Ready。在写操作中,TRDE #有效说明总线主设备已准备好接收数据;在读操作中,TRDE #有效说明AD[31:0]上已有有效数据。
STOP#:s/t/s,停止信号
LOCK#:s/t/s,锁定信号
IDSEL:in,初始化设备选择(Initialization Device Selcet)。在配置空间读写操作送,用作片选
DEVSEL:s/t/s,设备选择。驱动有效时,说明驱动它的设备已将其地址解码为当前操作的目标设备。
④ 仲裁引脚
REQ#:t/s,申请。向冲裁器说明单元想要使用的总线。
GNT#:t/s,允许。仲裁器向申请单元说明其对总线的操作已被允许。
⑤ 错误反馈引脚
PERR#:s/t/s,奇偶校验错误(Parity Error)。PERR#维持三态,在检测到奇偶校验错误后,在数据结束后两个时钟周期,由接收数据的单元驱动PERR#有效,并至少持续一个时钟周期。只有发出DESEL#的单元才能发出PERR#。
SERR#:o/d,系统错误(System Error)。用于反馈地址奇偶校验错误、特殊周期命令中的数据奇偶校验错误和将引起重大事故的其他灾难性的系统错误。
⑥ 中断引脚
INTA#、INTB#、INTC#、INTD#:o/d,中断输出。仅对多功能设备有意义。对于单设备只能使用INTA#
⑦ 高速缓存支持引脚
SBO#:in/out,检视补偿。当其有效时,说明对某条变化线的一次命中。当其无效而SDONE有效时,说明一次“干净”的检视结果
SDONE:in/out,检视进行。
⑧ 64位总线扩充引脚
AD[63:32]:t/s,地址数据复用引脚提供32个附加位
C/BE[7:4]:t/s ,总线命令和字节允许复用引脚
REQ64#:s/t/s,请求64位传输
ACK#:s/t/s,应答64位传送
PAR64:t/s,高双字偶校验
时序(写操作)
PCI仲裁器工作原理
PCI总线仲裁器采样到REQ2后,等到IRDY和FRAME有效后,才将GNT#拉低。避免某些PCI设备申请总线使用权而实际并不适用。
假如PCI总线仲裁器采样到REQ2后,一直没有采样到FRAME和IRDY信号有效,仲裁器等到内部定时器超时后,就不再等待了。
仲裁器规则:优先级高设备抢占优先级低设备资源
假如PCI设备的优先级顺序为:PCI3>PCI2>PCI1
PCI1正在使用PCI总线传输数据时,PCI2想要使用PCI总线,于是将REQ2拉低,向PCI总线仲裁器申请PCI总线的使用权。此时REQ1和REQ2均处于有效状态,虽然PCI2的优先级高于PCI1,但是总线仲裁器不会马上响应PCI2的请求。而是等到PCI1完成以此操作(注:是一次操作,而不是全部)后,PCI1将FRAME和IRDR总线驱动为高。
PCI2探测到PCI总线空闲后,将FRAME和IRDY信号驱动为低。总线仲裁器采样到这两个信号后,将GNT1驱动为高,同时将GNT2驱动为低,将总线的使用权交给PCI2。
此时,如果PCI1完成了全部数据传输,会将REQ1驱动为高。
如果,PCI1还有数据需要传输,那么它会将REQ1一直保持低电平,一直进行总线申请。等PCI2完全全部操作后,再将PCI总线的使用权释放给PCI1。
PCI设备的配置空间
目前三类首部格式:
首部类型0—用于全部除PCI之外的设备
首部类型1—用于PCI-PCI桥
首部类型2—用于Card Bus桥
PCI案例分析
问题描述:测试PCI总线的TRDY信号时,发现该信号低电平转高电平太缓慢
分析:
s/t/s特点:
a. 在某一时刻只能由一个设备驱动;
b. 在释放之前必须将该信号驱动到高电平,并且至少保持一个时钟周期
c. 其他设备必须等该信号释放至少一个周期以上才能重新驱动
d. 该信号需要进行外部上拉
上面的异常波形产生的原因为:IRDY在低电平状态直接为释放为高阻态后,完全依靠外部的上拉电阻将其拉到高电平位置。由于外部上拉较弱,所以出现上升缓慢的现象。
解决:修改逻辑代码即可