外围部件互连(Peripheral Component Interconnect,PCI)总线是以Intel公司为首的PCI集团推出的一种局部总线标准,它定义32位数据宽度,可扩充到64位,使用33MHz的工作频率,最大传输率达264Mbps(33×8=264),与CPU时钟无关,支持并发工作,PCI总线主要是针对Pentium的开发和使用而设计的。
PCI局部总线除了上述的高速传输特性外,最突出的特点是实现了设备的自动配置功能,这也是PCI总线取代VESA总线的一个重要原因。按PCI总线规范设计的设备连入系统后能实现自动配置I/O端口、存储器缓冲区、中断资源与自动检测诊断等一系列复杂而烦琐的操作,无须用户人工介入,真正做到了设备的即插即用(plug&play)。
总之,VESA局部总线只是486微处理器上的一个经济实用的高性能总线,而PCI明确而严格的规范保证了其具有良好的兼容性和扩展性,同时再加上PCI灵活的自动配置能力,已使之成为通用的总线标准,将跨越几代平台,是一种具有广泛应用前景的总线。
一个采用了PCI总线的计算机系统中允许多条总线同时存在,由此出现了多总线系统结构的概念。多总线结构大大提高了系统的数据处理能力。图5-2是一个多总线系统的结构框图。
图5-2 多总线系统结构
PCI总线性能优秀,特点如下:
(1)PCI支持广泛的基于微处理器的配置,包括单处理器和多处理器系统,支持并发工作,PCI总线上的外设可与CPU并行工作,支持无限突发读/写方式(VL BUS仅支持16字节的突发读/写方式),特别适用于高速数据传输。这种优良的性能源于有多级缓冲的总线控制器。
(2)PCI总线与CPU异步工作,所有PCI总线上的操作都同步于PCI的CLK信号,总线时钟为33MHz。PCI总线宽度为32位,可扩充到64位;数据传输的最高速率为133bps(32位总线)~264Mbps(64位总线)。
PCI规范要求PCI设备必须支持16MHz~33MHz范围内的操作,并建议支持低到0Hz的操作。
由于PCI总线与CPU及其时钟无关,使PCI总线扩充卡可以插到任何一个系统的PCI总线插槽内,差不多成了一种通用卡。
(3)兼容性好。PCI总线不受CPU限制,可同时支持多组外围设备,能兼容已有的ISA、EISA、MCA、VESA等总线。在Pentium机中曾广泛采用PCI-ISA总线共存的方式,兼顾各种速度和性能的外设。PCI总线适用于多种外设接口,包括图形、网络、磁盘控制器、多媒体及其他扩展卡,而不像VESA VL总线仅针对图形卡设计。
(4)具有PnP(即插即用)功能。PCI卡内含有256个字节的配置寄存器,PCI卡一插入到PCI槽中,系统BIOS将根据读到的该扩展卡信息,结合系统的实际情况为插卡分配存储空间、端口地址、中断号和某些定时信息,从根本上免除了跨接跳线、设置DIP开关、指定中断号等麻烦的手动操作。
PCI总线是独立于处理器的总线,在CPU与外设之间插入一个复杂的管理流,协调数据传输速率,提供一个低延时的访问通路,可作为中间层或外围设备总线。PCI总线广泛应用到个人计算机、工作站和服务器系统中。PCI在单处理器系统中的典型应用如图5-3所示。
在图5-3中,PCI总线桥接器与DRAM控制器结合在一起,与处理器的耦合更紧密,同时提供了高速数据传输功能。桥接器起了数据缓冲的作用,使PCI总线速度可以与CPU的I/O处理速度不同。
图5-3 PCI在桌面系统中的应用
(1)PCI结构的特点如下所示。
① 驱动PCI总线的全部控制由PCI桥实现。PCI桥就是PCI总线控制器,它独立于处理器,采用独特的FIFO(先进先出)式的中间缓冲器设计,将处理器子系统与外围设备分开,使CPU脱离对I/O的直接控制。通过PCI总线控制器在CPU与高速外设之间传输数据,像道“桥梁”,故称“PCI桥”。CPU输出数据,先把成批数据送到PCI缓冲器,然后再由PCI总线控制器将数据写入挂在PCI总线上的输出设备,在此过程中,CPU可以去执行其他操作。读入时也是由PCI桥先把输入设备的数据成批装入PCI缓冲器中,在此过程中CPU可并行执行其他操作;整个数据块装入缓冲器后,再快速读进CPU。因此PCI总线和CPU总线的操作互相分离,互不影响。
② 兼容性强,适用范围广。使用标准总线桥的特殊模块可将PCI局部总线转换为ISA、EISA、MCA、VESA等标准总线,从而在PCI总线系统中可继续使用原先适配的ISA、EISA、MCA、VESA等总线的设备。
③ 可采用多PCI总线。当要连接到PCI总线上的设备很多而总线驱动能力不足时,可采用多PCI总线,这些总线都可并发工作,每组总线上可接若干个外设。通过PCI桥缓冲,用户可增加多种外围设备而不会降低CPU的性能和可靠性,相反却提高了整体效率。
(2)PCI信号线。
PCI总线信号线分两大类:必备的和可选的。对PCI接口而言,最少引脚数为47(受控器)或49(主控器),如图5-4左侧所示。49条必备信号线可分为5组,完成寻址、数据传输、接口控制、总线仲裁和错误报告、复位等系统功能。
图5-4 PCI总线信号
· 地址与数据线:包含32条分时复用的地址/数据线,4条信号线用来解释地址或数据信号,并使之有效;一条用于奇偶校验。
· 接口控制线:控制数据交换的时序,协调收发端动作。
· 错误报告线:用于报告奇偶校验错和其他错误。
· 仲裁线:非共享线(不同于其他PCI线),每个PCI主控器都有一对仲裁线,直接连到PCI总线仲裁器上。
· 系统信号线:时钟和复位引脚。
各条信号线的说明如表5-3所示。与ISA总线不同,PCI总线接口信号中没有专门的存储器读/写信号,而是隐含在C/0~C/
3中,如表5-3所示。
表5-3 必备的PCI信号线
分 类 |
符 号 |
名 称 |
类型 |
说 明 |
地址与 数据引脚 |
AD31~0 |
地址/数据线 |
t/s |
32条地址和数据复用引脚。一个PCI总线传输包含一个地址时钟周期和随后的若干个数据时钟周期 |
C/ |
命令/字节指示 |
t/s |
复用的总线命令和字节允许信号。在地址传输期间,4条线上传输的是总线命令;在数据传输期间,4条线分别指示4个字节通路是否有效 | |
PAR |
校验信号 |
t/s |
对AD和C/ | |
接口控制 引脚 |
|
帧有效信号 |
s/t/s |
当前主控器驱动,低电平有效,表示数据传输的开始和持续。该信号变为无效(高电平)说明数据传输进入最后一个时钟周期 |
|
主设备准备好 |
s/t/s |
主控器驱动,读操作周期有效表示主控器准备好接收数据,写操作周期有效表示数据已放到地址/数据线上 | |
|
从设备准备好 |
s/t/s |
从模块驱动,读周期有效表示从模块已将有效数据放到地址/数据线上,写周期有效表示接收端已准备好接收数据 | |
|
停止信号 |
s/t/s |
从模块发出,有效表示接收端要求发送端暂停数据传输 | |
|
I/O设备选中 |
in |
初始化被选择设备,参数配置读/写时作为片选信号 | |
|
设备选中 |
in |
接收端驱动,有效时向发送端表示接收设备被选中 | |
错误报 告引脚 |
|
奇偶校验错 |
s/t/s |
有效表示在写数据阶段接收端检测到数据奇偶错,或在读数据阶段发送端检测到数据奇偶错 |
|
系统错误 |
o/d |
可由任何设备发出,有效时表示地址奇偶错或特殊命令序列中的奇偶错或其他能引起灾难性后果的系统错误 | |
仲裁引脚 |
|
总线请求信号 |
t/s |
主设备用来向仲裁器申请使用总线。任何主设备都有自身的总线请求专用连接信号线 |
|
总线允许信号 |
t/s |
仲裁器给主设备的总线占用允许信号。任何主设备都有自身的总线允许专用连接信号线 | |
系统引脚 |
CLK |
时钟信号 |
in |
总线时钟是所有数据交换的时钟基准,上升沿被所有其他PCI信号所采样。支持的最高频率为33MHz |
|
复位信号 |
in |
迫使所有PCI专用寄存器、序列器和信号复位到初始状态,PCI的全部输出信号一般驱动为三态 |
注:上有横线的表示低电平有效,上无横线的表示高电平有效;in表示单向输入信号;out表示单向输出信号;o/d表示集电极开路、允许多个设备“线或”连接:t/s表示双向、三态I/O信号;s/t/s表示每次只能由一个主设备驱动的持续三态信号。
可选信号线51条,可分为5组,将地址/数据线扩充至64位,完成接口控制、中断、cache支持、JTAG/边界扫描等功能,如图5-4右侧所示。
· 64位总线扩充线:包括32条分时复用的地址/数据线,与必备的地址/数据线一起形成64位地址/数据线;4条线用于解释地址或数据信号并使之有效,两条线允许同意使用64位线;一条用于奇偶校验。
· 接口控制线:用于总线封锁,禁止其他主控设备占有总线。
· 中断线:非共享线,提供给必须请求服务的PCI设备,PCI设备有自己的中断线。
· cache支持线:支持在处理器或其他设备中能被高速缓存的PCI上的存储器,引脚支持cache监听协议。
· JTAG/边界扫描线:支持IEEE标准149.1中定义的测试程序。
各条信号线的说明如表5-4所示。
表5-4 可选的PCI信号线
分 类 |
符 号 |
名 称 |
类型 |
说 明 |
64位总线扩展引脚 |
AD63~32 |
扩展地址/数据线 |
t/s |
扩展到64位地址/数据复用线的高32位 |
C/ |
扩展命令/字节指示 |
t/s |
总线命令和字节允许多路复用扩展信号线。在地址传输阶段,提供额外的总线命令;在数据传输阶段,分别指示高4个扩展字节通道是否有效 | |
|
64位请求 |
s/t/s |
由当前主模块驱动,有效表示请求64位数据传输 | |
|
64位响应 |
s/t/s |
由从模块驱动,有效表示接收端要求执行64位数据传输 | |
PAR64 |
64位校验 |
t/s |
AD63~32和C/ | |
接口 控制 |
|
总线封锁 |
s/t/s |
有效则实现总线封锁,表明占用总线的设备要进行多次数据传输,禁止其他主控模块占用总线 |
中断 引脚 |
|
中断请求A |
o/d |
用于中断请求,通常对单功能设备有意义 |
|
中断请求B |
o/d |
用于中断请求,仅对多功能设备有意义 | |
|
中断请求C |
o/d |
用于中断请求,仅对多功能设备有意义 | |
|
中断请求D |
o/d |
用于中断请求,仅对多功能设备有意义 | |
cache 支持 |
|
探测返回 |
in/out |
表示命中了一个cache修改行。要覆盖时须先执行回写,该信号无效(高电平)而SDONE有效(高电平)时表示探测到的内容可直接覆盖 |
SDONE |
探测完成 |
in/out |
表示当前探测状态,该信号无效(低电平)表示探测仍在进行,有效则表示当前探测已完成 | |
(JTAG/边界扫描)引脚 |
TCK |
测试时钟 |
in |
在边界扫描阶段,TCK用于为状态和测试数据输入、输出设备提供时钟 |
TDI |
测试输入 |
in |
有效表示串行地将数据和指令移入设备 | |
TDO |
测试输出 |
out |
有效表示串行地将数据和指令移出设备 | |
TMS |
测试模式选择 |
in |
用于控制测试访问端口控制器的状态 | |
|
测试复位 |
in |
用于初始化测试访问端口控制器 |
注:上有横线的表示低电平有效,上无横线的表示高电平有效;in表示单向输入信号;out表示单向输出信号;o/d表示集电极开路、允许多个设备“线或”连接;t/s表示双向、三态I/O信号;s/t/s表示每次只能由一个主设备驱动的持续三态信号。
(3)PCI插槽与插卡。
PCI总线有两种插槽,分别适用于5V和3.3V电压环境;PCI插槽引脚部分长77.48mm,引脚之间相距1.27mm(为ISA的一半)。同时规定了3种电气类型的插卡:5V卡、3.3V卡和5V/3.3V通用卡,其中通用卡是实现5V到3.3V过渡时使用的;在插槽和插卡上同时用了一套对应的定位销键,以防止把插卡插到不适当的位置或不匹配的槽中,如图5-5所示。
图5-5 PCI插槽与插卡
每种PCI插卡(3.3V和5V)又都分为短型和长型两种,分别对应于32位或64位地址/数据线宽。短型卡定义了120根引脚,长型卡定义了184根引脚。
当总线主控器获得总线控制权时,主控器决定主从设备之间的数据传输类型。在地址传送周期,C/信号表示总线命令,首先指示传输类型,AD31~0线上的地址选中从设备。总线命令编码及类型说明如表5-5所示。
表5-5 PCI命令编码
C/ |
命令类型说明 |
C/ |
命令类型说明 |
0000 |
中断响应(中断识别) |
1000 |
保留 |
0001 |
特殊周期 |
1001 |
保留 |
0010 |
I/O读(从I/O端口读数据) |
1010 |
配置读 |
0011 |
I/O写(向I/O端口写数据) |
1011 |
配置写 |
0100 |
保留 |
1100 |
存储器多行读 |
0101 |
保留 |
1101 |
双地址周期 |
0110 |
存储器读(从内存空间映像中读数据) |
1110 |
存储器读行 |
0111 |
存储器写(向内存空间映像中写数据) |
1111 |
存储器写并无效 |
表5-5中各种命令类型的含义如下所示。
· 中断响应命令:是单个周期的读命令,回送的中断矢量的长度由字节使能信号来说明。
· 特殊周期命令:以广播的形式发给所有的设备,每个接收设备必须自我确定广播的消息是否适合自己,它不但能报告处理器的工作状态,而且可作为PCI设备间的辅助联络信号。
· I/O读命令:用来从映射到I/O地址空间的设备读取数据。
· I/O写命令:用来向映射到I/O地址空间的设备写入数据。
· 存储器读命令:从映射到存储器地址空间的设备读取数据。
· 存储器写命令:向映射到存储器地址空间的设备写入数据。
· 配置读命令:从设备的配置空间读取数据。当一个设备的IDSEL引脚有效且AD1~0=00时,该设备即被选为配置读命令的目标。在配置读的地址周期,AD7~2用来从该设备的配置空间(64个双字寄存器)中选出一个,AD31~11无意义,AD10~8表示从多功能设备中选择一个功能(8选1)。
· 配置写命令:向设备的配置空间写入数据。设备的选择及其他参数同配置读命令。
· 存储器多行读:用于在主设备连接断开之前预读多行cache数据,只要FRAME有效,就连续不断以流水线方式发出存储器读请求。该命令要求存储器控制器配合,传输大块连续数据,改善对存储器系统的访问性能。
· 双地址周期:两个地址周期发送64位地址,支持对64位设备的寻址。
· 存储器读行命令:用于读取多于两个数据周期的连续数据,其他与存储器读命令类似。
· 存储器写并无效命令:用一个或多个周期向映射到存储器地址空间的设备写入数据,与存储器写命令基本相同,但它保证至少有一个cache(高速缓存)行是写操作,将寻址到的cache行的每个字节都写入。该命令要求主设备的配置寄存器指明cache行的大小。
PCI上的基本总线传输机制是突发传输。一次突发传输由一个地址周期和若干个数据周期组成。PCI突发传输是指:位于主处理器和PCI总线之间的主桥电路可以将针对存储器的多次访问在不影响正常操作的前提下合并为一次传输,由主桥电路完成针对存储器的突发访问周期,最大限度地提高系统性能。
基地址寄存器的预取位被置位将允许读数据的预取和写数据的合并。根据初始化期间配置软件所提供的地址范围,主桥电路可以区分哪些地址空间可以合并,哪些不能合并。进行突发操作,根据基地址依次产生下一个传输地址,所产生的隐含地址顺序相同,主桥电路总是可以将它们组合成顺序读取/写入的数据。
PCI总线上所有的数据传输基本由以下3条信号线所控制。
(1):由主设备驱动,低电平有效,表示一次数据传输周期的起始和结束。
(2):由主设备驱动,低电平有效,表示主设备准备就绪;无效表示未准备好,插入等待状态。
(3):由从设备驱动,低电平有效,表示从设备准备就绪;无效表示未准备好,插入等待状态。