PCIe Flow Control规则

Flow Control分类

flow control将TLPs分为下面3类,它们的credit分别处理。

Posted Requests(P)

MEM_WR、Messages

Non-Posted Requests(NP)

MEM_RD、IO_RD、CFG_RD、IO_WR、CFG_WR

Completions(CPL)

CPL、CPLD

对于每类TLP,Header和Data部分的Credit单独处理;

 对于Data而言,Credit单位为4DW;

对于Header而言,Creadit单位为最长的Header长度+TLP digest的长度;

每类TLP所消耗的Credits如下图所示,其中n=RoundUp(Length/4DW);

 发送端处理FC规则

 CREDITS_CONSUMED

 在链路初始化时设置为0;

 每次接收到TLP后,CREDITS_CONSUMED做下式更新,其中Increment表示当前TLP所需要消耗Credits:

CREDIT_CONSUMED≔(CREDIT_CONSUMED+Incrementmod 2^[Files Size]

CREDITS_LIMIT

    在链路初始化过程中不设置;

在FC初始化时设置初值;

每次接收到Update FC时,如果如果DLLP值与当前值不一致则刷新CREDITS_LIMIT,否则保持;

TLP发送条件

    除了CREDIT_LIMIT被设置为无限Credits的情况下,TLP发送必须满足下面公式:

CUMULATIVE_CREDITS_REQUIRED(CREDIT_CONSUMED+<Credits_Needed_for_pending_TLP>mod 2^[Files Size]

(CREDITS_ LIMIT-CUMULATIVE_CREDITS_REQUIRED)≤2^[Files Size]/2

当发送“nullified” TLP时不更新CREDITS_CONSUMED。

接收端FC处理规则

CREDITS_ALLOCATED

链路初始化时,根据buffer大小和分配策略设置初始值;

当接收到TLP后,其做如下更新,其中Increment为处理完TLP后释放出来的空间:

CREDITS_ALLOCATED:=(CREDITS_ALLOCATED+Increment)mod2^[Files Size]

CREDITS_RECEIVED(可选)

链路初始化时设置为0;

当接收到TLP后,其做如下更新,其中Increment为接收到TLP所需要空间:

CREDITS_RECEIVED:=(CREDITS_RECEIVED+Increment)mod2^[Files Size]

满检查(可选)

当满足下面公式,表示接收端缓存溢出:
CREDITS_ALLOCATED-CREDITS_RECEIVED≥2^[Files Size]/2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值