MindShare PCIE 3.0 笔记-第一二章

MindShare 官网,地址如下:
MindShare

Chapter 1:PCIE 背景介绍 - PCI 总线模型

1. 以 PCI 总线作为外设总线的 SOC 芯片架构

下图展示了一个以 PCI 总线作为外设总线的 SOC 芯片架构(PCI 总线类似 AXI 下的 AHB?):
在这里插入图片描述

由上图可知:PCI 作为芯片内部的外设总线,那么处理器内核的地址指令与数据指令(寄存器读写)可以方便的转换为 PCI 总线数据,与各外设 IP 核进行通信

进一步扩展:芯片外部的 pci 总线上的外设,也可以通过地址指令和数据指令(寄存器读写)访问

North Bridge: 北桥,连接处理器与外设总线(类似 AXI?龙芯的处理器上似乎也有)。

South Bridge: 南桥,连接 PCI 与系统外设(类似 APB?)。

2. functions 与 PCI device

每一个 pci 设备最多包含 8 个 functions, 每一个功能都有一个编号:[0:7].

3. PCI device 与 PCI bus

PCI 总线最多可挂载 32 个设备,由于电气特性,实际只会更少。 33MHz 频率时,最多能挂载 10-12 个设备.

4. PCI 总线与 PCI 架构

一个 PCI 架构最多允许挂载 256 条 PCI 总线

5. PCI 地址空间映射

PCI 架构支持 3 种地址空间:

  1. mem 空间:包含 32/64 位 mem;
  2. I/O 空间:外设寄存器区域?
  3. configuration: 配置空间

PCI 设备的每一个 function 都需要 256 字节的配置空间。

那么在任一 PCI 架构中,最多需要 256 * 8(功能)* 32(设备) * 256(总线) = 16MB 配置空间。

因为每一个 PCI 架构最多支持 256 条 PCI 总线,每条总线最多支持 32 个设备,每个设备最多支持 8 个 functions, 每个 function 需要 256 字节配置空间。

6. PCI function 配置空间 header。

每一个 function 需要 256 字节配置空间,配置空间的前 64 字节包含一个称为 Header 的标准结构。剩余的 192 字节支持可选的功能。

存在两种类型的 Header:

  1. bridge 类 Header;
  2. device 类 Header;

7. bridge 类 Header(Type 1 Header)

位域 Header Type = 1, 表示 bridge 类 Header.
在这里插入图片描述

8. device 类 Header(Type 0 Header)

位域 Header Type = 0, 表示device 类 Header.

9. pci 驱动首先需要做的事就是查找 function 的 Header,并判断 Header 类。

这一步称做枚举。(通过访问配置空间完成.)

在这里插入图片描述

10. PCI-X 与 PCI 只有硬件上的区别

PCI-x 频率更高,带宽更大。

Chapter 2: PCIe 架构概述

1. PCIE 是由 PCI 并行总线发展而来的串行总线

pcie 是使用差分线传输的串行全双工总线。

2. PCIE 驱动与 PCI 驱动完全兼容

因为 PCIE 使用与 PCI 一样的配置 Header,所以可以保证软件的兼容性。

在这里插入图片描述

3. PCIE 运行在更高的频率下

与 PCI 不同,由于不需要考虑高频并行总线下的信令偏移问题,PCIE 总线可以运行在更高的时钟频率下。

PCIE 1.0 运行在 2.5GT/s 频率下。

PCIE 2.0 运行在 5 GT/s 频率下;

PCIE 3.0 运行在 8 GT/s 频率下;

PCIe 1.0/2.0 使用 8b/10b 编码。

PCIe 3.0 使用 128b/130b 编码。

PCIE 链路带宽如下图:
在这里插入图片描述

不同版本 PCIE 带宽计算方法如下:

PCIE 1.0 Bandwidth = (2.5Gb/s * 2) / 10 bits per symbol = 0.5GB/s

PCIE 2.0 Bandwidth = (5Gb/s * 2) / 10 bits per symbol = 1.0GB/s

PCIE 3.0 Bandwidth = (8Gb/s * 2) / 8 bits per symbol = 2.0GB/s

4. PCIE 不需要公共时钟

PCIE 使用源同步模型,也就是由数据发送方提供时钟给接收方,发送方会将时钟信号编码进差分数据中,接收方通过 PLL 对比、锁频来确定时钟.

5. PCIE 使用基于包的数据传输协议

物理底层使用数据包的形式进行数据交换

6. PCIE 链路可以使用多个 lane

两个 PCIE 设备之间的链路, 称为 link. link 可以会使用多个通道, 称为 lane.

比如 pcie x1, x2, x4, x8, x16, x32

7. PCIE link 必须是点对点的连接

PCIE 需要使用 switch/bridge 来建立更灵活的树形拓扑结构

那么两个 PCIE 设备之间的每一个点对点的连接, 单独占用一条总线?

8. CPU 使用 Root Complex 与外部 PCIE 设备或总线连接

CPU 与 PCIE 总线之间也许包含几个额外的组件(处理器接口, DRAM 接口或其他芯片), 这些额外组件统称为 Root Complex.

Root Complex 代表 CPU 与 PCIE 树形拓扑结构中的剩余设备通信.

Root Complex 内部存在一个 Host-PCI Bridge 作为 PCIE 0 号虚拟总线, 并存在额外的 PCIE bridges 用于创建新的总线.

在这里插入图片描述

9. Switch 与 Bridge

Switch 和 Bridge 感觉没啥区别. 都可以拓展 PCIE 总线,与 Root Complex 一样,switch 内部也存在一条虚拟总线,以及多个 pcie bridge,用于创建新的总线或下挂设备。.

switch 图解如下(与 Root Complex 差不多):

在这里插入图片描述

10. End point 即是 PCIE 设备

11. PCIE 设备是层级设备

设备分层架构如下:

在这里插入图片描述

从上至下的 layerlayer 描述
Device Core/ PCIe Core软件层, PCIE 设备功能的核心实现, 如果 PCIE 设备由 8 个 functions, 那么每个 functions 都有自己的配置空间, 用于实现设备功能.
Transaction Layer传输层, 负责 TLP 数据包的生成并发送, 接收并解析, 同时实现流控/QOS
Data Link Layer数据链路层, 负责 DLLP 生成并发送/接收并解析, 同时负责错误检测与纠正, 应答.
Paysical Layer物理层, 使用差分信号线实现面向数据包的传输.

物理层发送的数据包概念图如下:

在这里插入图片描述

12. Device Core/ Software Layer

用于实现具体的设备功能,不在 PCIE 规范中定义。

13. Transaction Layer

响应软件层的请求,传输层生成待发送的数据包,也会解析输入的数据包,并上传给软件层;

传输层使用 TLP 进行数据处理,每一个 TLP 属于下列帧类型之一:

  1. Memory
  2. I/O
  3. Configuration
  4. Message

14. Data Link Layer

数据链路层负责链路管理,并完成如下三个功能:

  1. TLP 错误检测;
  2. 流控;
  3. 链路功耗管理;

15. Paysical Layer

物理层是使用数据包的数据交换协议.

16. 一个实例,用于读取 PCIE 设备 memory

首先, 发送方发送 memory read request 给接受方, 图解如下:

在这里插入图片描述

request 发送方:

  1. 软件层将读取的内存地址发送给传输层, 传输层打包为传输层数据包 TLP, 并传递给 DLL
  2. 数据链路层将 TLP 打包为 DLLP, 然后传输给 Physical Layer
  3. 物理层添加自己的包头与包围, 通过差分线路,将数据发送到对端.

request 接收方:

以相反的顺序对数据包进行解析.

之后, 接收方发送 memory read Completion with Data 给发送方, 图解如下:

在这里插入图片描述

数据封包与拆包过程与 request 过程差不多, 不赘述.

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

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

相关文章

虚拟机与物理机的文件共享

之前往虚拟机里传文件都是直接拖拽或者借助工具上传,都不太方便,倘若物理机的文件直接能在虚拟机里读取使用,那多好啊~ 1 虚拟机设置 注意文件夹名称不要中文/空格 2 验证Kali下分享文件夹功能是否启用 vmware-hgfsclient 3 创建挂载目录…

数据库基础知识---------------------------(2)

MYSQL的存储过程 就是数据库 SQL 语言层面的代码封装与重用 语法格式 delimiter 自定义结束符号 create procedure 存储名({in,out,inout} 参数名,数据类型...) begin sql 语句 end 自定义结束符 delimiter; 变量定义 局部变量 用户自定义 仅在begin / end 块中有效 当将查询…

apach httpd多后缀解析漏洞

漏洞详情: httpd支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。 那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。 利用这个特性,可以绕过…

Linux硬连接、软连接和复制的区别

‌硬连接、软连接和复制在Linux系统中的主要区别体现在以下三点: 文件链接的方式文件独立性文件系统的操作上。‌ 一、硬连接 1. 硬连接是通过ln命令创建的,它为文件创建别名,与源文件共享同一inode号码,因此硬连接和源文件实际…

Mint Expedition Season 3 拉开帷幕:登顶高峰的时刻到了

自 7 月 15 日 Mint Expedition 启动以来,Mint,一条专注于 NFT 行业的以太坊 Layer 2,日常交易量和交易额都出现了爆发式增长。这一成功离不开 Mint 社区的合作,包括 Minters、Web3 去中心化应用程序的开发者,以及大量…

02 ETH

以太坊与比特币有什么不同? 以太坊立足比特币创新之上,于 2015 年启动,两者之间有一些显著不同。 比特币就仅仅是比特币;以太坊包括以太币,以太币才是和比特币对等的存在。以太坊是可编程的,所以你可以在…

示例:WPF中Grid显示网格线的几种方式

一、目的:介绍一下WPF中Grid显示网格线的几种方式 二、几种方式 1、重写OnRender绘制网格线(推荐) 效果如下: 实现方式如下: public class LineGrid : Grid{protected override void OnRender(DrawingContext dc){Pen…

SQL 多表联查

目录 1. 内联接(INNER JOIN) 2. 左外联接(LEFT JOIN) 3. 右外联接(RIGHT JOIN) 4. 全外联接(FULL JOIN) 5. 交叉联接(CROSS JOIN) 6. 自联接&#xff0…

MATLAB系列07:稀疏矩阵、单元阵列和结构

MATLAB系列07:稀疏矩阵、单元阵列和结构 7. 稀疏矩阵、单元阵列和结构7.1 稀疏矩阵7.1.1 sparse数据类型7.1.1.1 产生稀疏矩阵7.1.1.2 稀疏矩阵的运算 7.2 单元阵列(cell array)7.2.1 创建单元阵列7.2.1.1 用赋值语句创建单元阵列7.2.1.2 用cell函数创建单元阵列 7.…

Day02Day03

1. 为什么拦截器不会去拦截/admin/login上,是因为在SpringMvc中清除了这种可能。 2.使用自己定义注解,实现AOP(insert ,update) 3.使用update最好使用动态语句,可以使用多次 4.使用阿里云的OSS存储。用common类 5.在写…

【BoF】《Bag of Freebies for Training Object Detection Neural Networks》

arXiv-2019 https://github.com/dmlc/gluon-cv 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Visually Coherent Image Mixup for Object Detection4.2 Classification Head Label Smoothing4.3 Data Preprocessing4.4 Traini…

[Redis][Redis简介]详细讲解

目录 1.认识 Redis2.Redis 特性1.速度快2.基于键值对的数据结构的服务器3.丰富的功能4.简单稳定5.客户端语言多6.高扩展性7.持久化(Persistence)8.主从复制9.⾼可⽤和分布式 3.Redis 使用场景1.数据库2.Cache3.消息队列 4.注意 1.认识 Redis Redis是⼀种基于键值对(Key-Value)…

Why Is Prompt Tuning for Vision-Language Models Robust to Noisy Labels?

文章汇总 本文的作者针对了提示学习的结构设计进行了分析,发现了一些规律: 1)固定的类名令牌为模型的优化提供了强正则化,减少了由噪声样本引起的梯度。 2)从多样化和通用的web数据中学习到的强大的预训练图像文本嵌入为图像分类提供了强大…

ARM总复习

1.计算机的组成 输入设备 输出设备 存储设备 运算器 控制器、总线 2.指令和指令集 2.1 机器指令 机器指令又叫机器码,在运算器内部存在各种运算电路,当处理器从内存中获取一条机器指令,就可以按照指令让运算器内部的指定的运算电路进行运…

百度智能云SSL证书安装指南

第一步:准备SSL证书 在华测ctimall(https://www.ctimall.com/ssl)申请SSL证书后,您会收到一个包含多种证书格式的压缩文件。请解压此文件,并找到Nginx目录中的证书文件,因为这是百度智能云中需要用到的证书…

Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题

文章目录 一、HDFS1、Hadoop的三大组成部分2、本地模式和伪分布模式的区别是什么3、什么是HDFS4、如何单独启动namenode5、hdfs的写入流程6、hdfs的读取流程7、hdfs为什么不能存储小文件8、secondaryNameNode的运行原理9、hadoop集群启动后离开安全模式的条件10、hdfs集群的开机…

九章云极DataCanvas公司荣获2024年服贸会“科技创新服务示范案例”

9月15日,2024年中国国际服务贸易交易会(服贸会)示范案例交流会暨颁奖典礼在北京国家会议中心举行,九章云极DataCanvas 公司自研的DataCanvas Alaya NeW智算操作系统凭借卓越的AI创新实力、前瞻性的市场布局以及突破性的技术革新成…

pc端的屏保实现

背景 偶然间,在使用一款google插件的时候,发现它有一个小功能,只要我停留在它的页面不操作10分钟以上,就会自动给我打开一个屏保界面,这样的 目的 这种华而不实的功能,正好适合个人博客,所以…

Prometheus监控k8s环境构建

传统架构中比较流行的监控工具有 Zabbix、Nagios 等,这些监控工具对于 Kubernetes 这类云平台的监控不是很友好,特别是当 Kubernetes 集群中有了成千上万的容器后更是如此,本章节学习下一代的云原生监控平台---Prometheus。 一、基于kuberne…

医学数据分析实训 项目七 集成学习--空气质量指标--天气质量分析和预测

项目七:集成学习 实践目的 理解集成学习算法原理;熟悉并掌握常用集成学习算法的使用方法;熟悉模型性能评估的方法;掌握模型优化的方法。 实践平台 操作系统:Windows7及以上Python版本:3.8.x及以上集成开…