作者:叫什么好呢啊 来源:根究FPGA微信公众号
本章将着重讲述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进行移位操作。