Flit Mode

写在前面:

1、本文参考来源PCIe 6.2,2024.02.25

2、仅作为个人学习记录和分享,转载请注明出处

3、个人能力有限,协议的理解均基于个人,如有错误还望指出

4、主要是介绍物理层中Flit的格式以及打包/解包过程


目录

一、简介

二、数据流

1. TLP Bytes

2. DLLP Bytes



一、简介

  首先确定一点:当PCIe链路工作在64.0GT/S或者更高的速率时,其使用的是Flit Mode(FM),并且为1b/1b的编码模式。在FM下,数据在物理层的主要形式为(如图1所示)236Bytes TLP+6Bytes DLLP+8Bytes CRC+6Bytes FEC,其中TLP为Transaction Layer Packet;DLLP为Data Link Layer Packet‘;CRC为Cyclic Redundancy Check,其是根据TLP和DLLP来计算的校验结果,用于对TLP和DLLP的数据保护;FEC为Forward Error Correction,主要是用来解决PCIe数据传输中的First Bit Error Rate(FBER)问题的,同时也是对TLP+DLLP+CRC的保护。

图1 物理层中的FM下的数据格式

  在PCIe的每条lane的传输中,以Symbol(8bit)作为基本的传输单元,并且其采用PAM4进行传输。一般来说,我们将一个Symbol,也就是8bit用S7S6S5S4S3S2S1S0来进行表示,其在传输时,虽然以Symbol以基础单位,但是会以两个Sn为单位进行大端传输,也就是S1S0/S3S2/S5S4/S7S6这样的顺序进行传输。PAM4为Pulse Amplitude Modulation 4-level,即四电平脉冲幅度调制,相较于之前版本的PCIe中的NRZ多了两组电平信号,也就是采用4电平信号进行传输,可以传输2bit内容,眼图上来说呈现三眼的状态。一般来讲PAM4虽然传输速率更快但是易受干扰性更高,但是这部分在此不做讨论。

图2 PAM4示意图

  FM下的数据打包和解包的过程如图3和图4所示。对发送方来说,首先将236Bytes TLP和6Bytes DLP进行CRC计算,产生8Bytes大小的CRC,然后将236Bytes TLP、6Bytes DLLP和8Bytes CRC进行FEC计算,产生6Bytes大小的FEC。然后在每条lane上分别以Symbol为单位进行1bit的加扰操作,完成后进行2bit的格雷码编码,然后就是做一些发送预编码和PAM4的相关工作并发出。

  对接收方来说,基本上就是发送方的逆过程,最终会还原为236Bytes TLP和6Bytes DLP。

图3 64.0GT/s下FM的打包示意图

图4 64.0GT/s下FM的解包示意图

二、数据流

  从上文的介绍中可知FM下的数据主要包括236Bytes TLP和6Bytes DLLP(CRC和FEC在此不讨论)

1. TLP Bytes

  TLP在Flit的位置为Bytes 0到Bytes 235,如图5所示。在链路层级的重试中只有TLP会被重放,DLLP不会。

图5 Flit数据示意图

  一般来说,不管是否有TLP需要传输,Flit对应的内容上都必须被填上TLP。TLP可能被分割到不同的Flit中,也可以在同一笔Flit中填充多个TLP。对TLP Bytes来说,其需要遵循如下规则:

  • 使用NOP TLP来填充内容,如果其不存在TLP需要发送的话。但是NOP TLP需要进行4DW对齐,包括其后跟随的正式TLP。
  • NOP TLP不消耗Credit
  • 对于一般的TLP范围(Bytes 0到Bytes 127喝Bytes 128到Bytes 235)来说,其中不允许包含超过8个TLP,并且允许接收方检查此规则,并且在接收端口的Data Link Protocol Error中进行记录
  • 允许通过Flit_status来判断TLP是否被poison或者为无效。如果TLP为无效则需要被接收方丢弃并且释放Credit,此外如果TLP为无效或者被poison,Flit中此TLP之后的内容均由NOP TLP填充

2. DLLP Bytes

  Flit下的DLLP包含了6个Bytes,其结构如图6所示。

图6 DLLP Bytes结构

  图6中各个域的解释如表1所示

表1 DLLP Bytes域解释

域名位置描述
Flit UsageDLP0-Bit 7:600b--IDLE Flit或者NOP Flit
01b--Payload Flit
其他为保留状态
Prior Flit was PayloadDLP0-Bit 5

0b--曾经是IDLE Flit或者NOP Flit

1b--曾经是Payload Flit

Type of DLLP PayloadDLP0-Bit 40b--DLLP Payload
1b--Optimized_Update_FC或者Flit_Marker
Replay CommandDLP0-Bit 3:200b--传输Flit的明确的序列号
01b--来自接收方的Ack,表示接收的最后有效的Flit的序列号
10b--需要重放的未确认的Flit的Nak,表示接收的最后有效的Flit的序列号
11b--要重放的单个Flit的Nak,表示接收的最后有效的Flit的序列号
Flit Sequence NumberDLP0-Bit 1:0+DLP1-Bit 7:0Flit的序列号
DLLP PayloadDLP2+DPL3+DLP4+DLP5
Optimized_Update_FC
Flit_Marker

对接收方来说允许检查Flit Usage的保留值、Flit_Marker中Flit_status(包含Last TLP Nullified和Last TLP Poisoned的状态指示)的编码保留、无效的序列号、违反TLP打包规则错误,并且记录在接收端口的Data Link Protocol Error中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值