一、PCIe基础知识 1.1 关于接口 PCIe2x接口,对比其他系列,该接口包含2对发送与接收接口, 数据部分包含双向八个接口: PETp0与PETn0:发送器差动线对,通道0 PETp1与PETn1 1.2 TLP包 1.2.1 AXI-Stream总线上的数据 在赛灵思7系列FPGA中,使用AXIStream总线进行通信,PCIe的TLP包使用AXI总线传输,在AXI总线上数据大端对齐,即高位数据在地址的高位 在使用强序模型时,在数据的整个传送路径中,PCIe设备在处理相同类型的TLP时,如PCIe设备发送两个存储器写TLP时,后面的写TLP必须等待前一个存储器写TLP完成后才能被处理,几遍当前报文在传输过程中阻塞 但是对于不同类型的TLP间可以乱序通过同一条PCIe链路。 在使用Realaxed Ordering模型时,后一个写TLP可以越过前一个存储器写TLP提前执行,从而能提高PCIe总线利用率。 1.2.3 TLP的路由 TLP的路由指的是TLP通过Switch或者PCIe桥片时采用哪一条路景,最终到达EP或者RC(Root Complex,跟联合体)的方法,一共有三种:基于地址的路由、基于ID
前言 我们习惯了用 Verilog 去死磕 PCIe 的底层协议状态机。但一旦越过硬件边界来到操作系统层面,Linux 内核是如何接管并驱动这些 PCI/PCIe 设备的呢? 系统上电或有 PCIe 设备热插拔时,底层的总线枚举其实已经完成了。 在 PCIe 驱动中,它主要干一件事:向内核注册自己。 在 PCIe 驱动中,它的核心任务是:向内核注销自己,并引发连锁清理。 调用核心 API:当驱动程序退出时,它只需调用 pci_unregister_driver()。 写在最后 习惯了使用 Verilog 雕琢 PCIe 的底层状态机,再回过头来看看 Linux 内核是如何以软件的视角接管这些硬件的,是一件非常有趣的事情。
接上篇文章《clock oscillator,generator,buffer选型杂谈》,今天我们来说下PCIE时钟的要求: 首先先看下PCIE架构组件:下图中主要包括了CPU(ROOT COMPLEX ),PCIE SWITCH,BUFFER以及一些PCIE ENDPOINT;而且可知各个器件的时钟来源都是由100MHz经过Buffer后提供。 接着上图的架构,我们来简单看下PCIE时钟的三种架构: Common Clock Architecture:所有设备的参考时钟分布必须匹配到15英寸以内在系统板上。 鉴于PCIE时钟要求多且复杂的,故此文章主要鉴于上一篇文章,给出主要的参数要求,其它详细的要求以及测试方法,后续有机会再编写分享。 抖动:如下CC模式的要求: 注意:上图给出的是CC时钟架构下的抖动要求;仿真PCIE4.0时候,抖动是按照0.7ps RMS来的;仿真PCIE5.0时候,抖动是按照0.25ps RMS来的;因为标准考虑了实际系统中的额外噪声
When AER is enabled, a PCI Express device will automatically send an error message to the PCIe root port AER error output When a PCIe AER error is captured, an error message will be output to console. Below shows an example: 0000:50:00.0: PCIe Bus Error: severity=Uncorrected (Fatal), type=Transaction AER Statistics / Counters When PCIe AER errors are captured, the counters / statistics are also exposed --------------------------------------------------------------------- ============================ PCIe
数据链路层的状态 数据链路层通过物理层监控当前PCIe链路层的状态,数据链路层会处于以下3种状态: (1)、DL Interactive:物理层通知数据链路层当前PCIe链路不可用,此时PCIe链路的对端可能未连接设备或未检测到对端设备 (3)、DL Active:物理层通知数据链路层当前PCIe链路正常,此时物理层已经训练或重训练完毕。 数据链路层的管理DL_DOWN&DL_UP 当出现以下三种情况时,DL DOWN有效: (1)、无当前PCIe链路对端设备的连接 (2)、数据链路层或物理层出现了异常 (3)、软件禁用当前PCIe链路 当链路处于DL DOWN状态时,Switch和PCIe桥的上游端口,将复位相关的内部逻辑和状态,并丢弃所有正在处理的TLP,此时Switch和PCIe桥将使用hot reset的方式复位所有下游端口。 3、 Power Management DLLPs:PCIe设备使用过该组DLLPs进行电源管理,并向对端设备通知当前PCIe链路的状态,拥有保证电源管理状态机的正确运行。
看下PCIe发展历程: ? PCIE相关概念: 传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% PCIE带宽计算 PCIe 吞吐量(可用带宽)计算方法: 吞吐量 = 传输速率 * 编码方案 例如:PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;但这并不意味着 PCIe 2.0协议的每一条Lane支持 5Gbps 的速率。 具体性能表现未透露,不过已知PCIe 5.0理论带宽速率是PCIe gen 4.0两倍(单通道32Gbps),毋庸置疑CXL 1.0的到来势必会大大提升平台性能。
现在最常见的扩展槽是PCIe插槽,实际上在你看不见的计算机主板芯片内部,各种硬件控制模块大部分也是以PCIe设备的形式挂载到了一颗或者几颗PCI/PCIe设备树上。 PCI/PCIe的历史 在我们看PCIe是什么之前,我们应该要了解一下PCIe的祖先们,这样我们才能对PCIe的一些设计有了更深刻的理解,并感叹计算机技术的飞速发展和工程师们的不懈努力。 1. 16 1 4000 PCIe 2.0 x1 5 GHz 1 1 500 PCIe 2.0 x4 5 GHz 4 1 2000 PCIe 2.0 x8 5 GHz 8 1 4000 PCIe 2.0 x16 5 GHz 16 1 8000 PCIe 3.0 x1 8 GHz 1 1 1000 PCIe 3.0 x4 8 GHz 4 1 4000 PCIe 3.0 x8 8 GHz 8 1 8000 PCIe PCI express(PCIe,注意官方写法是这样,而不是PCIE或者PCI-E)诞生了,以上就是简单的PCIe诞生过程,看似简单,其实是一代代“革命者”不断追求完美才形成今天的PCIe。
本章将着重讲述PCIe物理层组成与操作,物理层位于数据链路层之下,可产生PLP包(Physical Layer Packet)进行管理。 ———————————————————— 从作用方面考虑:物理层位于数据链路层和PCIe链路之间,其主要作用是: 1、 发送来自数据链路层的TLP和DLLP。 ,侧重于物理电气子层,PCIe链路通过LTSSM状态机对PCIe链路进行控制和管理,逻辑子层主要完成与数据链路层的数据交换,由发送逻辑和接收逻辑组成。 由于PCIe不同的Lane中传递的数据可能存在漂移,即Skew,Byte Stripping的一个重要功能就是消除这个漂移,即De-Skew。 4、数据进入到各自Lane的加扰(Scramber模块),“加扰”后进行8b/10b编码,最后通过并串转换模块发送到PCIe链路中。
之前介绍的PCIe实物模型为PIO模式,可编程PIO模式,软件控制CPU在主机总线上发起一个存储器或IO读写总线周期,并以映射在PCIe设备地址空间的一个地址为目标,根据PCIe总线宽度的区别, PCIe ID: 见之前推送。 PCIe BARs: PCIe to AXI Lite Master Interface:使能,这样可以在主机一侧通过PCIe来访问用户逻辑侧寄存器或者其他AXI-Lite总线设备。 pcie_ref:XDMA的驱动时钟输入,双极性,经过一个缓冲之后接入到XDMA ip core。 pcie_rst_n: XDMA复位控制。 pcie_mgt: PCIe电气接口信号,TX与RX,7030为PCIe2.0,lane width:x2。 axi_aclk:AXI总线驱动时钟,该时用于fifo的数据读取。
西安同步电子科技有限公司凭借深耕时频领域的技术积累,推出SYN4632型PCIe时钟同步卡,以硬件级高精度授时能力,为工控机系统提供“原子钟级”时间基准,彻底破解工业场景的“时间焦虑”。 SYN4632型PCIe时钟同步卡从硬件架构到信号处理全面革新,直击上述痛点,为工控系统构建“全场景、高可靠、超精准”的时间同步解决方案。二、SYN4632时钟同步卡核心技术突破1. 即插即用,赋能智能化运维通过PCIe总线直接接入工控机扩展槽,无需外接电源,功耗低于6W。 SYN4632型PCIe时钟同步卡不仅是硬件模块,更是驱动工业数字化转型的“时间基石”。
某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。 注:本文将简单地介绍一下PCIe总线的热插拔机制,关于热切换(Hot Swap),请参考PCIe Spec的相关章节。 PCIe设备使用两种电源信号供电,分别是Vcc与Vaux,其额定电压为3.3V。 除此之外PCIe总线还使用了下面重要的辅助信号-PRSNT1#和PRSNT2#信号。 PCIe总线的热插拔主要指的是PCIe卡设备的热插拔,以及相关的实现机制等。 因此当PCIe设备插入插槽时,PRSNT1#和PRSNT2#信号在其他金手指与PCIe插槽完全接触,并经过一段延时后,才能与插槽完全接触;当PCIe设备从PCIe插槽中拔出时,这两个信号首先与PCIe插槽断连 注:PCIe总线除了有一个Base Spec之外,还有一个关于PCIe卡设备的Spec——PCIe Card ElectroMechanical Spec(CEM)。
本文将为你深入解析Linux 内核中 PCIe 的具体实现细节,带你看懂内核是如何“驾驭”这一高速互连技术的。 一、PCIe 设备发现与资源管理:内核如何“识别”并“分配”设备? 在Linux 内核 PCIe 子系统初始化阶段,内核已完成 PCIe 中断域(IRQ Domain)、中断向量空间及 MSI 路由资源的统一管理与分配。 PCIe 设备业务功能的正常运转,依赖设备驱动与 Linux 内核的深度协同; 而DMA是支撑 PCIe 设备高速批量数据传输的核心能力。 PCI/PCIe 驱动注册:内核与驱动的“对接桥梁” Linux 内核为 PCIe 设备驱动提供了标准化开发与注册框架。 四、虚拟化支持:内核如何“共享”PCIe 设备? 在虚拟化场景中,多个虚拟机可能需要共享或独占PCIe 设备。
PCIe的传输速度与链路宽度 ? PCIe2.0规范于2007年1月5日推出,将PCIe1.0 2.5GT/s的传输速率提高了一倍,每个通道的吞吐率从250MB/s上升到500MB/s,因此2通道的PCIe可支持高达1GB的总吞吐量。 PCIe吞吐量计算方法 吞吐量=传输速率*编码方案 以PCIe2.0x2为例,该系列为2.0版本的PCIe,包含两个物理信道Lane,每个通道的吞吐量为: 5GT/s x 8/10 =4.0Gb/s =4000 Mb/s =500MB/s 所以PCIe2.0x2的吞吐量为:500MB/s x 2 = 1GB/s 分析: PCIe2.0协议传输速率为5.0GT/s,这样的描述主要说明的是每条PCIe 4、WAKE# 当PCIe设备进入休眠状态,主电源已经停止供电时,PCIe设备使用该信号向处理器系统提供唤醒请求,使处理器系统为该PCIe设备提供主电源Vcc。
第一批 KIOXIA NVMe SSD 产品覆盖了主要 PCIe 版本: PCIe 3.0:CM5 系列于 2017 年发布。 PCIe 4.0:CM6 系列于 2020 年发布。 右侧表格:当前市场上的 PCIe SSD落地情况 PCIe 各代 SSD 的市场进程时间表(2022-2028): PCIe 3.0 SSD:2024 年进入停产阶段(Ph 5),2025 年停止支持( 相比 PCIe 5.0,PCIe 6.0 保持相同驱动数量时性能显著提升。 效率与功耗: 尽管 PCIe 6.0 的总功耗比 PCIe 5.0 高一些(1,280 瓦对比 800 瓦),但其性能和吞吐量成倍增长,使其更高效。 普及速度较慢PCIe 6.0 NVMe SSD 的普及过程预计会比 PCIe 5.0 更加缓慢,这可能与生态系统成熟度和市场接受度相关。
随着PCIE4.0标准PHY Test 0.7规范发布 其商用步伐向前迈出了坚实的一步 ? ? 在PHY Test 0.7规范里定义了如下的测试项目 (点击可查看大图) ↓↓↓ ? 特别地针对System Board,沿袭自PCIE2.0以来的做法,需要采用Dual-Port测试方法,即同时将差分CLK和被测试链路的差分数据共四路信号分别采用Low Loss SMA Cables接入示波器 请观看如下视频文件,听Keysight 大中华区 资深技术支持专家刘宗祺先生 做的一个视频介绍 ☟ 如下是Keysight PCIE4.0测试方案,主要包括V/Z/UXR系列25GHz带宽以上示波器(注
目前市场上PCIe4.0的设备已经很成熟了,并逐渐开始向PCIe5.0协议的设备发展。 PCIe协议分类PCIe的向下兼容性体现在以下几个方面:PCIe具有向下兼容的特性,这意味着较新版本的PCIe插槽和设备可以与较旧版本的PCIe插槽和设备进行互操作。 这意味着您可以将较旧的PCIe卡插入较新的插槽中,以实现互操作性。带宽适配:如果您将一个使用较少通道的PCIe卡插入一个具有更多通道的PCIe插槽中,系统会自动适配带宽。 PCIe架构PCIe协议是一种端对端的互连协议,一个典型的PCIe系统框图如下:与PCIe拓扑结构相关的其他术语如下:根复合体(RootComplex)PCIe终端设备(PCIeEndpoint)PCIe PCIe桥接器接收请求并进行协议转换,将PCI请求转换为适合PCIe接口的形式。转换后的请求在PCIe接口上发起点对点传输。请求在接口通道上进行传输,通过PCIe总线连接到目标设备。
image 但是 PCIe 变成了串行的高速差分线,早就没有这四根物理引脚了。那老驱动怎么用呢? 如果是 Xilinx 7 系列的 PCIe IP,并且是 Single Function(单功能设备),那么它只支持 INTA。所以你在配置 IP 时这个值通常写死为 1。 现代PCIe中断 用写内存代替拉信号线 在 MSI 机制下,你的芯片不再需要去拉扯虚拟的信号线(像 INTx 发送 Assert/Deassert 报文那样)。 为了不让 CPU 被海量的中断请求淹没,PCIe 规范定义了这套 Mask(屏蔽)和 Pending(挂起)的机制。 而这,正是 PCIe 体系最核心的设计哲学之一:让数据更快地流动,让事件更精准地到达,让并行真正发挥价值。 END
PCIe的OSI模型与事务层概述 PCIe协议定义了三层结构,分别是:物理层、数据链路层、事务层,每个层次按照协议中规定的内容,完成相应的数据处理功能,各层都分为发送和接收两功能块。 ? PCIe事务层作用 事务层的作用是产生TLP包,接收PCIe设备核心层的数据请求,并将其转换为PCIe总线事务,PCIe总线使用的这些总线事务在TLP头中被定义,如存储器读写、IO读写、配置读写总线事务 PCIe事务层格式 当处理器或其他的PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去。 ? TLP头,并以此支持PCIe V2.1规范的一些新功能。。 一般Digest段由IP核填充,所以PCIe的处理在用户层表现为处理层TLP中的头标和数据段。
像SYN4632型PCIe时钟同步卡通过总线授时及提供时间戳等功能为使用者提供更好的开发需求。 SYN4619型GPS北斗双模PCIe授时卡设备能够为各个节点提供统一的时间基准,使系统中的各个部分在时间上保持高度协调,提高系统的整体性能和可靠性。
二、通讯协议 PCIe 总线串行传输的特性是通过报文的形式进行传输,每个数据报文在 PCIe 的事务层被封装成一个或者多个TLP数据包,PCIe设备之间则通过这些数据包进行数据通信。 为了得到更高的传输效率,在使用 PCIe总线进行数据传输时往往需要使用 DMA 的传输方式。 PCIe总线技术是取代PCI的第三代 I/O 技术,也称为 3GIO。 使用 FPGA 来设计基于PCIe 总线的数据传输,可以省去专用的PCIe接口芯片,降低硬件的设计成本,提高硬件集成度的同时还能利用FPGA的可编程特性提高设计的灵活性与适应性。 与此同时,目前很多FPGA 内都嵌入了 PCIe 的硬核,此硬核支持PCIe传输的单字读写操作以及DMA读写操作作,由于PCIe具有一定的协议开销,其单字传输效率不甚理想,因此,本文在 PCIe单字传输的基础上提出了一种基于 PCIe接口的DMA传输的设计方案,此方案可以稳定快速地实现 PCIe 总线的DMA传输。