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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • plsqldev连oracle,plsqldev怎么联接oracle客户端

    plsqldev连oracle,plsqldev怎么联接oracle客户端如果你的电脑是64位的计算机,你需要安装64位的oracle客户端,但是PL/SQLdev目前没有64位的,因此你要手动设置一个32位的客户端。pl/sql不用装64位的,因为它能支持32位和64位。如果你的数据库是64位,那么你就得装一个Oracle32位的客户端,直接去oracle官方下载即可。安装完毕之后,需要进行配置:app\Administrator\product\11.2.0\…

  • file_get_contents 返回null,allow_url_fopen = On如何解决

    file_get_contents 返回null,allow_url_fopen = On如何解决绝对有效开启fsockopen函数iis6打开allow_url_fopen设置发表时间:2013-12-0611:48来源:未知分类:其它代码作者:岑溪网站开发点击:75次烦爆了,今天装个自己租了个有了务器,想装discuz两个函数allow_url_fopen和file_get_contents都不能成功开启。为什么不能成功开启,按照网上说的allow_

  • window安装JAVA环境

    window安装JAVA环境java环境安装包:JDK11.0.2和Tomcat7.0.92JDK1.8.01、下载JDK下载JDK:JDK官网点击安装,然后点击下一步,知道安装完毕。注:下载的JDK注意要和自己的系统匹配,安装过程中如果不想使用默认安装路径,可以自行配置。配置环境变量:安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置";选择"高级"选项卡,点击"环境变量…

  • Mysql 字符串转数字类型

    Mysql 字符串转数字类型MySQL字符串的‘123’转换为数字的123方法一:SELECTCAST(‘123’ASSIGNED);方法二:SELECTCONVERT(‘123’,SIGNED);方法三:SELECT’123’+0;参考:https://www.cnblogs.com/emanlee/p/5998683.html…

  • 翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]

    翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]译者注以下为正文。介绍多年来,显示行业一直普遍认为显示器是以固定的刷新率(refreshrate)运行的,如60Hz。这与以下事实形成鲜明对比:送给显示器的图像内容多种多样,每种图像都有自己独特的、变化的帧率(framerate)。当显示的刷新率与图像内容自身的帧率不同步时,用户可能会察觉到撕裂(tearing)和卡顿(stutter)之类的异常效果。在移动应用程序中(如平板、笔记本电脑),对于静态图像和视频播放来说,较高的显示刷新率不仅显得多余,还增加了系统功耗,降低了续航能力。这些因素使得我

  • STM32项目总结及代码中delay函数需慎用

    STM32项目总结及代码中delay函数需慎用这半年实验室做了个智能XX的调度平台,大概思想是通过部署的端设备实时采集信息并且通过通信的方式发送给云端服务器,最后可以实现WEB端和小程序的实时访问和监控,上位机方面自不用说,硬件方面,昨天把做出的智能XX终端给实验室的嵌入式大牛徐老师指教下,徐老师看到代码第一眼就说你们这个是不是根据网上某些案例改的,我回答说是根据淘宝店家或者论坛上找到的代码改的,然后徐老师点评到,如果做的东西是…

发表回复

您的电子邮箱地址不会被公开。

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