当前位置: 首页 > news >正文

pcie phy电气层(PCS)详解gen1、2 (rx)

注:推荐大家查看英文原版,笔者大部分内容也为翻译;

S IP:

1. pcie供电:

Vph: 1.2,1.5, 1.8V high voltage IO supply;

Vp/VptxX/Vpdig :analog supply, 0.9V;

vddcore: core supply; 0.75~0.9V;

其中Vddcore和Vp在进行upf时会通过power switch对外部pin进行控制;

一,. upcs层 支持的feature:

1, 支持original PIPE结构;

2. 支持serdes 结构;

3.支持pclk方式: pclk as phy output/input; 支持external pll;

4. 支持low pin count interface,移除那些对timing时序较低的信号线,将他们挪到message bus register中;

5. 标准的pipe接口连接mac层;

6. pcie 8b/10b以及128b/130b编解码;

7. 传输PIPE 相关的power state(P0,P1,等)到phy层,并维持power相关的sequence;

8. 时钟补偿 elastic buffer (original pipe结构)

9. error report

10. 可选的bif & aggre 结构

11. 最多支持连接x16 lane;

Original PIPE:在检测到EIOS之后,phy_rxX_data_en; 被拉低;lane CDR停止转换;使用elastic buffer模式,来补偿lane skew;

serdes pipe 结构:

数据move 在controller中实现;pipeline 可选用于timing 收敛。

Mindshare 部分翻译

整体框图;

差分对接收:

RX 时钟恢复:

gen1,2 没有CDR结构;使用的是RX本地PLL进行恢复,PLL时钟和tx数据流同频(2.5或者5Ghz)。并且将RX数据进行解串。解串数据10bit为一组。解析出COM码。

接收bit锁定:在TX 8b/10b编码中,已经包含了频率信息。(CRD)当RX时钟和TX时钟的频率同步了,可以被称为“bit lock”

在低功耗下(l0s或L1),为了避免数据包丢失造成bit lock 失锁。所以TX在进入到低功耗之前要发送EIOS码告知RX关闭其输入(de-gate)。

Regaining Bit lock:重新锁定

当TX 从L0s状态恢复时,会发送特定数量的FTS(S IP 默认CX_NFTS=200)接收端会从新获取bit和symbol lock。从L1恢复和L0s情况完全不同。

symbol lock:

COM码有两种编码方式:

所有order set 均不会进行scramble 在tx端。只要检测到了COM之后就被称为“symbol lock”

RX 端时钟补偿

elastic buffer: 输入recovery clock;输出receiver clock;当输入快输出慢时会删除SKP,反之亦然;elastic buffer有两种方式:empty buffer,half-empty buffer。TX周期性的发送SKIP码流就是为了消除skew。他们在传到下一个层dllp之前会被完全丢弃。

当在1180到1538 个symbol 周期内发送SKIP order set。一个symbol就是10bit 码流。

SKIP最大间隔:

lane到lane之间的deskew

由于多种原因(pcb布线等)会找出RX端存在lane之间的skew。

ordered set 帮助deskew

所有的lane在相同时间检测到COM码,用于deskew;超前检测到COM码会加入延迟。

RX lane2lane de-skew capability

放在elastic buffer之后;优点:到达时间差现在被本地时钟同步为符号时间。可以通过延迟早到的COM适当符号时钟来使其与晚到的COM对齐。接收器允许的最大时钟偏移是时钟周期的整数倍。

(注:官方spec中只提及了Gen1 允许的最大de-skew,其余未提及,gen2~gen5应该都是4 clocks最大,正好是一个SKP order set有续集时间)

注:1. 为什么8b/10b decode要放在elastic buffer之后?

1)时钟域隔离;

elastic buffer就是一个跨时钟与fifo;所以必须先缓存并稳定数据,然后再到本地时钟域解码。确保稳定性。

2)保持码流完整性;

8b/10b 编码保证了传输的直流平衡和足够的边沿用于时钟恢复。CDR用的是10bit编码后的数据来锁相。先解码可能会丢失时钟边沿信息。

3) 链路训练需要使用原始10b数据

链路训练过程中检测特殊字符K码。都是10bit编码;

4) 更尬获得处理码流skew

8b/10b解码

通过查找表来解码,两个查找表。D码和K码。

10b码流disparity计算。当symbol lock之后开始指定初始的disparity。

如果一个符号(Symbol)中的两位发生错误翻转,该错误可能不会被察觉,而该符号仍可能被解码为一个有效的8位字符。这样的错误在物理层是无法被检测到的。

descrambler(解码器)

在8b/10b之后是解码器;只对Data数据进行解码,K码不进行解码。当一个 COM 字符进入解扰器时,它会将 LFSR(线性反馈移位寄存器)的值重新初始化为 FFFFh。

disable:

If the descrambler receives at least two TS1/TS2 ordered sets with
the “disable scrambling” bit set on all of its configured Lanes, it disables the
descrambler.当收到至少两个TS序列中包含了disable scrambing bit时,disable该功能。

Byte-unstrip

un-striping: 去交织;在接受端将多条lane中的字符从新按原始顺序合并成串行数据流的过程。

TX strip:tx交织的实现;

将一个数据包中的字节分发到多个通道(lanes)中,形成并行发送的结构。例如在 x8 链路中,第1个字节发到 Lane 0,第2个发到 Lane 1,以此类推,循环分配。Round-Robin 字节分发。但是要注意STP/SDP/END symbol需要有一些特定的规则。

RX buffer

RX buffer 保存TLP和DLLP的数据(header+data)。

物理层错误处理

内容不多,放到一起了。

S IP中通过CR端口或者Jtag 端口可以读到Phy内部的所有reg;用于判定phy status。

必须上报错误:

8b/10b decode error: disparity, illegal symbol;

S IP中有pipe_rxX_rec_ovrd_8b10b_decerr 信号;用于指示当收到error时应该如何处理。

可选的error checking;

• Loss of Symbol lock (see “Achieving Symbol Lock” on page 396)
• Elastic Buffer overflow or underflow
• Lane deskew errors (see “Lane‐to‐Lane Skew” on page 398)
• Packets inconsistent with format rules
Response of Data Link Layer to Receiver Error

物理层像dllp层报告一个rx error之后会自动出发dllp的错误重传机制。回复nak,retry buffer输出当前tlp报文。当使能了AER时该错误会报告出来,一个correctable error;

Active State Power Management

phy + controller 配合支持pcie 低功耗。(低功耗内容,可能会开一个专题)

Link Training and Initialization

后续会开一个专题。
 


 


 

http://www.xdnf.cn/news/538147.html

相关文章:

  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希
  • AtomicReference 和 volatile 的比较
  • C++--综合应用-演讲比赛项目
  • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
  • 【随手记】 Event Bus vs. Event Loop
  • 01、java方法
  • 【Python训练营打卡】day30 @浙大疏锦行
  • 盲盒APP开发——解锁盲盒经济无限可能
  • mapbox-gl强制请求需要accessToken的问题
  • Chromium 回调设计实战:BindOnce 与 BindRepeating 的最佳实践
  • 【css】【面试提问】css经典问题总结
  • Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
  • 嵌入式自学第二十四天
  • 整数的个数
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • 理解前端工程化
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • java集成mqtt
  • 停等协议(Stop-and-Wait Protocol)
  • AI人工智能写作平台:AnKo助力内容创作变革!
  • 铅铋环境下应力腐蚀的疲劳试验装置
  • 什么业务需要用到waf
  • 20. 自动化测试框架开发之Excel配置文件的IO开发
  • 【monai 教程】transform之CropPad详解
  • 磁流体 磁性流体 磁液