【PCIe】TLP结构与配置空间

在这里插入图片描述

🔥博客主页:PannLZ

文章目录

      • PCIe TLP结构
      • PCIe配置空间和地址空间


PCIe TLP结构

在这里插入图片描述

TLP 主要由3个部分组成: Header 、 数据(可选,取决于具体的TLP 类 型 ) 和 ECRC (End to End CRC, 可选)。TLP 都始于发送端的事务层,终于接收端的事务层。

每个 TLP 都有一个 Header 。 事务层根据上层请求内容,生成 TLP Header Header 包括 发送者的相关信息、目标地址(该 TLP 要发给谁)、TLP 类型(诸如前面提到的内存读、内 存写)、数据长度(如果有数据的话)等。

ECRC 域为之前的 Header 和数据(如果有的话)生成一个CRC, 在接收端根据收到的 TLP 重新生成 Header 和数据(如果有的话)的CRC, 与收到的 CRC 比较, 一样则说明数据 在传输过程中没有出错,否则就有错。

TLP Header的公共部分各项内容:

  • Fmt : Format, 表明该 TLP是否带有数据,Header 是 3 DW 还是4 DW。
  • Type : TLP 类型,包括内存读、内存写、配置读、配置写、消息和响应等。 口 R : Reserved, 等于0。
  • TC: Traffic Class,TLP也分三六九等,优先级高的先得到服务。TC : 3 bit 说明可以 分为0~7这8个等级,TC 默认是0,数字越大,优先级越高。
  • Attr : Attribute, 属性,前后共三个位。
  • TH : TLP Processing Hints(处理提示)。
  • TD : TLP Digest,之前说 ECRC可选,如果这位被设置,则说明该 TLP包含 ECRC, 接收端应该做 CRC校验。
  • EP: “有毒”的数据,应远离。
  • AT : Address Type,地址种类。
  • 长度: Payload 数据长度,10位,最大为1024,单位为DW, 所以 TLP最大数据长 度是4 KB。该长度总是为DW 的整数倍,如果TLP 的数据不是 DW的整数倍(不是 4 B 的整数倍),则需要用到 Last DW BE和 1st DW BE这两个域。

TLP 格式和类型域编码:

TLPFm t域Type域说 明
Memory Read Request(内存读请求)000=3 DW,不带数据 001=4 DW,不带数据00000内存读不带数据,其Header大小为 3 D W 或 4 D W
Memory Write Request(内存写请求)010=3 DW,带数据 011=4 DW,带数据00000内存写带数据,其Header大小为 3 D W 或 4 D W
Configuration Type 0 Read Request (Type 0配置读请求)000=3 DW,不带数据0.0100读终端的配置,不带数据,Header 总是为3 DW
Configuration Type 0 Write Request (Type 0配置写请求)010=3 DW,带数据00100写终端的配置,带数据,Header总 是为3 DW
Configuration Type 1 Read Request (Type 1配置读请求)000=3 DW,不带数据00101读交换机的配置,不带数据,Header 总是为3 DW
Configuration Type 1 Write Request (Type 1配置写请求)010=3 DW,带数据00101写交换机的配置,带数据,Header 总是为3 DW
Message Request(消息请求)001=4 DW,不带数据1 0rrr消息的Header总是为4 DW
Message Request with Data(带数据 的消息请求)011=4 DW,带数据1 0rrr消息的Header总是为4 DW
Completion(响应)000=3 DW,不带数据01010响应的Header总是为3 DW
Completion with Data(带数据的晌应)010=3 DW,带数据01010响应的Header总是为3 DW

PCIe配置空间和地址空间

每个 PCIe 设备都有这样一段空间:主机软件可以通过读取它获得该设备的一些信息 也可以通过它来配置该设备。这段空间被称为PCIe 的配置空间。

PCI 或者 PCI-X 时代就有配置空间的概念,当时整个配置空间就是一系列寄存器的集合,由两部分组成:64 B的 Header 和192 B的 Capability(能力)数据结构。进入PCIe时代,PCIe能耐更大,192 B不足以罗列它的绝活。为了保持后向兼容,又 不把绝活落下,把整个配置空间由256 B 扩展成4 KB, 前面256 B 保持不 变。

配置空间的Header中很重要的是BAR(Base Address Register, 基址寄存器)。终端配置 (Type 0) 最多有6个BAR, 交换机 (Type 1) 只有2个。

CPU 如果想访问某个设备的空间,让RC 去办。例如:如果CPU 想读 PCIe设备的数据,先让RC 通过TLP 把数据从PCle 设备读到主机内存,然后CPU 从主机 内存读数据;如果CPU 要往PCle 设备写数据,则先把数据在内存中准备好,然后让RC 通 过TLP 将其写人PCle 设备。

具体实现就是上电的时候,系统把 PCle 设备开放的空间(系统软件可见)映射到内存 地址空间,CPU 要访问该PCIe 设备空间,只 需访问对应的内存地址空间。RC 检查该内 存地址,如果发现该内存地址是某个PCle 设 备空间的映射,就会触发其产生TLP 去访问 对应的PCle 设备,从而实现读或者写PCIe 设备.

设备出厂时, 这些空间的大小和属性都写在配置BAR 寄存器里面。上电后,系统软件读取这些BAR, 并 分配对应的系统内存地址空间,然后把相应的内存基地址写回BAR 。

(BAR 的地址其实是 PCI 总线域的地址, CPU 访问的是内存地址。CPU 访问PCle 设备时,需要把总线域地址转 换成内存地址。)

上电时,系统软件首先会读取 PCle设备的BAR 0, 得到数据,然后系统软 件往该BAR 0中写入全1,BAR 寄存器有些位是只读的,是PCIe设备在出厂前就固定好的,写全1进去,如果值保持不变,就说明这些位是厂家固化好的。这些固化好的位提供了这块内部空间的一些信息。

XXXX XXXXXXXX XXXX XXXX000000000000

低4位用于表明该存储空间的一些属性,比 如是/O 映射还是内存映射

一个PCIe 设备可能有若干个内部空间需要开放 出来,系统软件依次读取 BAR 1 、BAR 2 , 直到BAR 5, 完成所有内部空间的映射。

一个PCIe 设备 可能具有多个功能,比如硬盘功能、网卡功能 等,每个功能对应一个配置空间。

在整个 PCle 系统中,只要知道了总线序号、设备序号和功能序号,就能找到唯 一的功能。寻址基本单元是功能,它的ID 由总线、设备、功能(BDF) 组成。

这节详细的推荐看书《深入浅出SSD:固态存储核心技术、原理与实战(第2版)》。

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

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

相关文章

物联网,智慧城市的数字化转型引擎

随着科技的飞速发展,物联网(IoT)已成为推动智慧城市建设的关键力量。物联网技术通过连接各种设备和系统,实现数据的实时采集、传输和处理,为城市的智能化管理提供了强大的支持。在数字化转型的浪潮中,物联网…

【操作系统概念】 第8章:内存管理

文章目录 0.前言8.1 背景8.1.1 基本硬件8.1.2 地址绑定8.1.3 逻辑地址空间和物理地址空间8.1.4 动态加载(dynamic loading)8.1.5 动态链接(dynamically linking)与共享库 8.3 连续内存分配(contiguous memory allocati…

【linuxC语言】dup、dup2函数

文章目录 前言一、dup函数二、dup2函数三、将标准输出重定向到文件总结 前言 在Linux环境下,dup、dup2以及原子操作都是用于文件描述符管理和处理的重要工具。这些功能提供了对文件描述符进行复制和原子操作的能力,使得在多线程或多进程环境中更加安全和…

10大主流压力/负载/性能测试工具推荐

在移动应用和Web服务正式发布之前,除了进行必要的功能测试和安全测试,为了保证互联网产品的服务交付质量,往往还需要做压力/负载/性能测试。然而很多传统企业在试水互联网的过程中,往往由于资源或产品迭代速度等原因忽视了这一块工…

整屋案例丨福州府108m²3室2厅2卫轻奢有度,高级耐看。福州中宅装饰,福州装修

空间之间的空间 比空间本身更具有意味, 但也容易被忽略, 正是由于“之间”的多元性和复杂性 以及它的不确定性, 空间之间变得无限可能。 平面设计图 项目信息 项目名称 | 福州府 设计地址 | 福建福州 项目面积 | 108㎡ 项目户型 | …

【JavaEE初阶】 JVM类加载简介

文章目录 🍃前言🌲类加载过程🚩加载🚩验证🚩准备🚩解析🚩初始化 🎄双亲委派模型🚩什么是双亲委派模型?🚩双亲委派模型的优点 ⭕总结 &#x1f343…

程序运行的基本流程

操作系统(应用程序): 装系统就是将操作系统安装到硬盘1中 计算机启动的基本过程: 总结: 程序一般保存在硬盘中,软件安装的过程就是将程序写入硬盘的过程程序在运行时会加载进入内存,然后由CPU…

Alveo U200 和 U250 数据中心加速器卡硬件原理图

U200原理图中的一些重要组件和接口如下: QSFP (Quad Small Form-factor Pluggable):QSFP 是一种高速网络连接器,可支持 40GbE/100GbE 等数据传输速率。在 U200 中,QSFP 用于与外部设备进行高速网络通信。 闪存:闪存是…

【Python】6. 基础语法(4) -- 列表+元组+字典篇

列表和元组 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. num1 10 num2 20 num3 30 ......但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候,…

重磅发布|AutoMQ 1.0.0 GA 版本官宣:已验证生产环境可用性

AutoMQ 是基于云构建的无服务、极速弹性、极具成本效益的下一代 Kafka。100%兼容Apache Kafka,无分区数据复制。在无副作用的前提下解决了 Kafka 弹性、运维上的诸多痛点并且带来了数量级的成本降低。 AutoMQ 1.0.0 GA 版本现已在 Github 仓库 (https://github.com…

tcp服务器客户端通信(socket编程)

目录 1.编程流程 2.代码演示 2.1 服务器代码 2.2 客户端代码 3.注意 3.1 ping命令 3.2 netstat命令 3.3 为什么memset? 3.4 哪个会阻塞? 3.5 显示连接信息 1.编程流程 2.代码演示 2.1 服务器代码 #include <stdio.h> #include <stdlib.h> #include <…

Logseq电脑端+安卓端同步gitee或github

文章目录 0.初衷1.电脑端1.1 新建仓库1.2 克隆项目&#xff0c;生成秘钥1.3 添加图谱&#xff0c;选择文件目录&#xff0c;我是原本就有笔记&#xff0c;所以会如下所示。1.4 下载脚本文件1.5赋权限 &#xff08;windows可跳过&#xff09;1.6 修改脚本命令1.7 logseq设置同步…

Docker-完整项目的部署(保姆级教学)

目录 1 手动部署(白雪版) 1.1 创建网络 1.2 MySQL的部署 1.2.1 准备 1.2.2 部署 1.3 Java项目的部署 1.3.1 准备 1.3.1.1 将Java项目打成jar包 1.3.1.2 编写Dockerfile文件 1.3.2 部署 1.3.2.1 将jar包、Dockerfile文件放在linux同一个文件夹下 1.3.2.2 构建镜像 …

C# 用Trace.WriteLine输出调试信息无法查看

写程序就会遇见BUG&#xff0c;这时候在代码不同部位输出一些标记的信息对查找错误非常有必要&#xff0c;一般情况下我们都是使用Console.WriteLine()方法来打印信息到控制台窗口&#xff0c;但有时候使用Console.WriteLine()方法会存在不方便的情况&#xff0c;比如鄙人遇到的…

tomcat优化与部署(三)------nignx优化与nginx +tomcat 部署

在目前流行的互联网架构中&#xff0c;Tomcat在目前的网络编程中是举足轻重的&#xff0c;由于Tomcat的运行依赖于JVM&#xff0c;从虚拟机的角度把Tomcat的调整分为外部环境调优 JVM 和 Tomcat 自身调优两部分 Tomcat 是一个流行的开源 Java 服务器&#xff0c;用于托管 Java …

弱电综合布线:连接现代生活的纽带

在当今信息化快速发展的时代&#xff0c;弱电网络布线作为信息传输的重要基础设施&#xff0c;其作用日益凸显。它不仅保障了数据的高效流通&#xff0c;还确保了通信的稳定性。从商业大厦到教育机构&#xff0c;从政府机关到医院急救中心&#xff0c;再到我们居住的社区&#…

十五、抽象类与接口

抽象类与接口 solid设计原则 五个基本设计原则的首字母&#xff0c;然后通过这五种基本的设计原则&#xff0c;衍生出很多种的设计模式 抽象类 就是五个基本设计原则当中的o即open or close 某些软性规则需要服从&#xff0c;不然就会给自己或者他人带来麻烦 抽象类&#xff…

动态代理详解

动态代理 一、JDK动态代理二、CGLIB动态代理三、Javassist动态代理技术 在程序运行阶段&#xff0c;在内存中动态生成代理类&#xff0c;被称为动态代理&#xff0c;目的是为了减少代理类的数量。解决代码复用的问题。 一、JDK动态代理 DK动态代理技术&#xff1a;只能代理接口…

如何做代币分析:以 ARB 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;ARB 代币仪表板 &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关的数据…

代码随想录算法训练营第三天|203.移除链表元素

题目&#xff1a; 203. 移除链表元素 已解答 简单 相关标签 相关企业 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val …