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

后续会开一个专题。

最后绘制一个简图

。用于标记tx rx phy结构。

关于elastic buffer:

基本上面试都会问的一个问题;elastic buffer本质上就是一个异步fifo;

输入时钟: rx cdr 恢复时钟(可以认为是tx clock),输入数据:经过解串器之后的数据;

输出时钟:本地rx端时钟,输出数据:即将进入8b/10b解码的数据。

目的:为了消除链路上tx到rx的偏移(skew);主要是消除由频偏带来的影响。


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值