PCI Express体系结构导读(3)- PCIE

第四章 PCIe总线概述

4.1 pcie 总线基础知识

1)PCI是并行连接,一条总线上的多个设备共享总线带宽;

    PCIe是差分总线,端到端连接,频率更高;

2)一个数据通路(Lane),有两组差分信号,即4根信号线,TX部件和RX部件相连(这为一组)

    一个pcie链路可以有多个lane

 2.a) 一个差分信号由D+和D-两根信号组成,接收端通过比较它们的差值来判断是1还是0,与单端信号比,抗干扰能力更强。

 2.b)外部噪声加在两根信号上的影响一样,所以可以使用更高的总线频率

3) pcie链路支持1、2、4、8、16、32个lane,即支持这些数据位宽, 常用的是x1

    intel的ICH集成了多个x1的pcie链路,MCH集成了x16的pcie链路用于连接显卡控制器

    powerPC支持 x1,x2,x4,x8    

 PCIE不分多少数据位,PCI-E总线更类似串行线,一次通信走1个Bit。比较快主要是频率高,V3.0总线频率达4Ghz,单lane的峰值可达8GT/s=8Gb/s

4) PCIE使用的信号

 pcie设备使用2种电源信号供电,Vcc 和 Vaux, 电压为3.3v, Vcc为主电源

 PERST#信号, 全局复位,复位设备

 REFCLK+ 和 REFCLK-信号,用于与处理器同步

 WAKE#, 设备休眠时,主电源停止供电了,可以用该信号通知处理器来唤醒设备

 SMCLK, SMDAT, 即SMBus总线,源于I2C,管理处理器系统的外部设备特别是智能电源

 JTAG信号,用于芯片内部测试,包括TRST#,TCK,TDI,TDO,TMS信号

 PRSNT1#,PRSNT2#, 热插拔相关

 

5) PCIE总线的层次结构

 事务层,接收来自核心层的数据并封装为TLP,还有就是处理pcie中的“序”

 数据链路层,继续添加sequence前缀和CRC后缀,有多种DLLP包

 物理层,LTSSM状态机管理链路状态,PLP包,系统程序员仍有必要深入理解物理层工作原理

6)pcie链路的扩展

   用switch, 1个上游端口连RC,多个下游端口连EP

7)pcie设备的初始化

  传统复位convertional reset:包括fundametal 和 non-fundametal, fundametal 又分cold和warm reset; non-fundametal指的是hot reset

  FLR复位只复位与PCIE链路相关的部分逻辑

4.2 PCIE体系结构组成部件

1)大多使用RC、switch、PCIe-to-PCI桥连接设备,而基于pcie总线的设备,称为EP(endpoint)

    RC(PCI Express root complex)根联合体, 相当于PCIE主桥,也有称为pcie总线控制器

PCI Express体系结构导读(3)- PCIE_第1张图片

   RC在x86中由MCH和ICH组成, PCIe总线端口存储器控制器等接口集成在一起,统称RC

 2)PCIE设备包括 EP(如显卡、网卡等)、switch、PCIE桥

 3)RC与HOST主桥不同的是还有RCRB,内置PCI设备,event collector

    深入理解RC对理解pcie体系结构非常重要

 4)switch有一个上游端口和多个下游端口,上游端口连接RC、其他switch的下游端口,也支持crosslink连接方式(上连上,下连下)

   其实是多个PCI桥组成的

   PCIE 采用虚拟多通路VC技术,这些报文中设定TC标签,分为8类优先权。每条链路最多支持8个VC,用来收发报文。

   软件设置哪类TC由哪个VC传递,许多处理器Switch和RC只支持一个VC,而x86和PLX的switch可以支持两个VC

   TC和VC是多对一 

 5)不同ingress发向同一个egress端口,涉及端口仲裁和路由选径

   switch中设有仲裁器,规定报文通过switch的规则。分别基于VC和基于端口的仲裁机制

 6)PCIE桥

4.3 pcie设备的扩展配置空间

 1)PCIE要求设备必须支持capability结构,重点关注电源管理、MSI中断的capability结构

 电源管理capability有PMCR和PMCSR寄存器

 2)capability结构:PCIE capability register, device/link/slot 等capability 寄存器

第5章 Montevina 的MCH和ICH

intel的一款笔记本平台

 PCI Express体系结构导读(3)- PCIE_第2张图片

pci 0 上的MCH和ICH,是FSB总线的延伸,虚拟的PCI设备,只是使用PCI的管理方法

1)pci0的device0设备,管理PCI总线地址和存储器地址

  device0被认为是HOST主桥

2)存储空间的组成结构

 存储器域(CPU可访问)、PCI总线域、DRAM域(主存),有些DRAM只能被显卡控制器访问到,不能被cpu访问

 legacy地址空间:x86固有的一段1MB内存空间,DOS内存等

 DRAM域:大小保存在MCH的TOM中,即PCI0的配置空间中,legacy地址在它里面

 存储器域:

 PCI Express体系结构导读(3)- PCIE_第3张图片

5.3 存储器域的PCI总线地址空间

 PCI总线地址空间氛围 最低可用TOLUD~4GB,TOUUD~64GB

1)APIC 是x86使用的中断控制器

2)ECAM方式读写PCIE扩展配置空间,CONFIG_ADDRESS和CONFIG_DATA访问前256B

    ECAM是直接映射到内存来访问

 

第6章 PCIE事务层

第7章 链路层和物理层

第8章 链路训练和电源管理

第9章 流量控制

 合理的使用物理链路,避免接收端缓冲区容量不足而丢弃发生端的数据,从而要求重新发送。

 

第10章 MSI和MSI-X中断机制

PCI:必须支持INTx,MSI可选

PCIe: 必须支持MSI,INTx可选

MSI使用存储器写请求TLP向处理器提交中断请求,即MSI报文。PowerPC使用MPIC中断控制器处理MSI中断请求,X86使用FSB interrupt message方式处理。

绝大多数PCIe设备使用MSI提交中断请求

第11章 PCI/PCIE的序

序是指数据传送的顺序,保证数据完整性的基础

第12章 PCIE总线的应用

12.1 capric卡的工作原理

1) PCIe设备: Vetex-5内嵌的EP模块,该模块也被xilinx称为LogiCORE

   先主存到FPGA的片内SRAM(DMA读), 单次DMA最大0X7FF B , 2KB

   SRAM到主存 (DMA写)

PCI Express体系结构导读(3)- PCIE_第4张图片

2)仅使用BAR0,大小256B,里面有DCSR1/2, WR_DMA_ADR/SIZE, INT_REG, ERR

 

 12.3 基于pcie的设备驱动

属于char类型驱动

1)加载与卸载

PCI Express体系结构导读(3)- PCIE_第5张图片

这段代码主要作用是软件结构pci_driver与硬件结构pci_dev建立联系,pci_register_driver会做这个

2)初始化和关闭

  系统在PCI树中发现capric卡后,local_pci_probe调用capric_probe,入口参数pci_dev和ids,进行初始化

  初始化调用pci_enable_device使能PCIE设备(会修改command的io space和memory space位看配置空间是否使用它们),调用pcibios_enable_irq分配设备使用的中断向量号

  DMA掩码:存储域physical_addr &DMA_MASK = physical_addr表示可以对这段内存DMA操作

  a) linux中存储器映射的寄存器和io映射的寄存器都是ioresources管理,pci_request_regions把capric卡的BAR0使用的resource结构其name设置为DEV_NAME, flags设为IORESOURCE_BUSY,

  b) pci_resource_start 获得pci_dev资源的BAR0空间的基地址(存储器域物理地址),pci_read_config_word是pci域

  c) ioremap将存储器域物理地址映射为linux虚拟地址

  d)register_chrdev 注册char设备驱动

  e) pci_enable_msi 使能MSI中断请求机制

  f) request_irq(capric_interrupt) 使用中断服务例程

3)  DMA读写

 DMA写: 与capric_read对应

     kmalloc,实际驱动中很少在读写服务例程中申请内存,容易产生内存碎片,时间花费也长。

     pci_map_single虚拟地址转换为PCI物理地址

 DMA读:capric_write

    dma_sync_single 存储器与cache同步

    interruptible_sleep_on 等待

 

 4)中断处理

   系统的do_IRQ调用 capric_interrupt

   这里直接设置读写例程里面的等待事件就好

 5)存储器地址到PCI地址转换

   pci_map_single, 

   最初x86是直接相等的关系,为了支持虚拟化技术使用了VT-d/IOMMU技术

   powerpc是inbound寄存器把PCI转换为存储器地址,inbound可以看做一种IOMMU

 6)存储器与cache同步

  低端处理器不支持硬件cache共享一致性,需要在DMA操作之前,用软件将操作的数据区域与cache同步

  多数PCI设备,cache一致性可以由硬件保证

12.4 带宽和时延

   优化:减少对寄存器的读操作,如要读终端控制器状态寄存器可以改为收发等分开的IRQ

            流水线ring buffer技术,多路DMA读写并行执行

 

 第13章 PCI与虚拟化技术

 多个虚拟处理器系统,多个独立的操作系统,用一套CPU、内存和外部设备

 

 

 

 

 
  

转载于:https://www.cnblogs.com/yuanming/p/6904474.html

你可能感兴趣的:(PCI Express体系结构导读(3)- PCIE)