PCIe系列专题之二:2.6 Flow Control初始化

一、故事前传

之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。

较为详细解释请见之前的文章:

1. PCIe技术概述;

2.0 PCIe Transaction layer事务层概述;

2.1~2.3 TLP结构及原理解析;

2.4~2.5 Flow control机制概述,缓存结构以及信用积分;

二、Flow Control初始化

在PCIe总线中,任何事务传输之前,flow control必须要初始化。如果flow control初始化未成功,那么任何TLPs都无法发送出去。

此外,Flow control的初始化过程是在物理层link training完成之后进行,此时物理层中的LinkUp信号为触发状态,也即以为这物理层已经做好准备了。

图片

注:DLCMSM= Data Link Control and Management State Machine;

LTSSM= Link Training and Satus State Machine;

对于所有的虚拟通道(VC0~7), Flow Control初始化过程都是一样的,默认状态是enable VC0。

我们先来看一下DLCMSM状态图:

  1. DL_Inactive: 物理层通知数据链路层当前PCIe链路不可用;

    Reset操作将state machine的状态调整为DL_Inactive. 此时会向链路层以及事务层发送DL_Down信号通知此时状态;

  2. DL_Init: 物理层正处于链路初始化状态;

    当看到物理层传来的LinkUp信号(说明物理层做好准备了), stata machine的状态进入DL_init sub-state: FC_INIT1FC_INIT2. 这两个状态是Flow control的初始化的两个状态;

  3. DL_active: 当前PCIe链路层处于正常工作状态;

图片

接下来,我们针对Flow control初始化的两个阶段FC_INIT1FC_INIT2作进一步的介绍。

FC_INIT1:

当进入FC_INIT1阶段后,device会持续依次发送3个InitFC1 Flow Control DLLPs初始化接收端的VC buffer。

图片

依照PCIe协议中的定义,InitFC1 Flow Control DLLPs包括Posted, Non-Posted, Completions三类,格式如下表:

图片

FC_INIT2:

FC_INIT1已经对Flow Control相关的缓存进行初始化,FCINIT2的作用主要是验证FC_INIT1的结果。FC_INIT2与FC_INIT1携带相同的Credit信息。

在FC_INIT2阶段时,Device会依次发送3个InitFC2 Flow Control DLLPs初始化接收端的VC buffer。成功发送完毕之后进入DL_active并回报DL_Up,告知事务层链路可以正常工作了。

图片

与FC_INIT1一样,InitFC2 Flow Control DLLPs也包括Posted, Non-Posted, Completions三类,格式如下表:

图片

注:PCIe总线中规定每隔34us发送一组InitFC报文.

posted @ 2024-11-05 16:10  咸鱼书生  阅读(16)  评论(0编辑  收藏  举报