【UCIe】UCIe DLP/DLLP 介绍

news/2025/3/29 8:35:04/


🔥点击查看精选 UCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/128578536】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net

文章目录

  • 1. DLP/DLLP 概念
  • 2. DLP 在 Flit 中的位置
  • 3. DLP Bytes
    • 3.1 DLP[0:1]
    • 3.2 DLP[2:5]
      • 3.2.1 DLLP 作用及分类
        • PCIe DLLP 分类
        • UCIe DLLP 分类
        • NOP DLLP
      • 3.2.2 Flit_Marker
      • 3.2.3 Optimized_Update_FC
  • 4. DLLP 的传输
    • 4.1 DLLP 发送
    • 4.2 DLLP 接收
  • 5. 参考


1. DLP/DLLP 概念

  从 PCIe 6.0 开始,PCIe Base Spec 中便出现了 DLP 的概念,UCIe 中也沿用了这个概念。大部分人把 DLP 跟 DLLP 当成同一个东西,称不上错,但实际上两者稍有区别。

  DLP,Data Link Layer Payload,数据链路层载荷。我们在说 DLP 的时候,通常是指 Flit 中的 6B DLP Bytes。PCIe DLP 中包括 4B DLLP 及 2B CRC,UCIe DLP 包含 2B Flit Header + 4B DLLP (或 Optimized_FC、Flit_Marker)。

  DLLP,Data Link Layer Packet,数据链路层包。我们在说 DLLP 的时候,通常是指 DLP Bytes [2:5] 这 4B(下称 DLP[2:5])。

  DLLP 仅在 PCIe 或 UCIe 链路两端设备的数据链路层之间传输,其源于发送端设备的数据链路层,终于接收端设备的数据链路层。在 PCIe 中,DLLP 用以链路管理及维护(链路初始化、电源管理等);在 UCIe 中,Sideband 及 FDI/RDI 接口上的握手信号分担了链路初始化及 PM 的工作,因此 UCIe DLLP 的功能主要是 Flow Control 这一项(应该也支持 Vendor Defined DLLP)。



2. DLP 在 Flit 中的位置

  在 UCIe 1.0 支持的各种 Flit Mode 中,只有 PCIe 及 CXL.io 256B Flit 中存在 DLP Bytes。UCIe DLP 或 DLLP,都是对 ① Standard 256B Flit Mode for PCIe 6.0 (Format 3) 、② Standard 256B Flit Mode for CXL.io (Format 4) 及 ③ Latency Optimized 256B Flit Mode for CXL.io (Format 5 & 6) 这三种 Flit Mode 而言的。对于其他的 64B 或 68B Flit Mode,都没有 DLP 或 DLLP 的概念。

  不同 Flit Mode下 DLP 在 Flit 中的位置分别如图 1,2,3 所示。有一点要注意,在 Latency Optimized 256B Flit Mode for CXL.io 操作模式中,在 DLP[2:5] 之外单独为 Flit_Marker 分配了位置。


在这里插入图片描述

▲ 图 1:Format 3: Standard 256B Flit Mode for PCIe 6.0

在这里插入图片描述

▲ 图 2:Format 4: Standard 256B Flit Mode for CXL.io

在这里插入图片描述

▲ 图 3:Format 5 and 6: Latency Optimized 256B Flit Mode for CXL.io


3. DLP Bytes

3.1 DLP[0:1]

  UCIe 的 DLP0 及 DLP1 位置替换为了 Flit Header,不带 Retry 的 Format 3 或 Format 4 Flit Header 格式如表 1 所示。Flit Header 由协议层及 Adapter 共同填充。

▼ 表 1:Flit Header for Format 3 or Format 4 without Retry

在这里插入图片描述

3.2 DLP[2:5]

  DLP[2:5] 的位置,可以是常规的 Update_FC DLLP 或 Vendor Defined DLLP,也可以是 Optimized_Update_FC 或 Flit_Marker。严格意义上说,Flit_Marker 及 Optimized_Update_FC 都不算是 DLLP,这两种包都没有特定的 DLLP Type 编码,它们只是占用了 DLP Bytes 中 DLLP 的位置。UCIe 1.0 中通过 Flit Header Byte0 Bit4 来指示当前 DLP[2:5] 位置是 DLLP Payload 还是 Flit_Marker 或 Optimized_Update_FC。


3.2.1 DLLP 作用及分类

PCIe DLLP 分类

  在 PCIe 中,根据功能的不同,DLLP 大致可分以下几类:

  • ACK/NAK DLLP(TLP 应答 DLLP)。包括 ACK、NAK,用以决定重传还是丢弃 Tx Retry Buffer 中的 TLP。仅用于 Non-Flit Mode。
  • FC DLLP(Flow Control DLLP)。包括 InitFC1-P、InitFC1-NP、InitFC1-Cpl、InitFC2-P、InitFC2-NP、InitFC2-Cpl、UpdateFC-P、UpdateFC-NP 及 UpdateFC-Cpl,用以初始化及更新流控信用量(Flow Control Credit)。
  • PM DLLP (Power Management DLLP)。包括 PM_Enter_L1、PM_Enter_L23、PM_Active_State_Request_L1 及 PM_Request_Ack,用以进行功耗及电源管理。
  • LM DLLP (Link Management DLLP),仅用于 Flit Mode 下 L0p 相关链路管理。
  • Vendor Defined DLLP。厂商自定义的 DLLP。

  ACK/NAK、FC 及 PM DLLP 均为链路管理 DLLP。此外,还有 MR、NOP 及 Data_Link_Feature DLLP。各 DLLP 类型之间通过 DLLP 中的 Tyte 字段 (Byte0) 进行区分。

  PCIe 工作在 Flit Mode 时,PCIe Retry 机制所需的 Ack/Nak 及 SN 等 Ack/Nak DLLP 信息拆分到了 Flit Header 中,没有专门的 Ack/Nak DLLP。


UCIe DLLP 分类

  UCIe DLLP 是 PCIe DLLP 的子集。跟 PCIe DLLP 相比,UCIe DLLP 主要有以下不同:

  • 在 UCIe 中,Sideband 及 FDI/RDI 接口上的握手信号分担了 PM 的工作,因此 UCIe 中没有 PM DLLP
  • UCIe 不具备 PCIe 6.0 的 L0p 低功耗状态,也不具备 L0p 相关的 LM DLLP

  跟 PCIe Flit Mode 一样,Ack/Nak 机制仍然通过 Flit Header (DLP0/DLP1) 中相关字段来保证,本篇不作展开。


NOP DLLP

  UCIe 的 NOP DLLP 是指 DLP[2:5] 位置全 0 的 DLLP,当没有 DLLP(Format 3 & 4 时也没有 Optimized_Update_FC 及 Flit_Marker) 要发送时,Adapter 在 DLP[2:5] 填充 NOP DLLP。具体可参考 《UCIe NOP 介绍》第 3 节 NOP DLLP 及 NOP2 DLLP 相关描述。


3.2.2 Flit_Marker

  Flit_Marker 用以指示当前 Flit 中最后一笔 TLP 的状态,并携带有 PTM 相关消息。Flit_Marker 包跟 Flit 中的 TLP 强相关,Flit Marker 是包含在 Flit 中的,其在 FDI 接口上走 lp/pl_data,而非 lp/pl_dllp。

  Flit_Marker 不是真正的 DLLP,其没有特定的 DLLP Type 编码,通过 Flit Header 中的相关字段及 DLLP Bytes 最高位来指示当前是否为 Flit_Marker,其中 Flit Header Byte0 bit4 为 1 表示当前 Flit 中 DLLP Bytes 为 Optimized_Update_FC 或 Flit_Marker;进一步地,DLLP Bytes 最高位(bit31)为 1 表示 Flit_Marker,为 0 表示 Optimized_Update_FC。

  笔者理解,对于发送端而言,其 DLLP 独立于 Flit,仅通过 Flit Header 即可确认当前 Flit 中是否携带 Flit_Marker;对于接收端而言,DLLP 是嵌在 Flit 中的,需要依据 Flit Header 及 DLLP Bytes 最高位共同来判断当前是否为 Flit_Marker。也就是说,Adapter 接收到本端协议层填充的 DLP0 bit4 =1,只能指示当前 Flit 携带了 Flit_Marker,不用以指示 Optimized_Update_FC。对于 Adapter 收到的来自对端的 Flit, DLP0 bit4 =1 才用来指示当前 Flit 中携带有 Flit_Marker 或 Optimized_Update_FC,然后通过 DLP[2:5] 最高位来区分是 Flit_Marker 还是 Optimized_Update_FC。

  对于 Standard 256B Flit Mode for PCIe & CXL.io (Format 3 & 4),Flit_Marker 占用了 DLLP 的位置。在发送端,若 Adapter 发现协议层发来的 Flit 中携带有 Flit_Marker,则按照 Flit_Marker 中相关状态来处理,无需填充 DLLP。

  对于 Latency Optimized 256B Flit Mode for CXL.io (Format 5 & 6) 中单独预留了 Flit_Marker 的位置,Adapter 接收到协议层发来的带有 Flit_Marker 的 Flit 时,仍然可以在其 DLP[2:5] 填充相关 DLLP。

  Flit_Marker 相关介绍可参考《PCIe 每日一问一答(2022.11 已归档)》。


3.2.3 Optimized_Update_FC

  Optimized_Update_FC 是一种优化后的流控包,其也不是严格意义上的 DLLP。Optimized_Update_FC 相关介绍可参考《PCIe 每日一问一答(2022.11 已归档)》。对于发送端而言,协议层通过 FDI 接口的 lp_dllp_ofc 信号来指示当前 lp_dllp 中是否为 Optimized_Update_FC;对于接收端而言,则需要依据 Flit Header 及 DLLP Bytes 最高位共同来判断当前 Flit 中是否携带 Flit_Marker。当 Adapter 向协议层传递 Optimized_Update_FC 时,Optimized_Update_FC 在 FDI 接口上走 lp_dllp,而非 lp_data。

  有两种方式可以产生 Optimized_Update_FC:

  • 协议层直接发送 Optimized_Update_FC 给 Adapter,并通过 lp_dllp_ofc=1 告知 Adapter 当前为 Optimized_Update_FC ;
  • 在 Adapter内部 将协议层发来的多笔 Update_FC 整合成一笔 Optimized_Update_FC。


4. DLLP 的传输

4.1 DLLP 发送

  UCIe Adapter 负责接收来自协议层的 Flit Data 及 DLLP Data,由 Adapter 将 DLLP 插入 Flit 对应位置。

  FDI 提供了 lp_data 信号来传递 Flit Data,Flit Data 中有 DLLP 的位置,但协议层并不用 lp_data 来传递 DLLP,而是提供了独立的 lp_dllp 信号在协议层与 Adapter 之间传递 DLLP。之所以将两者分离开来,是因为 TLP 与 DLLP 并不存在强绑定关系,即便 DLLP 与 Flit Data 中的 TLP 同一时刻到达 Adapter,也不意味着这笔 DLLP 就需要插入该 Flit 中。一来 Adapter 内可能正在发送 Retry Buffer 内的 Flit Data,这时 DLLP 就应该插入到 Retry Buffer 内取出的 Flit 中,协议层最新下发的 Flit Data 放在 Tx Buffer 中待发;二来协议层下发的 DLLP 并不一定会被发送到对端,比如前一 Updata_FC 放在了 Tx Buffer 中待发,在发送这笔 DLLP 之前收到了协议层下发的带有最新 Credit 的 Update_FC,则 Adapter 直接丢掉过期的 DLLP,转而发送最新的 Update_FC DLLP。

  RDI 接口上没有独立的信号来传递 DLLP。由于 Adapter 已经将 DLLP 填充到了 Flit 中,此时 RDI 接口 lp_data 内的 DLLP 字段是有效的,DLLP 字段完全通过 lp_data 信号进行传递,Adapter 到物理层之间的 RDI 接口上无需独立的信号来传递 DLLP 信息。

  lp_dllp 位宽是可定制化的,若发送一笔 DLLP (4B) 占用多个 lp_dllp Cycle,需按照 LSB 小端模式按序发送 DLLP Data,先发送 DLLP Byte0。

  Adapter 接收到的协议层发来的 DLLP(包括 Optimized_Update_FC) 不一定能够被及时发送出去,对于每个 VC (Virtual Channal,虚通道) 的每一种类型的 DLLP,Adapter 中必须为其分配独立的缓存空间且能够存储至少一笔该类型的 DLLP。

  发送 DLP 时,标准的 DLLP 及 Optimized_Update_FC 均无需保存进 Retry Buffer。Flit_Marker 跟 TLP 状态有关,需要跟 TLP 一起保存在 Retry Buffer 中

  DLLP 发送频率遵循协议规定,按照一定频率进行交换,防止 Timeout。如果协议层没有 TLP 要发送,需要插入 NIO Flits,便于 Adapter 有机会插入 DLLP。


4.2 DLLP 接收

  在接收端,UCIe Adapter 负责从接收到的 Flit 中提取 DLP Bytes,并解析为 DLLP、Optimized_Update_FC 或 Flit_Marker。Adapter 可以根据 Flit Header 中相关信息获知当前 Flit 中含有 Optimized_Update_FC 或 Flit_Marker,并根据 DLP[2:5] 中的最高位来区分到底是两者中的哪一种。接收到的 NOP DLLP 不得传递到协议层,其他 DLLP、Optimized_Update_FC 及 Flit_Marker 均需通过 Flit 中的独立字段或 FDI 接口的 pl_dllp 信号转发到协议层。



5. 参考

  1. UCIe Spec r1.0, Chapter 3,8
  2. UCIe NOP 介绍
  3. PCIe 每日一问一答(2022.05 已归档)
  4. PCIe 每日一问一答(2022.11 已归档)


— END —


🔥 精选往期 UCIe 协议系列文章,请查看【 Chiplet 专栏】🔥

⬆️ 返回顶部 ⬆️


http://www.ppmy.cn/news/894988.html

相关文章

yt-dlp用法和选项

常规选项 -h, --help 打印帮助文本并退出 --version 打印程序版本并退出 -U, --update 将这个程序更新到最新版本。确保您有足够的权限(如果需要,可以使用sudo运行) -i, --ignore-errors …

如何彻底卸载绿盟终端DLP

lm离职人必看好吧 .md文档转过来的,图片有点糊。 文章目录 一、公司要求安装的感知终端二、具体操作1. 用pchunter工具看过了启动项和计划任务,没有发现可疑的数据2. 后从文件类型:Internet快捷方式入手。3.后面找别人要了终端安装包&#xf…

DLP市场份额第一 | IDC 首份中国数据泄露防护市场份额报告发布

2021年天空卫士DLP市场份额位列中国第一 IDC 首份中国数据泄露防护市场份额报告于9月30日发布。报告针对2021年中国数据泄露防护市场的规模、增长速度、主要玩家、市场与技术的发展趋势等内容进行了详细研究。报告数据显示,中国数据泄露防护市场在2021年实现了39.2…

yt-dlp安装和使用(以Windows为例)

本教程演示如何安装、使用yt-dlp 目录 一、安装ffmpeg和yt-dlp 二、配置环境变量 三、下载视频 一、安装ffmpeg和yt-dlp FFmpeg 是一个库和工具的集合,用于处理音频、视频、字幕和相关元数据等多媒体内容,点击下面链接到其官网下载对应电脑系统的ffmpeg…

DLP 数字光处理

DLP 数字光处理 DLP 数字光处理技术简介工作原理技术优势编辑应用范围 DLP 数字光处理 DLP是“Digital Light Processing”的缩写,即为数字光处理,也就是说这种技术要先把影像信号经过数字处理,然后再把光投影出来。 技术简介 DLP技术是一…

Linux下做性能分析5:Amdahl模型

[前言] 前一个Blog我们使用了一个叫cs的程序作为例子,那个程序是我为了举例子临时写的,这个代码我共享在这里:GitHub - nekin2012/btest。后面我要再举例子的话,就都加到这个地方来。由于这些代码没有经过最基本的软件质量保证工…

Python detach 进程

有时候我们可能会遇到这样的需求: 有一个调度程序会周期性的读取任务来调度,并且这些任务的执行时间比较长,我们想要在调度程序退出或Ctrlc中断时不要影响其启动的任务。使用python实现如下: import os import time from multipr…

单位内网视频会议怎么开

越来越多的人使用视频会议系统了,视频会议厂家也在不断的完善自己的产品,在行业中争夺自己的一席之地。视频会议无非就是在内网和外网两种网络环境中部署,外网使用的网络会议软件一般购买账号就可以使用了;单位内网视频会议有自己…