PCIe物理层弹性缓存机制(详细)解析-PCIe专题知识(四)

news2024/12/22 20:03:22

目录

  • 前言
  • 一、简介
  • 二、详细解析
    • 2.1 实例解析
    • 2.2 具体实现过程
  • 三、总结
  • 四、其他相关链接
    • 1、PCI总线及发展历程总结
    • 2、PCIe物理层总结-PCIE专题知识(一)
    • 3、PCIe数据链路层图文总结-PCIe专题知识(二)
    • 4、PCIe物理层链路训练和初始化总结-PCIe专题知识(三)
    • 5、8b/10b编码方式详细总结

前言

本文主要介绍PCIe物理层弹性缓存机制用于同步时钟。

一、简介

PCIe物理层弹性缓存(Elastic Buffer,又称为CTC Buffer或者Synchronization Buffer)。其本质上是一种FIFO,主要用于解决跨时钟域问题。当然,PCIe的弹性缓存还用于补偿时钟误差(Compensate for the clock differences)。实际上,除了PCIe,弹性缓存还广泛应用于其它的高速串行接口——USB、InfiniBand、Fibre Channel、Gigabit Ethernet等基于SerDes的应用。

二、详细解析

由于PCIe采用的基于8b/10b的嵌入式源同步时钟,接收端存在两个时钟域:
1、是通过CDR(Clock Data Recovery)从数据流中解析出来的时钟,用该时钟对数据进行采样;
2、是本地时钟域,用于其他的逻辑的。借助弹性缓存(FIFO),可以实现数据在这两个时钟域的转换。

PCIe的时钟是嵌入到差分信号中的,PCIe总线在训练之初会完成一个bit lock,在这个过程中链路上会传输一段0和1间隔序列,即是连续的高低电平,就是用来给Receiver提取时钟的。Receiver提到到时钟后,才能够继续捕获一位一位的数据,也就是做bit的识别,再往后则是做多个bit的识别,即序列识别。
在PCIe Transmitter里会进行编码操作,这个编码即是让0和1的数量更加均衡,以防止总线时钟丢失。另外,总线处于空闲状态时,也会持续传输时钟对齐码流,以防止丢了时钟,突然有数据过来的时候找不着北。

2.1 实例解析

以PCIe Gen1为例,链路上的数据速率为2.5Gbps。但实际上,任何晶振(或者其他频率发生器)都是有误差的,PCIe Spec允许的误差范围为±300ppm(Parts Per Million)。即,链路上实际的频率范围为2.49925GHz~2.50075GHz。借助弹性缓存,通过删除或者插入SKP Ordered Set可以消除链路频率误差的影响。如下图所示:

在这里插入图片描述
需要注意的是PCIe Spec并没有规定弹性缓存的具体位置,设计者可以将弹性缓存放在8b/10b解码器之前,也可以把弹性缓存放在8b/10b解码器之后。不过,Mindshare的建议是将弹性缓存放置于8b/10b解码器之前的。

2.2 具体实现过程

1、插入SKP序列
当本地时钟域的时钟(Local Clock)的速度比数据流通过CDR解析出的时钟(Recovered Clock)的时钟要快时,且弹性缓存即将被读空之前,可以向SKP Ordered Set中插入1~2个SKP,填充buffer。如下图所示:

在这里插入图片描述2、移除SKP序列
当本地时钟域的时钟(Local Clock)的速度比数据流通过CDR解析出的时钟(Recovered Clock)的时钟要慢时,且弹性缓存即将溢出之前,SKP发挥作用的方式很简单,当数据进入的时钟频率(CDR解析出的时钟频率)大于数据出的时钟频率(本地时钟频率)时,数据进的比走的快,会导致进入buffer的数据累积越来越多,甚至可能溢出丢失,在这种情况下,可以从SKP Ordered Set中移除1~2个SKP,将位置空出来,那么数据就不会溢出了。如下图所示:
在这里插入图片描述
需要特别注意的是,Intel提出的PIPE规范(并非PCI-SIG强制的规范,具体参考前面关于PIPE的文章)中,只允许每次从一个SKP Ordered Set中插入或者移除一个SKP。如果需要插入或者移除两个SKP,则需要对两个SKP Ordered Set进行操作。如下图所示:

在这里插入图片描述

三、总结

通过抽走和插入SKP序列的方式,可以解决两边时钟频率差异的问题。弹性缓冲自身有状态检测功能,能够不断监测buffer内的数据量,从而做出响应,具体操作的SKP数量,根据不同厂家的controller设计而不同。

四、其他相关链接

1、PCI总线及发展历程总结

2、PCIe物理层总结-PCIE专题知识(一)

3、PCIe数据链路层图文总结-PCIe专题知识(二)

4、PCIe物理层链路训练和初始化总结-PCIe专题知识(三)

5、8b/10b编码方式详细总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/493594.html

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

相关文章

国产ChatGPT命名图鉴

很久不见这般热闹的春天。 随着ChatGPT的威名席卷全球,大洋对岸的中国厂商也纷纷亮剑,各式本土大模型你方唱罢我登场,声势浩大的发布会排满日程表。 有趣的是,在这些大模型产品初入历史舞台之时,带给世人的第一印象其…

进程替换函数组介绍exec*

目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义: l (list):表示参数采用列表。 v(vector):参数同数组表示。 p(path):自…

力扣题库刷题笔记704-二分查找

1、题目如下&#xff1a; 2、个人Python代码如下&#xff1a; 个人代码如下&#xff1a; class Solution: def search(self, nums: List[int], target: int) -> int: left 0 right len(nums) - 1 while left < right: mid (right left) >> 1 if nums[mid] >…

【C++类和对象之拷贝构造、赋值运算符重载】

拷贝构造、赋值运算符重载 ❀拷贝构造函数 特性 ❀赋值运算符重载 赋值运算符重载格式 &#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f389;系列…

【数字图像处理】边缘检测

文章目录 0. 前言1. Sobel算子2. Canny算子3. 深度学习算法3.1 Holistically-Nested Edge Detection&#xff08;HED&#xff09;3.2 Richer Convolutional Features&#xff08;RCF&#xff09; 0. 前言 边缘检测是一种图像处理技术&#xff0c;旨在标识和定位数字图像中的边…

【信息系统安全/计算机系统安全】期末复习(HITWH)

PDF版本及更多资料&#xff08;百度网盘&#xff09;&#xff1a; 链接&#xff1a;信息系统安全期末复习 目录 第一章 绪论 第二章 安全认证 填空题 第三章 访问控制 填空题 第四章 安全审计 填空题 第五章 Windows操作系统安全 填空题 第六章 Linux操作系统安全 填…

JDBCSpring:使用Spring JDBC封装Dao

目录标题 1、工程目录pom.xml文件 2、创建数据表student3、在resources目录创建配置文件applicationContext.xmljdbc.properties 4、创建Bean对象Student 5、创建Dao类UserDao接口 6、插入数据一、直接注入jdbctemplate二、继承jdbcdaosupport类 7、运行结果图 1、工程目录 pom…

go 使用pprof分析性能,trace追踪

前言 pprof是Go程序自带的性能分析工具&#xff0c;prof是profile&#xff08;画像&#xff09;的缩写&#xff0c;用于分析go程序的性能。 Profile Descriptions: allocs: A sampling of all past memory allocations 已分配内存采样 block: Stack traces that led to bloc…

梯度下降算法

梯度下降算法的公式&#xff1a; 公式依次代表为“下次迭代的点”、“目前所在的点”、“学习率”和“最大负向梯度”。按照这个公式&#xff0c;每次迭代都会根据上次的步长减去学习率乘以“梯度”的值&#xff0c;去一步一步更新&#xff0c;这样能可以每次迭代都朝着最大负方…

基于xml的Spring应用-1

基于xml的Spring应用 Spring的get方法 方法定义返回值和参数Object getBean (String beanName)根据beanName从容器中获取Bean实例&#xff0c;要求容器中Bean唯一返回值为Object&#xff0c;需要强转T getBean (Class type)根据Class类型从容器中获取Bean实例&#xff0c;要求…

SpringBoot 创建 WebService

开发环境: IDEA 2022.1.4 目录 1. 概述 2. 实现步骤 2.1 POM现加依赖 2.2 定义接口 IWebService 2.3 创建类 IWebServiceImpl 并实现接口 IWebService 2.4 配置类 CxfConfig 2.5 启动服务 2.6 测试 1. 概述 虽然webservice这块使用很少&#xff0c;但在局域网作服务还是相…

自动化测试之 selenium 的安装以及 selenium IDE 录制自动化脚本的用法

文章目录 1. 什么是自动化测试1&#xff09;单元测试2&#xff09;接口自动化3&#xff09;UI 自动化 2. Selenium 介绍1&#xff09;Selenium IDE2&#xff09;Webdriver3&#xff09;Selenium Grid 3. 如何使用 Selenium IDE 录制脚本4. 在 python 环境中安装 Selenium 框架 …

RSA--维纳攻击--代码和题目分析

文章目录 维纳攻击原理&#xff1a;维纳攻击脚本[羊城杯 2020]RRRRRRRSA 1题目描述&#xff1a;题目分析&#xff1a; 收获与体会&#xff1a; 维纳攻击原理&#xff1a; 两位大佬讲得非常清楚&#xff08;搬运工就是我&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/…

代码随想录算法训练营第五十二天| 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

文章目录 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 想清楚如何推导dp数组是关键 两层for循环&#xff0c;因为递增序列不是连续的 题目链接&#xff1a;代码随想录 解题思路&#xff1a; 1.dp[i]表示i之前包括i的以nums[i]结尾的最长递…

SpringBoot整合Mybatis-Plus实现浏览数据新增、Redis进行热度排名

在开发Web项目时&#xff0c;常用到的技术就是SpringBoot和Mybatis-Plus。本文将介绍如何使用SpringBoot整合Mybatis-Plus实现一个浏览数据新增功能&#xff0c;以及如何用Redis进行热度排名统计&#xff0c;最后用Vue进行数据渲染。 一、SpringBoot整合Mybatis-Plus 1. 新建…

0 基础 Java 自学之路(2023年最新版)

目录 一、语言的选择二、Java学习路线三、学习资料哪里找&#xff1f;1、Java经典书籍推荐2、Java经典视频推荐3、经典博客推荐 四、如何规划时间&#xff1f;五、是否要报培训班&#xff1f; 写了10多年的代码&#xff0c;之前做过某东的高级架构师&#xff0c;在技术这条路上…

BIOS主板(非UEFI)安装fedora36的方法

BIOS主板(非UEFI)安装fedora36的方法 现实困难&#xff1a;将Fedora-Workstation-Live-x86_64-38-1.6.iso写入U盘制作成可启动U盘启动fedora38安装时报错如下内容&#xff1a; Failed to find a suitable stage1 device: EFI System Partition cannot be of type ntfs: EFI Sys…

携创教育:自考、成考、开放大学几年能够毕业拿证?

目前&#xff0c;国家承认的成人学历提升的形式只有3种&#xff0c;分别是自考&#xff0c;成考&#xff0c;开放大学。 ▼各学历形式拿证时间▼ ★自学考试 自考没有入学考试&#xff0c;只需要参加相应的课程考试&#xff0c;所有课程考试合格后&#xff0c;符合毕业条件即可…

【论文简述】Cross-Attentional Flow Transformer for Robust Optical Flow(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Xiuchao Sui、Shaohua Li 2. 发表年份&#xff1a;2021 3. 发表期刊&#xff1a;arxiv 4. 关键词&#xff1a;光流、Transformer、自注意力、交叉注意力、相关体 5. 探索动机&#xff1a;由于卷积的局部性和刚性权重&#xff0c;有限…

Flutter 中使用 Widgetbook 管理你的组件

Flutter 中使用 Widgetbook 管理你的组件 前言 Flutter 界面开发中我们有几个痛点 &#xff1a; 与设计师协作复用一套设计规范&#xff08;figma&#xff09; 可视化的管理你的组件代码&#xff08;基础组件、业务组件&#xff09; 不同设备尺寸测试你的组件 实时修改你的测试…