PCI-E理论剖析
文章平均质量分 85
本专栏介绍PCIe每层基础协议,并且详解一下三部分内容:
1.xilinx PIO代码解析,会分析每一句FPGA逻辑代码
2.xapp1052代码解析,会分析每一句FPGA逻辑代码
3.xdma框架及代码解析,会教大家深入应用xdma IP 核
一个早起的程序员
主要从事FPGA、ZYNQ、CPU内核、MicroBlaze、STM32、QT、MFC、上位机相关开发,擅长高速接口、视频传输、视频采集,包括PCIe、USB3.0、光纤、SDI、VGA、DVI、HDMI等高速接口。大学期间在学校参加过全国电子设计大赛两届、全国物联网大赛、山东省电子设计大赛、全国信息杯等比赛,并获得全国奖和省级奖十余项。
展开
-
PCIe中MSI和MSI-X中断机制详解
目录1.MSI和MSI-X中断机制2.MSI和MSI-X对比3.MSI/MSI-X Capability结构3.1 MSI Capability结构3.2 MSI消息格式及发送方式3.3 MSI-X Capability结构3.4 MSI-X tavle查找过程1.MSI和MSI-X中断机制在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,原创 2022-01-16 22:29:41 · 11104 阅读 · 0 评论 -
PCIe 6.0概述
目录1.PCIe 6.0新特性2.通道和PAM-43.FLIT4.新的低功耗状态5.在64GT/s下保持性能6.PHY和控制器集成7.测试和调试注意事项8.总结1.PCIe 6.0新特性PCI Express(PCIe)6.0技术即将推出,对于高性能计算、AI和存储SoC开发者来说,理解并考虑如何最好地应对即将面对的关键变化,以及由此带来的设计挑战变得至关重要。这些变化包括从非归零(NRZ)转换到脉冲幅度调制4(PAM-4)信号导致对噪声的敏感性增加,转向FLow控制原创 2022-01-16 19:55:26 · 6212 阅读 · 0 评论 -
PCIe链式DMA传输原理详解
目录1.为什么需要链式DMA2.链式DMA传输原理详解1.为什么需要链式DMAXAPP1052我们学过每一次DMA请求开始后,只能传输PC 1个连续的物理内存块,如果要传输下一个内存块,则必须重新初始化内存并配置好DMA寄存器,再次启动DMA才可以完成。我们知道驱动申请一块连续的物理内存是否成功取决于系统内存大小,应用进程的多少等等因素,所以XAPP1052一次DMA的传输的最大值是不确定的。我在测试时,主机为2GB内存、开的应用也不多的情况下申请连续的4MB内存会时常失败。我们假设我们原创 2022-01-13 22:58:05 · 5693 阅读 · 5 评论 -
PCI总线地址空间与PC地址空间的映射关系及数据传输原理
目录1.地址映射原理2. PC和PCI设备数据传输原理2.1 PC作为主机2.2 FPGA设备作为主机3.核心总结1.地址映射原理其实很多复杂的外设和简单的外设原理都很像,PCIe设备其实就是主机的一个外设,就像STM32的UART一样,STM32 DMA可以从ram把数据给UART外设,DMA也可以把数据从UART外设搬运到ram,STM32 CPU也主动可以读写UART外设寄存器到自己的ram,这里UART外设和ram具有不同的地址。对于PCIe系统来说其实类似,FPGA.原创 2022-01-12 10:55:20 · 4953 阅读 · 0 评论 -
12.PCIe扫盲——PCIe总线怎样做到在软件上兼容PCI总线
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053245前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的。因此,PCIe总线完整的继承了PCI总线中的配置空间(Configuration Header)的概念。在PCIe总线中也有两种Header,Header0和Header1,分别代表非桥和桥设备,这与PCI总线是完全一致的。在...转载 2019-07-16 21:50:57 · 1067 阅读 · 0 评论 -
13.PCIe扫盲——PCIe总线体系结构入门
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053246和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层、事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。其中,应用层并不是PCIe Spec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是...转载 2019-07-16 22:10:46 · 997 阅读 · 0 评论 -
14.PCIe扫盲——PCIe总线事务层入门(一)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053247在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制。假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备(称之为Completer)通过Completion Packet返回数据或者错误信息。在P...转载 2019-07-16 22:53:19 · 1627 阅读 · 0 评论 -
16.PCIe扫盲——PCIe总线事务层入门(三)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053249PCIe总线设计之初,充分考虑到了音频和视频传输等这些对时间要求特别敏感的应用。为了保证这些特殊应用的数据包能够得到优先发送,PCIe Spec中为每一个包都分配了一个优先级,通过TLP的Header中的3位(即TC,Traffic Class)。如下图所示:TC值越大,表示优先级越...转载 2019-07-17 13:51:27 · 1912 阅读 · 1 评论 -
17.PCIe扫盲——PCIe总线数据链路层入门
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053250前面的文章介绍过,数据链路层(Data Link Layer)主要进行链路管理(Link Management)、TLP错误检测,Flow Control和Link功耗管理。数据链路层不仅可以转发来自事务层的包(TLP),还可以直接向另一个相邻设备的数据链路层直接发送DLLP,比如应用于...转载 2019-07-17 14:02:23 · 1235 阅读 · 0 评论 -
18.PCIe扫盲——PCIe总线物理层入门
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053261前面的文章简单的介绍了一些关于PCIe总线事务层(Transaction Layer)和数据链路层(Data Link Layer)的一些基本概念。这篇文章来继续聊一聊PCIe总线的最底层——物理层(Physical Layer)。在PCIe Spec中,物理层是被分为两个部分单独介绍的,分...转载 2019-07-17 21:29:32 · 2702 阅读 · 0 评论 -
26.PCIe扫盲——TLP路由基础
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053323首先来分析一个例子,如下图所示:当包(Packet)到达Switch的输入端口(Ingress Port)时,端口首先会检查包是否有错误,然后根据包的路由(Routing)信息,来做出以下三种处理方式之一:1、 接受这个包,并自己(Switch)使用它(Internal U...转载 2019-07-25 19:11:13 · 1237 阅读 · 0 评论 -
27.PCIe扫盲——TLP路由之ID Routing
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053324ID 路由(ID Routing)有的时候也被称为BDF路由,即采用Bus Number、Device Number和Function Number来确定目标设备的位置。这是一种兼容PCI和PCI-X总线协议的路由方式,主要用于配置请求(Configuration Request)的路由,在...转载 2019-07-25 22:20:32 · 1311 阅读 · 0 评论 -
28.PCIe扫盲——TLP路由之Address Routing
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053325地址路由(Address Routing)的地址包括IO和Memory。对于Memory请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header。注:再次强调,IO请求是为了兼...转载 2019-07-26 23:18:16 · 924 阅读 · 1 评论 -
29.PCIe扫盲——TLP路由之Implicit Routing
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053326模糊路由(Implicit Routing,又译为隐式路由)只能用于Message的路由。前面的文章中多次提到过,PCIe总线相对于PCI总线的一大改进便是消除了大量的边带信号,这正是通过Message的机制来实现的。PCIe定义的Message主要有以下几种类型:• Power M...转载 2019-07-26 23:36:35 · 575 阅读 · 0 评论 -
30.PCIe扫盲——TLP Header详解(一)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053352事务层包(TLP)的一般格式如下图所示:前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLPDigest(ECRC)是可选的,为1DW。TLP Header在整个TLP的位置如下图所示,需要注意的是,TLP H...转载 2019-07-27 14:13:35 · 3123 阅读 · 0 评论 -
31.PCIe扫盲——TLP Header详解(二)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053353下面用几个具体的例子来讲解TLP Header的格式与作用。因为内容较多,所以分为多篇文章分别进行介绍。第一篇(即本文)介绍IO Request、Memory Request和Configuration Request。第二篇文章(即TLP Header详解三)介绍Completion...转载 2019-07-27 14:41:58 · 1339 阅读 · 1 评论 -
32.PCIe扫盲——TLP Header详解(三)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053354CompletionsCompletions的TLP Header的格式如下图所示:这里来解释一下Completion Status Codes· 000b (SC) Successful Completion:表示请求(Request)被正确的处...转载 2019-07-27 15:08:26 · 1173 阅读 · 0 评论 -
33.PCIe扫盲——TLP Header详解(四)
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053463PCIe中的Message主要是为了替代PCI中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。所有的Message请求采用的都是4DW的TLP Header,但是并不是所有的空间都被利用上了,例如有的Message就没有使用Byte8到Byte15的空间。Mes...转载 2019-07-27 15:10:23 · 1736 阅读 · 0 评论 -
25.PCIe扫盲——Base & Limit寄存器详解
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053321上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来...转载 2019-07-18 23:13:02 · 1510 阅读 · 0 评论 -
24.PCIe扫盲——基地址寄存器(BAR)详解
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053320基地址寄存器(BAR)在配置空间(Configuration Space)中的位置如下图所示:其中Type0 Header最多有6个BAR,而Type1 Header最多有两个BAR。这就意味着,对于Endpoint来说,最多可以拥有6个不同的地址空间。但是实际应用中基本上不会用到6...转载 2019-07-18 22:49:41 · 3966 阅读 · 1 评论 -
23.PCIe扫盲——Memory & IO 地址空间
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053319早期的PC中,所有的IO设备(除了存储设备之外的设备)的内部存储或者寄存器都只能通过IO地址空间进行访问(Intel干的好事)。但是这种方式局限性很大,而且效率低,于是乎,软件开发者和硬件厂商都不能忍了……然后一种新的东西就出来了——MMIO。MMIO,即Memory Mapped I...转载 2019-07-18 22:37:12 · 2309 阅读 · 0 评论 -
2.PCIe扫盲——PCI总线基本概念
转载原文链接:http://blog.chinaaet.com/justlxy/p/5100053077PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它曾经是个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。目前该总线已经逐渐被PCI Express总线所取代。PCI即Peripheral Component Inte...转载 2019-07-12 20:15:11 · 4819 阅读 · 0 评论 -
1.PCIe扫盲——PCIe简介
转载原文链接:http://blog.chinaaet.com/justlxy/p/5100053066PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。 由Intel在2001年的IDF上提出,由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力强,传输距离远,功耗低等优点。...转载 2019-07-12 20:12:10 · 94027 阅读 · 0 评论 -
8B / 10B Encode/Decode详解
原文地址:http://blog.chinaaet.com/justlxy/p/51000528141、编码技术基础理论在高速的串行数据传输中,传送的数据被编码成自同步的数据流,就是将数据和时钟组合成单一的信号进行传送,使得接收方能容易准确地将数据和时钟分离,而且要达到令人满意的误码率,其关键技术在于串行传输中数据的编码方法。目前, 高速接口正在被广泛应用于包括 SAT...原创 2019-07-12 20:03:10 · 4926 阅读 · 1 评论 -
PCI、PCIX、PCIE、CPCI介绍
原文地址:http://blog.csdn.net/kulala082/article/details/55045279一、PCI:PCI,外设组件互连标准(Peripheral Component Interconnection),是一种由英特尔(Intel)公司1991年推出的用于定义局部总线的标准。此标准允许在计算机内安装多达10个遵从PCI标准的扩展卡。最早提出的PCI总线...转载 2019-07-12 20:00:13 · 4164 阅读 · 0 评论 -
如何访问PCIe设备整个4K的配置空间
目前用于访问PCIe配置空间寄存器的方法需要追溯到原始的PCI规范。为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的256bytes配置寄存器。IntelChipsets目前仍然支持这种访问PCI配置空间的方法。PCIe规范在PCI规范的基础上,将配置空间扩展到4Kbytes,至于为...原创 2019-07-12 19:49:39 · 3644 阅读 · 0 评论 -
PCIe物理层
这篇文章来聊一聊PCIe总线的最底层——物理层(Physical Layer)。在PCIe Spec中,物理层是被分为两个部分单独介绍的,分别是物理层逻辑子层和物理层电气子层,其中后者一般都是采用SerDes来实现的。本篇文章只是简单地介绍一些PCIe物理层的基本概念,关于物理层详细、深入地介绍,请关注我后续的连载博文。由于物理层处于PCIe体系结构中的最底层,所以无论是TLP还是DLLP都必...原创 2019-06-05 22:16:44 · 3653 阅读 · 0 评论 -
PCIe中的Message
PCIe中的Message主要是为了替代PCI中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。所有的Message请求采用的都是4DW的TLP Header,但是并不是所有的空间都被利用上了,例如有的Message就没有使用Byte8到Byte15的空间。Message请求的TLP Header格式如下图所示:上面的表格中提到了,Message主要有九个...转载 2019-06-05 21:35:29 · 5633 阅读 · 0 评论 -
PCIe扫盲系列博文连载目录篇
本文为PCIe扫盲系列博文连载目录篇(第三阶段),主要内容包括TLP Header详解、Flow Control(流量控制)基础、Quality of Service简介、数据链路层包(DLLP)、Ack/Nak 机制详解和物理层逻辑子层基础等。第一阶段的目录篇地址为:http://blog.chinaaet.com/justlxy/p/5100053251第二阶段的目录篇地址为:h...转载 2019-06-05 21:26:11 · 3131 阅读 · 0 评论 -
PCI&PCIE MSI中断
1、什么是MSI?(Message Signaled Interrupts)用简单的一句话就可以说明msi的原理:cpu有一段特殊的寄存器空间,往这个寄存器里面写数据,就会触发cpu的中断。pci设备经过配置以后,一旦需要上报中断就会往cpu这种寄存器里面写一个值,触发cpu的中断。2、PCI/PCIE Device侧关于MSI的配置:关于MSI特性,PCI提供了一组Capabil...转载 2019-05-23 09:13:59 · 1586 阅读 · 1 评论 -
3.PCIe扫盲——一个典型的PCI总线周期
转载原文链接:http://blog.chinaaet.com/justlxy/p/5100053078PCI总线是一种地址和数据复用的总线,即地址和数据占用同一组信号线AD。PCI总线的所有信号都与时钟信号同步,及所有的信号的变化都发生在时钟的上升沿,或者在时钟上升沿进行采样。如下图所示,除了时钟信号CLK和数据地址复用信号AD之外,PCI总线至少还应包括FRAME#(用于表示一次数据传...转载 2019-07-12 20:30:26 · 2172 阅读 · 0 评论 -
4.PCIe扫盲——PCI总线中的Reflected-Wave Signaling
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053079PCI Spec规定了每个PCI总线上最多可以连接多达32个PCI设备,但是实际上却远远达不到32个,33MHz的32位PCI总线一般只能连接10到12个负载。注:如果使用插槽连接,则一个连接算两个PCI设备,插槽和PCI卡分别算作一个PCI设备。也就是说一个33MHz的PCI总线最多只...转载 2019-07-12 20:48:31 · 1291 阅读 · 0 评论 -
22.PCIe扫盲——Type0 & Type1 型Request
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053322前面的文章中介绍过有两种类型的配置空间,Type0和Type1,分别对应非桥设备(Endpoint)和桥设备(Root和Switch端口中的P2P桥)。Type0还是Type1是由事务层包(TLP)包头中的Type Field所决定的,而读还是写则是由TLP包头中的Format Fiel...转载 2019-07-18 13:14:59 · 2434 阅读 · 0 评论 -
21.PCIe扫盲——配置空间的读写机制
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053318需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。并且配置请求的路由(R...转载 2019-07-18 13:09:22 · 1071 阅读 · 0 评论 -
20.PCIe扫盲——BDF与配置空间
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053262前面的文章中介绍过,每一个PCIe设备可以只有一个功能(Function),即Fun0。也可以拥有最多8个功能,即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应。和PCI...转载 2019-07-18 11:51:49 · 2183 阅读 · 0 评论 -
11.PCIe扫盲——PCIe总线基本概念
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053225PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来。实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势。如ATA到SATA,SCSI到USB等……不过,为了兼容之前的PCI总线设备,虽然PCIe是一种串行总线,无法再物理层上兼容PC...转载 2019-07-14 22:17:42 · 4047 阅读 · 0 评论 -
9.PCIe扫盲——66MHz的PCI总线与其技术瓶颈
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053221为了能够取得更高的带宽,新版本的PCI Spec将PCI总线提高到了64-bit并将频率提高到了66MHz,最高支持533MB/s。下图描述的是一个典型的66Mhz,64-bit的PCI系统结构图。前面的文章介绍过,PCI总线采用了Reflected-Wave Signaling技术...转载 2019-07-14 21:34:26 · 885 阅读 · 0 评论 -
8.PCIe扫盲——PCI总线配置周期产生和配置寄存器
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053220上一篇文章中也是说到了,I/O Address Space的空间很有限(64KB),所以一般在I/O Space中都有两个寄存器,第一个指向要操作的内部地址,第二个存放读或者写的数据。因此,对于PCI的配置周期来说,包含了两个步骤:Step1:CPU先对IO Address中的0xCF8...转载 2019-07-14 21:25:56 · 925 阅读 · 0 评论 -
7.PCIe扫盲——PCI总线的地址空间分配
载原文地址:http://blog.chinaaet.com/justlxy/p/5100053219PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。如下图所示:注:需要注意的...转载 2019-07-14 20:50:27 · 5831 阅读 · 0 评论 -
6.PCIe扫盲——PCI总线的中断和错误处理
转载原文地址:http://blog.chinaaet.com/justlxy/p/5100053096PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),PCI总线规范并没有明确规定在一个处理器系统中如何使用这些信号,因...转载 2019-07-12 21:24:12 · 2246 阅读 · 0 评论