PCIe学习笔记(一)-------1.4 PCIe体系结构

目录

1,PCIe体系结构

1.1,Transaction Layer

1.2,Data Link Layer

1.3,Physical Layer

1,PCIe体系结构

前文已经说了PCIe可以分为三个层次:Transaction LayerData Link LayerPhysical Layer。下图中为PCIe设备层的详细模块图,左半部分为发送,右半部分为接收,两边有所区别。下文将分别对三个层次的结构和功能做一个简短的介绍。

1.1,Transaction Layer

功能:编码TLP和解码TLP,支持Quality of Service(QoS:服务质量),含有Virtual Channel buffer(VC buffer:虚拟通道缓冲区,设备必须含有VC0),进行VC仲裁。

QoS后面会有章节进行介绍,简单来说就是以不同的优先级去传送不同的TLP包。TLP包中含有TC位(3 bit:0~7),代表不同的类型。而Transaction Layer中可以有多个VC,可以将一个或多个TC映射到一个VC,但一个TC不能映射到多个VC。不同的VC传输数据时会有优先级,同一个VC中的不同TC的TLP包传输优先级一样。例如:软件将TC0~TC2映射到VC0,TC3~TC7映射到VC1,并且配置VC1的优先级高于VC0,如果同时发送TC0和TC3的TLP包,通过VC仲裁可得TC3的TLP包将会被先传输。

发送:事务层接收来自软件层的数据,组装成TLP包,并根据Header中的TD位来决定是否生成ECRC。ECRC通过Header和Data的所有bit(除了Header中的EP比特,Type的比特0 这个两个bit。在计算时,总认为这两个比特都为1)计算出来。将待发送的TLP包放入VC transmit buffer,在Flow Control表示接收端有足够空间的VC receive buffer来接收后,将TLP传输给数据链路层,然后经过物理层发送出去。

接收:根据ECRC去检查TLP包的CRC错误,如果没错,则删掉ECRC,将其余数据传输给软件层。如果TLP存在CRC错误,则.......

Flow Control后面会有章节进行介绍,简单来说就是接收设备定期的发送一种DLLP包(FCx DLLP)给发送设备,用来表示接收设备中VC receive buffer还存在多大的空间。发送设备收到DLLP,解析得到空间足够,就会发送需要发送的TLP包。

也就是说物理连接的两个设备,两端的TX都会定期发送流控制DLLP包,两端的RX都会接收到,两个设备的发送部分都会知道对方设备的接收部分中VC receive buffer还存在多大的空间,从而控制发送部分是否发送TLP包。

1.2,Data Link Layer

数据链路层主要功能是保证在各链路上发送和接收数据包时数据的完整性。

发送TLP:在Flow Control机制下,当接收方有足够的VC receive buffer后,数据链路层将接收到事务层传输过来的TLP。然后将Sequence ID附加在TLP前面,并根据目前所有的信息(Sequence ID,TLP)计算CRC(LCRC),并附着在后面。

重传机制:

Device A的数据链路层会将打包后的TLP通过物理层发送给Remote Device B,并会保留一个备份放在Replay Buffer中。

如果没有错误,Device B会返回一个带 Sequence IDACK DLLP包给Device A,A接收到后,就认为TLP包成功到达B了(TLP的目的地不一定时B,也许需要B去转发),然后会将Replay Buffer中相应Sequence ID的TLP包删除。

如果存在CRC错误,Device B会返回一个带Sequence IDNAK DLLP包给Device A,A将会重新发送保存在Replay Buffer中相应Sequence ID的TLP包。并在数据链路层生成用于错误报告和记录机制的错误标记。

注意:是Sequence ID将ACK/NAK 和 Replay Buffer中保存的TLP包联系起来。

接收TLP:接收到TLP后,会进行CRC检查,如果有错误,将会将该TLP包丢弃,并返回一个NAK给Device A。如果没有错误,将会返回一个ACK给Device A,并将TLP包的Sequence ID和LCRC去除后传输给事务层。

接收DLLP:接收DLLP后,会进行CRC检查,如果有错误,将会将该DLLP包丢弃,丢弃一个DLLP包所损失的信息可以自我修复,因为紧接着后续的一个DLLP将会替代丢失的信息?(丢一个直接拿后一个DLLP来用?)

1.3,Physical Layer

物理层可以分为逻辑物理层(Logic Physical Layer)和电气物理层(Electrical Physical Layer),逻辑物理层主要指物理层的数字电路部分,电子物理层主要指物理层的模拟电路部分。

功能:发送和接收数据包,完成链路训练和初始化(Link Training and Initialization)。

         链路训练和初始化后面会有章节介绍,在此过程中主要确定如下事情:

            1)链路宽度

            2)链路数据速录

            3)通道反转

            4)极性反转

            5)每通道Bit锁定

            6)每通道Symbol锁定

             7)多通道链路内通道到通道之间的相位补偿

发送:将从数据链路层接收到的数据包(TLP,DLLP)加上Start和End字符,组装成最终的发送结构。然后将数据包拆分为字节,对数据进行加扰,然后进行8b/10b(GEN1和GEN2)或者128b/130b(GEN3及以上)编码,最后进行并串转换成串行比特流,然后将其以差分信号发送出去。

加扰:将源数据与一个随机的数据进行异或操作,得到新的数据,该新数据也可以看作是一个随机数据。从而降低数据流的EMI噪声。

随机数据如何得到:PCIe总线通过一个16位线性反馈移位寄存器(Linear Feedback Shift register, LFSR)产生为随机序列,该移位寄存器的表达式如下所示:

       G(x)=X^16+X^5+X^4+X^3+1

加扰更多信息可以参考:https://blog.csdn.net/icxiaoge/article/details/80023404

编码:编码主要是为了DC平衡。让数据流中0和1的个数尽量相等。GNE1和GEN2中采用8b/10b编码,GEN3及以上采用的是128b/130b编码。

接收:接收会将串行的数据流通过串并转化转化为并行数据,接收还有一个弹性buffer(elastic buffer),可以用于调节发送时钟和接收时钟之间的时钟频率变化。然后会将数据进行解码,将10bit数据还原成8bit,并会对数据进行解扰操作,再将数据进行反拆分,重新组成原始的数据包。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浅谈PCIe体系结构 浅谈PCIe体系结构 - 1 - 目录 - 1 - 第I篇PCI体系结构概述 - 1 - 第1章PCI总线的基本知识 - 3 - 1.1 PCI总线的组成结构 - 6 - 1.1.1 HOST主桥 - 6 - 1.1.2 PCI总线 - 7 - 1.1.3 PCI设备 - 7 - 1.1.4 HOST处理器 - 8 - 1.1.5 PCI总线的负载 - 9 - 1.2 PCI总线的信号定义 - 10 - 1.2.1 地址和数据信号 - 10 - 1.2.2 接口控制信号 - 11 - 1.2.3 仲裁信号 - 13 - 1.2.4 中断请求等其他信号 - 14 - 1.3 PCI总线的存储器读写总线事务 - 15 - 1.3.1 PCI总线事务的时序 - 15 - 1.3.2 Posted和Non-Posted传送方式 - 16 - 1.3.3 HOST处理器访问PCI设备 - 17 - 1.3.4 PCI设备读写主存储器 - 19 - 1.3.5 Delayed传送方式 - 21 - 1.4 PCI总线的中断机制 - 23 - 1.4.1 中断信号与中断控制器的连接关系 - 23 - 1.4.2 中断信号与PCI总线的连接关系 - 24 - 1.4.3 中断请求的同步 - 25 - 1.5 PCI-X总线简介 - 28 - 1.5.1 Split总线事务 - 28 - 1.5.2 总线传送协议 - 28 - 1.5.3 基于数据块的突发传送 - 29 - 1.6 小结 - 29 - 第2章PCI总线的桥与配置 - 30 - 2.1 存储器域与PCI总线域 - 30 - 2.1.1 CPU域、DRAM域与存储器域 - 31 - 2.1.2 PCI总线域 - 32 - 2.1.3 处理器域 - 32 - 2.2 HOST主桥 - 34 - 2.2.1 PCI设备配置空间的访问机制 - 35 - 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 - 37 - 2.2.3 PCI总线域地址空间到存储器域地址空间的转换 - 39 - 2.2.4 x86处理器的HOST主桥 - 42 - 2.3 PCI桥与PCI设备的配置空间 - 45 - 2.3.1 PCI桥 - 45 - 2.3.2 PCI Agent设备的配置空间 - 47 - 2.3.3 PCI桥的配置空间 - 50 - 2.4 PCI总线的配置 - 54 - 2.4.1 Type 01h和Type 00h配置请求 - 54 - 2.4.2 PCI总线配置请求的转换原则 - 56 - 2.4.3 PCI总线树Bus号的初始化 - 58 - 2.4.4 PCI总线Device号的分配 - 60 - 2.5 非透明PCI桥 - 62 - 2.5.1 Intel 21555中的配置寄存器 - 63 - 2.5.2 通过非透明桥片进行数据传递 - 65 - 2.6 小结 - 67 - 第3章PCI总线的数据交换 - 68 - 3.1 PCI设备BAR空间的初始化 - 68 - 3.1.1 存储器地址与PCI总线地址的转换 - 68 - 3.1.2 PCI设备BAR寄存器和PCI桥Base、Limit寄存器的初始化 - 70 - 3.2 PCI设备的数据传递 - 72 - 3.2.1 PCI设备的正向译码与负向译码 - 72 - 3.3.2 处理器到PCI设备的数据传送 - 74 - 3.2.3 PCI设备的DMA操作 - 74 - 3.2.4 PCI桥的Combining、Merging和Collapsing - 75 - 3.3 与Cache相关的PCI总线事务 - 77 - 3.3.1 Cache一致性的基本概念 - 77 - 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写 - 82 - 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 - 83 - 3.3.4 PCI设备进行DMA写时发生Cache命中 - 85 - 3.3.5 DMA写时发生Cache命中的优化 - 87 - 3.4 预读机制 - 89 - 3.4.1 Instruction Fetch - 89 - 3.4.2 数据预读 - 92 - 3.4.3 软件预读 - 94 - 3.4.4 硬件预读 - 96 - 3.4.5 PCI总线的预读机制 - 97 - 3.5 小结 - 101 - 第II篇PCI Express体系结构概述 - 102 - 第4章PCIe总线概述 - 104 - 4.1 PCIe总线的基础知识 - 104 - 4.1.1 端到端的数据传递 - 104 - 4.1.2 PCIe总线使用的信号 - 106 - 4.1.3 PCIe总线的次结构 - 109 - 4.1.4 PCIe链路的扩展 - 111 - 4.2 PCIe体系结构的组成部件 - 114 - 4.2.1 基于PCIe架构的处理器系统 - 114 - 4.2.2 RC的组成结构 - 117 - 4.2.3 Switch - 118 - 4.2.4 VC和端口仲裁 - 120 - 4.2.5 PCIe-to-PCI/PCI-X桥片 - 122 - 4.3 PCIe设备的扩展配置空间 - 124 - 4.4 小结 - 125 - 第5章PCIe总线的事务 - 126 - 5.1 TLP的格式 - 126 - 5.1.1 通用TLP头的Fmt字段和Type字段 - 127 - 5.1.2 TC字段 - 129 - 5.1.3 Attr字段 - 130 - 5.1.4 通用TLP头中的其他字段 - 131 - 5.2 TLP的路由 - 133 - 5.2.1 基于地址的路由 - 133 - 5.2.2 基于ID的路由 - 135 - 5.2.3 隐式路由 - 138 - 5.3 存储器、I/O和配置读写请求TLP - 139 - 5.3.1 存储器读写请求TLP - 139 - 5.3.2 完成报文 - 144 - 5.3.3 配置读写请求TLP - 146 - 5.3.4 消息请求报文 - 147 - 5.4 TLP中与数据负载相关的参数 - 148 - 5.4.1 Max_Payload_Size参数 - 148 - 5.4.2 Max_Read_Request_Size参数 - 149 - 5.4.3 RCB参数 - 149 - 5.5 小结 - 150 - 第6章 MSI和MSI-X中断机制 - 151 - 6.1 MSI/MSI-X Capability结构 - 152 - 6.1.1 MSI Capability结构 - 152 - 6.1.2 MSI-X Capability结构 - 154 - 6.2 PowerPC处理器如何处理MSI中断请求 - 158 - 6.2.1 MSI中断机制使用的寄存器 - 159 - 6.2.2 系统软件如何初始化PCIe设备的MSI Capability结构 - 162 - 6.3 x86处理器如何处理MSI-X中断请求 - 165 - 6.3.1 Message Address字段和Message Data字段的格式 - 165 - 6.3.2 FSB Interrupt Message总线事务 - 168 - 6.4 小结 - 169 - 结束语 - 170 -
PCIE-DMA是一种基于PCIe接口的直接内存访问技术,能够实现高速数据传输。在我的学习笔记中,我详细记录了与PCIE-DMA相关的知识和学习心得。 首先,我了解到PCIE-DMA技术的基本原理和作用。PCIE-DMA可以通过PCIe总线直接访问系统内存中的数据,而不需要过多的CPU干预,提高数据传输的速度和效率。这种技术在需要大量数据传输的场景下非常有效,比如高性能计算、数据采集等。 其次,我深入学习PCIE-DMA的工作原理。PCIE-DMA的核心是DMA控制器,它负责管理和控制数据传输的流程。当设备需要读写内存中的数据时,它通过DMA控制器发送请求,然后DMA控制器生成一个事务,将数据直接传输到或从内存中。这样就大大减少了CPU的参与,提高了数据传输的效率。 另外,我还学习PCIE-DMA的配置和编程方法。PCIE-DMA的配置主要包括硬件配置和软件配置两个部分。硬件配置通常涉及到DMA控制器和PCIe接口的初始化和配置,软件配置则需要编写驱动程序来驱动DMA控制器和处理数据传输过程中的事件和异常。这部分内容对于我来说还比较新颖,需要更多的实践和实践。 最后,我总结了PCIE-DMA的应用场景和发展前景。PCIE-DMA在高性能计算、数据采集等领域具有广阔的应用前景。随着数据量的不断增加和传输速度的要求越来越高,PCIE-DMA技术的需求也将越来越大。因此,对于我来说,学习掌握PCIE-DMA技术非常有价值。 通过学习和记录PCIE-DMA的相关知识和经验,我对这项技术有了更深入的理解和掌握。希望将来能通过应用PCIE-DMA技术解决实际问题,为科研和工程项目的顺利进行做出贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值