首页 > 其他分享 >PCIE学习(一):PCIE基本知识

PCIE学习(一):PCIE基本知识

时间:2024-05-08 22:47:59浏览次数:28  
标签:PCIe 基本知识 总线 学习 PCIE 地址 PCI 寄存器 设备

PCIE和板卡

点对点的方式连接两个设备。

FPGA中的PCIE享有独立的IO,BANK,因为其配置复杂。

A7系列支持2.0

KU部分支持3.0

KU+部分支持4.0

通过高速BANK可以引出能连接高速设备的IO(GTX和GTH);

在XILINX 7Z035 FGG676中有两个这样的BANK,每个BANK提供四对高速收发器,所以总的来说是8对高速收发器;

我所使用的开发板:

光口两个各用一对;

PCIEX4用了四对;

SATA两个各用了一对;

https://docs.amd.com/v/u/en-US/ug476_7Series_Transceivers

根端口

https://blog.csdn.net/u013253075/article/details/119045277

可见PCIE设备写入设备并不需要直接通过CPU(DMA);

PCIe拓扑特征:图的顶部是一个CPU。这里要说明的一点是,CPU被认为是PCle层次结构的顶层。PCle只允许简单的树结构,这意味着不允许循环或其他复杂的拓扑结构。这样做是为了保持与PCI软件的向后兼容性,PCI软件使用一个简单的配置方案来跟踪拓扑,不支持复杂的环境。为了保持这种兼容性,软件必须能够与以前相同的方式生成配置周期,总线拓扑也必须与以前相同。因此,软件期望找到的所有配置寄存器仍然在那里,并且以它们始终具有的方式运行。

在上图PCIe系统中有几种设备类型,Root Complex、Switch、Bridge、Endpoint等,下面分别介绍其概念。

Root Complex:

简称RC(根端口),CPU和PCle总线之间的接口,可能包含几个组件(处理器接口、DRAM接口等),甚至可能包含几个芯片。RC位于PCI倒立树拓扑的“根”,并代表CPU与系统的其余部分进行通信。但是,规范并没有仔细定义它,而是给出了必需和可选功能的列表。从广义上讲,RC可以理解为系统CPU和PCle拓扑之间的接口,PCle端口在配置空间中被标记为“根端口”。

Bridge:

桥提供了与其他总线(如PCI或PCI- x,甚至是另一个PCle总线)的接口。如图中显示的桥接有时被称为“转发桥接”,它允许旧的PCI或PCIX卡插入新系统。相反的类型或“反向桥接”允许一个新的PCle卡插入一个旧的PCI系统。

Switch:ID和路由

http://www.ssdfans.com/?p=8216

https://www.pcietech.com/186.html/

提供扩展或聚合能力,并允许更多的设备连接到一个PCle端口。它们充当包路由器,根据地址、ID或其他路由信息(隐含路由数据包)识别给定包需要走哪条路径。是一种PCIe转PCIe的桥。

Switch有一个上游端口(靠近RC)和若干个下游端口,每个端口其实是一个Bridge,都是有一个Configuration的,每个Configuration描述了其下面连接设备空间映射的范围,分别由Memory Base和Memory Limit来表示。对上游端口,其Configuration描述的地址范围是它下游所有设备的映射空间范围,而对每个下游端口的Configuration,描述了连接它端口设备的映射空间范围。

ID路由,故名思意,是依靠目标设备的ID来作为目标地址的。即用Bus Number、Device Number和Function Number进行路由寻址。基于ID的路由方式主要用于配置读写请求,以及完成报文。

地址路由:选择地址写入具体的数据;

隐含路由:根据驱动里的要求读取标志以知晓写到具体的哪个设备中;

Endpoint:

网卡,显卡,声卡;可以被主板连接火挂载;支持Type0配置空间;

处于PCIe总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator,类似于PCI总线中的主机)或者终结者(Completers,类似于PCI总线中的从机)。

显然,Endpoint只能接受来自上级拓扑的数据包或者向上级拓扑发送数据包。细分Endpoint类型的话,分为Lagacy PCIe Endpoint和Native PCIe Endpoint,Lagacy PCIe Endpoint是指那些原本准备设计为PCI-X总线接口的设备,但是却被改为PCIe接口的设备。

而Native PCIe Endpoint则是标准的PCIe设备。

其中,Lagacy PCIe Endpoint可以使用一些在Native PCIe Endpoint禁止使用的操作,如IO Space和Locked Request等。

Native PCIe Endpoint则全部通过Memory Map来进行操作,因此,Native PCIe Endpoint也被称为Memory Mapped Devices(MMIO Devices)

配置空间:Type0和Type1

https://blog.csdn.net/yhb1047818384/article/details/106676528

 

PCI标准配置空间分type0和type1两种。type0主要是针对PCI的endpoint设备,type1主要是针对PCI bridge, switch。

如上图所示,type0和type1有一些共同的寄存器描述。
Device ID: 设备ID, 表示该PCI设备的设备号,只读。
Vendor ID: 厂商ID, 表示生产该设备的厂商的编号,只读。
Status: pci设备状态寄存器,用于保存pci设备的状态,如中断状态或运行产生错误时的状态。

Class Code:设备类型(大类),决定使用什么驱动去访问这个设备;设备分类信息, 表示pci设备属于哪一种类别,如网卡,存储卡,显卡等。需要重点关注的一个寄存器,之前定位过一个问题,pci设备资源分配失败,就是因为将class code设置为0, 而那张卡是pcie 网卡, class code应该设置为2。

Revision ID: 设备版本ID, 表示PCI设备的版本号。该寄存器可以被认为是Device ID寄存器的扩展。 只读。
BIST: 可选,用于内部自检。
Header type: PCI设备头类型寄存器,表示该设备时pci EP设备还是PCI 桥设备。PCI配置空间时type0还是type1就是由该寄存器定义。
Lantency Timer: 在PCI总线中,多个设备共享同一条总线带宽,该寄存器用来控制PCI设备占用PCI总线的时间。PCIe设备不需要使用该寄存器,该寄存器的值必须为0。因为PCIe总线的仲裁方法与PCI总线不同,使用的连接方法也与PCI总线不同。
Cache line size: cache缓存大小。对于PCIe设备,该寄存器的值无意义。
Expansion Rom Base Address: 扩展ROM映射基地址寄存器。分配给ROM使用,用于PCI设备在处理器还没有运行操作系统之前,完成基本的初始化设置。
Base Address register: BAR地址寄存器负责PCI设备内部空间的映射。用于计算机与主板的通信。

BAR空间:通过TLP包和BAR交互是慢速交互,用于设置配置信息,而数据交互主要还是DMA

https://blog.csdn.net/u013253075/article/details/119361574

32位:六个BAR空间

64位:三个BAR空间

BAR(Base Address Register)空间是在PCIe设备中的。BAR是一组特殊的寄存器,用于定义设备的内存和I/O地址空间。这些地址是设备和主机系统通信的基础。

当PCIe设备被系统初始化时,主机的操作系统会读取设备的配置空间,其中包括多个BAR字段。这些字段被操作系统用来映射到主机的地址空间中,从而操作系统和CPU可以通过这些映射的地址访问PCIe设备的内存或I/O端口。这使得主机能够读取或写入设备的特定区域,进行数据交换或控制设备操作。

总结来说,BAR空间被定义在PCIe设备中,但是它通过配置过程被映射到上位机的地址空间中,使得上位机可以通过这些映射的地址与设备进行交互。

只要上位机希望往这部分地址范围写入数据的时候都会使用TLP包进行交互。

TLP包:位于传输层事务部分。

总之:BAR地址寄存器负责PCI设备内部空间的映射, 有了这个映射,CPU可以做到对pcie设备空间的访问。

为什么需要BAR?

系统中的每个设备中,对地址空间的大小和访问方式可能有不同的需求,例如,一个设备可能有256字节的内部寄存器/存储,应该可以通过IO地址空间访问,而另一个设备可能有16KB的内部寄存器/存储,应该可以通过基于MMIO的设备访问。哪些地址应该使用哪种方式(IO或Memory)来访问它们的内部位置,这是系统软件(即BIOS和OS内核)的工作。因此设备必须为系统软件提供一种方法来确定设备的地址空间需求。这种需求就是是通过配置空间头部中的Base Address register (BAR)实现的。

一旦系统软件知道设备在地址空间方面的需求,系统软件将分配一个适当类型(IO, NP-MMIO或P-MMIO)的可用地址范围给该设备。

如下图所示,Type 0报头有6个bar可用(每个bar的大小为32位),而Type 1头只有2个bar可用。Type 1报头在所有网桥设备中都可以找到,这意味着每个switch端口都有Type 1报头。Type 0报头在非网桥设备中,比如end point。

DMA传递:

需要操作的基地址+包长度+读写标志 由此组成包发送给下位机(FPGA),

FPGA接收后解析,讲地址,所需长度的数据打包(TLP),传给根端口,根端口将其写入某个位置;

 CPL包:响应读指令包含数据的包。

如果申请的BAR空间过大,将可能注册失败,需要考虑具体的配核驱动。

蓝屏:访问了不该访问的地址。

PCIe 事务简介

物理层~数据链路层~数据层‘

通过解析事务层的包可以实现更底层的操作,以更好地实现应用层。

https://blog.csdn.net/qq_31799983/article/details/104733490

PCIE 事务可以分为4大类:

存储器事务、IO事务、配置事务、消息事务。这些事务可以分成非报告事务(non-posted transaction)和报告事务(posted transaction)。

存储器:DMA

IO:PIO操作,配置寄存器触发某些信号

配置:操作配置空间

信息:传递错误报告,标志信息等

标准PCIE设备要求使用消息中断;

 TLP帧结构:

https://blog.csdn.net/qq_39815222/article/details/121732888

PCIE发展历史

PCIE术语

 

标签:PCIe,基本知识,总线,学习,PCIE,地址,PCI,寄存器,设备
From: https://www.cnblogs.com/VerweileDoch/p/18181069

相关文章

  • 机器学习包keras skiti-learn tensorflow pytorh yolov6 tensorboad seaborn numpy p
    这些是一些常用的Python库和框架,它们在机器学习、深度学习、数据科学和可视化等领域中被广泛使用。下面是每个库的简要介绍以及一个应用示例:Keras:Keras是一个高级神经网络API,可以运行在TensorFlow、MicrosoftCognitiveToolkit(CNTK)或Theano之上。它提供了简单而灵活......
  • QT学习第32天-QMessageBox的使用
     #ifndefWIDGET_H#defineWIDGET_H#include<QWidget>namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:explicitWidget(QWidget*parent=nullptr);~Widget();privateslots:voidon_pushButton_cli......
  • Q学习第31天-QThread
     新建一个类: 在Main头文件中定义全局变量和槽函数: 实现如下:使用QThread将一个文本框的值切换我是单数/我是复数#include"mainwindow.h"#include"ui_mainwindow.h"#include<QDateTime>#include<QThread>#include<QDebug>MainWindow::MainWindow(QWidget*par......
  • Linux学习第四天
    嵌入式Linux学习第四天今天学习I.MX6U启动方式详解。I.MX6U有多种启动方式,可以从SD/EMMC、NANDFlash、QSPIFlash等启动。启动方式选择BOOT的处理过程是发生在I.MX6U芯片上电以后,芯片会根据BOOT_MODE[1:0]的设置来选择BOOT方式。BOOT_MODE[1:0]的值是可以改变的,I.MX6U......
  • 2022年最新的Asp.Net程序员学习路线图
    给大家分享一个微软MVP整理的,2022年最新的Asp.Net程序员学习路线图。这个图的知识点,分为:1、个人必须掌握2、进一步学习3、兴趣4、其他5、可能需要学习。第1、2部分大家必须去掌握起来,其他的内容可以根据工作的需要、兴趣选择。 在Github已经针有人对路线图的每一个知识点......
  • 小组练习:请列出关于创新感受最深的几点启发在学习通提交解答的同时,可以同步发布在团队
    ]小组练习:请列出关于创新感受最深的几点启发在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。我的答案:【第二组】答:1.勇于尝试与接受失败:创新意味着打破常规,尝试新的方法和思路。在这个过程中,失败是不可避免的。然而,正是这些失败,成为了我们......
  • 小组练习 :结合本小组项目写下能想到的所有 SWOT在学习通提交解答的同时,可以同步发布在
    小组练习:结合本小组项目写下能想到的所有SWOT在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为学习心得体会,记录下来。我的答案:【第二组】答:SWOT分析是一种战略规划工具,用于评估一个项目或企业的优势(Strengths)、劣势(Weaknesses)、机会(Opportunities)和威胁(Threat......
  • 计算复杂性学习笔记(TCS笔记)
    感觉最近太摆了,每天很空虚,不愿意搞应试那一套,还是得学点东西。还是准备一边学tcs一边搞搞oi好打icpc,现在水平下滑严重,而且身边没有人在认真搞,要么就是靠高中的底子,要么都是卷GPA卷科研,但其实我不大想卷这玩意,反正感觉来USTC很失败就对了。还是想不通自己为什么这么失败,可能我更适......
  • 深度学习框架火焰图pprof和CUDA Nsys配置指南
    注:如下是在做深度学习框架开发时,用到的火焰图pprof和CUDANsys配置指南,可能对大家有一些帮助,就此分享。一些是基于飞桨的Docker镜像配置的。一、环境&工具配置0.开发机配置#1.构建镜像,记得映射端口,可以多映射几个;记得挂载ssd目录,因为数据都在ssd盘上nvidia-dockerr......
  • 讨论 :银弹真的有用么? 在学习通提交解答的同时,可以同步发布在团队和个人博客上,作为
    银弹在项目管理和团队协作中是一种特殊的工具,其有效性和适用性取决于具体的团队和项目环境。这里是关于银弹的一些讨论点和考虑因素:优点:快速决策:当团队成员之间出现争执时,银弹可以帮助快速做出决策,避免争论持续下去,节省时间和精力。明确权威:银弹赋予特定角色(Dev/Test/PM)决策权,......