基础概念
PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。PCI插槽也是主板带有最多数量的插槽类型,在目前流行的台式机主板上,ATX结构的主板一般带有5~6个PCI插槽,而小一点的MATX主板也都带有2~3个PCI插槽,可见其应用的广泛性。
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。
PCI和PCIE插槽有什么区别?
区别一、总线类型不同,PCI插槽是基于PCI局部总线的扩展插槽,而PCI-E插槽则是最新的总线和接口标准,这个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一。
PCI使用共享并行总线架构,其中PCI主机和所有设备共享一组通用的地址,数据和控制线。 相比之下,PCI Express基于点到点拓扑,单独的串行链路将每个设备连接到根系统(主机)。 由于其共享总线拓扑,可以对单个方向上的PCI总线进行仲裁(在多个主机的情况下),并且一次限制为一个主机。 此外,旧的PCI时钟方案将总线时钟限制在总线上最慢的外设(不管总线事务中涉及的设备如何)。 相比之下,PCI Express总线链路支持任何两个端点之间的全双工通信,同时跨多个端点的并发访问没有固有的限制。
区别二、颜色不同,PCI插槽是乳白色的,而PCI-E插槽是黑色的。
区别三、规格不同,PCI插槽只有一种规格,而PCI-E插槽有X1(250MB/秒),X2,X4,X8,X12,X16和X32通道的7种规格。
区别四、传输速率不同,PCI插槽最大数据传输率为133MB/sec(32位)和266MB/sec(64位),而PCI-E插槽,目前最高可达到10GB/s以上。
基地址寄存器(BAR)
什么是BAR寄存器?BAR寄存器是基地址寄存器。
通过BAR寄存器,我们首先知道这个基址对应的空间属性,然后给这段空间分配一个基址(这个基址只是用来路由寻址用的,不能和存储器空间的地址搞混,很多软件实现上会把两个地址设置成一样,但是本质上没有任何关系,只是TLP寻址的时候用的!)。这样的话,TLP就能根据地址被路由到对应设备的BAR空间中去。
比如说现在有一个mem read request,如果路由地址(地址信息包含在TLP中)是0x71000000,而有一个设备func0的mem空间范围0x70000000~0x80000000,那么这个TLP就会被这个func处理。从func0的0x71000000对应的地址读取相应数据。
设备在系统的PCI地址空间里申请一段来用,所申请的空间基址和大小保存在BAR寄存器里。BAR里的只是PCI域的地址空间,需要映射到IO地址空间里或者内存地址空间里之后软件才能使用。映射到IO空间的话,用IO读写指令和函数去访问设备;映射到内存空间的话,首先得到的是物理地址,映射到虚拟地址后就可以像用指针那样访问。