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.pswp.cn/news/906210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java—— File详解

说明 File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径 这个路径可以是存在的,也允许是不存在的 获取File对象 方法名称说明public File(String pathname)根据文件路径创建文件对象public File(String parent,String child)根据父路径名…

【数字图像处理】半开卷复习提纲

1:要求 2张A4纸以内,正反面均可写 (不过博主由于墨水浸到背面了,采用了把2张单面通过双面胶粘起来的方法,结果考前半个小时都在用这个难用的双面胶。。。) 2:提纲内容 3:提示 考的…

Neovim 如何安装和配置缩进标识插件 indent-blankline.nvim

Neovim 0.9 以 lazy.nvim 为核心的现代化配置指南 一次性搞定插件管理、UI 优化与高效行跳转 适用平台:Linux/macOS/WSL/Windows (Neovim ≥ 0.9) 目录 为什么选 lazy.nvim安装与初始化 2.1 创建配置目录 2.2 克隆 lazy.nvi…

VulnHub | Breach - 1

🌟 关注这个靶场的其它相关笔记:[网安靶场] 红队综合渗透靶场 —— VulnHub 靶场笔记合集 Breach: 1 ~ VulnHubBreach: 1, made by mrb3n. Download & walkthrough links are available.https://vulnhub.com/entry/breach-1,152/ 0x01:…

城市综合管廊监测与维护一体化解决方案

一、 方案概述 城市综合管廊监测主要源于现代城市对地下管线管理的迫切需求。随着城市化进程的加快,地下管线作为城市的“生命线”,其重要性日益凸显。传统的地下管线管理方式存在分散、低效、易产生信息孤岛和管理盲区等问题,已无法满足现代…

【iOS】alloc的实际流程

目录 前言 为什么不按源码流程调用? alloc的调用流程 前言 在之前的博客中我们有学习到过alloc的底层原理,沿着源码一步步找到了alloc的调用链——alloc—>_objc_rootAlloc—>callAlloc—>_objc_rootAllocWithZone—>_class_createInstan…

MySQL 故障排查与生产环境优化

目录 一、前置知识点 MySQL的运行原理 1. 客户端连接 2. SQL 解析与优化 3. 存储引擎处理 4. 日志与持久化 二、MySQL 单实例故障排查 (1)故障现象1 (2)故障现象2 (3)故障现象3 (4&am…

C++学习:六个月从基础到就业——C++20:模块(Modules)与其他特性

C学习:六个月从基础到就业——C20:模块(Modules)与其他特性 本文是我C学习之旅系列的第五十三篇技术文章,也是第三阶段"现代C特性"的第十五篇,深入探讨C20引入的模块(Modules)系统及其他重要特性。查看完整系列目录了解…

Vue百日学习计划Day36-42天详细计划-Gemini版

总目标: 在 Day 36-42 理解组件化开发的思想,熟练掌握 Vue 组件的注册、Props、Events、v-model、Slots、Provide/Inject 等核心概念和实践,能够构建可复用和易于维护的组件结构。 所需资源: Vue 3 官方文档 (组件基础): https://cn.vuejs.org/guide/es…

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务

深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务 引言 在现代微服务架构中,消息队列扮演着至关重要的角色,而Apache Kafka凭借其高吞吐量、低延迟和可扩展性,成为了许多企业的首选。本文将详细介绍如何在Spring Boot应用…

谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频

近期,谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力,能够生成 1 - 3 分钟的 AI 视频,为用户带来全新的内容创作与信息获取体验。 NotebookLM:AI 笔…

第十六届蓝桥杯复盘

文章目录 1.数位倍数2.IPv63.变换数组4.最大数字5.小说6.01串7.甘蔗8.原料采购 省赛过去一段时间了,现在复盘下,省赛报完名后一直没准备所以没打算参赛,直到比赛前两天才决定参加,赛前两天匆匆忙忙下载安装了比赛要用的编译器ecli…

Manus AI 突破多语言手写识别技术壁垒:创新架构、算法与应用解析

在人工智能领域,手写识别技术作为连接人类自然书写与数字世界的桥梁,一直备受关注。然而,多语言手写识别面临诸多技术挑战,如语言多样性、书写风格差异、数据稀缺性等。Manus AI 作为该领域的领军者,通过一系列创新技术…

25考研经验贴(11408)

声明:以下内容都仅代表个人观点 数学一(130) 25考研数学一难度介绍:今年数学一整体不难,尤其是选填部分,大题的二型线面和概率论大题个人感觉比较奇怪,其他大题还是比较容易的。.26如何准备&a…

嵌入式软件--stm32 DAY 6 USART串口通讯(下)

1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后,我们趁热打铁,争上游,进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里,它也可…

QT使用QXlsx读取excel表格中的图片

前言 读取excel表格中的图片的需求比较小众,QXlsx可以操作excel文档,进行图片读取、插入操作,本文主要分享单独提取图片和遍历表格提取文字和图片。 源码下载 github 开发环境准备 把下载的代码中的QXlsx目录,整个拷贝到所创建…

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计(登录 每日3次 中奖40% 道具兑换码) ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …

Unity editor文件数UI(支持勾选框)

unity editor文件数(支持勾选框) 使用的时候new一个box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…

隨筆20250519 Async+ThreadPoolTaskExecutor⾃定义线程池进阶实战

1.ThreadPoolTaskExecutor线程池 有哪⼏个重要参数, 什么时候会创建线程 1.核心綫程數 查看核心綫程數目是否已經滿,未滿 創建一條綫程 執行任務,已滿負責執行第二部 2.阻塞隊列 查看阻塞隊列是否已經滿,未滿將任務加入阻塞隊列&…