【PCIe 6.0】PCIe Shared Flow Control (3) - Shared Credit Block

文章介绍了PCIeSharedFlowControl中的CreditBlock概念,它用于解决在同一SharedFCBuffer中不同VC和不同FC类型TLP的管理复杂性问题。CreditBlock以4个Credits为单位管理,确保相同VC和FC类型的TLP聚合,简化Buffer管理和Credit分配。文章通过例子展示了CreditBlock如何工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



🔥点击查看精选 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 的例子。

在这里插入图片描述

▲ 图 1:Credit Block Example

  Rx 端先后 A~F 共 6 笔 TLP,其中 A/B/C 为采用 VCx,D/E/F 采用 VCy,A/C/D 为 PR,B/E/F 为 CplD。

  1. A(VCx, PR) 最先到达,其 Header 填充到 PH Buffer Block0 的 Credit0,Data 占用 PD Buffer Block0 的 Credit0/1。
  2. B(VCx, CplD) 到达,由于 Block0 已被 VCx PR 占用,VCx CplD 只能占用 Block1。
  3. C(VCx, PR) 到达,其跟 A 的 VC、FC Type 相同,Block0 未满,C 填充到 Block0。
  4. D(VCy, PR) 到达,虽然 Block0/1 均未满,但其 VC 不同于 Block0,FC Type 不同于 Block1,只能填充到新的 Buffer Block2。
  5. E(VCy, CplD) 到达,虽然 Block0/1/2 均未满,但其 VC 不同于 Block0/1,FC Type 不同于 Block2,只能填充到新的 Buffer Block3。
  6. F(VCy, CplD) 达到,虽然 Block0/1/2 均未满,其 VC 不同于 Block0/1,FC Type 不同于 Block2,不能填充到 Block0/1/2。F 的 VC、FC 跟未满的 Block3 一致,填充到 Buffer Block3。


4. 参考


  1. PCI Express Base Spec, R6.0
  2. PCIe Scaled Flow Control 简介
  3. PCIe Shared Flow Control (1) - 简介
  4. PCIe Shared Flow Control (2) - Merged FC
  5. Effective resource utilization in PCIe Gen6: Shared flow control


— END —


🔥 精选往期 PCIe 协议系列文章,请查看【 PCIe 专栏🔥

⬆️ 返回顶部 ⬆️

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MangoPapa

请作者喝瓶可乐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值