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

pcie gen3 phy tx

只介绍gen3 phy tx新增内容;

(翻译自mindshare )

Multiplexer
 

gen3 tlp 以Dword 大小为单位在length字段中,所以可以不需要END fram。当发送SOS或者stream传输完成后才需要发送EDS。

在周期间隔内,基于Skip定时器,一个SOS被复用器插入到数据流中。其他有序集,如TS1、TS2、FTS、EIEOS、EIOS、SDS,也可能基于链路要求被插入,并且位于数据流之外。

当没有数据传输但是链路仍然保持在L0状态,IDL tokens被插入到链路中,且会被scramble(扰码);rx端会认为IDL码流没有意义(只做填充使用)

Byte Striping
 

数据交织。

注:sync header 字段会同时出现在所有的tx lane中。不管传输的pcie包,还是order set。

正常的x8 lane tx fram 流格式。

Nullified tlp

x8 lane tx nullified tlp fram结构。LCRC之后紧跟着EDB。

switch cut-through mode

用于降低大字节TLP包延迟;

背景:

在大tlp包传输经过一个switch时,sw会缓存整个tlp包,但是当发生错误时,导致传输该包耗时大量增加。且缓存整个tlp包之后才开始路由对于大tlp而言延迟也会增加。

提高latency机制:

在识别到tlp header之后就立马开始转发到sw出口(egress)。这样会极大降低大数据tlp包延迟,

有一个小风险,入口端口必须等到接收到数据包末尾的 LCRC(链路循环冗余校验)后才能对整个包进行错误检测,风险:转发出去的 TLP 实际上可能包含错误。当 TLP 的结尾最终到达入口端口后,交换机会对其进行校验。如果发现数据包有误,入口端口将按照对待错误 TLP 的常规方式操作,即发送一个 Nak(否定确认)请求重新发送数据包。

但问题在于:大部分现在已知是错误的数据包,已经被转发到出口端口了。那这时该怎么办呢?我们可以让这个错误包继续发送出去,并等待下游接收端在检测到错误时返回一个 Nak,但问题在于,此时重放缓冲区中存储的是这个有错误的数据包,所以重放并不会解决问题。

我们也可以尝试截断正在传输中的错误包,但 PCIe 规范并不允许这样做。要使这套机制有效,就需要引入另一种选项,这也正是 "Cut-Through(切换转发)" 机制发挥作用的地方。

cut-through机制:

当在接收的数据包中检测到错误时,已经开始转发的数据包必须被“作废”(nullified)。

一个作废的数据包会以 EDB(End Bad)符号 而不是 END(End Good)符号 作为结束标志,并且为了明确表示这种状态,该 TLP(事务层包)的 32 位 LCRC(链路循环冗余校验) 会被取反(即进行 1 的补码运算,即逐位取反)以区别于正常包。

本质上,作废的数据包被处理为**“从未存在过”**。对于交换芯片的出端口(Switch Egress Port)来说,这意味着:

  • 重放缓冲区会丢弃该数据包,

  • NEXT_TRANSMIT_SEQ(下一个发送序号) 会减少 1(即回退一次)。

当一个设备接收到一个被识别为“作废 TLP”的数据包时,它会:

  • 直接丢弃该包,视其为从未存在,

  • NEXT_RCV_SEQ(下一个接收序号) 不会增加,

  • AckNak_LATENCY_TIMER(确认/否认延迟计时器) 不会启动,

  • NAK_SCHEDULED 标志也不会被设置。

接收设备静默地丢弃这个作废的 TLP,也不会返回 Ack(确认)或 Nak(否认)

在nullified 包被丢弃之后;上一次数据包会被从新发送,新的ack会收到。

Ordered Set Example - SOS

Transmitter SOS Rules
  • sos 必须在370~375 blocks之间进行发送;
  • sos必须出现在数据的boundary;
  • 当TX处于elecidle 的状态时建议复位SOS相关的计数器
  • 在128b/30b编码下,当ltssm处于polling.compliance(兼容性测试)时,LINK_CONTROL2_LINK_STATUS2_REG.PCIE_CAP_COMPLIANCE_SOS, 不受影响。
接收SOS 规则:

1. rx 在370~375 blocks之间检查sos;

2. sos必须出现在EDS 之后;

Scrambling(直接翻译,该处不是很了解)

为了解决DC平衡和插入更多时钟边界disparity(为了rx恢复时钟);

第一选项:多个LFSR。一个解决方案是为每个Lane实现一个单独的LFSR,并用不同的初始值或“种子”初始化每个LFSR。这具有简单和速度的优点,但需要增加逻辑。如图12-16所示,每个LFSR根据规范中给出的多项式G(X) = X23 + X21 + X16 + X8 + X5 + X2 + 1生成伪随机输出。这个多项式比之前的版本长,并且由于不同的种子值也表现出稍微不同的行为。为每个Lane指定八个不同的种子值,需要八个不同的LFSR,每个Lane 0到7各一个。

lane0 和lane8的seed值是一样的。

方法二: share LFSR. LFSR数量固定;不同lane之间LFSR tap数不同,lane之间输出的值值进行异或处理。优势:面积更少,fewer gates;劣势:额外的延迟,且牺牲了一定的performance。

规范中关于扰码的若干规则如下,便于参考:

  • 同步头(Sync Header)位不进行扰码处理,且不会推动 LFSR(线性反馈移位寄存器)的状态。

  • 发送端的 LFSR 会在最后一个 EIEOS 符号被发送后重置,接收端的 LFSR 则在最后一个 EIEOS 符号被接收后重置。

  • 对于 TS1 和 TS2 有序集(Ordered Sets)

    • 符号 0 跳过扰码处理

    • 符号 1 到 13 需要进行扰码

    • 符号 14 和 15 可以扰码,也可以不扰码。规范说明:如果为了改善 直流平衡(DC Balance) 需要跳过扰码,则可以不扰码,否则应进行扰码(详见第510页“TS1 和 TS2 有序集”章节中关于 DC 平衡的说明)。

  • 所有如下有序集中的符号:FTS、SDS、EIEOS、EIOS、SOS跳过扰码。尽管如此,输出数据流仍将具有足够的转换密度(transition density)以支持时钟恢复,同时这些有序集选择的符号也确保了 DC 平衡。

  • 即使在跳过扰码的情况下,发送端仍需推进其 LFSR 状态(除了 SOS 中的符号例外)。

  • 接收端做法类似:在收到的有序集块中检查第 0 个符号是否为 SOS。如果是,那么该块中的所有符号均不推进 LFSR 状态;否则,所有符号都需要推进 LFSR 状态

  • 所有的数据块符号都必须进行扰码,并推动 LFSR 状态

  • 扰码操作采用小端(little-endian)顺序:即 最低有效位(LSB)先扰码最高有效位(MSB)最后扰码

  • 每个 Lane 的 LFSR 种子值(seed)依赖于 该 Lane 在 LTSSM(链路训练状态机)第一次进入 Configuration.Idle 状态时的 Lane 编号(即完成 Polling 状态后)。表 12-3(第432页)列出了按 Lane 编号对 8 取模后的种子值。一旦分配,只要 LinkUp=1,这些种子值就不会改变,即使回到 Configuration 状态重新分配 Lane。

  • 与 8b/10b 编码不同,使用 128b/130b 编码时不允许禁用扰码功能,因为扰码对信号完整性至关重要。如果关闭扰码,链路的可靠性将无法保障,因此扰码必须始终启用

  • 在 Loopback 模式中,Loopback 从设备不得对回环比特进行扰码或解扰码处理

Serializer

这个移位寄存器的工作方式与 Gen1/Gen2 数据速率时一样,只是现在它一次接收的是 8 位数据,而不是 10 位。也就是说,串行器(serializer)现在是一个 8 位并行转串行的移位寄存器

Mux for Sync Header Bits

最后,必须插入两个同步头(Sync Header)位,以区分下一个字符块是数据块(Data Block)还是有序集块(Ordered Set Block)。其中如果下一包还是STP+TLP包可以连续发送不需要插入sync header。在同步比特发送期间,输入数据包的流将暂存于发送缓冲区中。

这两个比特是每个 130 位块的前两位,它们的插入逻辑可以被放在发送器(Transmitter)中任何合理的位置。


 

相关文章:

  • t009-线上代驾管理系统
  • StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
  • Apache Kafka 实现原理深度解析:生产、存储与消费全流程
  • 如何在 Ubuntu 24.04 服务器上安装 Apache Solr
  • 高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
  • QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS
  • 【深度学习新浪潮】什么是混合精度分解?
  • WPF-Prism学习笔记之 “导航功能和依赖注入“
  • python和风api获取天气(JSON Web Token)
  • ChemDraw 2023|Win英文|化学结构编辑器|安装教程
  • TCP连接关闭过程的技术解析:从四次挥手到资源释放
  • JWT 不对外,Session ID 对外:构建安全可控的微服务认证架构
  • LVS+Keepalived 高可用群集
  • Python Day37
  • 智能手机上用Termux安装php+Nginx
  • MySQL索引与事物
  • LVS + Keepalived 高可用群集
  • Spring框架学习day2--Bean管理(IOC)
  • 智能穿戴新标杆:SD NAND (贴片式SD卡)与 SOC 如何定义 AI 眼镜未来技术路径
  • 华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 郑州网站推广公司排名/cba目前排行
  • 网站备案名称能重复吗/淘宝搜索排名
  • 一个新手建设网站怎么简单/网站优化推广软件
  • 萧山区建设局网站/汕头网站建设公司
  • 如何写网站建设方案书/企业微信营销系统
  • 网页设计师培训多久/seo服务是什么