PCIe学习笔记1:PCIe体系架构——PCIe简介

目录

一、PCIe简介

1.1 串行传输

1.1.1 相对于并行传输的优化

1.1.2 带宽计算

1.1.3 差分信号传输

1.1.4 基于数据包的传输协议

1.2 PCIe的系统拓扑结构

1.2.1 根组件(Root Complex,RC)

1.2.2 上行端口与下行端口

1.2.3 交换机与桥 (Switches and Bridges)

1.2.4 端点(Endpoints)


一、PCIe简介

PCIe是一种串行总线,采用双向连接的方式,可同时收发,是一种双单工连接

PCIe设备之间的信号传输路径称作链路(Links),一个link由一个或多个收发通道(Lanes)组成。协议规范中的x1、x2、x4、x8、x16和x32分别表示一个link中包含1、2、4、8、16或32个lane。PCIe 允许多种链路宽度,系统设计时可以在成本和性能之间做出适当的权衡——采用更多的lane可以提供更高的通信带宽,但成本、空间和功耗相应增加。

1.1 串行传输

1.1.1 相对于并行传输的优化

并行传输的不足:

  • 并行传输中参考时钟存在时钟偏斜,即时钟在发送方和接收方的时刻不同;
  • 并行传输中多比特信号之间可能存在数据偏斜,即多比特信号到达和稳定的时刻不同。

串行传输的克服了上述不足。串行传输将时钟信号包含于数据流中,无需额外的传输线来传输参考时钟。因此,即使数据传输的时长跨越多个时钟周期也不会导致数据相对于参考时钟的滞后,也便不存在时钟偏斜的问题。串行传输中单通道单次传输单比特信号,也不存在数据偏斜的问题(多通道设计中需要引入对齐机制)。

1.1.2 带宽计算
  • PCIe 1.x比特率为2.5GT/s,采用8b/10b编码,每个lane的带宽计算方法为:

带宽 =(2.5GT/s x 2 双向)/ 10bits per symbol = 0.5GB/s

  • PCIe 2.x比特率为5.0GT/s,采用8b/10b编码,每个lane的带宽计算方法为:

带宽 =(5.0GT/s x 2 双向)/ 10bits per symbol = 1GB/s

  • PCIe 3.x比特率为8.0GT/s,采用128b/130b编码(2比特的开销忽略不计),每个lane的带宽计算方法为:

带宽 ≈(8.0GT/s x 2 双向)/ 8 bits per symbol = 2GB/s

PCIe 3.x之后的规范版本带宽计算方法类似,故不再此赘述。上述每个lane的带宽乘以链路宽度即可得到链路的总带宽。

PCIe各版本规范特性
版本1.X2.X3.X4.05.06.0
发布年份200320072010201720192022
编码方式8b/10b8b/10b128b/130b128b/130b128b/130b1b/1b
比特率(GT/s/lane)2.558163264
带宽(GB/s/lane)0.5124816
1.1.3 差分信号传输

PCIe总线中每个lane都采用差分信号进行传输,包含一对发送差分信号对和一对接收差分信号对这样会导致设备的引脚数增加一倍,但其收益非常明显:提高噪声容限、降低信号电压。

接收端在接收到差分信号时,将正信号的电压与反信号的电压相减得到差值后进行电平判定。差分信号的正反信号传输线走线非常靠近,且设备引脚相邻,当其中一路信号受到外界干扰时另一路信号必然同时受到干扰,两路信号同时受到相似的干扰反映到差值上时可忽略不计。

1.1.4 基于数据包的传输协议

将并行传输转变为串行传输可以极大的减少数据传输需要的引脚数量,也减少了额外的边带信号来指示控制信息。PCIe中定义了传输事务数据包(Packets)的结构,该结构中包含了事务类型等关键信息,接收方可以通过解析数据包来获取传输事务的类型,从而获悉需要执行什么操作。

1.2 PCIe的系统拓扑结构

一条 PCIe 链路必须是一个点对点的连接,但可以通过通过交换机(Switches)桥(Bridges)来构建灵活的系统拓扑,下图为一个简单的示例。

PCIe只允许树结构,不允许出现循环或其他复杂拓扑结构,这么做是为了保持与PCI软件的向后兼容性。CPU通常为PCIe层次结构的顶端。

1.2.1 根组件(Root Complex,RC)

CPU与PCIe总线之间的接口可能包含一系列的组件(处理器接口,DRAM 接口等等),甚至是包含多个芯片。将这些组件合起来,称这一组组件为根组件(Root Complex,RC,Root),位于树状拓扑的“根部”,并代表 CPU 与系统的其余部分通信。

1.2.2 上行端口与下行端口
  • 上行端口(Upstream Port)指的是拓扑结构的向上的端口,如图中endpoint向上连接switch的端口,PCIe中的设备必须且仅能有1个上行端口;
  • 下行端口(Downstream Port)与上行端口在拓扑意义上相反,PCIe中的设备必可以有若干个下行端口。
1.2.3 交换机与桥 (Switches and Bridges)
  • 交换机(Switches)使得单个 PCIe 端口上可以连接更多的设备,它作为数据包的路由器,可根据数据包提供的路由信息来识别其路由路径。Switch可以有若干个下行端口;
  • 桥(Bridges)提供了一个通往其他总线的接口,例如 PCI 或者 PCI-X,或其他的 PCIe 总线。
1.2.4 端点(Endpoints)

Endpoints是系统中即不是switches也不是bridges的设备,位于树状拓扑分支底部,只能有1个上行端口。Endpoints可以作为总线上事务的发起者或完成者。

PCIe端点分为原生PCIe端点(Native PCIe Endpoints)和传统PCIe端点(Legacy PCIe Endpoints)。原生 PCIe 端点是从一开始就被设计用来在 PCIe 系统中使用的,是内存映射设备;而传统 PCIe 端点则是用于老式总线(例如 PCI-X)的设备,在PCIe系统中可能使用了在 PCIe 设计中被禁止的东西,例如 IO 空间、支持 IO 事务以及支持锁定请求,在此暂不讨论。

下篇:PCIe学习笔记2:PCIe体系架构——PCIe设备层次

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

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

相关文章

一天记20个忘10个之4:man

据说,给你一个支点,你就能撬起地球。 那好,今天,我给你一个 man,如果你能完成记20个忘10个的任务,你就真的很 man 了。 零、热身 young manold manmedical man 一、man之复合词 1.1 man复合词 chairm…

SpringBoot之自定义简单的注解和AOP

1.引入依赖 <!-- AOP依赖--> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version> </dependency>2.自定义一个注解 package com.example.springbootdemo3.an…

利用开源小智AI制作桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…

深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分

目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…

利用python和gpt写一个conda环境可视化管理工具

最近在学习python&#xff0c;由于不同的版本之间的差距较大&#xff0c;如果是用环境变量来配置python的话&#xff0c;会需要来回改&#xff0c;于是请教得知可以用conda来管理&#xff0c;但是conda在管理的时候老是要输入命令&#xff0c;感觉也很烦&#xff0c;于是让gpt帮…

Linux内核,slub分配流程

我们根据上面的流程图&#xff0c;依次看下slub是如何分配的 首先从kmem_cache_cpu中分配&#xff0c;如果没有则从kmem_cache_cpu的partial链表分配&#xff0c;如果还没有则从kmem_cache_node中分配&#xff0c;如果kmem_cache_node中也没有&#xff0c;则需要向伙伴系统申请…

使用Windbg调试目标进程排查C++软件异常的一般步骤与要点分享

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上&#xff0c;或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来&#xff0c;输入g命令将该中断跳过去 3、分析实例说明 …

51单片机测试题AI作答测试(DeepSeek Kimi)

单片机测试题 DeepSeek Kimi 单项选择题 &#xff08;10道&#xff09; 6题8题判断有误 6题判断有误 智谱清言6题靠谱&#xff0c;但仔细斟酌&#xff0c;题目出的貌似有问题&#xff0c;详见 下方。 填空题 &#xff08;9道&#xff09; 脉宽调制&#xff08;Pulse …

模版语法vscode

这里注意&#xff1a;<template></template>里面只能写一个根标签&#xff0c;其他在嵌套&#xff1a; <script > export default {data(){return{tthtml:"<a hrefhttps://itbaizhan.com>百战程序员</a>"}} } </script><tem…

洛谷B3637 最长上升子序

B3637 最长上升子序列 - 洛谷 代码区&#xff1a; #include<bits/stdc.h>using namespace std;int main(){int n;cin >> n;int arry[n],dp[n];for(int i0;i<n;i){cin >>arry[i];dp[i]1;}/*在 i 之前可能存在多个 j 满足 arry[j] < arry[i]&#xff0c…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的&#xff0c;因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化&#xff0c;就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前&#xff0c;Java 是没有泛型功能的&#xff0c;…

Day 49 卡玛笔记

这是基于代码随想录的每日打卡 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变…

重新求职刷题DAY18

1.513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 输入: root [2,1,3] 输出: 1思路&#xff1a; 这…

因子数个数之和

BDAA实验室的保研机试一道题&#xff0c;有时间限制。 1. 求每个数的因子数再求和&#xff1a;超时 2. 思想转换&#xff1a;统计每个数在 1 到 N 中作为因子出现的次数&#xff0c;从而避免对每个数进行因子分解&#xff0c;将时间复杂度优化到O(N)。&#xff08; 没想到 :( …

『obsidian』obsidian接入DeepSeek模型的完整说明

一、插件概览 &#x1f3c6;Copilot For Obsidian 开发者&#xff1a;loganc yang | 第 5 届 Ob 宝石奖 LLM 类冠军 核心功能&#xff1a;内置多模态大语言模型&#xff0c;支持自定义模型扩展&#xff0c;实现笔记智能交互预置模型&#xff1a;Claude、GPT-4、Gemini 系列特…

基于YOLO11深度学习的苹果叶片病害检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

基于 DeepSeek LLM 本地知识库搭建开源方案(AnythingLLM、Cherry、Ragflow、Dify)认知

写在前面 博文内容涉及 基于 Deepseek LLM 的本地知识库搭建使用 ollama 部署 Deepseek-R1 LLM知识库能力通过 Ragflow、Dify 、AnythingLLM、Cherry 提供理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我站在人潮中央&#xff0c;思考这日日重复的生活。我突然想&#xff0c…

Redis分布式锁故障处理:当Redis不可用时的应对策略

Redis分布式锁故障处理&#xff1a;当Redis不可用时的应对策略 在分布式系统中&#xff0c;Redis因其高性能和丰富的特性常被用于实现分布式锁。但当加锁过程中Redis服务不可用时&#xff0c;系统将面临严重挑战。本文将深入探讨这一问题&#xff0c;并提供多维度解决方案。 目…

番外·卓伊凡参加 [2025年2月HDD·鸿蒙赋能交流会·成都站] 线下活动的心得体会-优雅草卓伊凡

番外卓伊凡参加 [2025年2月HDD鸿蒙赋能交流会成都站] 线下活动的心得体会-优雅草卓伊凡 背景 2025 年 2 月 22 日&#xff0c;HDD・鸿蒙赋能交流会将在北京、长沙、成都、南京、雄安同步开展。此次交流会由 HDG 组织者牵头&#xff0c;携手 HUAWEI DEVELOPER EXPERTS&#xf…

vue-fastapi-admin 部署心得

vue-fastapi-admin 部署心得 这两天需要搭建一个后台管理系统&#xff0c;找来找去 vue-fastapi-admin 这个开源后台管理框架刚好和我的技术栈所契合。于是就浅浅的研究了一下。 主要是记录如何基于原项目提供的Dockerfile进行调整&#xff0c;那项目文件放在容器外部&#xf…