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.mzph.cn/pingmian/54147.shtml

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

相关文章

linux下的日志编写

1、日志初始化创建 2、日志写入 3、日志关闭 log.c #include "log.h"static log_t LOG;//初始化日志文件,在当前目录创建日志文件 int log_init(char *pdirname) {time_t t;struct tm *ptm NULL;char filepath[64] {0};int ret 0;time(&t);ptm …

linux安全软件Hydra使用教程

Hydra 是一个强大的网络登录工具,常用于渗透测试,支持对多种服务和协议(如 SSH、FTP、HTTP 等)进行暴力crack攻击。它可以通过字典攻击来测试用户名和密码的有效性。以下是关于如何使用 Hydra 的基本步骤和示例: 1. 安…

Mapsui:一个 .NET 开源的地图组件库

前言 今天大姚给大家分享一个.NET开源(MIT License)、免费、同时支持多平台框架(MAUI、WPF、Avalonia、Uno、Blazor、WinUI、Eto、.NET Android 和 .NET iOS)地图组件库:Mapsui。 项目源代码 支持的UI框架的NuGet包 创…

车市状态喜人,国内海外“两开花”

文/王俣祺 导语:随着中秋假期告一段落,“金九”也正式过半,整体上这个销售旺季的数据可以说十分喜人,各家车企不是发布新车、改款车就是推出了一系列购车权益,充分刺激了消费者的购车热情。再加上政府政策的鼎力支持&a…

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…

MFC获取网页的html文本

使用 CInternetSession 类和 CHttpFile 类&#xff1b; 在stdafx.h中加入 #include <afxinet.h> &#xff1b; 基本的代码如下&#xff0c; void CMFCApplication3Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码try{CInternetSession session;CH…

Java创建教程!(*  ̄3)(ε ̄ *)

Java 构造函数 Java面向对象设计 - Java构造函数 构造函数是用于在对象创建后立即初始化对象的代码块。 构造函数的结构看起来类似于一个方法。 声明构造函数 构造函数声明的一般语法是 <Modifiers> <Constructor Name>(<parameters list>) throws <…

用户体验不好的网站都有哪些特点?

用户体验不好的网站通常具有一些共同的特点&#xff0c;这些特点会显著影响用户的浏览体验和满意度。下面详细介绍用户体验不好的网站的多个方面&#xff1a; 用户体验不好的网站都有哪些特点&#xff1f; 页面加载时间过长 用户等待时间长&#xff1a;如果一个网站的页面加载…

[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)…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

PyQt5-QCheckBox-开关按钮

效果预览 实现代码 from PyQt5.QtWidgets import QCheckBox, QApplication, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve, pyqtProperty from PyQt5.QtGui import QPainter, QColor, QPen, QFontclass CompactSwitchCheckbox…

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具&#xff0c;为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能&#xff1a;风险规避、价格发现和资产配置。 第一&#xff0c;风险规避功能 1.套期保值&#xff1a;股指期货的风险规避功能主要通过套期保值…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 容器Row(行) & Column(列)RelativeContainer(相对布局容器)marginpaddingSwiper(轮播图)Grid(网格容器)List(列表) 组件Image…

Java入门程序-HelloWorld

Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文&#xff0c;首字母大写&#xff0c;满足驼峰命名法&#xff0c;源代码文件的后缀必须是.java 开发HelloWorld程序 &…

MATLAB十九种作图大全

一、二维曲线图 反应两个变量的因果关系 clear; %清除工作空间的所有变量 clc; %清除命令窗口的内容&#xff0c;对工作环境中的全部变量无任何影响 close all; %关闭所有的Figure窗口 x linspace(1,200,100); %均匀…

进程监控与管理详解

一、进程的定义: 进程process是正在运行的程序,包括: 分配的内存地址空间 安全属性、包括所有权和特权 一个或多个线程 进程状态 进程的环境包括: 本地和全局变量 当前调度上下文…

Mac清理其他文件:释放存储空间的高效指南

每个Mac用户都可能遇到存储空间不足的问题&#xff0c;尤其是当“其他”文件积累到一定体积时。在Mac上&#xff0c;“其他”文件通常包括各种系统文件、缓存、文档以及不被归类为应用程序、照片、电影或音乐的其他类型的文件。这些文件往往不易被注意&#xff0c;但逐渐占用了…

数组学习内容

动态初始化 只给长度&#xff0c;数据类型【】 数组名new 数据类型【数组长度】 内存图

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题&#xff08;160&#xff09; Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…