🔥点击查看精选 UCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129031287】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
文章目录
0. 前言
UCIe 的 Standard 256B Flit Mode 有 PCIe 6.0、CXL.io、CXL.cachemem 等多种应用场景。UCIe 协议层采用 PCIe 协议时,UCIe FDI、RDI 及 UCIe Link 上传递的 Flit 格式采用 Standard 256B Flit Mode for PCIe 6.0。
Standard 256B Flit for 6.0 与 PCIe 6.0 Flit 有何区别呢?今天,我们站在 UCIe 角度,对比下两种 Flit 的区别。
(注意:如无特殊说明,下文中的 UCIe Flit 均指 UCIe Standard 256B Flit for PCIe。)
1. Flit Format 概览
UCIe Standard 256B Flit for PCIe 6.0 在格式上继承自 PCIe 6.0 Flit,两者 Flit 格式如图 1 所示。
整体来看,两者的 TLP Bytes 及 DLP Bytes 在 Flit 内的位置没有变动,只在具体实现时对相关位域做了调整。在 PCIe 6.0 Flit 基础上,UCIe Standard 256B Flit for PCIe 6.0 的改动如下:
CRC 字段由 8B 缩短为 4B
,且位置由 DLP Bytes 之后移至 Flit 末尾。CRC 计算方式稍有区别。FEC 字段取消
。UCIe 适用于 Die-to-die 等短距离传输,误码性能较好,前向纠错的必要性不大。10B Reserved
。CRC 及 FEC 节省出来的 10B 作为预留字段。
2. TLP Bytes
UCIe Standard 256B Flit for PCIe 的 TLP Bytes 共 236B。早前我们聊过《PCIe Flit 打包解包规则》,Standard 256B Flit 的 TLP Bytes 打包规则与 PCIe Flit 的 TLP Bytes 打包规则相同。
若 TLP Bytes 全部为 NOP TLP,该 Flit 称为 NOP Flit。协议层在组装 NOP Flit 时,必须在 Flit Header 内填入相应的 Protocol Identifier 来标志当前为 NOP Flit,Flit Chunk 部分全部填 0。协议层经 FDI 接口给 Adapter 发送 NOP Flit 时,通过 lp_nop_flit 信号来指示当前 Flit 为 NOP Flit,Adapter 可以依据此信号来 Bypass Tx Retry Buffer。注意:lp_nop_flit 仅用于 256B Flit Mode,只在当前 Flit 多个 Chunk 的最后一个 Chunk 期间置起。
除了将 Protocol Identified 置 0,NOP Flit 在 FDI 接口上传递给 Adapter 时,在若干个 Flit Chunk 的最后一个 Chunk 传输期间,还需要将 lp_nop_flit 信号置为 1,提示 Adapter Tx Retry Buffer 来 Bypass 该 Flit。
在 FDI 接口上,NOP Flit 只能由 Protocol Layer 传往 Adapter,不能由 Adapter 传递 到 Protocol Layer。在 RDI 接口上则没有这个方向限制。
对于 PCIe 而言,整个 Flit 全部通过 PIPE 接口在 MAC 与 PCS 之间传递,也不存在传递方向的限制。
3. DLP Bytes
UCIe Standard 256B Flit for PCIe 的 DLP Bytes 共 6B,在 Byte 粒度的功能划分上,其与 PCIe 6.0 Flit 的 DLP Bytes 相同,即 DLP[0:1] 存放状态指示位及 Ack/Nak 机制,DLP[2:5] 存放常规 DLLP Payload 及 Flit_Marker、Optimized_Update_FC 等。
3.1 DLP[0:1] - Flit_Hdr
在 UCIe 中,DLP[0:1] 有一个新名字:Flit Header (缩写为 Flit_Hdr)。UCIe Standard 256B Flit for PCIe 6.0 与 PCIe 6.0 Flit 的 DLP[0:1] 相关字段意义对比如表 1 所示。
DLP | Bit | PCIe 6.0 Flit | UCIe Standard 256B Flit for PCIe 6.0 |
---|---|---|---|
1 | 7 | Flit Usage
| Protocol Identifier
|
6 | |||
5 | Prior Flit was Payload
| Stack Identifier
| |
4 | Type of DLLP Payload
| ||
3 | Replay Command
| With Retry:
| |
2 | |||
1 | Flit Sequence Number. | ||
0 | |||
0 | 7 | Reserved | |
6 | |||
5 | With Retry: Ack or Nak information
| ||
4 | |||
3 | With Retry:
Without Retry:
| ||
2 | |||
1 | |||
0 |
PCIe 必须支持 Retry,但 Retry 在 PCIe based UCIe 8 GT/s 速率以下时是可选的,因此 UCIe Standard 256B Flit for PCIe 的 Flit_Hdr 中仅在开启 Retry 时有意义,未开启时为 Reserved。
总体而言,由 PCIe Flit 到 UCIe Flit,其 Flit_Hdr 的变动主要有以下几点:
- DLP1 Bit5 由指示前一 Flit 的 NOP/Payload Flit 类型变为指示 Stack ID。
- Relay Command 位置变动,且 UCIe 不支持 Selective Nak。
- Flit Sequence Number 位置变动,且其位宽由 10bit 减小为 8bit。
更多 UCIe Retry 或 Ack/Nak 机制的介绍,请查看《UCIe 数据完整性》 。
3.2 DLP[2:5] - DLLP Payload/Optomized_Update_FC/Flit_Marker
DLP Bytes 的后 4B 存放 DLLP。跟 PCIe 一样,根据 DLLP 的类型将其分为了 Normal DLLP Payload 及 Optimized_Update_FC 及 Flit_Marker,其意义及打包方式与 PCIe Flit DLLP 字段大致相同。
- 跟 PCIe 相比,UCIe 不需要 Link Management 及 Power Management 相关 DLLP,相关功能通过 Sideband 实现。
- Optimized_Update_FC 是一种优化后的流控包。UCIe 的 Optimized_Update_FC 可以由 Procotol Layter 生成,也可以由 Adapter 生成。
- Flit_Marker 用以指示当前 Flit 中最后一笔 TLP 的状态,并携带有 PTM 相关消息。
- 当没有 DLLP 要发送时,DLP[2:5] 位置全部置零,即 NOP DLLP。
在 FDI 接口上,有单独的接口信号 lp_dllp、pl_dllp 来传递 DLLP,并有独立的 lp_dllp_ofc、pl_dllp_ofc 信号来指示当前 DLLP 数据为 Optimized_Update_FC。
在 RDI 接口上,DLLP 数据已经填充进了 Flit DLP 字段,RDI 接口上没有 dllp 专用信号。
更多 UCIe Optimized_Update_FC、Flit_Marker 介绍请看《UCIe DLP/DLLP 介绍》。
更多 UCIe NOP DLLP 介绍请看《UCIe NOP 介绍》 。
4. Reserved Bytes
在 PCIe Flit 中不存在 Reserved Bytes。
对于 UCIe Flit,其在 CRC 及 FEC 上的优化,使得 Flit 中空出了 10B。这 10B 目前(UCIe 1.0)为 Reserved Bytes,更多作用会体现在未来版本的 UCIe 协议中。
5. CRC Bytes
PCIe Flit 的 CRC 长 8B,其计算方法请参考 PCIe 协议。
在 UCIe Flit 中,CRC 长度缩减为 4B。UCIe 协议采用 CRC-16-IBM 算法计算 CRC,能够实现 3bit 检错。UCIe CRC 计算逻辑电路的输入为 128B Message,最终输出为 2B CRC。更多 UCIe CRC 相关请见《UCIe 数据完整性》。
6. FEC Bytes
PCIe 6.0 引入了 FEC 前向纠错机制,在较高的传输速率下获得较优的 BER 性能。PCIe 6.0 采用单 Symbol 的 FEC 纠错机制,可以将 FLIT 解码时间压缩到 2 ns 以内。
UCIe Flit 中不存在 FEC Bytes。在 UCIe 中,其传输距离较近,且最高传输速率低于 PCIe 6.0 的 64 GT/s,BER 性能本身就比较好,没有必要进行 FEC。
7. 参考
- UCIe Spec r1.0
- PCI Express 6.0 Base Spec
- PCIe Flit 打包解包规则
- UCIe DLP/DLLP 介绍
- UCIe 数据完整性
- UCIe NOP 介绍
|
🔥 精选往期 UCIe 协议系列文章,请查看【 Chiplet 专栏】🔥
⬆️ 返回顶部 ⬆️