【UCIe】UCIe DLP/DLLP 介绍

news2025/1/17 23:20:29


🔥点击查看精选 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.coloradmin.cn/o/144884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DNS协议——域名解析

DNS协议 DNS协议是一个应用层协议,作用是域名解析   使用DNS协议的原因,就是因为哪怕是点分十进制,对于我们都不太友好,因此使用域名来代替IP地址,比如www.baidu.com   最开始的时候,DNS系统只是一个普…

java基于ssm的个人博客系统个人博客网站个人博客项目源码

简介 Java ssm开发的个人博客系统,可以发布博客,照片,站长留言。 演示视频 https://www.bilibili.com/video/BV1sf4y1y7Ne/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 技术 mysql,SSM,css,js,jq 功能 简单…

laravel5.5之laravel-admin的使用

目录 一、首先确保安装好了laravel,并且数据库连接设置正确 二、运行下面的命令来发布资源 三 、后台项目文件 四、静态文件 五、访问后台 六、参考文档 一、首先确保安装好了laravel,并且数据库连接设置正确 composer require encore/laravel-adm…

Verilog语法笔记(夏宇闻第三版)-简单的Verilog HDL模块

目录 简单的Verilog HDL程序介绍: 模块的结构 : 模块的端口定义: 模块内容: I/O说明的格式: 内部信号说明: 功能定义: 简单的Verilog HDL程序介绍: 下面先介绍几个简单的Veri…

高可用Keepalived在Linux中的应用

一、高可用 1.高可用介绍 (1)普通理解 两台服务器启动相同的业务系统,当有一台机器宕机,另外一台服务器快速接管服务,对于用户来讲是无感知的。 (2)专业理解 高可用是分布式系统架构设计中必…

Linux安装Docker与基本使用

Docker 常用于服务部署的一种方案 准备 1.云服务器或者虚拟机 2.Centos 系统 3.下载XFtp 和 XShell 安装Docker 首先删除系统中旧版本Docker或者残留文件 #卸载所有 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-lo…

Spring从入门到精通 | 动力节点老杜

目录 一、Spring启示录 1、OCP开闭原则 2、依赖倒置原则(DIP原则) 3、控制反转(重点) 4、Spring框架(重点) 二、Spring概述 Spring的8大模块 ​编辑 Spring特点 1、轻量 2、控制反转IOC 3、面向…

Qt Mac阻止和启用休眠

阻止电脑休眠,在win下是使用win api实现的,用Qt跨平台开发,实现Mac的阻止休眠,也需要Mac本身的api来实现。经过网上查资料,找到了一个能用的,链接如下。原生mac开发用的是Object-c,所以该实现用…

Kyligence 客户案例“泰康集团精细化经营分析与运营平台”获评数据智能最佳实践案例

近日,“2022 爱分析中国数据智能最佳实践案例”评选结果正式揭晓。Kyligence 携手泰康集团申报的“泰康集团精细化经营分析与运营平台”项目经过多轮角逐脱颖而出,最终获评“中国数据智能最佳实践案例”。同时,Kyligence 通过综合能力评估&am…

Linux Shell脚本编程提高

Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应…

保姆级教程 | 将Oxylabs住宅代理和数据中心代理与MultiLogin集成的操作步骤

MultiLogin是一款集多账户管理、浏览器指纹隐藏等功能于一体的实用解决方案。在您抓取所需公共数据时,将MultiLogin与值得信赖的代理结合使用,可以大幅降低被网站阻止情况发生的概率。 在本篇教程中,将带您学习简单的集成流程,手把…

数说热点 | 2022商业地产的“破局”与“新生”——逆境之下探索新兴可能

2022年,受国内新冠肺炎疫情因素影响,我国经济下行压力明显加大,尤其是部分产业链、供应链受到冲击;部分区域接触型、聚集型特征明显的线下消费表现低迷,给实体商业经营带来挑战。从市场表现看,2022年1-9月&…

数据架构之数据血缘:数据从哪里来,到哪里去

为了直观的感受数据血缘,先从网上找了两张典型的数据血缘的图。下图特点是按照数据仓库数据管理模型给出了基于表(实体)的数据血缘图。 此图是截取Solidatus软件生成的数据血缘图,该图与上图的区别在于给出了基于属性的数据血缘图…

【纯净题目版】笔试题-2023禾赛-FPGA

题目背景 笔试时间:2022.06.22应聘岗位:FPGA开发工程师 题目评价 难易程度:★★☆☆☆知识覆盖:★☆☆☆☆超纲范围:☆☆☆☆☆值得一刷:★☆☆☆☆ 文章目录1. 使用最少的电路实现二分频,给出…

ubuntu20.04 arm-linux-gnueabihf交叉编译opencv4.7.0 与opencv-contrib-4.7.0

安装交叉编译工具链编译的目标硬件是RV1126,编译工具链为32位的arm-linux-gnueabihf,本次使用的是8.3版本,可在Downloads | GNU-A Downloads – Arm Developer进行下载。下载后,解压到自己的安装目录,比如解压到/opt目…

Seata客户端

一个调用链中的所有微服务都是seata的客户端,都必须走下面的步骤 第一步:创建undo_log表 下载地址:https://github.com/seata/seata/tree/develop/script/client/at/db -- for AT mode you must to init this sql for you business databa…

海南三亚游记2022-2023跨年

文章目录1、概述2、交通2.1、广州飞三亚2.2、做高铁,三亚到海口2.3、海口飞广州3、风景3.1、吉阳区3.2、天涯区4、美食5、住宿6、补充2014年海南游记1、概述 2022-12-30~2023-01-04,海南三亚游记,旨在记录攻略 之前已经去过海南2次&#xff…

数据结构的相关概念

基本概念和术语 数据是对客观信息的一种描述,它是由能被计算机识别与处理的数值、字符等符号构成的集合。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 关键码值的是数据元素中能起标识作用的数据项。 关系指的是集合…

MFC/WIN32程序美化之使用skinH更换皮肤

官网 https://www.skinsharp.com/htdocs/index.htm 使用比较简单 使用到skinH.dll,这是程序运行的动态支撑库,还有skinH.lib文件,编译时用到的。还有SkinH.h头文件,里面包含了skinH.dll的库函数和功能注释、宏定义 使用VS创建一个WIN32项目 这就是默认的窗体效果了 加了…

SpringBoot AOP

SpringBoot AOP 目录SpringBoot AOP写法一: Before("execution(* com.bjpowernode.springboot07.javabean.Man.eat(..))")一、AOP开发1.1 概述1.2使用方法1.3创建项目并添加maven依赖1.4 创建Javabean测试类1.5 创建切面1.6 测试类1.7 测试结果1.8 结论1.…