首页 理论教育PCIe设备的FCP使用指南

PCIe设备的FCP使用指南

【摘要】:在PCIe设备初始化时该参数为0,之后PCIe设备每发送一个FC Unit,该值将加1。此后每收到UpdateFC报文时,Current节点将此参数与UpdateFC报文中的Credit比较,如果结果不等,则使用UpdateFC报文中的Credit对此参数重新赋值。如果Upstream节点没有足够的Credit时,则不能向对端设备发送这个TLP。Current节点使用UpdateFC DLLP将CA传递给Upstream节点,之后Upstream节点使用该值更新CL参数。Current节点可以设置一个逻辑检查部件,检查来自Upstream节点的TLP报文是否会造成CA的溢出。

PCIe总线完成流量控制的初始化之后,Current节点、Upstream节点和Downstream节点通过发送UpdateFC-P、UpdateFC-NP和UpdateFC-Cpl报文进行流量控制。

1.Upstream节点向Current节点发送报文

Upstream节点向Current节点发送报文时,需要设置一些参数。

(1)CREDITS_CONSUMED,简称为CC。该参数存放Upstream节点已经发送了多少个FC Unit,不同数据缓存的FC Unit的大小见表9-3。在PCIe设备初始化时该参数为0,之后PCIe设备每发送一个FC Unit,该值将加1。PCIe总线规定

CC=(CC+Increment)mod 2Field Size

其中Incre ment指发送的TLP含有的FC Unit个数。其中PH、NPH和CplH的Field Size参数为8,而PD、NPD和CplD的Fie ld Size参数为12。

(2)CREDIT_LIMIT,简称为CL。该参数存放当前节点的Credit,在VC初始化时,该参数通过收到的InitFC1报文赋值。此后每收到UpdateFC报文时,Current节点将此参数与UpdateFC报文中的Credit比较,如果结果不等,则使用UpdateFC报文中的Credit对此参数重新赋值。

在Upstream节点中,设置了一个Credit检查逻辑(Transmitter Gating Function),用来判断在Current节点中是否有足够的缓存接收即将发送的TLP。如果Upstream节点没有足够的Credit时,则不能向对端设备发送这个TLP。

Upstream节点检查缓存的算法如下。首先将CUMULATIVE_CREDITS_REQUIRED参数简称为CR,而CR=CC+<PTLP(即将发送TLP所需要的Credit)>。当以下公式

(CL-CR)Mod2Field Size≤2Field Size/2成立时,表示Upstream节点可以向Current节点发送TLP报文。

使该公式成立有一个额外需求,即每次发送的Credit小于2Field Size/2[65],此时CL不可能比CC大2Field Size/2。当(CL-CR)Mod 2Field Size不大于2Field Size/2时,表示Current节点有足够的缓冲接收来自Upstream节点的报文;如果(CL-CR)Mod 2Field Size大于2Field Size/2时,运算结果是一个负数,表示Current节点没有足够的缓冲接收来自Upstream节点的报文。

2.Current节点从Upstream节点接收报文(www.chuimin.cn)

Current节点接收来自Upstream节点发送报文时,也需要设置一些参数。

(1)CREDITS_ALLOCATED,简称为CA。该参数存放Current节点一共允许Upstream节点发送多少个FC Unit,不同数据缓存的FC Unit初始化后使用的最小值见表9-3。在初始化时该参数为Current节点接收缓冲的大小,之后Current节点每分配一个FC Unit,该值将加

1。PCIe总线规定:

CA=(CA+Incre ment)mod 2Field Size其中Incre ment指Current节点新分配的FC Unit个数。PH、NPH和CplH的Field Size参数为8,而PD、NPD和CplD的Field Size参数为12。Current节点使用UpdateFC DLLP将CA传递给Upstream节点,之后Upstream节点使用该值更新CL参数。

(2)CREDIT_RECEIVED,简称为CRCV。该参数存放Current节点一共接收了多少个FC Unit。在初始化时该参数为0,之后Current节点每接收一个FC Unit,该值将加1。PCIe总线规定:

CRCV=(CRCV+Increment)mod 2Field Size

其中Increment指Current节点新接收的FC Unit个数。

Current节点可以设置一个逻辑检查部件,检查来自Upstream节点的TLP报文是否会造成CA的溢出。这个逻辑检查部件是一个可选件,因为Upstream节点在发送TLP时,已经保证了Current节点的CA不会溢出。当以下公式

(CA-CRCV)Mod 2Field Size≥2Field Size/2

成立时,Current节点认为CA溢出,此时Current节点将抛弃来自Upstream节点的TLP,而并不改变CRCV的值,同时释放为这个TLP预先分配的缓存空间。