PCIE软件基础知识

什么是PCIE

PCIe,全称 Peripheral Component Interconnect Express,是一种高速串行计算机扩展总线标准,用于连接计算机内部的硬件组件,如显卡、存储设备、网络适配器等。PCIe是一种点对点的双向通信标准,这意味着它在发送和接收方向上都提供专用的信道,与传统的PCI总线相比,PCIe提供了更高的带宽和更低的延迟。

PCIE设备长什么样

比如这是一张虚假的显卡

虽然上图内容是假的, 但还是很形象的.

带宽

PCI Express (PCIe) 是一种高速串行计算机扩展总线标准,用于连接主板上的各种硬件组件,如显卡、存储设备和网络适配器等。PCIe带宽主要由以下几个因素决定:

  1. 版本
  • PCIe 1.0:最初版本,每个通道的原始数据传输速率为2.5 GT/sGiga Transfers per second),考虑到8b/10b编码的效率,实际数据传输速率为250 MB/s

  • PCIe 2.0:将每个通道的原始数据传输速率翻倍至5.0 GT/s,实际数据传输速率为500 MB/s

  • PCIe 3.0:再次将每个通道的原始数据传输速率翻倍至8.0 GT/s,实际数据传输速率为1 GB/s

  • PCIe 4.0:继续将每个通道的原始数据传输速率翻倍至16.0 GT/s,实际数据传输速率为2 GB/s

  • PCIe 5.0:每个通道的原始数据传输速率提升至32.0 GT/s,实际数据传输速率为4 GB/s

  • 通道数lane count):

  • PCIe插槽有不同的通道数,表示为x1x2x4x8x16等。通道数越多,带宽越高。

  • 例如,一个PCIe 3.0 x16插槽的总带宽为16 × 1 GB/s = 16 GB/s(双向,即上行和下行总和),单向带宽为8 GB/s

  • 方向性

  • PCIe带宽通常是双向的,这意味着数据可以同时在两个方向上传输,增加了一倍的有效带宽。

PCIE链路状态

包括detect, polling, configuration等, 大致了解下先. 在固件下需要做PCIE设备的链接, 就是从detect状态切换至L0状态.

PCIE总线的组织结构

图中与 PCI 总线相关的模块包括: HOST 主桥、 PCI 总线、 PCI 桥和 PCI 设备。在 PCI 总线中有三类设备: PCI Agent 设备和桥设备。如PCIE的网卡, 显卡, RAID卡等, 均属于PCIEAgent 设备. 而其插槽, 就可以认为是一个PCIE桥设备. 插槽通常如下图:

Type0和Type1

PCI 总线定义了两类配置请求, 一类是 Type 00h 配置请求, 另一类是 Type 01h 配置请求。 PCI 总线使用这些配置请求访问 PCI 总线树上的设备配置空间, 包括 PCI 桥和 PCI Agent设备的配置空间。

其中 HOST 主桥或者 PCI 桥使用 Type 00h 配置请求, 访问与 HOST 主桥或者 PCI 桥直接相连的 PCI Agent 设备或者 PCI 桥; 而 HOST 主桥或者 PCI 桥使用 Type 01h 配置请求, 需要至少穿越一个 PCI 桥, 访问没有与其直接相连的 PCI Agent 设备或者 PCI 桥。如下图所示, HOST 主桥可以使用 Type 00h 配置请求访问 PCI 设备 01, 而使用 Type 01h 配置请求通过 PCI12 或者 3 转换为 Type 00h 配置请求之后, 访问 PCI 总线树上的 PCI 设备 1121223132

配置空间

共同点

Pci Agent 设备配置空间

Pci 桥设备配置空间

其中相应寄存器含义可结合PCIE手册查看其详细含义.

上面说的配置空间通常只描述地址范围为 0x000x3F的寄存器, 这 64 个字节是所有 PCI 设备必须支持的。 事实上,许多 PCI 设备也仅支持这 64 个配置寄存器。

此外 PCI / PCI⁃XPCIe 设备还扩展了 0x40~0xFF 这段配置空间, 也属于标准配置空间, 叫做能力寄存器, 即PCI Express Capability. 在这段空间主要存放一些与 MSI 或者 MSI⁃X 中断机制和电源管理相关的 Capability 结构。

身为软件开发人员, 要了解基本的配置空间中的寄存器含义, 比如Vendor ID指厂商, Class Code指设备类型等. 软件开发时一定会根据相应的设备类型或厂商信息做适配.

Capabilities

Capabilities其实就是一个单向链表. 0x34寄存器中的值是第一个capability在配置空间中的偏移, 如下图, 先0xA4处是第一个capability, 0x5C是第二个capability. 以此类推, 直至找到0x10(PCIE能力标识)或一个都没找到后结束.

每个Capability的结构如下图:

其中Capability ID表明此Capability的类型. 相关类型可参考如下代码:

/* Capability lists */#define PCI_CAP_LIST_ID     0   /* Capability ID */
#define  PCI_CAP_ID_PM      0x01    /* Power Management */
#define  PCI_CAP_ID_AGP     0x02    /* Accelerated Graphics Port */
#define  PCI_CAP_ID_VPD     0x03    /* Vital Product Data */
#define  PCI_CAP_ID_SLOTID  0x04    /* Slot Identification */
#define  PCI_CAP_ID_MSI     0x05    /* Message Signalled Interrupts */
#define  PCI_CAP_ID_CHSWP   0x06    /* CompactPCI HotSwap */
#define  PCI_CAP_ID_PCIX    0x07    /* PCI-X */
#define  PCI_CAP_ID_HT      0x08    /* HyperTransport */
#define  PCI_CAP_ID_VNDR    0x09    /* Vendor-Specific */
#define  PCI_CAP_ID_DBG     0x0A    /* Debug port */
#define  PCI_CAP_ID_CCRC    0x0B    /* CompactPCI Central Resource Control */
#define  PCI_CAP_ID_SHPC    0x0C    /* PCI Standard Hot-Plug Controller */
#define  PCI_CAP_ID_SSVID   0x0D    /* Bridge subsystem vendor/device ID */
#define  PCI_CAP_ID_AGP3    0x0E    /* AGP Target PCI-PCI bridge */
#define  PCI_CAP_ID_SECDEV  0x0F    /* Secure Device */                      
#define  PCI_CAP_ID_EXP     0x10    /* PCI Express */
#define  PCI_CAP_ID_MSIX    0x11    /* MSI-X */
#define  PCI_CAP_ID_SATA    0x12    /* SATA Data/Index Conf. */
#define  PCI_CAP_ID_AF      0x13    /* PCI Advanced Features */
#define  PCI_CAP_ID_EA      0x14    /* PCI Enhanced Allocation */
#define  PCI_CAP_ID_MAX     PCI_CAP_ID_EA
#define PCI_CAP_LIST_NEXT   1   /* Next capability in the list */
#define PCI_CAP_FLAGS       2   /* Capability defined flags (16 bits) */
#define PCI_CAP_SIZEOF      4

比较常用的是PCI_CAP_ID_EXP, 表明其为PCIECapability, 还有MSI等中断相关的Capability.

扩展配置空间

Extended Capabilities

0x100开始到0x1000的范围则是PCIE的扩展配置空间. 如下图

和标准的Capability类似, 其也是一个单向链表, 不过是从0x100处开始是第一个. 直到Next Capability Offset0时结束.

其具体结构如下:

其中PCI Express Extended Capability ID表明此扩展Capability的类型. 相关类型可参考如下代码:

#define PCI_EXT_CAP_ID_ERR  0x01    /* Advanced Error Reporting */              
#define PCI_EXT_CAP_ID_VC   0x02    /* Virtual Channel Capability */            
#define PCI_EXT_CAP_ID_DSN  0x03    /* Device Serial Number */                  
#define PCI_EXT_CAP_ID_PWR  0x04    /* Power Budgeting */                       
#define PCI_EXT_CAP_ID_RCLD 0x05    /* Root Complex Link Declaration */         
#define PCI_EXT_CAP_ID_RCILC    0x06    /* Root Complex Internal Link Control */
#define PCI_EXT_CAP_ID_RCEC 0x07    /* Root Complex Event Collector */          
#define PCI_EXT_CAP_ID_MFVC 0x08    /* Multi-Function VC Capability */          
#define PCI_EXT_CAP_ID_VC9  0x09    /* same as _VC */                           
#define PCI_EXT_CAP_ID_RCRB 0x0A    /* Root Complex RB? */                      
#define PCI_EXT_CAP_ID_VNDR 0x0B    /* Vendor-Specific */                       
#define PCI_EXT_CAP_ID_CAC  0x0C    /* Config Access - obsolete */              
#define PCI_EXT_CAP_ID_ACS  0x0D    /* Access Control Services */               
#define PCI_EXT_CAP_ID_ARI  0x0E    /* Alternate Routing ID */                  
#define PCI_EXT_CAP_ID_ATS  0x0F    /* Address Translation Services */          
#define PCI_EXT_CAP_ID_SRIOV    0x10    /* Single Root I/O Virtualization */    
#define PCI_EXT_CAP_ID_MRIOV    0x11    /* Multi Root I/O Virtualization */     
#define PCI_EXT_CAP_ID_MCAST    0x12    /* Multicast */                         
#define PCI_EXT_CAP_ID_PRI  0x13    /* Page Request Interface */                
#define PCI_EXT_CAP_ID_AMD_XXX  0x14    /* Reserved for AMD */                  
#define PCI_EXT_CAP_ID_REBAR    0x15    /* Resizable BAR */                     
#define PCI_EXT_CAP_ID_DPA  0x16    /* Dynamic Power Allocation */              
#define PCI_EXT_CAP_ID_TPH  0x17    /* TPH Requester */                         
#define PCI_EXT_CAP_ID_LTR  0x18    /* Latency Tolerance Reporting */           
#define PCI_EXT_CAP_ID_SECPCI   0x19    /* Secondary PCIe Capability */         
#define PCI_EXT_CAP_ID_PMUX 0x1A    /* Protocol Multiplexing */                 
#define PCI_EXT_CAP_ID_PASID    0x1B    /* Process Address Space ID */          
#define PCI_EXT_CAP_ID_DPC  0x1D    /* Downstream Port Containment */           
#define PCI_EXT_CAP_ID_L1SS 0x1E    /* L1 PM Substates */                       
#define PCI_EXT_CAP_ID_PTM  0x1F    /* Precision Time Measurement */            
#define PCI_EXT_CAP_ID_MAX  PCI_EXT_CAP_ID_PTM

设备自己的特性配置

PCI的配置空间中, 有若干个寄存器叫做Base Address Registers, 简称BAR, 这里通常是设备本身的相关配置所在的位置.

BAR

其结构如下:

向里面写全1后再读可以获得其空间大小哦

Option Rom

也就是Pci Agent 设备配置空间中有的Expansion ROM Base Address, 是设备自身的boot code, 用作自身初始化, 善于使用有奇效.(倒也没必要特别关注)

参考文献

  1. PCI Express® Base Specification Revision 5.0 Version 1.0
  2. [内核源码](GitHub - loongson-community/linux-loongnix: Source from pkg.loongnix.cn)
  3. 《PCI Express 体系结构导读》
  4. 通义千问
  5. [豆包AI](豆包 - 你的 AI 朋友)

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

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

相关文章

微信小程序canvas 使用案例(一)

一、cavans 对象获取、上线文创建 1.wxml <!-- canvas.wxml --><canvas type"2d" id"myCanvas"></canvas> 2.js /*** 生命周期函数--监听页面加载*/onLoad(options) {const query wx.createSelectorQuery()query.select(#myCanvas).f…

分离式网络变压器的集成化设计替代传统网络变压器(网络隔离滤波器)尝试

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是应用了分离式网络变压器设计的的新型网络变压器&#xff08;网络隔离变压器&#xff09; 今天我们一起来看这款新型网络变压器&#xff0c;它就是应用分离式网络变压器集成到电路板上&#xff0c;加上外…

CAS乐观锁原理

1、什么是CAS&#xff1f; compare and swap也就是比较和交换&#xff0c;他是一条CPU的并发原语。 他在替换内存的某个位置的值时&#xff0c;首先查看内存中的值与预期值是否一致&#xff0c;如果一致&#xff0c;执行替换操作。 这个操作是一个原子性操作。 Java中基于Un…

昇思学习打卡-21-生成式/Diffusion扩散模型

文章目录 Diffusion扩散模型介绍模型推理结果 Diffusion扩散模型介绍 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;除了本文介绍的离散时间视角外&#xff0c;还有连续时间视角、概率分布转换视角、马尔可夫链视角、能量函数视角、数据增强…

虚拟机迁移报错:虚拟机版本与主机“x.x.x.x”的版本不兼容

1.虚拟机在VCenter上从一个ESXi迁移到另一个ESXi上时报错&#xff1a;虚拟机版本与主机“x.x.x.x”的版本不兼容。 2.例如从10.0.128.13的ESXi上迁移到10.0.128.11的ESXi上。点击10.0.128.10上的任意一台虚拟机&#xff0c;查看虚拟机版本。 3.确认要迁移的虚拟机磁盘所在位…

操作系统---死锁相关

目录 一. 基础概念死锁的定义死锁与饥饿死锁产生原因死锁产生的必要条件资源分配圈&#xff1a;循环等待 VS 死锁 死锁处理策略 二. 死锁预防破坏互斥条件破坏不可剥夺条件破坏请求并保持条件破坏循环等待条件 三. 死锁的避免系统安全状态银行家算法 四. 死锁检测和解除死锁检测…

Mysql注意事项(一)

Mysql注意事项&#xff08;一&#xff09; 最近回顾了一下MySQL&#xff0c;发现了一些MySQL需要注意的事项&#xff0c;同时也作为学习笔记&#xff0c;记录下来。–2020年05月13日 1、通配符* 检索所有的列。 不建议使用 通常&#xff0c;除非你确定需要表中的每个列&am…

微软研发致胜策略 06:学无止境

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1994 年发布。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Debugging the Development Process》&#xff0c;这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…

【运维】软件运维方案(2024word完整版)

1. 文档介绍 2. 人员与责任 3. 运维过程内容 4. 运维资源 5. 运维服务规划保障 6. 事件处置 7. 质量改进 8. 运维边界及内容 获取方式&#xff1a; 本文末个人名片直接获取。

2024年技校大数据实验室建设及大数据实训平台整体解决方案

随着信息技术的迅猛发展&#xff0c;大数据已成为推动产业升级和社会进步的重要力量。为适应市场需求&#xff0c;培养高素质的大数据技术人才&#xff0c;技校作为职业教育的重要阵地&#xff0c;亟需加强大数据实验室的建设与实训平台的打造。本方案旨在提出一套全面、可行的…

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级&#xff1a;智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣&#xff0c;但有时也会因为一些小事情而变得复杂。比如&#xff0c;忘记带钥匙或者需要频繁地给室友开门。随着科技的发展&#xff0c;智能设备逐渐走进我们的生活&#xff0c;为日常带来便…

土耳其媒体发稿深化项目投放战略-脱颖而出

土耳其媒体发稿深化项目投放战略-脱颖而出 一、土耳其媒体的发展概况 土耳其拥有丰富的媒体资源&#xff0c;其中包括许多知名的新闻机构和周刊。随着互联网的普及和信息传播方式的变革&#xff0c;土耳其媒体不断调整发展策略&#xff0c;通过深化项目投放和多元化传播&…

代码随想录——一和零(Leetcode474)

题目链接 0-1背包 class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题m&#xff0c;n为背包两个维度// dp[i][j]:最多右i个0和j个1的strs的最大子集大小int[][] dp new int[m 1][n 1];// 遍历strs中字符串for(String str : strs){int num0 …

JESD204B学习与仿真

平台&#xff1a;vivado2018.3 芯片&#xff1a;xcku115-flva1517-2-i 场景&#xff1a;在高速ADC和DAC芯片中&#xff0c;有使用源同步的时钟和数据同步传输的方式&#xff0c;但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据&#xff0c;设计人员不需要了解…

从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统

本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 01 准备阶段 1 模型结构 目前主要有三种模型架构&#xff0c;基于Transformer解码器&#xff0c;基于General Language Model&a…

【Python系列】Excel 文件到文本文件的转换

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深入浅出理解 C 语言中的 qsort 函数

目录 引言 一、什么是qsort 二、函数原型 1.qsort函数 2.比较函数 三、qsort函数使用示例 1.使用qsort排序整形数据 2.使用qsort排序结构数据 总结 引言 在编程中&#xff0c;排序是一个常见且重要的操作。C 语言标准库提供了一系列排序函数&#xff0c;其中 qsort 函…

【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码+文档 寒暑假作业

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】在线教学平台MySQL springboot vue HTML maven小组设计项目源代码文档 寒暑假作业 2项目介绍 系统功能&#xff1a; 在线教学平台包括管理员、用户、教师三种角色。 管理员功能包括个人中心模块用于修改个…

BioVendor:hsa-miR-21-5p miREIA kit

hsa-miR-21-5p是最具代表性的miRNA生物标志物。 hsa-miR-21-5p作为典型的onco-miRNA&#xff0c;它能够调节多种癌症相关的靶基因&#xff0c;如脑癌&#xff0c;肺癌&#xff0c;结肠直肠癌&#xff0c;胰腺癌&#xff0c;乳腺癌&#xff0c;胃癌&#xff0c;食管癌和肝细胞癌…

【自动驾驶汽车通讯协议】SPI通讯:深入理解与应用

文章目录 0. 前言1. 工作原理2. 模式与配置2.1 CPOL (Clock Polarity)2.2 CPHA (Clock Phase)2.3 组合模式 3. 特性与优势4. 在自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见…