🔥点击查看精选 PCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129238369】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
0. 前言
之前简单介绍了 PCIe Shared Flow Control 的 基本概念、Merged FC 机制、Credit Block 及 Usage Limit 机制 ,今天再来看看 Shared Flow Control 中的 Optimized Flow Control(下称 Optimized FC 或 OFC)。协议中关于 Optimized FC 的介绍文字不多,网上也很难找到相关资料,我们有一点说一点吧。
1. 出现背景
在 PCIe 6.0 之前,PCIe Rx 采用 UpdateFC 流控包 (Flow Control Packets, FCP) 来更新相关 Buffer 的 Credits Allocated (CA) 值,每个 FCP 携带相关 VC 的 HdrFC 及 DataFC 两个 CA 值。从 PCIe 6.0 开始,引入了一种新的优化后的流控包 —— Optimized_Update_FC,每个 4B 流控包携带更多 CA 信息,能够满足一些需要高效更新 Credits 的应用场景。
2. 技术要点
2.1 包格式
Optimized_Update_FC 是流控包的一种,仅用于 Flit Mode 的 Shared FC。Optimized_Update_FC 包格式如下如所示,其中包含 Shared NPR HdrFC、Shared PR HdrFC 及 Shared PR DataFC 共 3 个 CA 值。
Optimized_Update_FC 各位域描述如表 1 所示。
Bit Location | Description |
---|---|
31 | Optimized Update FC Indicator Must be “0” |
30:28 | VC |
27:20 | Shared Non-Posted HdrFC – Shared credits on this VC |
19:12 | Shared Posted HdrFC – Shared credits on this VC |
11:0 | Shared Posted DataFC – Shared credits on this VC |
2.2 Optimized_Update_FC Vs. Normal DLLP
协议中常把 DLLP 跟 Optimized_Update_FC 并列开来,可见其并非常规意义上的 DLLP。常规 DLLP 格式如图 2 所示,DLLP Byte0 为 DLLP Type 字段。但 Optimized_Update_FC 为了容纳更多 CA 信息,挤占了 DLLP Type 的部分位域。
显然,Optimized_Update_FC 与 Normal DLLP 存在交集,那么如何区分 DLLP 与 Optimized_Update_FC 呢?——通过 DLP[1:0] (Flit Header) 相关字段来指示。如果是 Optimized_Update_FC,Flit DLP[1:0] 中的 Type of DLLP Payload 需要置为 1b 用来指示 DLP[5:2] 为 Optimized_Update_FC 或 Flit_Marker,并用 4B DLLP Payload 的最高位来进一步区分这两种 DLLP,bit31 为 0 表示 Optimized_Update_FC,为 1 表示 Flit_Marker。
2.3 注意事项
为了便于采用逻辑分析仪等进行 Debug,Device 每个 VC 每隔 10us 应至少发送一次 UpdateFC。协议中还强烈建议,只要相关 VC 释放了 Credits,其 Tx 就发送 Optimized_Update_FC。
PCIe 6.0 协议中并未提到 OFC 与 Merged FC、Scaled FC 的关系,Optimized_Update_FC 中也不携带 Merged 或 HdrScale、DataScale 相关信息。笔者理解,流控初始化期间已经协商好了是否 Merged FC、是否 Scaled FC 及 Scaling Factor 等信息,对于开启了 Merged FC 的 Optimized_Update_FC,那么其 PH 及 PD Credits 就是 Cpl 与 PR Merge 之后的 Credits;对于开启了 Scaled FC 的 Optimized_Update_FC,那么实际 Credits 也需采用 Scaling Factor 进行缩放。
跟 Flit_Marker 比,Optimized_Update_FC 无需保存进 Retry Buffer。
2.4 一些问题
- Optimized_Update_FC 是 Flit Mode 必须支持的吗?
- 如何自定义 Optimized_Update_FC 发送策略?只能在 Credit 释放后释放吗?
UpdateFC 的发送频率独立于 Optimized_Update_FC 吗?Optimized_Update_FC 会影响下一次 UpdateFC 的发送时刻吗?
欢迎探讨。
3. 参考
- PCI Express Base Spec, R6.0
- PCIe Scaled Flow Control 简介
- PCIe Shared Flow Control (1) - 简介
- PCIe Shared Flow Control (2) - Merged FC
- PCIe Shared Flow Control (3) - Shared Credit Block
- PCIe Shared Flow Control (4) - Usage Limit
- Effective resource utilization in PCIe Gen6: Shared flow control
|
🔥 精选往期 PCIe 协议系列文章,请查看【 PCIe 专栏】🔥
⬆️ 返回顶部 ⬆️