当前位置: 首页 > news >正文

【UCIe】DLP/DLLP 在 Flit 模式下的传输机制与优化实践

1. UCIe协议中的DLP/DLLP基础概念

第一次接触UCIe协议时,我被DLP和DLLP这两个术语搞得一头雾水。经过几个实际项目的打磨,现在终于能说清楚它们的区别了。简单来说,DLP(Data Link Layer Payload)就像是快递包裹的外包装箱,而DLLP(Data Link Layer Packet)则是箱子里装的特定类型物品。在256B Flit模式下,这个"包装箱"固定占用6个字节,其中前2个字节(DLP[0:1])是快递面单(Flit Header),后4个字节(DLP[2:5])才是真正的"物品"。

这里有个容易踩坑的地方:很多人以为DLLP就是DLP,其实DLP的范围更大。就像你不能把快递箱和里面的商品划等号一样。在实际硬件设计中,我遇到过因为概念混淆导致的寄存器配置错误——把DLP的校验位当成了DLLP的类型字段,结果链路死活起不来。

UCIe的DLLP相比PCIe做了减法。由于Sideband接口接管了电源管理等功能,UCIe的DLLP主要聚焦在流控(Flow Control)这个核心任务上。这就好比从多功能瑞士军刀变成了专用螺丝刀,虽然功能少了,但在特定场景下效率更高。实测在256B Flit模式下,精简后的DLLP机制能让链路建立时间缩短约15%。

2. Flit模式下的DLP位置解析

在256B Flit的三种模式中,DLP的摆放位置就像俄罗斯方块一样各有特点。Format 3(PCIe 6.0标准模式)和Format 4(CXL.io标准模式)采用相同的布局,DLP老老实实地待在固定位置。但Format 5/6(CXL.io低延迟优化模式)就调皮多了——它给Flit_Marker单独开了个"VIP通道"。

画原理图时我发现个有趣的现象:低延迟模式下,Flit_Marker有自己的专属座位,不用和DLLP抢DLP[2:5]的位置。这就好比高铁上的商务座和二等座,避免了重要数据被普通DLLP挤占的情况。实际测试表明,这种设计能将关键TLP的传输延迟降低8-12%。

这里分享一个调试技巧:用逻辑分析仪抓包时,一定要先确认Flit模式。有次我误把Format 5的抓包数据按Format 3解析,结果Flit_Marker的位置全错,白白浪费两天时间。三种模式的DLP位置差异可以用下面这个表格概括:

Flit模式类型DLP[0:1]用途DLP[2:5]用途Flit_Marker位置
Format 3Flit HeaderDLLP/优化包占用DLP[2:5]
Format 4Flit HeaderDLLP/优化包占用DLP[2:5]
Format 5/6Flit Header专用DLLP独立预留位置

3. DLP字节的深度拆解

3.1 Flit Header的奥秘

DLP[0:1]这两个字节就像Flit的身份证。不带重传机制的Flit Header包含17个有效bit,每个bit都暗藏玄机。最让我印象深刻的是Byte0的bit4——这个看似普通的标志位,实际是区分常规DLLP和特殊包的"开关"。

在写RTL代码时,我建议用parameter定义这些标志位的位置。比如:

localparam FLIT_HDR_DLLP_TYPE_BIT = 4; localparam FLIT_HDR_RETRY_BIT = 7;

这样不仅提高代码可读性,后期修改也方便。曾经有个项目因为硬编码bit位置,协议更新后需要修改二十多处,血泪教训啊!

3.2 DLLP的七十二变

DLP[2:5]这4个字节堪称"百变星君"。它可能是:

  1. 常规Update_FC DLLP
  2. 厂商自定义DLLP
  3. Optimized_Update_FC
  4. Flit_Marker

判断当前是哪种类型的秘诀在于"两级解码":先看Flit Header的bit4,如果是1,再看DLP[2:5]的最高位(bit31)。这就像玩解谜游戏——第一把钥匙打开类型大门,第二把钥匙才能确定具体种类。

特别提醒:Flit_Marker和TLP是绑定的"连体婴"。在标准模式下,它们会占用DLLP的位置;但在低延迟模式下,Flit_Marker有独立包厢,此时DLP[2:5]还可以正常传输DLLP。这个设计精妙之处在于既保证了关键标记的及时传输,又不影响常规DLLP的发送。

4. 传输机制的实战细节

4.1 发送端的智慧

UCIe Adapter就像个老练的邮局分拣员。它通过独立的lp_dllp接口接收DLLP,而不是混在lp_data里。这种设计有个巨大优势:DLLP可以和Flit"自由恋爱",不必"包办婚姻"。

举个例子:当Adapter正在发送重传缓冲区的Flit时,新到的DLLP可以插入这个重传Flit中,而不是非得等着和新Flit配对。这就好比快递员可以随时往正在派送的车里补充新包裹,不用等下一趟车。

但这里有个坑要注意:每个VC的每种DLLP类型都需要独立缓存。有次我为了节省面积,把不同VC的Update_FC存在一起,结果出现信用量覆盖的问题。后来老老实实按规范做了分离式存储,问题迎刃而解。

4.2 接收端的玄机

接收端Adapter就像个专业的拆箱工。它的任务是从Flit中精准提取DLP信息,特别是要处理好Flit_Marker和Optimized_Update_FC这两种"特殊快递"。

这里分享一个性能优化技巧:可以在Adapter内部实现DLLP的预解码。当检测到Flit Header的bit4为1时,立即启动对DLP[2:5]最高位的判断。通过这种流水线操作,我们成功将处理延迟从5个周期降到了3个周期。

需要注意的是,NOP DLLP(全0)就像空包裹,接收端应该直接丢弃。但其他类型的DLLP必须原样传递给协议层。在验证环境中,我建议添加DLP类型检查断言,比如:

assert property (@(posedge clk) (dlp_received && (dlp[2:5]==0)) |-> !dllp_valid) else $error("NOP DLLP should not be forwarded");

5. 优化策略的工程实践

在实际芯片设计中,针对256B Flit模式的优化就像玩俄罗斯方块——既要填满空间,又要保证效率。以下是几个经过验证的优化方案:

Flit_Marker的优先级调度:在标准模式下,当检测到待发送Flit包含Flit_Marker时,Adapter应暂停插入普通DLLP。这需要设计精巧的仲裁机制,我们采用了一种基于信用量的动态优先级算法,使得关键TLP的延迟抖动降低了22%。

Optimized_Update_FC的批量处理:Adapter可以将多个Update_FC合并成一个Optimized_Update_FC。我们的实现方案是设置一个16-entry的缓冲队列,当收到连续的同类型Update_FC时,自动执行"压缩"操作。实测这种方法能减少38%的流控包传输。

DLLP的节流机制:为了防止DLLP占用过多带宽,我们实现了符合协议要求的发送间隔计数器。这里有个细节要注意:计数器应该基于Flit计数而不是绝对时间。在100GHz时钟下,我们的实现方案是每128个Flit至少发送一次Update_FC。

在最近的一个7nm芯片项目中,通过这些优化手段,我们成功将UCIe链路的有效带宽利用率提升到了93.5%,同时将最坏情况延迟控制在协议要求的80%以内。当然,这些优化需要配合严谨的验证环境——我们搭建了能注入异常DLLP序列的测试用例,确保各种边界情况都被覆盖到。

http://www.jsqmd.com/news/1096783/

相关文章:

  • 解耦传统安防底层!基于 Docker 与边缘计算的 AI 视频平台架构演进:如何通过 GB28181/RTSP 统一接入实现源码交付与 95% 成本压降
  • 系统结构考点之流水线时空图实战解析
  • Steam Deck终极模拟器配置指南:如何用EmuDeck一键搭建30+游戏平台
  • OmenSuperHub深度解析:惠普游戏本硬件控制与性能调优实战指南
  • 拒绝 “代写” 定位:gradpaper 毕业论文功能做学术写作的实用辅助者
  • Windows系统文件APHostService.dll丢失找不到问题解决
  • Ubuntu20.04 ROS Noetic 下基于turtlebot3的gmapping仿真建图实战
  • LVGL实战指南:从零构建嵌入式GUI应用
  • 【技术解析】方波:从数学表达到电路实现的信号之旅
  • 【射影几何02-补】从调和点列出发:极线作图的几何直观与代数验证
  • 3个专业技巧:在VS Code中掌握二进制文件编辑的核心方法
  • 从面试官视角拆解:大厂SRE社招面经背后的能力模型与考察逻辑
  • 在Google Colab中高效部署与运行GitHub深度学习项目
  • Markdown Viewer:如何在浏览器中优雅阅读30+主题的Markdown文件?
  • Gromacs分子动力学模拟实战:从空蛋白结构到稳定轨迹的完整流程解析
  • Xshell高效运维:多会话管理与分屏操作实战
  • Cisco ASA防火墙NAT/PAT实战:从基础配置到高级策略全解析
  • 三分钟掌握:Image Matting如何重塑影视与设计工作流?
  • 013goto语句的演示
  • Termux 移动渗透测试实战手册
  • UE5 如何使用 compute shader 增加一个 postprocess pass
  • MATLAB Profiler实战指南:从性能瓶颈定位到仿真加速
  • 实战解析:基于74LS194与Quartus的1101序列检测器设计与验证
  • 法治教育警示展厅设备【全民反诈跑酷答题】
  • 从公开信息到数据拼图:构建与防范视角下的社工库实践
  • SteamShutdown终极指南:智能监控Steam下载完成后自动关机
  • 2026阿坝黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 毕业季救星!2026亲测好用的6款AI论文写作软件,初稿轻松搞定
  • 上市公司茶文化指数数据集
  • 技术解析 (二十三):基于注意力机制的深度多示例学习模型 (2018)