【PCIe 5.0 - 10】Memory, I/O, and Configuration Request 规则

下列规则适用于所有 Memory, I/O, Configuration Requests,以下是针对各类请求的附加规则。

  • 除通用 header 字段外,所有 Memory, I/O, 和 Configuration Requests 还包括以下字段:
    • Requester ID[15:0] 和 Tag[9:0],组成 Transaction ID。
    • Last DW BE[[3:0] 和 First DW BE[3:0]。对于 TH 位为1的 Memory Read Requests 和 AtomicOp Requests,报头中Last DW BE[3:0] 和 First DW BE[3:0] 字段的字节位置将被调整为 ST[7:0] 字段。对于 TH 位为0的Memory Read Requests,参考 【PCIe 5.0 - 8】PCIe 事务层详解4 - First/Last DW Byte Enables规则 中的 First/Last DW Byte Enables规则。对于 TH 位为1的 AtomicOp Requests,DW BE 字段的值隐含为保留。对于 TH 位为0的 AtomicOp Requests,DW BE 字段为保留。

Memory Requests 适用以下规则:

  • Memory Requests 按地址路由,使用 64 位或 32 位寻址方式(见图1 和图2)。
  • 对于 Memory Read Requests,长度不得超过 Max_Read_Request_Size 指定的值。
  • 对于 AtomicOp Requests,表 1 规定了架构操作数大小及其相关的长度字段值。如果完成器支持 AtomicOps,则适用以下规则。Completer 必须检查 Length 字段值。如果该值与架构值不匹配,则完成器必须将 TLP 作为畸形 TLP 处理。否则,如果该值与 Completer 支持的操作数大小不匹配,Completer 必须将 TLP 作为不支持的请求 (Unsupported Request,UR) 处理。这是一个与接收端口相关的报告错误。
表 1 AtomicOp Requests 的 Length 字段值
AtomicOp Request32 Bits64 Bits128 Bits
FetchAdd, Swap1 DW2 DWN/A
CAS2 DW4 DW8 DW
  • FetchAdd Request 包含一个操作数,即 “add” 值。
  • Swap Request 包含一个操作数,即 “swap” 值。
  • 一个CAS Request 包含两个操作数。数据区的第一个操作数是 “compare” 值,第二个操作数是 “swap” 值。
  • 对于 AtomicOp Request,地址必须与操作数大小自然对齐。Completer 必须检查是否违反了这一规则。如果 TLP 违反了这一规则,则该 TLP 为畸形 TLP(Malformed TLP)。这是一个与接收端口相关的报告错误。
  • 请求不得指定导致内存空间访问跨越 4-KB 边界的 Address/Length 组合。
    • Receivers 可选择检查是否违反此规则。如果执行此检查的 Receivers 确定 TLP 违反了此规则,则该 TLP 为畸形 TLP。
      • 如果检查到,这将是一个与接收端口相关的报告错误。
      • 对于 AtomicOp Requests,对地址自然对齐的强制 Completer 检查(见上文)已经保证了访问不会跨越 4KB 边界,因此不需要单独的 4KB 边界检查。
    • 如果对 AtomicOp CAS Requests 执行 4-KB 边界检查,该检查必须理解 TLP Length 值是基于两个操作数的大小,而对内存空间的访问是基于一个操作数的大小。

在这里插入图片描述

图 1 64 位内存寻址的 Request Header 格式



在这里插入图片描述

图 2 32 位内存寻址的 Request Header 格式

实施说明
64位地址的生成
强烈建议 PCI Express 端点能够生成全部 64 位地址范围。但是,如果 PCI Express 端点支持的地址范围较小,无法达到特定平台环境所需的全部地址范围,则相应的设备驱动程序必须确保所有内存事务目标 buffers 都在端点支持的地址范围内。确保这一点的具体方法取决于平台和操作系统,超出了本规范的范围。

对于 I/O Requests,适用以下规则:

  • I/O Requests 按地址路由,使用 32 位寻址法(见图3)
  • I/O Requests 有以下限制:
    • TC[2:0] 必须为 000b
    • LN 不适用于 I/O Request,该位保留
    • Attr[2] 保留
    • Attr[1:0]必须为 00b
    • AT[1:0] 必须为 00b。不要求也不鼓励 Receivers 检查这一点。
    • Length[9:0] 必须为 00 0000 0001b
    • Last DW BE[3:0] 必须为 0000b

Receivers 可选择检查是否违反这些规则(但不得检查保留位,Reserved bit)。这些检查都是独立可选的(见 Optional Error Checking)。如果执行这些检查的 Receiver 确定 TLP 违反了这些规则,则该 TLP 为畸形 TLP(Malformed TLP)。

  • 如果检查到,这是与接收端口相关的报告错误(见Error Signaling and Logging)。

图3 Request Header Format for I/O Transactions

对于 Configuration Requests,适用以下规则:

  • 除了所有 Memory, I/O 和 Configuration Requests 中包含的报头字段和 ID 路由字段外,Configuration Requests 还包含以下附加字段(参见图 4)。

    • Register Number[5:0]
    • Extended Register Number[3:0]
  • Configuration Requests 有以下限制:

    • TC[2:0] 必须为 000b
    • LN 不适用于 Configuration Requests,该位保留。
    • TH 不适用于 Configuration Requests,该位保留。
    • Attr[2] 保留
    • Attr[1:0] 必须为 00b
    • AT[1:0] 必须为 00b。不要求也不鼓励 Receivers 检查这一点。
    • Length[9:0] 必须为 0000 0001b
    • Last DW BE[3:0] 必须为 0000b

Receivers 可选择检查是否违反这些规则(但不得检查保留位,Reserved bit)。这些检查都是独立可选的(见 Optional Error Checking)。如果执行这些检查的 Receiver 确定 TLP 违反了这些规则,则该 TLP 为畸形 TLP(Malformed TLP)。

  • 如果检查到,这是与接收端口相关的报告错误(见Error Signaling and Logging)。

在这里插入图片描述

图 4 Request Header Format for Configuration Transactions

MSI/MSI-X 机制使用 Memory Write Requests 来表示中断消息(参见 MSI and MSI-X Operation)。MSI/MSI-X 事务使用的请求格式与上文定义的 Memory Write Request 格式相同,在排序、流量控制和数据完整性方面,MSI/MSI-X 请求与内存写入没有区别。

TPH 规则

  • 为 TPH 指定了两种格式。所有提供 TPH 的请求都必须使用 Baseline TPH 格式(见图 6 和图 7)。带有可选的 TPH TLP Prefix 的格式扩展了 TPH 字段(见图 5),为 Steering Tag (ST) 字段提供额外位。

在这里插入图片描述

图 5 TPH TLP Prefix
  • 可选的 TPH TLP Prefix 用于扩展 TPH 字段。
    • TPH TLP Prefix 通过解码 byte 0 来确定是否存在。
表 2 TPH TLP Prefix Bit Mapping
FieldsTPH TLP Prefix
ST(15:8)Bits 7:0 of byte 1
ReservedBits 7:0 of byte 2
ReservedBits 7:0 of byte 3
  • 对于以 Memory Space 为目标的 Requests, TH 位为 1b 表示 TLP header 和 可选 TPH TLP Prefix(如有)中存在 TPH。
    • 对于提供 TPH 的请求,TH 位必须设置。
    • 带有 TPH TLP Prefix 的请求必须设置 TH 位。
    • 当 TH 位为0时,PH 字段保留。
    • TH 位和 PH 字段不适用于所有其他 Requests,且为保留字段。

Processing Hints (PH) 映射如图6、图7 和 表3 所示:

在这里插入图片描述

图6 Location of PH[1:0] in a 4 DW Request Header



在这里插入图片描述

图7 Location of PH[1:0] in a 3 DW Request Header



表3 PH[1:0] 在 TLP Header 的位置
PH32-bit Addressing64-bit Addressing
1:0Byte 11 的 bits 1:0Byte 15 的 bits 1:0

PH[1:0] 字段提供有关数据访问模式的信息,其定义如表4 所示:

表4 Processing Hint Encoding
PH1:0Processing Hint描述
00Bi-directional data structure表示 Host 和 Device 频繁读取和/或写入数据
01Requester表示 Device 频繁读取和/或写入数据
10Target表示 Host 频繁读取和/或写入数据
11Target with Priority表示 Host 频繁读取和/或写入,并表明所访问数据具有高时间局部性

Steering Tag (ST) 字段映射到 TLP header,如图8 、图9 和表 5 所示。

在这里插入图片描述

图8 Location of ST[7:0] in the Memory Write Request Header



在这里插入图片描述

图9 Location of ST[7:0] in Memory Read and AtomicOp Request Headers



表3 ST[7:0] 在 TLP Header 的位置
ST BitsMemory Write RequestMemory Read Request or AtomicOp Request
7:0Byte 6 的 Bits 7:0Byte 7 的 Bits 7:0
  • ST[7:0] 字段

    • 全部为 0 的值表示无 Steering Tag 首选项
    • 总共提供 255 个唯一的 Steering Tag 值
  • 不支持 TPH Completer 或 Routing capability 的 Function,在收到设置了 TH 位的事务时,必须忽略 TH 位,并以与未设置 TH 位的相同事务类型的请求相同的方式处理 Request。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

不是我吹牛逼,这绝对是去掉 if...else 最佳的文章

我相信小伙伴一定看过多篇怎么去掉 if…else 的文章,也知道大家都很有心得,知道多种方法来去掉 if…else ,比如 Option,策略模式等等,但我相信大明哥这篇文章绝对是最全,最完备怎么去掉 if…else 的文章&am…

微信小程序导入js使用时候报错

我是引入weapp库时候,导入js会报错。 需要在小程序开发工具里面配置 就可以了。

YOLOv5:修改backbone为MobileOne

YOLOv5:修改backbone为MobileOne 前言前提条件相关介绍MobileOneYOLOv5修改backbone为MobileOne修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作,方便自己查阅。由于本人水平有限,难免出现错漏&#xf…

Redis之持久化(RDB和AOF)

文章目录 前言一、RDB1.介绍2.redis.config有关配置3.触发4.恢复5.优缺点 二、AOF1.介绍2.redis.config配置3.启动4.恢复5.重写6.优缺点 总结 前言 Redis 是内存数据库,即数据存储在内存。 如果不将内存中的数据保存到磁盘,一旦服务器进程退出&#xff…

Spring Cloud之Docker的学习【详细】

目录 Docker 项目部署问题 总结 镜像与容器 Docker的安装 Docker基本操作 镜像相关命令 拉取镜像 镜像保存 删除镜像 镜像加载 容器相关命令 删除容器 数据卷 数据卷命令 数据挂载 自定义镜像 Dockerfile 案例 Docker-Compose Compose文件 Docker-Compos…

数据结构与算法C语言版学习笔记(1)-绪论

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、数据结构的研究内容二、基本概念与术语1.数据与数据元素2.数据结构逻辑结构的种类存储结构的种类 三、算法1.什么是算法?算法的描述2.一个算法要具备…

【VR开发】【Unity】【VRTK】1-无代码VRVR开发介绍

本篇开始精简讲解VRTK相关的知识。 VRTK是基于Unity的一套提供无代码VR开发的插件,这套插件开源,可商用,集合了目前可能的VR体验组件,可以让不会C#编程但想要开发VR体验的人在不写一行代码的前提下开发出心仪的VR作品。 这套组件问世后也很受欢迎,目前已经进化到了第四代…

Java 算法篇-深入了解二分查找法

🔥博客主页: 小扳_-CSDN博客 ❤感谢大家点赞👍收藏⭐评论✍ 目录 1.0 二分查找法的说明 2.0 二分查找实现的多种版本 2.1 二分查找的基础版本 2.2 二分查找的改动版本 2.3 二分查找的平衡版本 2.4 二分查找的官方版本 3.0 二分查找的应用 1…

【Linux系统学习】系统编程开发工具编译器gcc/g++使用

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统学习 目录 前言 Linux系统下安装gcc和g gcc和g的不同 gcc/g的使用 gcc/g选项 预处理 头文件的展开 宏替换 注释的删除 条件的编译 编译 汇编 链接 系统库 库的分类 库的安装 库的…

[计算机提升] Windows系统软件:娱乐类

3.3 系统软件:娱乐类 3.3.1 Windows Media Player:dvdplay Windows Media Player是Windows操作系统自带的多媒体播放软件,用于播放和管理电脑中的音频和视频文件。它提供了以下功能: 播放音频和视频文件:Windows Med…

基于ThinkPHP+MySQL实现的通用的PHP网站后台管理系统

caozha-admin 后台管理框架 1.8.3 caozha-admin是一个通用的PHP网站后台管理框架,基于开源的ThinkPHP开发,特点:易上手,零门槛,界面清爽极简,极便于二次开发。 基础功能 1、系统设置 2、管理员管理 3、…

搭建ELK+Filebead+zookeeper+kafka实验

一、ELKFilebeatkafkazookeeper架构 架构图分别演示 第一层:数据采集层 数据采集层位于最左边的业务服务集群上,在每个业务服务器上面安装了filebead做日志收集,然后把采集到的原始日志发送到kafkazookeeper集群上。 第二层:消…

vue3中,使用html2canvas截图包含视频、图片、文字的区域

需求:将页面中指定区域进行截图,区域中包含了图片、文字、视频。 第一步,先安装 npm install html2canvas第二步,在页面引入: import html2canvas from html2canvas;第三步,页面使用: 1&…

SpringCloudGateway--过滤器(自定义filter)

目录 一、概览 二、通过GatewayFilter实现 三、继承AbstractGatewayFilterFactory 一、概览 当使用Spring Cloud Gateway构建API网关时,可以利用Spring Cloud Gateway提供的内置过滤器(filter)来实现对请求的处理和响应的处理。过滤器可以…

TiDB 企业版全新升级,平凯数据库核心特性全解读

作为 TiDB 企业版的全新升级,平凯数据库一经推出便广受媒体及用户关注。 近日,平凯星辰首席科学家丁岩在“平凯数据库全解读”活动中,首次详细介绍了平凯数据库的核心能力。 本文为丁岩演讲实录全文,为方便阅读,已做部…

物联网AI MicroPython传感器学习 之 QMC5883指南针罗盘传感器

学物联网,来万物简单IoT物联网!! 一、产品简介 QMC5883是一款表面贴装的集成了信号处理电路的三轴磁性传感器,应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些高精度的场合。 引脚定义 VCC:3V3&#…

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目

自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试:开源项目 开源项目完整代码及基础教程: https://mbd.pub/o/bread/ZZWclp5x CNN模型: 1.导入必要的库和模块&…

数据结构与算法:使用数组模拟环形队列Java版

文章目录 如何使用数组模拟队列环形队列逻辑分析自己写的听课笔记实现代码部分方法说明 如何使用数组模拟队列 不知道如何使用数组模拟队列的可以看上一篇文章 使用数组模拟队列点击跳转 环形队列逻辑分析 自己写的听课笔记 实现代码 package com.haimeng.queue;import java…

uniapp-自定义表格,右边操作栏固定

uniapp-自定义表格,右边操作栏固定 在网上找了一些,没找到特别合适的,收集了一下其他人的思路,基本都是让左边可以滚动,右边定位,自己也尝试写了一下,有点样式上的小bug,还在尝试修…

多线程锁的升级原理是什么

在 Java 中,锁共有 4 种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。 多线程锁锁升级过程 如下图所示 多线程锁的升级过程…
最新文章