菜鸟笔记
提升您的技术认知

pcie 是什么 ? -ag真人游戏

    1)pcie(peripheral component interconnect express)是继isa和pci总线之后的第三代i/o总线。一般翻译为周边设备高速连接标准。

    2)pcie协议是一种端对端的互连协议,提供了高速传输带宽的ag真人游戏的解决方案。目前pcie已经发展到第四代pcie4.0, 每一代的发展,最明显的特征就是速率翻倍。

    3)是intel公司1991年推出的。批准组织:pci sig (pci兴趣小组)

    4)一个x16插槽可以运行x1、x2、x4、x8、x16的卡

 

  1. 从金手指边缘到pcie芯片管脚的走线长度应限制在4英寸(约100mm)以内。
  2. pcie的perp/n,petp/n,peckp/n是三个差分对线,注意保护(差分对之间的距离、差分对和所有非pcie信号的距离是20mil,以减少有害串扰的影响和电磁干扰(emi)的影响。芯片及pcie信号线反面避免高频信号线,最好全gnd)。
  3. 差分对中2条走线的长度差最多5mil。2条走线的每一部分都要求长度匹配。差分线的线宽7mil,差分对中2条走线的间距是7mil。
  4. 当pcie信号对走线换层时,应在靠近信号对过孔处放置地信号过孔,每对信号建议置1到3个地信号过孔。pcie差分对采用25/14的过孔,并且两个过孔必须放置的相互对称。
  5. pcie需要在发射端和接收端之间交流耦合,差分对的两个交流耦合电容必须有相同的封装尺寸,位置要对称且要摆放在靠近金手指这边,电容值推荐为0.1uf。
  6. scl等信号线不能穿越pcie主芯片。

 

按lane( 车道 --> 通道 )的个数分有 x1 x2 x4 x8 x16 (最大可支持32个通道)

按代来分 有 gen1 gen2 gen3 gen4 gen5

 

速度:

pcie 与 pci 之间的区别 

速度上

pci的工作频率分为33mhz和66mhz,最大吞吐率 266mb/s

pcie如3中描述,pcie 1.0 x1 的吞吐率就达到了250mb/s

传输方式上

pci 是并行数据传输,一次传输4字节/8字节,半双工

pcie是串行数据传输,全双工

硬件上

传输pci信号的是普通电平

传输pcie信号的是差分电平

链路上

pci是总线的连接方式

pcie是点对点的连接方式

 

 

 

 

 

 

 

点对点拓扑是什么样的?

 

pcie的物理连接方式:

 

pcie gen1 和 pcie gen2 采用的编解码方式是 8b/10b,pcie gen3 和 之后的 采用的是 128b/130b 的编码方式。

8b/10b 意思是说,当我们要传输8b的数据时,实际在通道上传输的是10b的数据,解码的时候,我们希望得到的是8b的有效数据。这样,相当于有效的带宽是实际带宽的 80%。

同理128b/130b,是传输128bit数据实际线路中传输的是130bit数据。

速率图中的单位间的关系:

传输速率单位 gt/s,表示 千兆传输/秒,是实际每秒传输的位数,他不包括额外吞吐量的开销位。

两个例子:

pcie gen1 x1 传输速率 2.5gt/s = 2500mt/s = ( 2500 / 10 ) mb/s

pcie gen3 x1 传输速率 8gt/s = 8000mt/s = ( 8000 / 130 ) x ( 128/8 ) mb/s= 984.6153... mb/s

 

 

在pcie设备和系统内存互相访问时,outbound是指cpu到设备方向;inbound指device--> rc(cpu端)方向。从这个概念上说,设备(device)都是外部的,没有内部设备之说。cpu读写rc 端的寄存器时,还是属于片上系统的范围,所以既不是inbound 也不是outbound。

 

pci设备拥有256b的配置空间,pcie还提供另外4kb的扩展,这256b的配置空间中前64b是规范了的,其他的字节是各个厂商自己定义的。

 

 

7.1 pci 设备的地址组成

① 总线号 --- 厂家id

② 设备号 --- 设备id

③ 功能号 --- 设备类

查看pci设备的工具是 lspci

使用工具 lspci 查找 ①②③

>lspci

 

 

上边输出的每行开头逻辑地址(xx:yy.z)分别表示①②③,

其中一个pci域能容纳 256 个总线,

每个总线可以支持 32 个pci设备,

每个pci设备可容纳 8 个pci功能

> lspci -t (以树状结构显示)

> lspci -x (打印出配置空间前64字节的内容)

> lspci -s (指定哪个)

 

 

挑选一个 vga compatible controller,如下

> lspci -s 01:00.0 -vxx

 

字节序是小端格式,

[ 0 - 1 ] 表示的是厂家 id,上图的是 0x10de

[ 2 - 3 ] 表示的是设备 id,上图的是 0x0659

[ 9 - 11 ] 表示的是设备类型代码,上图的是 0x030000

[14]表示的是设备类型,00表示普通端点设备;01表示bridge设备;02表示cardbus bridges

 

使用命令查询pci设备的厂商号和设备号

> lspci -n -s 01:00.0

列出格式 【设备类型:厂商id:设备id】

设备类型介绍:

设备类型可以在 http://pci-ids.ucw.cz/read/pd 网站进行查询,包括 classes、subclasses、program interfaces 三部分,上图中的设备类型是 030000依次对应下图,03是 device classes,00是device subclasses,00是program interfaces

 

7.2 基地址/bar

bar0: 0xf6000000

bar1: 0xc000000c

....

bar5:0x0000e001

有6个bar空间,每个bar记录了该设备映射的一段地址空间,为了区分 io空间和 io内存,分开描述如下:

当bar的最后一位为0,如下图,表示这是映射的io内存,1-2位表示内存的类型,00=任意32位地址,01=少于1m,10=任意64位地址,11保留。bit1为1表示区间大小超过1m,为0表示不超过1m。bit3表示是否支持可预取。

如上例子中,bar0是 映射的io内存,32位地址,不超过1m,不支持预取。

bar1(最后几位0110)也是映射的io内存,64位地址,区间大小超过1m,不支持预取。

 

 

 

当bar的最后一位为1,如下图,表示这是映射的io地址空间。上边例子中的bar5(最后一位是1)是映射的是io地址空间,基地址是 0x0000e

 

中断

由配置空间的irq pin决定是否支持中断,1表示支持,0表示不支持,加入支持,irq line是中断号。

上边的例子中支持中断号,中断号是0x0b

 

 

访问pci

pci设备包含3个寻址空间:配置空间、i/o端口 和 设备内存。

 

驱动中操作 pci 的配置区(上边讨论的64b的空间)

pci_read_config_[byte|word|dword](struct pci_dev *pdev, int offset, int *value);

pci_write_config_[byte|word|dword](struct pci_dev *pdev, int offset, int value);

offset, 想访问的配置空间中字节位置

value, 对read函数来说,用于存放读回来的数据

对write函数来说,是要写进去的值(这个int.....)

 

驱动中操作 i/o和内存

i/o区域包含寄存器,内存区域存放数据。

驱动中操作 pci 的i/o和内存

unsigned long pci_resource = pci_resource_[start|len|end|flags] (struct pci_dev *pdev, int bar);

start, 区域的基地址

bar, 取值 0 - 5

 

pci的配置空间是256字节,即 0x00~0xff,而pcie的配置空间是4k字节,即 0x00~0xfff。

 

pcie 一共支持 256条bus,32个dev,8个fun。同pci是一样的。共需要内存大小= 4k * 256 *32*8 = 256k bytes = 256m,这个256m的内存空间是为pcie设备准备的空间系统不可用。

 

pcie设备发展向前兼容pci,每个设备的配置空间的前256个byte是pci空间,后(4k-256)个byte的空间是pcie扩展空间

 

root和switch的每一个端口中都包含一个p2p桥,桥的配置空间是type1型

 

 

 

每个type1型的header中都包含最后一级总线号(subordinate bus number)、下一级总线号(secondary bus number)和上一级总线号(primary bus number)等信息。当配置请求进行bdf路由的时候,正是依靠这些信息来确定要找的设备的。

服务质量(qos)

决断振幅和带宽

。。。 如下截图

 

tlp 和 dllp 是什么?

tcp 是 事务层包的简写,结构下图

 

相关介绍网站:https://www.eefocus.com/chengjun1234/blog/17-01/402890_af2db.html

 

capability是什么?

capability是device通过在4k byte的configuration space里告诉host它支持哪些特性的,而capability又大致分为基本的capability与之后扩展的capability,在使用4k的配置空间时两者大同小异,都是采用链表形式来自定义capability的位置的,唯一的区别是后者种类多,且不同厂商所支持的capability有很大区别。如下图为configuration space的基本架构——0-3fh(pci head域),40h-ffh(基本capability区域),100-fff(扩展capability区域)。

基本的capability

capability point是在0-3fh(pci head域),偏移为34h,用于存放第一个capability的偏移量,偏移量的范围是40h-ffh(基本capability区域),这段区间可任意让你分配各种基本capability。

 

扩展的capability

 

 

第一个扩展capability默认就从100h的偏移位置开始放置,而不是像基本的capability那样从34h通过指针指过来。

 

pci总线空间与处理器空间隔离

pci设备具有独立的地址空间,即pci总线地址空间,该空间与存储器地址空间通过host主桥隔离。处理器需要通过host主桥才能访问pci设备,而pci设备需要通过host主桥才能访问主存储器。

处理器访问pci设备时,必须通过host主桥进行地址转换,反过来也是。host主桥的一个重要作用就是将处理器访问的存储器地址转换成pci总线地址。

 

 

网站地图