🔥点击查看精选 PCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129185702】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
0. 前言
之前简单介绍了 PCIe Shared Flow Control 的基本概念 及 Merged FC 机制,今天再来看看 Shared Flow Control 中的 Credit Block。
1. Credit Block 出现背景
采用 Dedicated FC 的方案中,同一 Dedicated FC Buffer 内存放的均为当前 VC 且 FC 类型相同的 TLP,TLP 的存取采用相同的规则,也不涉及 TLP 乱序的问题。
采用 Shared FC 的方案中,同一 Shared FC Buffer 允许存放除当前 VC 外其他 VC 的 TLP;尤其是开启了 Merged FC 的方案中,某 VC 的 PH/PD FC Buffer 内不单可以存放不同 VC 的 TLP,还可以同时存放 PR 和 Cpl 两种 FC 类型的 TLP。
我们知道,不同 VC 之间独立进行流控及排序,不同 VC 的 Shared FC Buffer 独立分配及释放 Credit。当不同 VC、不同 FC 类型的 TLP 放在同一块 VC Buffer 内,当同一 VC 的 TLP 放在多个 VC Buffer 内,会使得 Buffer 的管理就变得尤为复杂——对同一 VC Buffer 而言,某 VC 的 TLP 先到,不代表该 TLP 会先被取走;对于同一 VC 的 TLP 而言,多笔 FC 类型相同的 TLP 存放在不同的 VC Buffer 内,先取哪个 VC Buffer 的?
为了解决以上问题,通常采用链表的方式在 VC Buffer 内(、Buffer 间?存疑)存放 TLP,将相同 VC、相同 FC 类型的 TLP 链接在一起。不同链表交织在一起,Buffer 被分离地支离破碎,Buffer 的 Credit 分配及释放规则十分复杂。
为了减小 Buffer 管理难度、减小 Credit 分配释放复杂度,需要降低 Buffer 内不同 VC、不同 FC 类型 TLP 的离散程度。具体措施便是把相同 VC、相同 FC 类型的 TLP 聚合在一起,聚合成 Credit 相同的块——这就是 Credit Block。
2. Credit Block 概念及要点
Credit Block 仅适用于 Shared FC Buffer,不适用于 Dedicated FC Buffer。
PCIe 工作于 Flit Mode 且开启了 Shared Flow Control 时,其 Shared FC Buffer 的 Credits 是以 Block 为单位进行管理的,每个 Credit Block 包含 4 笔该类型同种类型的 Credits。Tx 和 Rx 必须以 Credit Block 为单位对 Shared FC Buffer 的 Credits 进行分配及释放。
若某 TLP 被分配到了新的 Buffer Block 但占不满 Buffer Block 的全部 4 个 Credit,该 Buffer Block 中的剩余 Credit 必须留给跟该 TLP 同 VC、同 FC 类型的 TLP,且在该 Block 的 Credit 用完之前不会给该 VC 该 FC 类型分配新的 Block,防止中间出现空洞,压得密实一点。紧接着来了其他 VC 或同 VC 不同 FC 类型的 TLP,若此前存在该 VC、该 FC 类型的 Buffer Block 未填满,则填到之前的 Buffer Block 中,否则分配一块新的 Buffer Block 给该 TLP。
Merged FC 共享同一 Shared FC Buffer,但不共享同一 Credit Block。也就是说,虽然 Cpl 和 RP 的 Credit 是 Merged 到一起算的,但是 Cpl 和 RP 不能出现在同一 Block 中。即使开启了 Merged FC,同 VC 的 Cpl 跟 PR TLP 也不能放到同一块 Buffer Block 中。
3. Credit Block 使用举例
下图是 PCIe 官方 Spec 给的一个 Credit Block 的例子。
Rx 端先后 A~F 共 6 笔 TLP,其中 A/B/C 为采用 VCx,D/E/F 采用 VCy,A/C/D 为 PR,B/E/F 为 CplD。
- A(VCx, PR) 最先到达,其 Header 填充到 PH Buffer Block0 的 Credit0,Data 占用 PD Buffer Block0 的 Credit0/1。
- B(VCx, CplD) 到达,由于 Block0 已被 VCx PR 占用,VCx CplD 只能占用 Block1。
- C(VCx, PR) 到达,其跟 A 的 VC、FC Type 相同,Block0 未满,C 填充到 Block0。
- D(VCy, PR) 到达,虽然 Block0/1 均未满,但其 VC 不同于 Block0,FC Type 不同于 Block1,只能填充到新的 Buffer Block2。
- E(VCy, CplD) 到达,虽然 Block0/1/2 均未满,但其 VC 不同于 Block0/1,FC Type 不同于 Block2,只能填充到新的 Buffer Block3。
- F(VCy, CplD) 达到,虽然 Block0/1/2 均未满,其 VC 不同于 Block0/1,FC Type 不同于 Block2,不能填充到 Block0/1/2。F 的 VC、FC 跟未满的 Block3 一致,填充到 Buffer Block3。
4. 参考
- PCI Express Base Spec, R6.0
- PCIe Scaled Flow Control 简介
- PCIe Shared Flow Control (1) - 简介
- PCIe Shared Flow Control (2) - Merged FC
- Effective resource utilization in PCIe Gen6: Shared flow control
|
🔥 精选往期 PCIe 协议系列文章,请查看【 PCIe 专栏】🔥
⬆️ 返回顶部 ⬆️