【PCIE体系结构五】PCIE配置和地址空间

news2024/12/28 5:25:36

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

参考书籍:

PCI_Express体系结构导读、

深入浅出SSD:固态存储核心技术、原理与实战

目录

概述

EP的配置空间

switch的配置空间


概述

        每个PCIe设备都有这样一段空间,主机软件可以通过读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就称为PCIe的配置空间。不同于每个设备的其他空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。

        PCIE设备的配置空间定义部分从PCI总线继承,PCIE新增了一个扩展配置寄存器空间,PCI配置空间共256字节,PCIE配置空间共4096字节,如下图:

        Capacity这个字段先不讨论,我们先看一下Header,PCI和PCIE的Header定义是一样的,和地址路由相关的信息也在这里。

        这里包括EP(type0)和switch(type1)两种配置空间Header定义:

EP的配置空间

        Device ID和Vender ID:设备ID和供应商ID,这个没什么好说的,只读。

        Command:PCI设备的命令寄存器,初始化时为0,这时的设备只能接收配置请求总线事务,不能接收存储器或IO请求的总线事务。需要软件设置该寄存器后,才能访问该设备的存储器或IO空间。寄存器定义如下图:

        Status:保存PCI设备的状态,如下图:

        Revision ID:设备版本号,只读。

        Class Code:供系统软件识别当前PCIE设备的分类,共24bit,分为三个字节:Base class code(bit23:16将设备分类为显卡、网卡、桥设备等类型)、Sub class code(bit15:8进一步细分类)、interface(bit7:0定义编程接口)。

        Header Type:8bit,只读,定义如下表:

比特位

定义

7

1:表示当前PCI设备是多功能设备

0:表示当前PCI设备是单功能设备

6:0

0:表示该设备使用PCI agent设备(就是endpoint)的配置空间

1:表示该设备使用PCI桥设备(swtich、RC)的配置空间

2:表示该设备使用cardbus桥片的配置空间

        Cache line size:记录Host处理器使用的cache行长度。

        Latency timer:用来控制PCI设备占用PCI总线的时间,PCIE不用,改值必须为0。

        Expansion ROM base address:某些显卡、硬盘、桥片等设备,在处理器还没有运行操作系统之前,就需要完成基本的初始化设置,就是要自己加载一段firmware给自己初始化,初始化完成了才能跟主机对接。Expansion ROM base address字段就是这段固件代码存放的基地址。

        Capabilities pointer:存放capabilities寄存器组的基地址。

        Interrupt line:记录当前PCIE设备使用的中断向量号。

        Interrupt pin:用来保存PCI设备使用的中断引脚,PCI设备有INTA#、INTB#、INTC#、INTD#四个中断引脚,该寄存器为1表示使用INTA#,寄存器为2、3、4依次表示使用INTB#、INTC#、INTD#。PCIE设备没有中断引脚,但是它也可以使用此寄存器,通过INTx中断消息模拟PCI设备的INTA#、INTB#、INTC#、INTD#四个中断信号。

        Base address register:BAR寄存器,这是本节的重点。对Endpoint Configuration(Type 0)提供了最多6个BAR,而对Switch(Type 1)来说只有2个。BAR寄存器保存 PCI设备使用的地址空间的基地址,该基地址保存的是该设备在PCI总线域中的地址。

switch的配置空间

        一个TLP要到达指定EP,必然会有switch或多端口RC(就是PCI桥设备)的路由选路过程(如果是一个RC对接一个EP就不需要什么路由了),而路由信息存储在桥设备的Configuration空间里,因此,很有必要先理解Switch的Configuration空间,就是前面提到的Type1 header:

        有部分字段和EP type0 header一样,这里不赘述。但是PCI桥除了作为PCI设备之外,它还要管理其下连接的其他设备,这些设备同样有配置读写、内存读写、message等总线事务需要处理,所以PCI桥肯定要有一些寄存器来关联到这些设备的总线号、存储器空间,不然当一个访问switch下面EP的TLP报文来到switch时,switch将不知道报文该往哪里转发。下面大致介绍一下桥设备的type1 header相关字段。

        BAR:功能和EP type0 header一样,但是对switch来说,不一定会有私有寄存器,也就不需要使用这两组寄存器设置BAR空间,这种设备就是PCI中的透明桥。

        Primary bus、secondary bus、subordinate bus:这三种bus用张图来重点解释下,它们是ID路由寻址的关键寄存器。以PCI-PCI桥1为目标设备进行介绍。

        Primary bus:表示一个桥设备直接相连的上游Bus Number,就是总线0。注意,下图虽然是PCI的结构图,但是PCIE的类似,swtich内部在逻辑上就是PCI to PCI桥,最上面的HOST主桥,在逻辑上可以等同于RC。

        Secondary bus:表示一个桥设备直接相连的下游Bus Number,就是总线1。

        Subordinate bus:表示这个桥下游最远、总线号最大的Bus Number,就是总线2,因为图中总线1下面只挂了一个桥2,如果再增加一个桥3,桥3下面的总线号为3,则此时Subordinate bus number就是3。

        下面再用一张PCIE结构图说明:

 

        对上图红框中的端口(注意,这个swtich端口就相当于一个PCI桥设备,每个端口都有一个Configuration空间,而不是整个switch共一个Configuration空间)来说,与他直接相连的上游总线号为5,也就是其primary bus number为5,与他直接相连的下游总线号为6,也就是其secondary bus number为6,他下面最远最大的总线号为9,也就是其subordinate bus number为9。

        Secondary status:记录secondary bus的状态。

        Status:记录PCI桥作为PCI设备时使用的状态。

        Secondary latency timer:管理secondary bus的超时机制,即管理PCI桥发向下游的总线事务,另一个寄存器latency timer则是管理PCI桥发向上游的总线事务。

        I/O limit、I/O base:传统PCI设备使用,PCI桥使用这两个寄存器存放其下PCI子树中所有设备使用的I/O地址空间集合的基地址(base)和大小(limit)。

        Memory limit、Memory base:PCI桥使用这两个寄存器存放其下PCI子树中所有设备使用的存储器地址空间集合的基地址(base)和大小(limit)。对上游端口来说,其Configuration描述的地址范围是它下游所有设备的映射空间范围,而对每个下游端口的Configuration,描述了连接它端口设备的映射空间范围。PCI桥规定这个空间的大小至少为1MB。

        Prefetchable Memory Limit、Prefetchable Memory Base:存放这些PCI设备使用的可预取存储器空间的基地址和大小。关于PCI预读机制详情还有待研究。

        I/O Base Upper 16 Bits、I/O Limit Upper 16:如果PCI桥仅支持16位的I/O端口,这组寄存器只读,且其值为0。如果PCI桥支持32位I/O端口,这组寄存器可以提供I/O端口的高16位地址。

        Bridge Control:该寄存器用来管理PCI桥的Secondary Bus,其主要位的描述如下:

        Secondary Bus Reset位,第6位,可读写。当该位为1时,将使用下游总线提供的 RST#信号复位与PCI桥的下游总线连接的PCI设备。通常情况下与PCI桥下游总线连接的PCI设备,其复位信号需要与PCI桥提供的RST#信号连接,而不能与HOST主桥提供的RST#信号连接。

        Primary Discard Timer位,第8位,可读写。PCI桥支持Delayed传送方式,当PCI桥的Primary总线上的主设备使用Delayed方式进行数据传递时,PCI桥使用Retry周期结束Primary总线的Non-Posted数据请求,并将这个Non-Posted数据请求转换为Delayed数据请求,之后主设备需要择时重试相同的Non-Posted数据请求。当该位为1时,表示在Primary Bus上的主设备需要在2^10个时钟周期之内重试这个数据请求,为0时,表示主设备需要在2^15个时钟周期之内重试这个数据请求,否则PCI桥将丢弃Delayed数据请求。

        Secondary Discard Timer位,第9位,可读写。当该位为1时,表示在Secondary Bus上的主设备需要在2^10个时钟周期之内重试这个数据请求,为0时,表示主设备需要在2^15个时钟周期之内重试这个数据请求,如果主设备在规定的时间内没有进行重试时,PCI桥将丢弃Delayed数据请求。具体可参考PCI-to-PCI Bridge Architecture Specification Revision 1.2。

 

 

 

 

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

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

相关文章

【Java版oj】day30最难的问题、因子个数

目录 一、最难的问题 (1)原题再现 (2)问题分析 (3)完整代码 二、因子个数 (1)原题再现 (2)问题分析 (3)完整代码 三、DFS深度优…

Python实现批量图片下载及去重处理

背景 在爬虫应用开发中,常常需要批量下载图片,并对图片进行去重处理。Python 是一种非常流行的编程语言,也是开发爬虫应用的首选,本文将介绍如何使用 Python 下载图片,并对下载的图片进行去重处理。 内容 首先&…

win10彻底永久关闭自动更新【亲测有效】

一、禁用Windows Update服务 1、同时按下键盘 Win R,打开运行对话框,然后输入命令 services.msc ,点击下方的“确定”打开服务,如下图所示。 2、找到 Windows Update 这一项,并双击打开,如图所示。 3、右击…

【行为型模式】责任链模式

文章目录1、简介2、结构3、实现方式3.1、案例引入3.2、结构分析3.3、具体实现4、责任链优缺点5、应用场景1、简介 责任链模式(Chain of Responsibility)是一种行为型设计模式,它允许对象在链上依次处理请求,用户只需要将请求发送到责任链上即可&#xf…

CocosCreator实战篇 | 实现刮刮卡和橡皮擦 | 擦除效果

📢博客主页:https://blog.csdn.net/dxt19980308 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由肩匣与橘编写,首发于CSDN🙉 📢生活依旧是美好而…

【SSM框架】spring的创建与使用

spring的创建与使用Spring项目的创建创建一个maven项目添加Spring依赖添加启动类将bean存储到Spring 中创建bean对象将bean对象存储到Spring容器中从Spring中获取bean创建Spring(上下文)对象从Spring中获取到bean对象使用Bean(非必须)从spring中获取Bean…

奇瑞版Model 3与Model Y登场:正式进军高端纯电

作者 | Amy 编辑 | 德新4月7日,奇瑞在北京举办「新能源之夜」。整场发布会都在传递一个讯息:奇瑞搞新能源,要大搞特搞! 奇瑞在这场发布会上,对新能源的战略、技术、品牌和产品作了全面梳理。其中最引人注目的是&#x…

环信web、uniapp、微信小程序sdk报错详解---注册篇(二、三)

项目场景: 记录对接环信sdk时遇到的一系列问题,总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。 注册篇(二) 注册用户报错400 原因分析: 从console控制台输出及network请求返回入手分析 可以看…

【三十天精通Vue 3】第十一天 Vue 3 过渡和动画详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 过度和动画概述1.1过度和动画的简介二、Vue 3 过度2…

Java 集合框架面试问题集锦

Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题。很好地理解集合框架,可以帮助你理解和利用Java的一些高级特性。下面是面试Java核心技术的一些很实用的问题。 Q:最常见的数据结构有哪些,在哪些场…

telnet远程管理linux主机及Zlib、openssl、openssh升级

目录 一、telnet远程管理主机 1、检查是否安装telnet 2、安装telnet服务 3、测试telnet登录 二、zlib、openssl、openssh升级 1、下载zlib包 2、下载openssl包 3、下载openssh包 4、 编译安装zlib 5、编译安装openssl 6、准备升级openssh环境 ①注意必须使用telne…

LLM 快人一步的秘籍 —— Zilliz Cloud,热门功能详解来啦!

最近,我们发布了可处理十亿级向量数据的 Zilliz Cloud GA 版本,为用户提供开箱即用的向量数据库服务,大大降低了数据库的运维成本。 看过上一篇文章《可处理十亿级向量数据!Zilliz Cloud GA 版本正式发布》的朋友们知道&#xff0…

【SSM】Spring6(十.面向切面编程AOP)

文章目录1.AOP2. AOP的七大术语3. 切点表达式4.使用Spring的AOP4.1 环境准备4.2 基于AspectJ的AOP注解式开发步骤4.3 所有通知类型4.4 切面顺序4.5 通用切点4.6 获取目标方法的方法签名4.7 全注解式开发4.8 基于XML配置的AOP5. 案例:事务处理1.AOP 将与核心业务无关…

Visual Studio Code跳转到CSS定义

Visual Studio Code 快速跳转到 VUE文件 或 CSS文件的定义位置(跳转到class定义,跳转到css定义),插件Css Peek、Vue Peek 对提升开发效率上,事半功倍。 目录 1、跳转到CSS定义 1.1、CSS Peek 1.2、Vue Peek 2、其他…

舌体胖瘦的自动分析-曲线拟合-或许是最简单判断舌形的方案(六)

返回至系列文章导航博客 1 简介 在中医智能舌诊项目中需要舌体胖瘦的自动分析 舌体胖瘦是中医诊断中重要的观察依据,。胖大舌“舌色淡白,舌体胖嫩,比正常舌大而厚,甚至充满口腔”,主脾肾阳虚,气化失常&am…

C++无符号整型与有符号整型变量的运算-不简单

示例分析&#xff1a; #include<iostream> #include <stdio.h>struct Result {char c;char d;unsigned char e; };Result getChar(int x, int y) {Result res;unsigned int a x;(a y > 10) ? (res.c 1) : (res.c 2);res.d a y;res.e a y;return res; …

RHCE第一次作业at和cront两个任务管理程序的区别

1.at 单一执行的例行性工作&#xff1a;仅处理执行一次就结束了 -m 当任务完成之后&#xff0c;即使没有标准输出&#xff0c;将给用户发送邮件 -l atq的别名&#xff0c;可列出目前系统上面的所有该用户的at调度 -d atrm的别名,可以取消一个在at调度中的工作 -v 使用较明显的…

基于html+css的图片展示11

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

信息安全保障人员CISAW认证基础级、专业级通用认证条件

信息安全保障人员认证&#xff08;Certified Information Security Assurance Worker&#xff0c;简称“CISAW”&#xff09;是中国网络安全审查技术与认证中心针对信息安全保障领域不同专业技术方向、应用方向和保障岗位&#xff0c;依据国际标准ISO/IEC 17024《人员认证机构通…

HTTPS-TSL握手

HTTP一般基于TCP协议&#xff0c;而HTTPS就是在这之间加了SSL/TLS协议&#xff0c;那么在TCP三次握手建立TCP连接后&#xff0c;就需要TLS握手建立SSL/TLS连接。 TLS握手-流程 &#xff08;基于RSA算法&#xff09; &#xff08;1&#xff09;首先&#xff0c;客户端向服务器发…