PCIe 入门 Demo(一):基础知识

news2025/1/9 1:11:10

PCIe 入门 Demo(一):基础知识

主要参考 up主 芯片人阿伟 的教程【针对 RISC-V 架构】

视频介绍:https://www.bilibili.com/video/BV1Xm4y1V757

源码仓库:https://github.com/oldawei/show_me_the_code

本文主要补充一些详细的注释等,加深对 PCIe 的理解

本人初学 PCI/PCIe,本文以 PCIe 为主,部分句子的主语使用了 PCI,不合适的地方欢迎指出!

部分内容可能选取自部分公开的博客,若没有列出的地方请包含,如侵删!

这一节不涉及太多的细节,旨在从宏观上介绍一下,以对 PCI/PCIe 有一个更全面的认识。

PCIe 子系统拓扑结构如下所示:

请添加图片描述

1、BDF

如 PCI 一样,每个 PCIe 功能(Function)的标识在其所在的设备内,以及这个设备所连接的总线内,都是唯一的,其标识符一般被称为 “BDF”。对于任意一个 PCIe 拓扑结构,配置软件负责检测出拓扑中的每个 Bus、Device 和 Function,缩写为 BDF。

2、PCI/PCIe 空间

PCIe 主要有两种地址空间 :

  • 配置空间 - 通过 PCIe ecam 基址访问 PCIe 配置空间
  • memory 空间 - 通过访问 PCIe mmio 基址访问 PCIe memory 空间
3、配置空间

PCI 配置空间 256B,PCIe 配置空间 4KB,PCIe 兼容 PCI,要求前 256B 等效,将这 256B 命名为 PCI-compatible configuration space(PCI兼容配置空间)

在这里插入图片描述

配置空间的前 64B 是配置头部(Header),有两种类型的 Header,分别为 Type 0 和 Type 1。Type 0 Header对于每个 Function 都是必须含有的(除了 Bridge),对于 Bridge Function 来说它使用的是 Type 1 Header。两种类型配置空间的具体内容如下所示:

在这里插入图片描述

4、ECAM

PCI Express 配置支持两种配置空间访问机制

  • PCI-compatible Configuration Access Mechanism(CAM,PCI 兼容配置访问机制)
  • PCI Express Enhanced Configuration Access Mechanism(ECAM,PCI Express 增强型配置访问机制)

ECAM(Enhanced Configuration Access Mechanism)利用一个扁平的存储器映射地址空间(MMIO)来访问 PCIe 设备的配置寄存器。从存储器地址空间到 PCI Express 配置空间地址的映射格式参见下表:

在这里插入图片描述

在探测一个 PCI 设备时,就是按照 bus、device、function 来计算配置空间基地址:

// ECAM 访问,每个 BDF 对应的 base_addr
base_addr = ecam_base_addr + (bus << 20) | (device<< 15) | (func << 12)

每一个 PCIe/PCI 设备可以只有一个功能(Function),即 Fun0。也可以拥有最多 8 个功能,即多功能设备(Multi-Fun)。需要注意的是,每个设备必须要有功能 0(Fun0),其他的 7 个功能(Fun1~Fun7)都是可选的。不管这个 PCI/PCIe 设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应

一个子系统上最多有 256 个 PCI 总线,每个总线最多有 32 个 PCI 设备,每个 PCI 设备最多有 8 个功能,每个功能最多有 256B 的配置地址空间,PCI 系统总的配置空间是 16MB

PCIe 系统中每个功能有4KB的配置空间,总的配置空间为 256MB。

5、PCIe BAR

BAR - Base Address Register, 即基址寄存器

BAR(base address registers)就是为了把设备的内部各种资源映射(芯片内部寄存器或者 DDR)到 IO 空间(IO BAR)或者 memory 空间(memory BAR)。下面这张图很好的体现了这点,软件初始化时可以根据 BAR 寄存器获取该 BAR 需要的空间,然后在 MMIO 空间中分配该大小的地址空间,并实现映射(将分配的区域的地址写入 BAR 寄存器中),参考下图中的紫色区域,随后 CPU 可以通过 MMIO 访问 PCIe 设备中的 ROM/RAM,这部分在后续的示例中也会涉及。

在这里插入图片描述配置好 BAR 之后,就涉及到和具体设备相关的内容

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

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

相关文章

前端JS特效第24集:jquery css3实现瀑布流照片墙特效

jquery css3实现瀑布流照片墙特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>jquerycss3实现瀑…

java中==和equals()的区别探究

目录 一、Object对象 二、 三、String类的equals()方法 四、示例 4.1直接定义两个相同的值比较 4.2直接定义两个值不同的字符串进行比较 4.3直接定义一个字符串和new一个字符串进行比较&#xff08;两者值相同&#xff09; 4.4直接定义一个字符串和new一个字符串进行…

文华财经盘立方期货通鳄鱼指标公式均线交易策略源码

文华财经盘立方期货通鳄鱼指标公式均线交易策略源码&#xff1a; 新建主图幅图类型指标都可以&#xff01; VAR1:(HL)/2; 唇:REF(SMA(VAR1,5,1),3),COLORGREEN; 齿:REF(SMA(VAR1,8,1),5),COLORRED; 颚:REF(SMA(VAR1,13,1),8),COLORBLUE;

Vue3 项目中 svg 图标的封装及使用

安装 npm install vite-plugin-svg-icons -D在 vite.config.ts 中配置插件&#xff1a; import { createSvgIconsPlugin} from vite-plugin-svg-icons; import path from path;plugins: [createSvgIconsPlugin({iconDirs: [path.resolve(process.cwd(), src/assets/icons)],s…

解决win10报“无法加载文件……profile.ps1,因为在此系统上禁止运行脚本”的问题

打开命令行报错 解决方法 使用管理员权限打开PowerShell&#xff1a;WinX, 选择“Windows PowerShell&#xff08;管理员&#xff09;” 输入&#xff1a;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 输入&#xff1a;y确认修改安全策略 &#xff1a;y确认修改安全策略…

CAD、CAE、CAM介绍——定义,概述,历史,相关软件,应用与前景

目录 引出CAD/CAE/CAM计算机辅助设计 Computer-aided design (CAD)1.定义&#xff1a;2.概述3.类别4.科技5.软件&#xff1a; 计算机辅助工程 Computer-Aided Engineer (CAE)1.定义&#xff1a;2.概述3.CAE领域&#xff1a;4.应用与前景 计算机辅助制造 Computer-aided manufac…

Python自动化测试系列[v1.0.0][高效自动化设计]

Python多线程应用于自动化测试 将多线程在测试巧妙地应用&#xff0c;确实会带来很多好处&#xff0c;并且这是充分利用机器资源执行高效率测试很好的方式 # -*- coding: utf-8 -*- import threading from time import ctime import time from selenium import webdriverdef …

百度网盘非会员,享受视频倍速

百度网盘会员过期了&#xff0c;看视频不能倍速很难受&#xff0c;下面就是跨过会员机制&#xff0c;享受倍速的方法。 Edge浏览器 在浏览器设置中找到扩展选项 在扩展中搜索视频速度控制 global speed&#xff0c;安装后即可使用

品牌推广必备:软文案例撰写与文案策划全解析!

做品牌推广&#xff0c; 不仅需要有推广渠道&#xff0c;文案的策划也是必不可少的一部分。文案是属于灵魂的部分。 作为一名手工酸奶品牌的创始人&#xff0c;目前全国也复制了100多家门店&#xff0c;这篇文章&#xff0c;详细和大家拆解&#xff0c;文案创作的要点&#xf…

金融科技赋能:加马智能质检系统引领金融机构迈向高效合规新时代

为了保护消费者合法权益、促进市场稳定健康发展&#xff0c;近年来监管机构相继发布了《银行保险机构消费者权益保护管理办法》、《银行业金融机构销售专区录音录像管理暂行规定》、《保险销售行为管理办法》等多项法律法规&#xff0c;对于银行、保险等金融机构的服务、销售行…

神卓互联共享文件使用教程

#文件共享# 文件共享已成为我们日常生活和工作中不可或缺的一部分。它如同一条无形的纽带&#xff0c;将人们紧密地联系在一起&#xff0c;促进了信息的快速传播和交流。 文件共享的魅力在于其打破了地域和时间的限制。无论我们身处世界的哪个角落&#xff0c;只要有网络连接&a…

我们所熟知的meme梗图也可以用AI生成了,老外都玩坏了。

meme梗图不知道大家看到过嘛&#xff1f;相信你们看见下面的图你就会大叫“卧槽”&#xff0c;原来是这种图&#xff0c;我以前经常狂刷不止&#xff0c;太有趣了。 其实meme是一个网络流行语&#xff0c;可译为模因。在大众非学术范围内也可翻译为我们所熟知的“梗”。其中“表…

4个方法帮助你解决RAR解压文件时提示密码错误问题

在日常工作和学习中&#xff0c;我们经常需要处理各种压缩文件&#xff0c;这些文件有时为了保护内容安全&#xff0c;会被设置密码。然而&#xff0c;在解压这些文件时&#xff0c;如果遇到“密码错误”的提示&#xff0c;可能会让人感到十分棘手。今天&#xff0c;我们就来探…

C++规范

一、VS工具集列表&#xff1a; Visual Studio 2008&#xff1a;v90 Visual Studio 2010&#xff1a;v100 Visual Studio 2012&#xff1a;v110 Visual Studio 2013&#xff1a;v120 Visual Studio 2015&#xff1a;v140 &#xff08;v140_xp&#xff09; Visual Studio 2017&a…

Java-Sql注入以及如何解决

sql脚本注入: 如果sql语句使用字符串拼接&#xff0c;可能会出现字符串的拼接&#xff0c;导致sql注入。 #是会先进行预编译&#xff0c;传进来的参数通过占位符填入到已经完成编译的语句中去。

windows 11 + kali wsl二合一配置步骤与踩坑

windows 11 kali wsl二合一配置步骤与踩坑 在前几天的某市攻防演练中&#xff0c;在攻防前期&#xff0c;我的虚拟机经常无缘无故出现断网、卡顿等现象&#xff0c;但找不出原因。 为了不影响后续的这些天的攻防演练&#xff0c;我选择在一个晚上通宵 在我的windows 11系统上…

鼠标录制工具|键鼠轨迹录制,实现自动办公

利用键鼠录制工具录制固定的鼠标点击、键盘输入等操作&#xff0c;实现自动化执行固定操作&#xff0c;节省时间。鼠标录制功能可以录制多步骤的操作&#xff0c;将录制的动作保存并命名&#xff0c;甚至可以编辑操作速度。下面将演示几种生活中常见的案例&#xff0c;详细讲解…

怎么才能选到好的猫咪主食冻干?公认顶尖优秀主食冻干总结

如今&#xff0c;主食冻干市场纷繁多样&#xff0c;质量水平却大相径庭。部分品牌盲目追求高营养值和利润增长&#xff0c;却忽略了猫咪健康饮食的本质需求&#xff0c;导致市场上充斥着以次充好、虚假标注日期等不法行为。更有甚者&#xff0c;部分产品未经权威第三方检测便匆…

E - Tree and Hamilton Path 2

算出所有路径之和2减去树的直径 #include <bits/stdc.h> using namespace std; typedef long long ll; const int N2e610; ll n,ans; ll e[N],h[N],idx,w[N],ne[N],dis[N]; void add(ll a,ll b,ll c){ e[idx]b,ne[idx]h[a],w[idx]c,h[a]idx; } ll c; void dfs(ll u,…

5款好用公司监控软件分享|管理者必看

当今社会&#xff0c;企业数据安全和员工工作效率成为了管理者不可忽视的重要议题。 选择合适的公司监控软件&#xff0c;不仅有助于提升管理效率&#xff0c;还能有效保障企业信息安全。 下面小编将为您分享五款备受好评的公司监控软件&#xff0c;助力管理者更好地管理企业…