flow control

flow controlPCIE每个VirtualChannel都维护一个独立的FlowControlCreditPool。发送端要发送TLP,首先得获得Credit。FlowControl对3种TLP有效:1.PostedRequest(P)-Messages和MemoryWrites;2.Non-PostedRequest(NP)-所有的Reads,I/Owrites,Con…

大家好,又见面了,我是你们的朋友全栈君。

PCIE每个Virtual Channel都维护一个独立的Flow Control Credit Pool。发送端要发送TLP,首先得获得Credit。Flow Control对3种TLP有效:

1. Posted Request(P) – Messages和Memory Writes;

2. Non-Posted Request(NP) – 所有的Reads, I/O writes, Configuration Writes,和AtomicOps;

3. Completions(CPL) – 与NP相关的Completion。

并区分这3中TLP的Header和Data,所以Flow Control Credit的类型有6种:

flow control

在L0/L0s状态,对于每种被设成non-infinite的FC Credit,UpdateFC需要每隔30us至少发送一次,如果Control Link寄存器中的Extended Sync比特位置1,则每个120us至少发送一次。

 

在powerup之后,如果要开始进行正常的传输操作,需要先对默认的virtual channel(VC0)进行Flow control的初始化,如果enable了新的virtual channel,也需要对这个新的channel进行初始化。

Virtual Channel的初始化分为两步:

FC_INIT1

FC_INIT2

当VC0进入DL_Init状态后,或VC1-VC7被enable后,就会进入FC_INIT1。

进入FC_INIT1之后,TL层必须停止使用该VC上发送TLP;

按照1. InitFC1-P, 2. InitFC1-NP, 3. InitFC1-Cpl的顺序发送InitFC1 DLLP,并且每34us至少发送一遍;在Recovery或Configuration状态中所消耗的时间不计入34us内;强烈建议在没有其他TLP或DLLP发送的情况下,尽量多发送InitFC1 DLLP;

除非为了保证最低所需的InitFC1 DLLP的发送,Data  Link层不能停止其他包的发送,包括所有Physical Layer发起的包(OS),ACK/NAK DLLP,使用已完成初始化的VC来发送的TLP;

如果收到InitFC1和InitFC2 DLLP,记录FC unit的值,如果P/NP/Cpl都已被记录,则将FI1置1,然后进入FC_INIT2。

在FC_INIT2时:

TL层必须停止在该VC上发送TLP;

按照1. InitFC2-P, 2. InitFC2-NP, 3. InitFC2-Cpl的顺序发送InitFC2 DLLP,并且每34us至少发送一遍;在Recovery或Configuration状态中所消耗的时间不计入34us内;强烈建议在没有其他TLP或DLLP发送的情况下,尽量多发送InitFC2 DLLP;

除非为了保证最低所需的InitFC2 DLLP的发送,Data  Link层不能停止其他包的发送,包括所有Physical Layer发起的包(OS),ACK/NAK DLLP,使用已完成初始化的VC来发送的TLP;

如果收到InitFC1和InitFC2 DLLP,忽略FC unit的值,只要收到任意InitFC2 DLLP,则将FI2置1,然后退出FC_INIT2。

 

转载于:https://www.cnblogs.com/lybinger/p/10334028.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134781.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python——循环(for循环、while循环)及练习

    python——循环(for循环、while循环)及练习目标程序的三大流程1.while循环的基本使用 2.break和continue 3.while循环嵌套在程序开发中,一共有三种流程方式:顺序:从上向下,顺序执行代码 分支:根据条件判断,决定执行代码的分支 循环:让特定代码重复执行(解决程序员重复工作)一、for循环1、基本用法for循环使用的语法:“”"for变量inrange(10):循环…

    2022年8月12日
  • 十款移动APP开发框架

    十款移动APP开发框架  十款移动APP开发框架:1.jquerymobile框架2.bootstrap框架3.ionic框架4.MobileAngularUI框架5.IntelXDK框架6.AppceleratorTitanium框架7.SenchaTouch框架8.KendoUI框架9.PhoneGap框架10.mui框架  1.jquerymobile框架  jQue…

    2022年5月31日
  • Linux dd命令详解[通俗易懂]

    Linux dd命令详解[通俗易懂]Linux dd命令详解

    2022年4月21日
  • 单片机ds1302时钟程序(51单片机液晶显示程序)

    /*总体要求*//*在1602上显示年月日星期时分秒,并且按照秒来实时更新显示可以闹钟设定,到点报警功能,报警响起时,任意键可以取消报警四个按键,根据功能可以调节参数,分别为功能键,数值增大键,数值减少键,闹钟查看键,每次按键按下,蜂鸣器都会滴一声,利用DS12C887实现断电后,再次上电,时间仍可以准确显示*//*另外这个程序中文部分是学习了一个半月C语…

    2022年4月14日
  • 词向量简介「建议收藏」

    词向量简介「建议收藏」最近深度学习技术有了突飞猛进的发展,为语音识别、图像识别、自然语言处理(NLP)提供了强大的工具,为这些领域今后的快速发展提供了新的契机。深度学习为自然语言处理带来的最令人兴奋的突破是词向量(wordembedding)技术。词向量技术是将词转化成为稠密向量,并且对于相似的词,其对应的词向量也相近。在自然语言处理应用中,词向量作为深度学习模型的特征进行输入。因此,最终模型的效果很大程度上取

    2022年6月6日
  • mesh和ADhoc区别[通俗易懂]

    mesh和ADhoc区别[通俗易懂]adhoc网络和无线Mesh网络都采用分布式、自组织的思想形成网络,网络每个节点都具备路由功能,随时为其他节点的数据传输提供路由和中继服务。adhoc网络主要侧重应用于移动环境中,确保网络内任意两个节点的可靠通信,网络内数据流可以包括语音、数据和多媒体信息。无线Mesh网络是一种无线宽带接入网络,利用分布式思想构建网络,让用户在任何时间、任何地点都可以对互联网进行高速无线访问,是由ADh…

    2022年10月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号