• 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报文.

  • 相关阅读:
    论文写作--总结
    Java通过自定义类加载器模拟冰蝎免杀功能
    心酸,1区期刊主编,诺奖得主:成名前论文只能发表在IF低于1.5的期刊上
    利用京东云Web应用防火墙实现Web入侵防护
    [附源码]Python计算机毕业设计SSM精准扶贫系统(程序+LW)
    【[USACO06NOV]Corn Fields G】【状压DP】
    文件被删除怎么办?恢复数据,电脑小白也能操作!
    RocketMq源码分析(八)--消息消费流程
    IOC容器创建bean实例的4种方式
    Android软键盘windowSoftInputMode的使用与原理(使用篇)
  • 原文地址:https://blog.csdn.net/zhuzongpeng/article/details/126905429