PCIE-framing error

一些背景知识:

(1)PCIe Ordered Set 和 Framing Token 有何区别?
  有序集用于链路训练、时钟偏差补偿、进出电气闲等。有序集长度为 4B 整倍数,一般 16 Symbol(SKPOS/EIOS 4 symbol @Gen1/2)。Gen3+ 时,有序集的同步头为 01b,在 Orderer Sets Block 中发送,有序集的 Symbol 0 来指示当前有序集的类型。

  Framing Token 是帧令牌,标记帧的类型、起始、长度、状态、结束等等。Framing Token 长度较短,为 1, 2, 4 Symbol。Framing Token 是 PCIe Gen3 出现的概念,Framing Token 中的 STP、SDP、EDB、IDL 在 Gen1/2 时候以特殊符号(K Code)的形式存在。Gen3+ 时,Framing Token 的同步头为 10b,在 Data Block 中发送。参考网络

framing token:

ordered set:

TS1/TS2:

EIEOS/EIOS:

SDS:

SKP:

(2)PCIe SDS/EDS 是什么?
SDS,全称 Start of Data Stream Ordered Set,在发送Data Block 第 1 DW 前发送。与之对应的是EDS,发送Data Block 最后 1 DW 后发送 EDS,标志数据块的结束,下一笔就是 OS 有序集了。

发送 SDS 对链路状态有所要求,在 LTSSM 跳转到 L0 状态前的最后一个子状态发送 ,包括 Cfg.Idle、Rcvr.Idle、Tx_L0s.FTS,且只能在这些状态时发送。

SDS/EDS 仅适用于Gen3 及以上速率,不适用于 Gen1/Gen2 是因为 Gen1/Gen2 时还没出现 SDS/EDS,协议要兼容老版本。Gen1/Gen2 时,LTSSM 跳到 L0 前不发 SDS 发啥?在所有lane上同时发 Logic Idle Symbol,就是0x00。

Loopback 时,OS<->DataBlock切换时 Tx 无需发送 SDS 或 EDS,Rx 也 无需检查 SDS 或 EDS。参考网络

注意,SDS是order set,EDS是token。

(3)aligmen和lock:

一文讲清楚PCIE中的alignment和lock_pcie bit lock-CSDN博客

frame error的场景:

non-flit mode

(1)在期望产生symbol的地方没有产生对应的symbol -> frame error;

(2)针对STP:

rx需要计算frame crc和frame parity(tlp length域),crc或者parity错误 -> frame error;

tlp length域为1的stp需要看看是不是EDS token;

tlp length域为0,2,3,4 -> frame error(检查可选);

不支持Protocol Multiplexing,tlp length域需要小于1535,否则 ->   frame error(检查可选);

(对于支持Protocol Multiplexing,rx处理长度大于1535的包需要”as the start of a PMUX Packet“);

一个 Symbol Time内如果收到大于一个的stp, -> frame error(检查可选);

(3)针对EDB:

EDB只能出现在TLP之后,其他的情况下都是 -> frame error;

pl收到EDB之后需要通知dl层他已经收到EDB;

(4)针对EDS(rx收到EDS之后停止处理数据):

在EDS之后收到ordered set(除了SKP,EIOS,EIEOS以为),都是 -> frame error;

针对收到EDS之后又收到SKP的情况,rx会在data block的第一个symbol下恢复data stream(除非发生framing error);

(5)针对SDP:

一个 Symbol Time内如果收到大于一个的sdp, -> frame error(检查可选);

下一个处理的symbol来自于dllp之后的symbol;

(6)针对IDL:

对于x2来说,如果收到了IDL,下一个需要处理的symbol在下一个lane0,另外,在这种情况下(lane0收到了IDL),如果lane1收到了非IDL,那么 -> frame error(检查可选);

对于x4,类似,下一个需要处理的symbol同样在下一个lane0,只不过检查的点变为lane1-3;

对于x8和x16,下一个需要处理的symbol在DW对其的lane,比如针对x16,lane4收到IDL之后,下个需要处理的symbol在lane8,中间的lane的位置同意可选的进行frame err的检查;

另外需要注意的是,在一个Symbol Time内,IDL token之后可以收的token只可能是IDL或EDS。

flit mode:

待补充

framing error后进行recovery的流程:

(1)report error;

(2)停止处理数据流,在下个SDS之后开始新的处理新的数据流;

(3)状态机切换:

L0 -> recovery;

Configuration.Complete ?? -> L0 -> recovery??

Configuration.Idle -> Recovery.RcvrLock(timeout);

Recovery.RcvrCfg ?? -> L0 -> recovery??

Recovery.Idle -> Recovery.RcvrLock(timeout);

Recovery.RcvrLock / Configuration.Linkwidth.Start 状态下发生frame err,非直接的方式进入recovery状态;

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值