PCI Express体系结构导读(1)

时间:2024-02-20 09:21:40

之前两篇介绍PCI的文章都没有仔细看下去,感觉介绍的视角不适合我,偏PCI规范本身。要从处理器的角度了解PCIE总线,现在来看这本强哥推荐的《PCIE体系结构导读》

 

前言

1)深入理解处理器体系结构是理解PCI总线的重要基础,超越PCI自身,去理解系统的局部总线。

     2004年开始PCIE取代PCI和AGP,成为局部总线工业标准。

     PCI 并行共享架构, PCIE串行

     刚刚接触PCI不要去读规范文档,规范文档适合查阅,不便于学习。

2)第一篇,PCI总线基础知识

    第二篇,PCIE相关概念

    第1章, posted,non-posed, split 数据传送方式,很重要

    第2章,PCI桥,PCI的精华

    第3章,数据传送方式,与cache相关和预读机制

    第4,5章,PCIE通述,x86的RC

    第6,7章,PCIE的事务层,链路层,物理层,物理层是核心,中国工程师最没机会接触的内容

    第9章,流控的管理和策略

    第10章,MSI和MSI-X中断机制,X86架构多用MSI-X,许多嵌入式处理器仍用MSI

    第11章,PCIE中的序

    第12章,linux驱动实现过程, capric和cornus卡

    第13章,PCI与虚拟化技术

    第三篇,linux系统中PCI的使用

-----------------------

第1章  PCI基本知识

 1)PCI (peripheral componet interconnect), 属于局部总线(local bus),主要功能是连接外部设备。由intel提出。

     ISA->PCI->PCIE, PCIE继承PCI的设计思路;

     还有各种相关规范:PCMCIA、PC Card、miniPCI 、 compactPCI(用于有背板的大型系统)、PCI-to-PCI桥规范、PCI-X(频率更高)

     PCI-to-PCI桥 (PCI桥)、PCIE-to-PCI桥(PCIe桥)、Host-to-PCI主桥(HOST主桥,PCI主桥,PCI总线控制器)

2)PCI总线空间和处理器空间隔离

    通过HOST主桥隔离,其中有许多缓冲,使得他们工作在各自的时钟频率

    主桥的作用是将处理器访问的存储器地址转换为PCI总线地址 (重要)

    以freescale的power PC和intel的x86处理器为例说明HOST主桥的实现方式。

3)可扩展

    HOST主桥引出PCI总线,PCI通过PCI桥扩展,形成PCI总线树,1课树最多256个PCI设备

    PCI 桥的配置空间有管理其子树的配置寄存器

4)动态配置

    PCI设备的地址可由系统软件动态分配,解决地址冲突,实现“即插即用”; ISA还需要跳线

    每个PCI设备都有独立的配置空间,其中有设备在总线中使用的基地址(物理地址)。

5)总线带宽

    PCI,32位、33MHZ的为132MB/s, EISA为33MB/s

6) 共享总线机制

   PCI设备通过仲裁后获得PCI总线使用,才能传输,不需要处理器干预。

7)中断机制

   PCI设备通过四根中断请求信号 INTA~D#向处理器提交中断请求。配置空间中有这四根信号的信息。还有MSI机制

 

X86,PowerPC, MIPS, ARM都把PCI作为标准局部总线,PCI设备:网卡,声卡,硬盘控制器等

ARM使用SoC平台总线,即AMBA总线,连接片内设备,但还是有AMBA-to-PCI桥

 

1.1 PCI总线组成结构

1)HOST主桥

 PCI设备通过HOST主桥访问主存,即DMA操作,cache一致性模块会监听,然后改变cache状态。

 数据交换:处理器访问PCI设备的地址空间; PCI使用DMA访问主存

 PowerPC处理器和主桥在一个芯片,x86主桥在北桥中;

2)PCI设备

 三类:PCI主设备、从设备、桥设备

  PCI设备可以是主也可以是从,统称PCI Agent, PCI网卡、显卡、声卡都是。

3)HOST处理器

  HOST主桥中有许多寄存器,x86中有0xCF8和0xCFC两个I/O端口 访问PCI设备的配置空间;

  powerPC中则是CFG_ADDR和CFG_DATA来访问;

4)PCI总线的负载,一个插槽相当于2个负载,即PCI最多10个负载

   

1.2 PCI的信号定义

1)PCI设备通过一些信号与PCI总线相连:地址/数据信号,控制信号,仲裁信号,中断信号等

    每个设备都有CLK信号,用于同步数据传递

2)地址和数据信号

   a. AD[31:0]信号,复用地址和数据信号,先传地址,再传数据;

       突发传输,一个地址周期后,多个数据周期

   b. PAR信号,为地址数据信号线提供奇偶校验位

   c. C/BE[3:0]#信号

       地址周期,该信号表PCI总线的信号

       数据周期,表示字节选通信号

    目前多数PCI设备不支持I/O地址空间,仅支持存储器地址空间

3)控制信号,作用是保证数据的正常传递

   a. FRAME#信号, 指示一个PCI总线事务的开始和结束。低有效

   b. IRDY#信号, 由主设备驱动,表主设备的数据准备好了

   c. TRDY#信号,由目标设备驱动,表目标设备数据准备完毕;

   d. STOP#信号,目标设备请求主设备停止当前事务

   e. IDSEL信号,配置读写总线事务时,选择PCI目标设备   

   f. DEVSEL#信号,目标设备准备好

   g. LOCK#信号, 将目标设备的存储器和IO资源锁定,禁止其他主设备访问。避免使用,因为影响传送效率

4)仲裁信号, REQ#和GNT#

   每条PCI总线都有一个总线仲裁器(PCI桥中). 先是主设备发REQ#给仲裁,然后GNT#会有效就获得了使用权

5)中断请求

   INTA#, INTB#, INTC#, INTD# , 低有效,PCI设备向处理器提交中断请求,驱动的ISR清除中断后,PCI设备将信号置高,结束中断。

    通过一个规则(中断路由表)得知来自不同PCI设备的中断请求

 

1.3 PCI总线的存储器读写总线事务

 1)PCI设备只有在系统软件初始化配置空间后,才能被访问

 2)配置空间初始化后,该设备就拥有一个独立的PCI总线地址空间,即BAR(base address register) 中描述的空间

 3)Posted和Non-Posted数据传送方式

     Posted方式:主设备传数,到PCI桥时,由桥来接管下发。减少阻塞。

     Non-Posted: 数据必须到达目的地才能结束总线事务。PCI总线使用Delayed总线缓解这种方式的拥塞。

     只有存储器写(PMW)可以采用posted事务,而存储器读,IO读写,配置读写只能Non-posted事务

 4)HOST处理器访问PCI设备

   包括两方面: HOST处理器向PCI设备发起存储器和IO读写请求

                     HOST处理器对PCI设备进行配置读写

   a. PCI设备的配置空间中,共6个BAR,可以存放I/O地址空间,存储器地址空间,等PCI总线地址空间,是PCI总线域的物理地址。

   b. x86有独立的IO空间,可以把PCI的IO地址映射到存储器域的IO地址空间,通过IN,OUT对存储器域IO访问,

       HOST主桥又转换为PCI域的IO地址,最后访问到PCI设备的IO. 两个域的I/O地址相同;

      而PowerPC则把PCI设备的IO映射到存储器地址

 5)PCI设备读写主存

     PCI设备与主存进行数据交换的过程被称为DMA. 按照我们的9056驱动来看,处理器读写PCI设备也可以DMA

 6)Delayed方式

     用于缓解non-posted拥塞,分为delay读写请求和delay读写完成

     

     处理器传给主桥后,启用retry周期,就释放总线了。delayed读请求DRR,读完成DRC

     虽然有提升,但重试周期也会消耗PCI总线,所以PCI-X和PCIE升级为split事务,发送端将non-posted发给接收端

     然后接收端主动将数据传递给发送端

 

 1.4 中断机制

    两种:INTA/B/D#信号和MSI

  1) x86使用APIC中断控制器,powerPC使用MPIC中断控制器

      中断控制器有外部中断请求引脚IRQ_PINx#, BIOS的中断路由表记录INTx信号和中断控制器的连接关系

    

     多数设备仅使用INTA,PCI配置空间interrupt pin寄存器记录了该设备究竟用哪个INTx信号。

     INTx属于边带信号,即这些信号在PCI总线中是可选信号,只能在处理系统内部使用,PCI桥不会处理这些边带信号

     中断路由表:由BIOS保存两者间的映射关系

 2)中断的同步

      INTx与CLK信号无关,涉及异步

     如当设备DMA写主存,ISR中收到INTx时,并不意味着数据已经写入主存,因为数据传递需要通过HOST主桥和PCI桥,才能到主存。

     (即两个路径,无法确定哪个信息率先到达)

     所以ISR中要先读中断状态寄存器,这个读保证了数据已经到达主存,(利用了PCI总线的“序”机制)

3) MSI中断机制

     实际上是存储器写事务,是某段存储器地址范围,数据事先安排好的,含有中断向量号。HOST主桥会翻译这个写事务为中断请求给处理器

     PCI-X和PCIE必须支持MSI,PCI不一定

 

1.5 PCI-X总线简介

1) 频率可达533MHZ

2)split事务,requester和completer,和delayed比,数据是由completer主动传递的,而不是通过requester通过多次重试得到的。

3)目标设备可以将主设备发的命令锁存,在下一个时钟周期进行译码操作。提高了效率

    很少有基于PCI-X的设备