赞
踩
注意:部分图片和表述来源于网络,引用处会说明。
PCIE总线技术,也叫计算机内部总线技术”Peripheral Component Interconnect”,即外围组件互联。PCIe一般用在大型数据中心,可以接显卡,网卡等片外设备。
PCIe的基本结构包括根组件(Root Complex),交换器(Switch)和各种终端设备(Endpoint)
RC
在PCI规范中也被称为HOST主桥,RC模块需要接受操作系统相关的硬件信号(例如接口寄存器、状态寄存器、异常寄存器、数据缓存等,小型状态机等),主要完成的事务有:
1)PCI域与IO域地址映射机制
2)实现兼容PCI设备的中断映射以及PCIe中断写事务机制
3)实现核与PCIe接口间的报文与消息类型转换
4)存储PCIe设备的配置数据
switch
switch的实现通常将PCIe控制器的事务层bypass,从数据链路层的数据直接发送到用户逻辑中
EP
RC和EP在PCIE树形结构中扮演的角色不一样,Rp是根,EP是叶结点。从PCIE角度来看,RP可以发起CFG Rd和Wr,但是EP是不可以的。
二者在物理层和部分链路层来说可以相互访问,但是传输层却不行
bridge
PCIe bridge可以用于扩展PCI总线,也可以用于连接慢速设备,在PCI总线树中起到呈上起下的作用。例如pcie转网卡bridge、pcie转USBbridge等
如图,PCI总线可以通过PCI桥组成一个胖树结构,其中每一个桥片都是父节点,而PCI Agent设备只能是子节点,每一个PCI总线的下方都可以挂接一个到多个PCI桥,每个PCI桥都可以推出一条新的PCI总线。在同一条PCI总线上的设备之间的数据交换不会影响其他PCI总线
PCIe的数据传输速率计算
如下图所示是PCI到PCIe 5.0的所有版本的带宽和数据传输频率。
以PCIe3.0 x16情况举例,由于PCIe是一种全双共传输总线,因此计算其双向传输带宽和频率的关系为:8GHz * 16bit / 8bit * 2 = 32 GB/s
实际上由于PCIe采取8/10bit、128/130bit编码传输,实际有效代码需要乘以对应的系数。
参考链接:PCIe带宽的计算
NTB
有些特殊场景下,比如传统存储系统中的多个控制器,它们之间需要同步很多数据和控制信息,希望使用PCI-E链路直接通信。但是在switch上有多个RC设备时并不可以直接通信,因为主机的BIOS或者OS在枚举同一堆PCIe总线内的设备,并为其分配访问地址,此时会出现冲突。为了满足这个需求,出现了NTB技术。
其基本原理是地址翻译,因为两个不同的系统(术语System Image,SI)各有各的地址空间,会产生重叠。那么只要 在PCI-E Switch内部将对应的数据包进行地址映射翻译,便可以实现双方通信。这种带有地址翻译的桥接技术叫做None Transparent Bridge,非透明桥。
PCIe总线的缺点
ARI功能
参考链接:link
PCI和PCIe的关系
PCI是共享型总线,多个设备共享一条总线,这种情况下必然存在总线总裁。PCIe则是点对点连接,一个设备直接连接到另一个设备,不存在总线竞争和仲裁。
PCI总线上是单向传输,任意时刻只有一个方向的传输,PCIe则是任意时刻都可以双向传输。
PCI有很多的边带控制信号,如FRAME#, IRDY#, TRDY, STOP#等。PCIe总线上传输的都是基于包(packet),控制和其他处理都嵌入在包里。
本节主要参考《PCI Express® Card Electromechanical Specification 3.0》一文,主要针对PCIe的板级设计
参考链接:1.2 PCIe——PCIe电气特征
参考链接:1.3 PCIe——硬件实现架构
PCI Express是一种分层协议,由设备核心层、传输事务层,数据链路层和物理层组成。
该层级是PCIe协议栈的上层逻辑,负责地址转换、host逻辑接口、DMA等。
传输事务层定义了PCIe总线使用的总线事务,这些事务可以通过switch等设备传送到RC等其他PCIe设备,RC也可以使用这些事务访问其他PCIe设备。其主要工作包括:
当PCIe设备相互访问时,传送的数据报文将被事务层打包为一个或多个TLP,这些TLP会向下层次继续传送,最终通过PCIe总线发送给被请求设备。
实际上一个完整的TLP包由多个字段组成,并且这些字段分别由三个层次各自构建,最后经过物理层形成最终的TLP。
TLP格式
传输事务层完成TLP主要的部分header段和data段。
详情参考链接: 2.2.1 PCIe控制器——传输层——TLP字段解析
TLP-Prefix
该字段是20bit的PasID进程地址空间标记,可用于在用户结构中扩展IO虚拟化和共享虚拟内存
数据负载相关
当数据传输量较大时,需要根据负载的大小和限制调整为多个TLP进行传输。PCIe设备含有“Max_Payload_Size”和“Max_Payload_Size Supported”两个参数,这两个参数分别在Device Capability和Device Control寄存器定义,这两个寄存器在PCIe Capability结构中。
PCIe设备发送数据报文是,使用Max_Payload_Size参数决定TLP的最大有效负载,当PCIe设备所要传输的数据大小超过Max_payload_Size时,这段数据将被分割为多个TLP进行发送。
Max_Payload_Size supported参数固化在硬件中,指Max_Payload_Size的最大值。
参考链接:2.2.2 PCIe控制器——事务层——总线传输事务
END-to-END CRC,该校验码是根据header和data部分计算出来的端到端数据,将其附加到TLP末尾,方便数据包的接收方进行ECRC字段检验。
数据链路层保证来自于事务层的数据报文完整可靠的发送到下一层。
参考链接:2.3 数据链路层(DLL)模块分析
LINK CRC
参考链接:LCRC和ECRC的特征
参考链接:2.3.4 PCIe控制器——数据链路层——flow control
ACK/NAK用来保证TLP报文在链路上传输的可靠性,ACK DLLP表示TLP接收完成,NAK就是Negative acknowledge,表示拒绝接收这个TLP。
TLP packet承载真正的命令(例如MRd,CfgRd等)和响应,每一个TLP发出后,接收端要回复一个DLLP ACK表示收到了TLP,如果接收端收到的TLP有bit error或者CRC error,那么就会回复NAK
参考链接:ACK/NAK应用场景
物理层用于连接DLL和PHY层,决定了PCIe接口总线的链路训练、热插拔等物理特性。
链路训练过程中已进行了链路大部分功能的实现,本节只描述链路训练过程中的状态转移。
参考链接:2.4.1 PCIE控制器——物理MAC层——链路训练
物理层定义了一系列的字符集,这些字符根据规则排序组成了物理层数据包。
详细参考链接:2.4.2 PCIe——物理逻辑层——字符序列
参考链接:hotpulg——pcieTech
有如下三个功能:
扰频器使用一种算法,仪表伪随机的加扰数据包的每个字节。开始和结束成帧字节不被加扰。加扰消除了比特流中的重复模式,而重复模式会导致大量的能量集中在离散频率上,进而产生大量的EMI噪声,加扰能将能量分散到一个频率范围内,因此最大限度的减少了所产生的平均EMI噪声。
控制字符无需加扰和解扰,数据字符需要加扰和解扰。
发送端编码,接收方解码。
参考链接:8B / 10B Encode/Decode详解
发送方:
将已加扰的8bit字符编码成10比特的符号。其目的在于在比特流中创建密度足够高的1到0和0到1的转换,这样链路接收方在PLL的协助下就可以重建一个接收时钟。
对于差分传输,要在发送端的添加一个电容进行耦合,从而隔直流通交流,当链路出现多个0或1时,隔直效应发生,接收端的电压会下降,信号变得复发正确识别,因此通过插入0/1避免连续多个1或者0,实现一组信号中0和1的个数相等,从而达到直流平衡。
接收方:
错误检测报告给数据链路层:
当PCIe链路上有多个lane时,常常会出现通道间相位偏移问题。如果不同lane上同时传输的符号在不同时间点到达接收方,然后被串并转换,则会引发数据混乱,为保证正确接收和处理数据,接收发必须消除相位偏移。
接收方在链路定向时使用TS1/2序列实现相位补偿,在退出L0s时则使用FTS序列实现。
参考链接:2.4.8 PCIe——物理逻辑层——REFCLK
电气子层功能有:
接收方:此时时钟恢复已恢复出来的接收时钟,使用该时钟频率除以10的时钟将生成的10 bit符号定时输入到缓冲中
字符锁定:通过COM字符实现字符锁定。
由于COM字符比较特殊,10bit编码中先有2个连续的极性相同的比特,后接5个连续的极性相反的比特,即为0011111010或1100000101,非常容易识别。一旦识别到COM字符即实现了符号锁定,从而将10bit数据输入到缓冲中。
发送方:并串转换
PCIe设备可以根据当前的设备的运行状态选择合适的复位方式,PCIe总线提供多种复位方式的主要原因是减小PCIe设备的复位延时。其中传统复位方式的延时大于FLR方式。
除了传统的复位方式之外,PCIe总线还提供了FLR( Function Level Reset)方式,只对控制器的某些功能进行复位,链路训练不受影响。在多RC设备系统中,任务在指定的分区中运行,当这个任务执行完毕后,系统软件需要调整硬件资源的分区。此时受到影响的PCIe设备需要使用FLR方式复位内部的逻辑,以免造成对新的分区的资源污染,并保护之前任务的结果。
系统软件通过填写某些寄存器,如synopsys 的PCIe的IP是可以PCIeExpress Capability 的Device Control Register的第16bit完成FLR。支持FLR方式的PCIe设备需要在其BAR空间中提供一个寄存器,当系统软件对该寄存器的Function LevelReset位写1时,PCIe设备将使用FLR方式复位PCIe设备的内部逻辑。FLR方式对PCIe设备是可选的。
在一个PCIe网络中,存在两类地址空间,一类是设备自身的地址空间,可称为设备存储器域空间;另一类是PCIe链路上的地址空间,可称为PCIe域地址空间。网络中的设备要发出请求需要将存储器域的地址转换为PCIe域的地址,而接收设备需要将PCIe域地址转换为自身存储器域的地址。
PCIe设备间的数据传输主要通过TLP报文进行,基于switch的PCIe网络中TLP要在多个设备间发送和接收,该过程势必要有多种TLP报文路由方式。
参考链接:3.2 PCIe——报文路由方式
pcie通道拆分技术,芯片厂商通过一种叫做bifurcation(分叉)的方式让主板厂商可以灵活配置,组合或者拆分PCIe通道,决定各个设备和PCIe插槽的通道宽度。实现该功能一般有三种方式:Hard Strap,Soft Strap或者Wait for BIOS。
点对点传输,即分属于不同PCI总线域的PCI设备可以直接进行数据交换,即两个EP设备直接进行传输
PCIe定义了link power management states取代了bus power management states
即virtual function技术,例如可以通过SR-IOV技术在一个服务器中虚拟化多个网卡VF的技术来实现多张网卡。使用 SR-IOV 技术,将 PF 映射为多个 VFs,使得每个 VF 都可以绑定到 VM(虚拟机)。本质上是虚拟机绕过Hypervisor层直接调用EP的功能。
如此,吞吐量性能和 CPU 使用效率确实得到了改善,但灵活性却降低了,复杂性也增加了。并且,大多数 SR-IOV 网卡最多有效支持 1Gb 以太网端口的 8-16 个 VFs,和 10Gb 以太网端口的 40-64 个 VFs。网卡借助SR-IOV技术可以通过软硬件协同的方式加速虚拟化环境中的网络性能。
参考链接:微软VF驱动描述
该技术解决了SRIOV在虚拟机迁移方面的缺陷,与SRIOV不同的是,SRIOV驱动程序需要特定的连接到某网卡,virtio技术可以使虚拟机很容易实现跨服务器迁移。
该模型是指两个主设备在同一系统中共享资源的模型,这两个设备分别是生产者和消费者。
生产者负责产生和发送数据,将数据存放在数据缓存中,消费者使用数据,二者通过标志位和状态位相互通信。
在一个系统中可能有多个生产者/消费者模型,每个模型有各自的标志位和状态位,模型间的序互不影响。
序规则只适用于同一TC在同一VC上传输的事务,不同VC间“无序”的关系。
如图是序规则的总结,列表示先产生的事务,行表示后产生的事务;Yes表示第一个事务发生阻塞,第二个事务必须超越第一个事务避免死锁,Y/N表示对先后两个事务的序不做要求,No表示第二个事务不能超越前一个事务。
参考链接:PCIe——配置空间寄存器
下面总结linux启动时PCIe设备初始化的一般性过程。
总线枚举的目的是确定PCIe树形结构的拓扑,发现所有设备及其功能,通常在操作系统启动过程中进行,如下为枚举过程:
注意:在上电复位后,一些设备在能对请求响应前需要一些额外的时间恢复,以下是一些时序准则
对应设备方面:
对于系统方面:
摘自《PCI_Express_Baser3.0_10Nov10.pdf》
• With a Downstream Port that does not support Link speeds greater than 5.0 GT/s, software
20 must wait a minimum of 100 ms before sending a Configuration Request to the device
immediately below that Port.
• With a Downstream Port that supports Link speeds greater than 5.0 GT/s, software must
wait a minimum of 100 ms after Link training completes before sending a Configuration
Request to the device immediately below that Port. Software can determine when Link
25 training completes by polling the Data Link Layer Link Active bit or by setting up an
associated interrupt (see Section 6.7.3.3).
• A system must guarantee that all components intended to be software visible at boot time
are ready to receive Configuration Requests within the applicable minimum period based on
the end of Conventional Reset at the Root Complex – how this is done is beyond the scope
30 of this specification.
• Note: Software should use 100 ms wait periods only if software enables CRS Software
Visibility. Otherwise, Completion timeouts, platform timeouts, or lengthy processor
instruction stalls may result. See the Configuration Request Retry Status Implementation
Note in Section 2.3.1.
当Link正在进行时,必须满足以下准则:
pcie的验证可分为硅前验证和硅后验证。由于PCIe协议较为复杂,IP RTL代码量较大,可配置性较高,这给硅前验证中只进行单一层次的验证带来了较大的挑战。因此为了提高覆盖率,可结合PCIe主要模块级验证,PCIe子系统级验证以及SoC集成后的系统级验证三个层次进行验证。
总之,无论哪个层级验证,最重要的是提取功能点,而从模块级到子系统级再到系统级的提取功能点将是一个从具象到抽象的过程,如何把握需要验证人员有一定经验。
PCIe PHY scrambler模块验证:scramble模块验证特性梳理
参考链接:
参考链接:5.4 PCIe——硅后测试
原因:host设备在外部pcie设备ready之前就开始枚举,导致总线上的设备并没有按最快速度进行link
speed变成8.0 GT/s或者equalization失败
原因:link的速度自动返回到2.5 GT/s
LTSSM进入recovery状态的原因
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。