pcie equalization学习笔记后续再整理

简介
******************************************************************************************************
从均衡特性的角度来看,如下展示了在PCIe 3.0/4.0中所使用的全部均衡技术,在Tx端有FFE(Feed Forward Equalizer,前馈均衡器);在Rx端有:CTLE(Continuous Time Linear Equalizer,连续时间线性均衡器)和DFE(Decision Feedback Equalizer,判决反馈均衡器)。通过FFE和CTLE,可以去除大部分由ISI所引入的抖动;通过DFE可以进一步去除ISI,它还能去除部分的阻抗失配所造成的反射。通过这些均衡处理,就能够最大程度上地保证在接收端判决输入处将眼图打开。
1.phase0
需要确认ts1中带的preset如何获取.
2.phase1
dp(downstream port)在进入eq之后便处于phase1,up在收到两个连续的ts1时,会从phase0进入phase1.二者需要在phase1停留足够长的时间以确保BER的值小于10^(-4),此段时间称之为corse_tune.
dp在确认它可以稳定的接收up发送过来的数据流后,发送ec=2的ts1进入phase2.当dp认为本段的corse_tune结束之后,便会发送ec=10b的ts1报文进入phase2;dp在收到连续两个ec=10b的报文且本身的corse_tune已经结束后进入phase2;
3.phase2
在phase2,up会调整dp的发送参数,在ts1码流中可以设置使用preset or coefficient,根据本端回馈的眼图质量找到最优值,一般情况下调整参数的次数是可以配置的,为一个有限范围;找到最优值之后,up进入phase3之前,会再将最优值发送一遍,以保证dp将此preset/coefficient存取起来,以便后续使用;up进入phase3时,使用的preset值仍与phase0/1相同.
dp收到连续两个ec=11b的ts1之后,同样会进入phase3.
4.phase3
进入phase3之后,dp开始调整up,与up调整dp过程类似,找到最优值;找到之后从phase3退出,发送ec=0的报文;up收到连续两个ec=0的报文之后,同样从phase3退出,equalization过程结束.
******************************************************************************************************
Downstream lanes
1.phase1
进入pahse1之后,start_equalization_w_preset置为0;根据所处的速率是8G/16G/32G将phase1 successful、phase2 successful、phase3 successful、link equalization requeset、complete bit置为0,同时将equalization_done_data_rate置为1.
2.Phase 1 of Transmitter Equalization
在phase1中会将当前lane使用的preset、LF、FS、coefficient值通过TS1 OS发送出去.
选择preset值的标准:
a.从loopback.entry进入equalization:
1).通过eq ts1引导device从configuration.linkwidth进入loopback.entry,那么发送的ts1中preset就必须使用eq ts1中的preset值;
2)通过standard ts1引导device从configuration.linkwidth进入loopback.entry,那么必须通过自定义的方法选择preset的值.
b.
如果当前速率是16G或者更高,且最近一次从recovery.rcvrcfg跳转过来时收到连续8个128b/130b EQ TS2且所带是支持的preset值,那么此preset必须使用.其实从这里可以看出,在recovery.rcvrcfg中所携带preset是想让对端使用的preset值,此值在eq phase1中使用;当均衡结束再次进入recovery.rcvrcfg时,所携带的preset是本端正在使用的preset值.
c.
如果当前速率是32G,且最近一次从recovery.rcvrcfg跳转过来时收到连续8个128b/130b EQ TS2且所带是支持的preset值,正在进行均衡bypass到32G的动作,那么此preset必须使用.
d.
如果dp中8G/16G/32G的lane equalization control register entry中设定的preset是有效的非reserved,那么此值必须使用;
e.
使用自定义的方法选择一个支持的preset值使用.
a,b,c,d,e中的条件优先级从高到低.
f.如果dp需要时间来稳定接收端的逻辑,那么允许dp在进入phase1之后等待500ns在评估接收到的ts1 os信息.
g.如果所有configured lane都收到连续两个ec=01b的ts1且dp想执行phase2和phase3时,下一个phase是phase2.
接收端在接收管脚上收到第一个valid os的第一个bit开始,在2ms内需要完成bit lock和识别os的流程.
如果速率是8G,那么link status 2 register的eq 8G phase1 successfull bit 需要置1(16G/32G相同)
如果dp想调整up的发送端的coefficient值,那么需要将收到的连续两个ts1 os中的LF、FS值存储下来.
h.如果收到连续两个ec=01b的ts1 os,perform_equalization_for_loopback is 0,且dp不打算执行phase2/3,那么下一个状态是recovery.recrlock.
8G/16G/32G对应的phase1/2/3successful bit、complete bit均置1.
此种情况对应的场景是:dp根据平台和通道的特征决定不执行phase2/3.
i.如果perform_equalization_for_loopback is 1且如下之一满足,下一个状态是loopback.entry
1)dp不想执行phase2/3且收到连续两个ec=01b
2)24ms超时
j.如果perform_equalization_for_loopback is 0,24ms超时之后下一个状态是recovery.speed.
successful_speed_negotiation置0;complete bit置1.
3.Phase 2 of Transmitter Equalization
发送端每条lane设置的coefficient setting是相互独立的:
a.如果进入phase2之后收到连续两个ec=10b的ts1 os(第一次收到)或者连续两个ec=10b的ts1,且preset的值或者coefficient值与上一个连续两个ts1的值不一样(二次收到的场景):
1)如果preset或者coefficient 值是合法的支持的,那么在new setting的值发送到接收管脚,在第二个os结束后,new setting的值需要保持500ns的有效.
DP发送的ts1 os,preset值设置为请求的preset,coefficient设置为请求的transmitter setting,reject bit为0;
否则不要改变transmitter setting,同时设置reject coefficient的值为1;
在验证中需要注意的是要根据reject bit来确认preset/coefficient的值是否被接收,另外根据眼图的大小选择最优的值.
b.如果没有收到ec=10b的ts1,那么preset和coefficient的值就用当前正在使用的值.
c.如果所有configured lane都收到连续连个ec=11b的ts1,那么下一个状态是phase3.
同时对应速率的phase2 successful bit置1
DP剩余的相关描述后续再更新
******************************************************************************************************
Upstream lanes
a.变量
up进入均衡phase0之后,start_equalization_w_preset置0;同时根据工作的速率(8G/16G/32G),将对应的equalization phase1/2/3 successful bit、complete置0;equalization_done_data_rate置1
b.选择preset值的标准:
从loopback.entry进入equalization:
1).通过eq ts1引导device从configuration.linkwidth进入loopback.entry,那么发送的ts1中preset就必须使用eq ts1中的preset值;
2)通过standard ts1引导device从configuration.linkwidth进入loopback.entry,那么必须通过自定义的方法选择preset的值.
c.8G
当前的工作速率是8G时,发送ts1时使用的preset值是从2.5G/5G跳转到8G时,最近收到的EQ TS2中的preset值.
d.16G
当前的工作速率是16G时,发送ts1时使用的preset值是从8G跳转到16G时,最近收到的128b/130b EQ TS2中的preset值.
d.32G
当前的工作速率是32G且perform_equalization_for_loopback is 0时,发送ts1时使用的preset值是跳转到32G时收到的对应的EQ TS2中的preset值(当支持bypass功能时,为EQ TS2;从16G跳转到32G时为128b/130b EQ TS2)
e.specific method
收到保留的preset或者不支持的preset值,需要使用一个自定义的方法获取preset.
在EQ TS2或者128b/130b EQ TS2中,收到保留的或者不支持的preset,那么在TS1 OS中transmitter preset的值要设定为接收到的preset值,reject coefficient bit置1,coefficient值为自定义方法中preset所对应的coefficient值.
在没有收到EQ TS2或者128b/130b EQ TS2时,那么在TS1 OS中transmitter preset的值要设定为自定义的preset值,reject coefficient bit置0,coefficient值为自定义方法中preset所对应的coefficient值.
f.如果up需要时间来稳定接收端的逻辑,那么允许up在进入phase0之后等待500ns在评估接收到的ts1 os信息.
g.跳转到phase1
如果收到连续两个ec=01b的ts1 OS,那么下一个状态跳转到phase1.
接收端在接收管脚上收到第一个valid os的第一个bit开始,在2ms内需要完成bit lock和识别os的流程.
如果up想调整dp的发送端的coefficient值,那么需要将收到的连续两个ts1 os中的LF、FS值存储下来.
h.loopback.entry
如果perform_equalization_for_loopback为1,12ms超时后跳转到loopback.entry
i.recovery.speed
12ms超时跳转到recovery.speed;同时successful_speed_negotitation置0,将对应速率的complete bit置1.
***********************************
Phase 1 of Transmitter Equalization
a.发送的ts1 OS中的transmitter setting值为phase0中决定的值;ec为01b,LF、FS、coefficient值设定为当前transmitter setting相关的值.
b.跳转到phase2
如果收到连续两个ec=10b的ts1 OS,那么下一个状态跳转到phase2.同时将对应速率的phase1 successful bit置1.
c.loopback.entry
perform_equalization_for_loopback为1,且以下两个条件之一满足则跳转到loopback.entry:
1)lane under test 收到连续8个ec为00的ts1 os;
2)12 ms超时
d.recovery.rcvrlock
perform_equalization_for_loopback为0且收到连续8个ec=00b的ts1码流,跳转到recovery.rcvrlock;同时将对应速率的phase1 successful and equalization置1;
e.recovery.speed
perform_equalization_for_loopback为0,12ms超时之后为recovery.speed;同时successful_speed_negotitation置0,对应速率的complete bit置1;
***********************************
Phase 2 of Transmitter Equalization
a.ts1 os的ec=10b;
b.evaluate
每条lane独立评估最优设置.perform_equalization_for_loopback为1,只有lane under test会执行均衡操作.
评估一个合法的preset或者coefficient值的方法如下:
1)请求一个new preset,将发送的ts1 os的preset设置为对应的值,且use preset bit置1;
2)请求一组新的coefficient值,同时将use preset bit置0;
3)new setting请求的时间至少要达到1us或者评估时间结束,以最晚者为准;
4)经过所需要的的等待时间之后,如果dp接受对应的setting,那么,dp发送的ts1会使用对应的setting.
5)如果收到连续连个ts1的preset与请求的preset相同或者coefficient与请求的preset相同,且reject coefficient bit为0,那么请求的setting被dp所接受,根据up接收端的评估值,可以将其看做最终的候选值.
6)如果收到连续连个ts1的preset与请求的preset相同或者coefficient与请求的preset相同,且reject coefficient bit为1,那么请求的setting被dp所拒绝,不可以将其看做最终的候选值.
7)接收端经过自定义的时间之后,没有收到连续两个preset或者coefficient值与请求的值相同,那么这个请求值不能作为最终的候选值.
8)根据评估的标准和要求,UP负责设置reset EIEOS interval count bit;use preset bit不能决定请求值被接受或者拒绝.
9)对于每一个preset或者coefficient从发送出去到评估完成的时间必须少于2ms.在最优值评估的最后阶段,可能会持续发送请求的相同setting,所花费的时间可能会超过2ms,但是也必须遵守24ms超时的规定;而且超时的次数不能超过2次.如果在超时时间内没有收到ts1 os,那么可以认为请求的setting没有在对应的lane上工作.
10)所有new preset或者coefficient setting,必须自动的呈现到所有configured lane上.任何一个给定的lane如果不想改变setting,那么会将当前的setting发送出去作为新值.
c.状态跳转
1)perform_equalization_for_loopback为1,lane under test工作在最优的setting,且连续两个retimer equalization extend bit为0的ts1接收到,下一个pahse是phase3.
2)perform_equalization_for_loopback为0,所有configured lane都工作在最优的setting,且当前速率是8G或者接收到连续两个retimer equalization extend bit为0的ts1,下一个状态是phase3;同时,对应速率的phase2 successful bit会置1.
3)perform_equalization_for_loopback为1,出现24ms超时之后,下一个状态是loopback.entry.
4)24m超时之后跳转到recovery.speed;同时,successful_speed_negotitation置0,对应速率的complete bit置1.
***********************************
Phase 3 of Transmitter Equalization
发送端每条lane设置的coefficient setting是相互独立的:
a.如果进入phase3之后收到连续两个ec=11b的ts1 os(第一次收到)或者连续两个ec=11b的ts1,且preset的值或者coefficient值与上一个连续两个ts1的值不一样(二次收到的场景):
1)如果preset或者coefficient 值是合法的支持的,那么在new setting的值发送到接收管脚,在第二个os结束后,new setting的值需要保持500ns的有效.
UP发送的ts1 os,preset值设置为请求的preset,coefficient设置为请求的transmitter setting,reject bit为0;
否则不要改变transmitter setting,同时设置reject coefficient的值为1;
2).如果没有收到ec=11b的ts1,那么preset和coefficient的值就用当前正在使用的值.
b.状态跳转
1)perform_equalization_for_loopback为1,且如下条件之一满足,下一个状态是loopback.entry
lane under test接收到连续两个ec=00b的ts1;
出现32ms超时;
2)如果所有configured lane都收到连续连个ec=00b的ts1,那么下一个状态是recovery.Rcvrlock.
同时对应速率的phase3 successful bit置1
3)否则出现32ms超时,下一个状态是recovery.speed;successful_speed_negotitation置0,对应速率的complelte bit置1

  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值