PCIE学习总结

一、PCIE与SATA区别

1 SATA是半双工,类似于打电话,同一时间只能一端发送或者接收数据;PCIE是全双工,双端可以同时发送或者接收数据;

2 PCIE是串行总线,速率计算,如果双边速率(单边除以2),一条lane计算如下:

gen1
   2.5Gbps×2 (双向通道)) /10=0.5GB/s
gen2
5Gbps×2 (双向通道)) /10=1GB/s
gen3
8Gbps×2 (双向通道) × 128bit/130bit )) /8≈2GB/s

实际应用中,一般接入4个lane,即gen3 * 4。(注:上面是双边带宽,单边= 双边/2)

3 PCIE的拓扑结构

拓扑结构主要有总线型拓扑、环形拓扑、树形拓扑、星形拓扑、混合型拓扑 
以及网状拓扑。PCIE使用的树形拓扑结构。

 

 二、PCIE分层结构

PCIE通过事务层-> 数据链路层->物理层,数据包发送到硬件模块,接收端再经历相同的层次进行解析。发送是封装,解析是拆包。

 事务层负责发送或者接收TLP,以及流量控制、QoS、事务排序;

数据链路层创建或者解析DLLP、ACK/NAK、流控、电源管理;

物理层负责传输packet,平均发送到各个lane,加扰,然后接收时候解扰,以及编解码;

三、TLP类型

 TLP有message TLP、 memory TLP、configuation TLP;以及complete TLP。(IO TLP不常用)

message TLPMsg MsgD
memory TLPMRd、MWr
configuation TLPCfgRd0、CfgRd1、CfgWr0、CfgWr1
complete TLPCpl CplD

 MRd为例:

1 device发起TLP read,send到switch,switch也需要解析TLP包,转发给RC;

2 CPU把需要读取的数据放到DRAM,RC把DRAM内的data写入CplD中,然后传给switch,再传输给device,device收到解析cplD,拿到data

注:cplD一次最大携带4k数据,如果一笔数据16k,那么需要4次CplD传输才行(发送1次MRd);

TLP的结构是header + data + ERC,其中比较重要的点就是header结构(参考深入浅出SSD):

不同的TLP类型,结构可能不完全相同,但是header基本一致

memory TLP具体是看header填地址是32位为还是64位,即映射到主机内存空间是否超过4GB,TLP格式对比如下:

 如上图,如果TLP携带的地址超过32bit,那么TLP需要4DW。

configuration TLP用于初始化把device configuration映射到主机内存空间,方便主机访问,RC发送configuration TLP来读写device内部的configuration,实现配置空间映射。

这里可以提下两个TLP不同点,上面memory TLP包含了地址信息,host可以通过映射到主机地址空间的地址,去访问device;但是configuration TLP,只能通过Bus + Device + Func确定唯一的设备,加Ext Reg Number和register Number设置偏移,就可以访问到指定的地址。

message TLP用于报异常和中断 电源管理等信息。如下图:

 complete TLP用于non-post类型的TLP,主要是收到TLP,回复信息,具体的header结构如下:

四、PCIE配置空间和地址空间

 PCIE设备都有一段空间,Host可以通过读写该段空间,访问设备内部寄存器,获取该设备的一些信息,配置空间设定都是协议规定好的,具体可以参考nvme协议。

 type0 是pcie设备的header,type1是switch的header;

pcie设备的配置空间需要映射到主机的内存空间。上电时,主机RC发送 configuration TLP读取设备的configuration中header里面bar地址,然后主机在内存中创建一个映射地址,作为该设备的内存地址空间,并将host开辟的地址写入到BAR中。

step1:RC发起configuration TLP  read,读取configuration bar地址;

step2:由于bar地址有些是只读的属性(默认为0),不可写,因此,可以全1写入bar地址,如果有些bit位保持原样,那么是只读的;

step3:host在内存空间开辟4k buffer,映射设备的4k配置空间,并把基地址写入到bar地址。

一个pcie设备可能若干个内部空间需要映射,依次设置bar1 bar2...。 PCIE设备至少有一个4k的配置空间,有些设备包含几个功能(既能当网卡又能当硬盘),那么配置空间也对应几个,即function和配置空间一一对应。

五、TLP路由方式

其实,根据上面记录的知识点,也能了解到,memory TLP header内部包含地址信息,可以通过host内部地址空间找到指定pcie的映射地址,发送TLP到该设备,称之为地址路由。

上图所示,Host发送TLP到Switch,首先匹配switch的配置空间的所有bar地址,如果匹配上了,那么switch解析该TLP,如果不是发给switch的TLP包,查看mem base + mem limt,即查看下游的设备的地址范围,如果在范围内,那么是发给下游设备的,switch此时发挥路由功能,转发该TLP包;否则就拒绝该TLP包。(上游->下游)

从下游到上游的情况:也是看Switch上面的bar地址,如果匹配了,那么就解析;如果是落到了[mem base, mem limit]上,需要拒绝该TLP(一般情况下,两个pcie设备不直接通信,会通过host),除去上面情况,向上发送TLP。

另外,当使用Bus + Device + Func去寻址,用于configuration TLP,主要用于映射设备配置空间到host的内存空间。

注意三个寄存器:Subordinate Bus NumberSecondary Bus NumberPrimary Bus Number

 

 首先基于ID路由,如果RC发送TLP,如果此Switch的Bus + Device + Func与TLP上面信息匹配,那么就是发送给该Switch的TLP,如果不是,那么看Bus Number 是否是在Secondary Bus NumberPrimary Bus Number之间,如果是,那么路由转化到下游设备。

还有一种路由方式是隐式路由,即RC发送TLP后,如果是广播TLP(TLP类型在header上标记),那么就转发,如果是终结message,那么收到此TLP,就接收于此,不再转发。上游到下游还是下游到上游,规则一样。

六、数据链路层

1 保证TLP包的数据一致性:握手协议ACK NAK、retry重传;

2 DLLP包来实现流量控制和电源管理;

 DLLP存在数据链路层,上层事务层感知不到。TLP包包含地址,可以跨越多个设备进行通信,但是DLLP是端-端通信,限制两个设备之间通信。

DLLP类型:
用以确保 TLP 传输 完整性的 DLLP ACK/NAK
流控相关的 DLLP
源管理相关的 DLLP
厂家自定 DLLP;

ACK/NAK DLLP的流程如下:

 

 

 七、物理层

 1 物理层使用串行总线,差分信号;

 2 data均分每个lane,编解码;

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

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

相关文章

vue3+echarts:echarts地图打点显示的样式

colorStops是打点的颜色和呼吸灯、label为show是打点是否显示数据、rich里cnNum是自定义的过滤模板用来改写显示数据的样式 series: [{type: "effectScatter",coordinateSystem: "geo",rippleEffect: {brushType: "stroke",},showEffectOn: &quo…

Qt扫盲-QAssisant 集成其他qch帮助文档

QAssisant 集成其他qch帮助文档 一、概述二、Cmake qch例子1. 下载 Cmake.qch2. 添加qch1. 直接放置于Qt 帮助的目录下2. 在 QAssisant中添加 一、概述 QAssisant是一个很好的帮助文档,他提供了供我们在外部添加新的 qch帮助文档的功能接口,一般有两中添…

Vue3从入门到实战:路由的query和params参数

在Vue 3中,我们可以通过路由的查询参数来传递数据。这意味着我们可以在不同的页面之间传递一些信息,以便页面可以根据这些信息来显示不同的内容或执行不同的操作。 查询参数的使用方式类似于在URL中添加附加信息,以便页面之间可以根据这些信息…

计算机网络-TCP/IP 网络模型

TCP/IP网络模型各层的详细描述: 应用层:应用层为应用程序提供数据传输的服务,负责各种不同应用之间的协议。主要协议包括: HTTP:超文本传输协议,用于从web服务器传输超文本到本地浏览器的传送协议。FTP&…

【Redis基础篇】详细讲解Redis

这篇文章让你详细了解Redis的相关知识,有代码讲解以及图片剖析,让你更轻松掌握 制作不易,感觉不错,请点赞收藏哟 !!! 目录 1 redis基础 1.1 定义 1.2 SQL和NOSQL不同点 1.3 特征 1.4 Redis…

Firefox 关键词高亮插件的简单实现

目录 1、配置 manifest.json 文件 2、编写侧边栏结构 3、查找关键词并高亮的方法 3-1) 如果直接使用 innerHTML 进行替换 4、清除关键词高亮 5、页面脚本代码 6、参考 1、配置 manifest.json 文件 {"manifest_version": 2,"name": &quo…

【芯片验证】通关寄存器与ral_model —— 寄存器生成流程中加入backdoor后门配置

前言 【芯片验证】通关寄存器与ral_model —— backdoor后门访问实操测试-CSDN博客 上一篇文章中,我们通过在环境中配置后门路径的方式来实现了寄存器的后门访问,但是在实际应用中,无论寄存器RTL文件、例化还是寄存器模型大概率都是工具生成的,比如在本专栏中实现的gen_r…

Day57:WEB攻防-SSRF服务端请求Gopher伪协议无回显利用黑白盒挖掘业务功能点

目录 SSRF-原理&挖掘&利用&修复 SSRF无回显解决办法 SSRF漏洞挖掘 SSRF协议利用 http:// (常用) file:/// (常用) dict:// (常用) sftp:// ldap:// tftp:// gopher:// (…

vue 内嵌第三方网页

需要将另一个系统嵌套到当前网页中 一、frame 方法一就是通过html的标签 iframe 实现网页中嵌入其他网站 标签属性 属性含义src嵌套的网页地址width设置嵌套网页的宽度,单位为像素height设置嵌套网页的高度,单位为像素frameborder控制嵌套的网页是否…

高性价比的挂耳式耳机哪个好用?五大高口碑品牌深度测评严选!

入耳式耳机虽然普及度极高,但其缺点也不容忽视。首先,长时间佩戴可能导致耳朵不适,甚至影响听力健康。其次,入耳式耳机往往因为隔音效果过好,导致用户与周围环境脱节,失去了一定的生活便利性。相比之下&…

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换 前言代码实现思路实验结果 前言 Computed Tomography(CT,计算机断层成像)技术作为如今医学中重要的辅助诊断手段,也是医学图像研究的重要主题。如今,随…

2024年第三期丨全国高校大数据与人工智能师资研修班邀请函

2024年第三期 杭州线下班 数据采集与机器学习实战(Python) 线上班 八大专题 大模型技术与应用实战 数据采集与处理实战(Python&八爪鱼) 大数据分析与机器学习实战(Python) 商务数据分析实战&…

GridLayoutManager 中的一些坑

前言 如果GridLayoutManager使用item的布局都是wrap_cotent 那么会在布局更改时会出现一些出人意料的情况。&#xff08;本文完全不具备可读性和说教性&#xff0c;仅为博主方便查找问题&#xff09; 布局item: <!--layout_item.xml--> <?xml version"1.0&qu…

arm交叉编译器工具

下载地址&#xff1a; Builds & Downloads | Linaro 进入首页后&#xff0c;点击" GNU Toolchain Integration Builds" 有以下版本&#xff1a; 根据自己的选择下载对应的版本&#xff0c;本例选择14.0-2023.06-1 根据板端对应的版本选择相应的下载 比如下载3…

来个自定义的电子木鱼吧

<!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>自定义木鱼</title> </head> <body style"background-…

R语言中的常用数据结构

目录 R对象的基本类型 R对象的属性 R的数据结构 向量 矩阵 数组 列表 因子 缺失值NA 数据框 R的数据结构总结 R语言可以进行探索性数据分析&#xff0c;统计推断&#xff0c;回归分析&#xff0c;机器学习&#xff0c;数据产品开发 R对象的基本类型 R语言对象有五…

运筹学基础(三):求解整数规划的切平面法(cutting plane method)

文章目录 算法思想一个例子参考文档 算法思想 先将整数规划问题松弛为线性规划问题&#xff0c;然后割掉线性规划问题可行域的一部分&#xff08;只包含非整数解&#xff09;&#xff0c;使得线性规划问题的最优解在原整数规划问题的可行域某顶点上取得。 因此&#xff0c;割平…

内存管理是如何影响系统的性能的

大家好&#xff0c;今天给大家介绍内存管理是如何影响系统的性能的&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 内存管理对系统性能的影响至关重要&#xff0c;主要体现在以下…

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近&#xff08;2024年3月29日&#xff09;&#xff0c;号称比Python快6.8万倍的Mojo编程语言开源啦&#xff01;6.8万倍&#xff1f;你敢相信这个数字是真的吗&#xff1f;不过&#xff0c;就连Mojo官网都把这个结果贴了出来&#xff08;见下图&#xff09;&#xff0c;这就很…

瀚海贫者福,铜子恣意游

上学时打饭追求性价比的习惯一直不改&#xff0c;半个大鱼头三块钱&#xff0c;一份豆腐一块钱&#xff0c;还有一个红烧茄子2块5&#xff0c;再加三毛钱的饭&#xff0c;共6块8毛钱&#xff0c;早晚餐也会有这类性价比高又营养的选择&#xff0c;科大食堂现在越来越人性化&…