PCI 总线学习系列,参考自
技术大牛博客: PCIe 扫盲系列博文连载目录篇
书籍:王齐老师的《PCI Express 体系结构导读》
下面的文章中加入了自己的一些理解和实际使用中遇到的一些场景,供日后查询和回忆使用
1、PCI 总线概述
PCI 总线的全称是 Peripheral Component Interconnect,直译过来就是外部的组件互相连接,也就是外设互联标准的意思。是由 PCISIG (PCI Special Interest Group) 推出的一种局部并行总线标准。PCI 总线是由 ISA(Industy Standard Architecture) 总线发展而来的,是一种同步的独立于处理器的 32 位或 64 位局部总线。
最早提出的 PCI 总线工作在 33MHz 频率之下,传输带宽达到 133MB/s(33MHz * 32bit/s)。后面提出 64bit 的 PCI 总线,总线频率也提升到 66MHz。
PCI 总线是一种共享总线,共享总线就是总线上的设备分时共享这条总线,这点和 PCIe 或 AXI 等总线系统不一样,所以 PCI 是一种古老的总线,并不是高速总线。分时共享也注定了 PCI 需要总线仲裁器(Arbiter)。
2、PCI 信号线
下图中左边的是要求任何一个 PCI 设备都应具备的信号,右边的是可选信号,根据具体 PCI 设备的功能决定。
信号线 | 功能描述 |
---|---|
CLK | 总线的时钟线,提供同步时序基准,由 PCI 控制器提供 |
RST# | 复位信号线,强制所有 PCI 寄存器、排序器、信号回到初始状态 |
AD[0:31] | 地址和数据复用线 |
FRAME# | 帧信号,表示传输开始和结束 |
C/BE[3:0] | 总线命令编码 |
INTA#—INTD# | INTx 中断信号线 |
IRDY | 该信号有效时表示 PCI 主设备的数据已经准备完毕 |
TRDY | 该信号有效时表示目标设备已经将数据准备完毕 |
DEVSEL# | 该信号有效时表示 PCI 总线的目标设备已经准备好, 与 TRDY# 信号的不同之处在于该信号有效仅表示目标设备已经完成了地址译码 |
IDSEL | 片选引脚,PCI 总线在配置读写总线事务时,使用该信号选择 PCI 目标设备 |
REQ# | 仲裁信号,主设备输出给 PCI 总线仲裁器请求使用总线 |
GNT# | 仲裁信号,仲裁器对主设备请求的响应 |
3、PCI 总线事务类型
对 PCI 总线上的设备的各种操作,都是以总线事务为单位进行的,这是因为 PCI 总线上的数据传输是基于猝发传输的机制。总线事务类型包括存储器读、存储器写、IO读、IO写、配置读、配置写、中断响应等。
这些总线事务类型,会贯穿 PCI 学习的始终,后面实际遇到时,会 一 一 介绍,这里有个概念就行。
4、PCI 总线拓扑
PCI 总线是一种树型结构,并且独立于 CPU 总线,可以和 CPU 总线并行操作。PCI 总线上可以挂接 PCI 设备和 PCI 桥,PCI 总线上只允许有一个 PCI 主设备(同一时刻),其他的均为 PCI 从设备,而且读写操作只能在主从设备之间进行,从设备之间的数据交换需要通过主设备中转。
注:这并不意味着所有的读写操作都需要通过北桥中转,因为 PCI 总线上的主设备和从设备属性是可以变化的。
比如 Ethernet 和 SCSI 需要传输数据,可以通过一种叫做 Peer-to-Peer 的方式来完成,此时 Ethernet 或者 SCSI,则作为主机,其它的设备则为从机
上图是老式计算机的一个大概结构,在这个结构中,北桥(也叫作 HOST 桥)连接CPU、内存、显卡和 PCI 总线,PCI 总线连接北桥和南桥。北桥中的仲裁器则通过很多组的 REQ#(request) 和 GNT# (grant)来分别与各个设备连接,用以决定哪一个设备获得 PCI 总线的控制权。
从上图还可以看到,PCI 总线是典型的外围总线,连接的都是比较低速的设备,显卡和内存这种高速设备不会连接在 PCI 上(现代计算机的显卡几乎都是连在PCIe上的)。另外,PCI 总线可以挂载 PCI 桥(可以不止一个),PCI 桥下面可以多出一条独立的 PCI 总线,称之为下级总线,同北桥一样,PCI 桥里也会有一个对于下级总线的仲裁器。显然,下级总线同样可以挂载 PCI 桥,这样子如果一级一级级联下去,整个 PCI 就会形成一个树形结构(一个系统最多256条PCI总线)。
最初的 PCI 总线的时钟频率为 33MHz,但是随着版本的更新,时钟频率也逐渐的提高。但是由于 PCI 采用的是一种 Reflected-Wave Signaling 信号模型,导致了时钟频率越高,总线的最大负载越少(每条 PCI 总线的负载数远低于理论值 32 个),如下图所示: