3.Flow Control Initialization Protocol
在 PCIe 建立过程中,还有一个重要的一步,那就是流控初始化。默认虚拟通道,即 VC0 必须首先由硬件完成初始化,随后才能进行其他 VC 的初始化(如果存在多个 VC)。
PCIe Gen6 支持 Flit 模式,在 Flit 模式下共享流控(Shared Flow Control)是生效的,而在非 flit 模式下,Shared Flow Control 必须关闭。需要注意的是,在 FLit 模式下,共享(shared)信用量和专用(Dedicated)信用量是可以同时存在的。在 Non-Flit 模式,仅仅使用专用(Dedicated)信用量。
流控初始化的两个状态:
• FC_INIT1 :对接的设备通过发送 FC_INIT1 DLLP,完成信用量信息的交换。
• FC_INIT2 :通过发送 InitFC2 DLLPs 完成信用量信息的再次确认。
3.1 FC_INIT1 状态
在 FC_INIT1 状态下,对接的设备通过发送 FC_INIT1 DLLP,完成信用量信息的交换。
在 FC_INIT1 状态下,会进行如下操作
- 事务层阻塞当前 VC 的 TLP
- Non-Flit 模式下,按顺序传输 3 种类型的 InitFC1 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third) - Flit 模式下,按顺序传输 6 种类型的 InitFC1 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
▪ InitFC1-P [Shared] (fourth)
▪ InitFC1-NP [Shared] (fifth)
▪ InitFC1-Cpl [Shared] (sixth) - 设置 DataFC, DataScale, HdrFC, and HdrScale 如表 Table 3-2 和 Table 3-3
- 此处不推荐大家耗费很多时间在 share credit 上面,因为当前主流 PCIe IP vendor 对 share credit 的支持不够完善,目前几乎没有已商用的支持 share credit 的产品。
- 为了保证 InitFC1 DLLP 能够得到足够的传输频率,此时数据链路层会阻塞其他类型的传输,例如阻塞 Ordered Sets), Ack and Nak DLLPs (when applicable), 以及其他 VC 的 TLP
- 如果收到 InitFC1 and InitFC2 DLLPs 会进行如下处理:
- 从 InitFC1 and InitFC2 DLLPs 中提取 HdrFC and DataFC values 并且记录下来
- 如果接收者支持 Scaled Flow Control,则还需要把 DLLPs 中申明对端支持的 HdrScale and DataScale 记录下来
- 一旦完成 P, NP, and Cpl 对应数据记录,则将 FI1 标志置 1
- 在 Non-Flit 模式下,当收到 3 种专用信用量的 FC unit 数据后,则将则将 FI1 标志置 1
- 在 Flit 模式下,当收到 6 种信用量的 FC unit 数据后,则将则将 FI1 标志置 1
- 一旦完成 FI1 标志置 1,则表明已经记录对端设备的 P, NP, Cpl 对应的 FC unit 数值,此时从 FC_INIT1 退出,进入 FC_INIT2
3.2 FC_INIT2
在 FC_INIT2 状态下,通过发送 InitFC2 DLLPs 完成信用量信息的再次确认。
在 FC_INIT2 状态下,会进行如下操作
- 事务层阻塞当前 VC 的 TLP
- Non-Flit 模式下,按顺序传输 3 种类型的 InitFC2 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third) - Flit 模式下,按顺序传输 6 种类型的 InitFC2 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
▪ InitFC1-P [Shared] (fourth)
▪ InitFC1-NP [Shared] (fifth)
▪ InitFC1-Cpl [Shared] (sixth) - 设置 DataFC, DataScale, HdrFC, and HdrScale 如表 Table 3-2 和 Table 3-3
- 此处不推荐大家耗费很多时间在 share credit 上面,因为当前主流 PCIe IP vendor 对 share credit 的支持不够完善,目前几乎没有已商用的支持 share credit 的产品。
- 为了保证 InitFC1 DLLP 能够得到足够的传输频率,此时数据链路层会阻塞其他类型的传输,例如阻塞 Ordered Sets), Ack and Nak DLLPs (when applicable), 以及其他 VC 的 TLP
- 如果收到 InitFC1 and InitFC2 DLLPs 会进行如下处理:
- 忽略 DLLPS 中的 HdrFC, HdrScale, DataFC, and DataScale 数值
- 收到任何 InitFC2 DLLP,则将 FI2 标志置 1
- 一旦收到当前 VC 所属的任何 TLP,任何 UpdateFC DLLP 或者任何 Optimized_Update_FC(Flit 模式),则将 FI2 标志置 1
- 满足如下条件则表示流程初始化流程完成并且退出 InitFC2:
- FI2 标志已置 1
- Scaled Flow Control 已生效,发送侧发送的当前 VC 的 UpdateFC DLLPs 中的 HdrScale and DataScale 为 01b, 10b, or 11b。note:此时不允许发送 00 的 Scale 数值。
- Scaled Flow Control 不支持或者不生效,发送侧发送的当前 VC 的 UpdateFC DLLPs 中的 HdrScale and DataScale 为 00b。note:此时不允许发送 01b, 10b, or 11b 的 Scale 数值。
3.3 Scaled Flow Control
Scaled Flow Control 机制目的就是现有 FC DLLP 字段位宽分布不修改的情况下,增加 credit 数量上限的方法,即用比例缩放的方式描述 credit。当 Scale Factor 为 10b 时,此时表示放大 4 倍,这样情况下,有限的 FC DLLP filed 字段能够表示的 credit 上限就增加了。
END
作者:IC小鸽
文章来源:IC小鸽
推荐阅读
- Verilog/SystemVerilog Tools——遇到的最好用插件
- 致老 IC 工程师:你记忆中的"天经地义",可能已是年轻人的奢侈品
- ICer 的生存指南:如何打破年龄魔咒与转型困局?
- PCIe gen6 数据链路层总结(一)
- 芯片设计全流程工程师的崛起:国产化背景下的“全能型人才”需求解析
更多 IC 设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。