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);

PCIe Flow Control规则_第1张图片

 发送端处理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+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

 

你可能感兴趣的:(PCIE学习记录,PCIe,Flow,Control)