专栏首页根究FPGAPCIe系列第七讲、PCIe的物理层

PCIe系列第七讲、PCIe的物理层

本章将着重讲述PCIe物理层组成与操作,物理层位于数据链路层之下,可产生PLP包(Physical Layer Packet)进行管理。

————————————————————

从作用方面考虑:物理层位于数据链路层和PCIe链路之间,其主要作用是:

1、 发送来自数据链路层的TLP和DLLP。

2、 发送和接收在物理层产生的PLP报文

3、 从PCIe链路接收数据报文并发送到数据链路层

————————————————————

从组成结构方面考虑,物理层主要由物理逻辑子层和物理电气子层构成,侧重于物理电气子层,PCIe链路通过LTSSM状态机对PCIe链路进行控制和管理,逻辑子层主要完成与数据链路层的数据交换,由发送逻辑接收逻辑组成。

发送逻辑 :

1、物理层从数据链路层中获取TLP或DLLP,将其存放到TX Buffer中

2、物理层将TX buffer中的数据添加物理层的前缀(Start Code)和后缀(End Code),之后通过多路选择器MUX,进入Byte Strpping模块。(因为物理层也定义了一系列PLP,这些PLP也可以通过MUX,进入Byte Stripping部件)

3、PCIe链路由多个Lane构成,Byte Stripping部件将报文发送到不同的Lane中,由于PCIe不同的Lane中传递的数据可能存在漂移,即Skew,Byte Stripping的一个重要功能就是消除这个漂移,即De-Skew。

4、数据进入到各自Lane的加扰(Scramber模块),“加扰”后进行8b/10b编码,最后通过并串转换模块发送到PCIe链路中。

————————————————————

接收逻辑 :

1、 物理层从PCIe链路的各个Lane中获得串行数据,串并转换之后经过8b/10b解码和De-Scramber解扰之后,发送到“Byte Unstripping”部件。

2、 “Byte Unstripping”部件将来自不同Lane的的数据进行合并,进行De-Skew操作,然后取出物理层前缀后缀并进行边界检查后,将数据放入RX buffer中。

3、 物理层将Rx Buffer中的数据发送到数据链路层。

————————————————————

从信号处理的角度来看(Scramber加扰),在串行链路上进行传输时,如果字符流存在一些规律,这些“规律”将会叠加,并产生较大的EMI(Electromagnetic Interference,电磁噪声)。

Scramber的主要作用是通过“加扰”的方式削减EMI,所谓“加扰”就是将数据流与一个随机序列进行异或操作后,再发送出去。此时被发送的数据流也基本是伪随机序列,从而降低了发送数据时的EMI PCIe总线通过一个16位的线性反馈移位寄存器生成伪随机序列,核心是m序列,在m序列中,“0”和“1”的数量基本相等,但是“1”多一点,因为全0不可以作为初始值。

来自Byte Stripping部件的数据链与这个伪随机序列中的字符流进行异或操作,从而生成一个较为随机的随机数,从而降低EMI。

De-Scramber进行去扰操作,其随机多项式与Scramber完全相同且完全同步,即使用相同的初始值(0xffff),PCIe链路两端设备每次加扰一个8b数据后,LFSR进行8次移位操作。

————————————————————

最后,以一个事务层包发送实例对物理层进行说明:

一个TLP在通过物理层时,首先要添加Start Code和End Code,分别为STD和END,STD的控制字符为K27.7和K29.7。STD和END字符在通过物理层时,不需要进行加扰解扰操作。数据链路层前缀、TLP、数据链路层后缀都属于数据字符,这些字符在通过物理层时需要进行加扰解扰操作,之后进行8b/10b转换,并串转换后发向PCIe链路。控制字符和数据自读都需要根据物理层CRD的状态,决定使用CRD-还是CRD+。PCIe链路的两端进行加扰解扰操作时,需要保证使用的LFSR寄存器同步,LFSR寄存器的同步由控制字符COM控制,在初始复位时LFSR寄存器的int value为0xffff,当接收到控制字符COM后,物理层将LFSR寄存器的值置为0xffff,此外物理层在接收到SKP控制字符后,不会对LFSR进行移位操作。

资料整理不易,欢迎关注~~

本文分享自微信公众号 - 根究FPGA(gh_08b5d93f8fa5),作者:叫什么好呢啊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PCIe的XDMA应用

    之前介绍的PCIe实物模型为PIO模式,可编程PIO模式,软件控制CPU在主机总线上发起一个存储器或IO读写总线周期,并以映射在PCIe设备地址空间的一...

    根究FPGA
  • 散装记录之如何单独使用modelsim进行仿真

    无独有偶,这两天都遇到了只能用modelsim进行仿真的要求,事情虽小,但是觉得还是要记录一下的,所以在此记录一下如何单独使用modelsim进行verilog...

    根究FPGA
  • PCIe系列第一讲、PCIe接口的速度与管脚介绍

    PCIe2.0规范于2007年1月5日推出,将PCIe1.0 2.5GT/s的传输速率提高了一倍,每个通道的吞吐率从250MB/s上升到500MB/s,因此2通...

    根究FPGA
  • Roslyn 入门:使用 Visual Studio 的语法可视化(Syntax Visualizer)窗格查看和了解代码的语法树

    发布于 2018-03-18 12:50 更新于 2018-06...

    walterlv
  • 隐私信息与用户画像

    隐私信息与用户画像 隐私是一种与公共利益、群体利益无关,当事人不愿他人知道或他人不便知道的个人信息,当事人不愿他人干涉或他人不便干涉的个人私事,以及当事人不愿他...

    企鹅号小编
  • 用WPF做一个简易浏览器

    微软的WPF(Windows Presentation Foundation)是目前Windows平台上最好用的图形界面框架了。如果想在Windows平台上编写...

    乐百川
  • 数据猿专访诸葛io孔淼:数据与业务“动态”结合才能发挥最大威力

    诸葛io创始人&CEO 孔淼 【数据猿导读】 诸葛io创始人&CEO孔淼在接受数据猿记者采访时表示:“互联网企业精细化运营的第一步是要时刻关注用户,对用户的行为...

    数据猿
  • 网络数据是如何传递给进程的

    在用户态空间,调用发送数据接口 send/sento/wirte 等写数据包,在内核空间会根据不同的协议走不同的流程。以TCP为例,TCP是一种流协议,内核只是...

    luoxn28
  • Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言? 博客分类: Java TomcatJ2SEWeb

    Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?

    阿敏总司令
  • HackerOne优秀白帽黑客采访系列-Shubham Shah

    Shubham Shah,昵称notnaffy,澳大利亚人。十岁左右,Shubham在为了在游戏中打败哥哥,他尝试进行游戏破解,从此接触到了黑客技术。之后,在朋...

    FB客服

扫码关注云+社区

领取腾讯云代金券