PCIE——第6章——PCIe总线的事务层
摘要:PCIE——第6章——PCIe总线的事务层
目录
第 6 章 PCIe 总线的事务层
6. 1 TLP 的格式
6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段
6. 1. 2 TC 字段
6. 1. 3 Attr 字段
6. 1. 4 通用 TLP 头中的其他字段
6. 2 TLP 的路由
6. 2. 1 基于地址的路由
6. 2. 2 基于 ID 的路由
6. 2. 3 隐式路由
6. 3 存储器、 I / O 和配置读写请求 TLP
6. 3. 1 存储器读写请求 TLP
6. 3. 2 完成报文
6. 3. 3 配置读写请求TLP
6. 3. 4 消息请求报文
6. 3. 5 PCIe 总线的原子操作
6. 3. 6 TLP Processing Hint
2. Steering Tag
6. 4 TLP 中与数据负载相关的参数
总结
参考文章:
第 6 章 PCIe 总线的事务层
事务层是PCIe总线层次结构的最高层,该层次将接收 PCIe 设备核心层的数据请求,并将其转换为 PCIe 总线事务, PCIe 总线使用的这些总线事务在 TLP 头中定义。
6. 1 TLP 的格式
6. 1. 1 通用 TLP 头的 Fmt 字段和 Type 字段
Fmt[2:0]:表明了TPL大小(几个双字)、带不带数据、带不带prefix
Type:表示请求类型
6. 1. 2 TC 字段
TC 字段表示当前 TLP 的传送类型, PCIe 总线规定了 8 种传输类型, 分别为 TC0 ~ TC7, 缺省值为 TC0, 该字段与 PCIe 的 QoS 相关。(前面章节提到过TC,类比为货物;VC是运输货物)
6. 1. 3 Attr 字段
Attr 字段由 3 位组成, 其中第 2 位表示该 TLP 是否支持 PCIe 总线的 ID⁃based Ordering;第 1 位表示是否支持 Relaxed Ordering; 而第 0 位表示该 TLP在经过 RC 到达存储器时, 是否需要进行 Cache 共享一致性处理。(传输的模式)
6. 1. 4 通用 TLP 头中的其他字段
TH:TH 位为 1 表示当前 TLP 中含有 TPH (TLP Processing Hint) 信息
TLP 的发送端可以使用 TPH 信息, 通知接收端即将访问数据 的特性, 以便接收端合理地预读和管理数据
TD 位表示 TLP 中的 TLP Digest 是否有效, 为 1 表示有效, 为 0 表示无效。 而 EP 位表示 当前 TLP 中的数据是否有效, 为 1 表示无效, 为 0 表示有效。
AT 字段与 PCIe 总线的地址转换相关
Length 字段用来描述 TLP 的有效负载 (Data Payload) 大小
6. 2 TLP 的路由
TLP 的路由是指 TLP 通过 Switch 或者 PCIe 桥片时采用哪条路径, 最终到达 EP 或者 RC 的方法。 PCIe 总线一共定义了三种路由方法, 分别是基于地址 (Address) 的路由, 基于 ID 的路由和隐式路由 ( Implicit) 方式
6. 2. 1 基于地址的路由
存储器和 I / O 读写请求 TLP 使用基于地址的路由方式, 这种方式使用 TLP 中的 Address 字段进行路由选径, 最终到达目的地。这节书中有举例。
6. 2. 2 基于 ID 的路由
而配置读写报文、 “Vendor_Defined Messages” 报文、 Cpl 和 CplD 报文使用基于 ID 的路 由方式, 这种方式使用 PCI 总线号㊁ ( Bus Number) 进行路由选径。 在 Switch 或者多端口 RC 的虚拟 PCI⁃to⁃PCI 桥配置空间中, 包含如何使用 PCI 总线号进行路由选径的信息。(使用 Bus Number、 Device Number 和 Function Number 进行路由寻址。)
6. 2. 3 隐式路由
隐式路由方式主要用于 Message 报文的传递。 在 PCIe 总线中定义了一系列消息报文, 包括 “ INTx Interrupt Signaling” , “ Power Management Messages” 和 “ Error Signal Messages” 等报文。 在这些报文中, 除了 “Vendor_Defined Messages” 报文, 其他所有消息报文都使用 隐式路由方式, 隐式路由方式是指从下游端口到上游端口进行数据传递的使用路由方式, 或 者用于 RC 向 EP 发出广播报文。
6. 3 存储器、 I / O 和配置读写请求 TLP
(1) 存储器读请求 TLP 和读完成 TLP
当 PCIe 主设备, RC 或者 EP, 访问目标设备的存储器空间时, 使用 Non⁃Posted 总线事 务向目标设备发出存储器读请求 TLP, 目标设备收到这个存储器读请求 TLP 后, 使用存储器 读完成 TLP, 主动向主设备传递数据。 当主设备收到目标设备的存储器读完成 TLP 后, 将完 成一次 DMA 读操作。
(2) 存储器写请求 TLP
在 PCIe 总线中, 存储器写使用 Posted 总线事务。 PCIe 主设备仅使用存储器写请求 TLP 即可完成 DMA 写操作, 主设备不需要目标设备的回应报文。
(3) 原子操作请求和完成报文
一个完整的原子操作由原子操作请求和原子操作 完成报文组成。有关原子操作的详细说明见第 6. 3. 5 节。
(4) I / O 读写请求 TLP 和读写完成 TLP
在 PCIe 总线中, I / O 读写操作使用 Non⁃Posted 总线事务, I / O 读写 TLP 都需要完成报文 做为回应。 只是在 I / O 写请求的完成报文中不需要 “带数据” , 而仅含有 I / O 写请求是否成 功的状态信息。
(5) 配置读写请求 TLP 和配置读写完成 TLP
从总线事务的角度上看, 配置读写请求操作的过程与 I / O 读写操作的过程类似。 配置读 写请求 TLP 都需要配置读写完成作为应答, 从而完成一个完成的配置读写操作。
(6) 消息报文
在 PCIe 总线中, 一些由 PCI 总线的边带信号完成的工作, 如中断请求和电源管理等, 在 PCIe 总线中由消息请求报文实现。
6. 3. 1 存储器读写请求 TLP
1. Length 字段
Length 字段表示需要从目 标设备数据区域读取的数据长度;
2. DW BE 字段
PCIe 总线以字节为基本单位进行数据传递, 但是 Length 字段以 DW 为最小单位。
一个字占用2个字节 即
1 Word = 2 个字节 Byte = 16 位 bit
一个双字 Dword 等于2个 字 Word 即
1 DWord = 2个字 Word = 4 个字节 Byte = 32 位 bit
3. Requester ID 字段
4. I / O 读写请求 TLP 的规则
I / O 读写请求 TLP 只能使用 32 位地址模式和基于地址的路由方式, 而且 I / O 读写请求 TLP 只能使用 Non⁃Posted 方式进 行传递。
6. 3. 2 完成报文
完成报文一次最多能够传送的报文大小不能超过 Max_Payload_Size 参数。
1. Requester ID 和 Tag 字段
完成报文头的长度为 3DW, 完成报文头中包含 Transaction ID 信息, 由 Requester ID 和 Tag 字段组成, 这个 ID 必须与源 设备发送的数据请求报文的 Transaction ID 对应, 完成报文使用 Transaction ID 进行 ID 路由, 并将数据发送给源设备。
2. Completer ID 字段
该字段存放 “发送完成报 文” 的 PCIe 设备的 ID 号。 PCIe 设备进行数据请求时需要在 TLP 字段中包含 Requester ID 字 段; 而使用完成报文结束数据请求时, 需要提供 Completer ID 字段。
3. Status 字段
4. BCM 位与 Byte Count 字段
BCM ( Byte Count Modified)
当 PCI⁃X 设备进行存储器读请求时, 目标设备不一定一次就能将所有 数据传递给源设备。 此时目标设备在进行第一次数据传送时, 需要设置 Byte Count 字段 和 BCM 位。
5. Lower Address 字段
接收端必须使用存储器读完成 TLP 的 Low Address 字段, 识别一个 TLP 中包含数 据的起始地址。
6. 3. 3 配置读写请求TLP
PCIe 总线也支持两种配置请求报文, 分别为 Type 00h 和 Type 01h 配置请 求。 配置请求 TLP 的格式如图 6-12 所示。
● TC [2∶ 0] 必须为 0, I / O 请求报文的传送类型 (TC) 只能为 0。
● TH 位为保留位; Attr2 位为保留, 而 Attr [1∶ 0] 必须为 “00b” , 这表示 I / O 请求报 文使用 PCI 总线的强序数据传送模式; AT [1∶ 0] 必须为 “0b00” , 表示不进行地址 转换。
● Length [9∶ 0] 为 “0b00 0000 0001” , 表示配置读写请求最大 Payload 为 1DW。
● Last DW BE 字段为 “0b0000” 。 而 First DW BE 字段根据配置读写请求的大小设置。
6. 3. 4 消息请求报文
PCIe 总线规定了以下几类消息报文。
● INTx 中断消息报文 ( INTx Interrupt Signaling)
● 电源管理消息报文 (Power Management)
● 错误消息报文 (Error Signaling)
● 锁定事务消息报文 (Locked Transaction Support)
● 插槽电源限制消息报文 ( Slot Power Limit Support)
● Vendor⁃Defined Messages
6. 3. 5 PCIe 总线的原子操作
原子操作有利于提高智能设备㊀之间以及智能设备与处理器之间的数据传递效率。 当智 能设备与处理器进行数据交换时, 将不可避免地使用某种锁机制访问临界资源。
(1) 源设备向目标设备发送原子操作请求 TLP。 原子操作请求 TLP 使用 Non⁃Posted 方式 进行数据传递, 且使用基于地址的路由方式。
(2) 当目标设备收到这个原子操作请求 TLP 之后, 将从这个 TLP 指定的存储器空间中 读取原始数据。
(3) 目标设备将 “原始数据” 与 “原子操作请求 TLP 中包含的操作数” 进行某种规定 的运算后产生一个新的数据。 这一过程不可被其他总线事务中断, PCIe 设备保证这一过程 为原子操作。 这个步骤对于原子操作至关重要, 也是原子操作的实现要点。
(4) 当上述原子操作执行完毕后, 目标设备使用原子操作完成报文向源设备传送数据, 并将这个新的数据写入目标设备的存储器空间中。 原子操作完成报文与存储器读完成的传递 方式类似。
目前, PCIe 总线共支持 3 种原子操作, 分别为 FetchAdd、 Swap 和 CAS 原子操作。
6. 3. 6 TLP Processing Hint
当 TLP 的 TH 位为 1 时, 表示在当前 TLP 中包含 Processing Hint 字段,该字段的引入可以使目标设备根据源设备对数据的使用情况, 合理地 安排数据缓冲, 从而降低 PCIe 设备的访问延时, 并最大化地利用 PCIe 设备中的数据缓冲。
2. Steering Tag
PH 字段提供的 Processing Hint 控制能力较弱,为此 PCIe 总线规范提供了一个 16 位的 ST ( Steering Tag) 字段。而对于存储器读请求 TLP, TH 位有效时 DW BE 字段被重新 定义为 ST [7∶ 0] 字段, 由于一些存储器读请求 TLP 仍然需要使用 DW BE 字段处理对界, 因此 ST 字段只能应用于不需要对界的存储器读请求 TLP。
ST 字段的主要目的是细分 TLP 的属性, 处理器系统可以使用该字段优化数 据缓冲, 减小数据访问延时。
6. 4 TLP 中与数据负载相关的参数
在 PCIe 总线中, 有些 TLP 含有 Data Payload, 如存储器写请求、 存储器读完成 TLP 等。 在 PCIe 总线中, TLP 含有的 Data Payload 大小与 Max_Payload_Size、 Max_Read_Request_Size 和 RCB 参数相关。
总结
本章重点介绍 PCIe 总线的事务层。 在 PCIe 总线层次结构中, 事务层最易理解, 同时也 与系统软件直接相关。 但是事务层的知识较为琐碎, 在第 12 章将结合一个 EP 的设计实例, 进一步说明 PCIe 总线事务层的具体实现机制。
参考文章:
PCI_Express_体系结构导读——王齐
PCIE——第6章——PCIe总线的事务层相关推荐
- PCIE——第7章——PCIe 总线的数据链路层与物理层
摘要:PCIE--第7章--PCIe 总线的数据链路层与物理层 目录 第 7 章 PCIe 总线的数据链路层与物理层 7. 1 数据链路层的组成结构 7. 1. 1 数据链路层的状态 7. 1. 2 ...
- PCIE——第 8 章——PCIe 总线的链路训练与电源管理
摘要:PCIE--第 8 章--PCIe 总线的链路训练与电源管理 目录 第 8 章 PCIe 总线的链路训练与电源管理 8. 1 PCIe 链路训练简介 8. 1. 1 链路训练使用的字符序列 8. ...
- PCIE——第 9 章——流量控制
摘要:PCIE--第 9 章--流量控制 目录 第 9 章 流量控制 9. 1 流量控制的基本原理 9. 1. 1 Rate⁃Based 流量控制 9. 1. 2 Credit⁃Based 流量控制 ...
- PCIE——第 10 章—— MSI 和 MSI⁃X 中断机制
摘要:PCIE--第 10 章--MSI 和 MSI⁃X 中断机制 目录 第 10 章 MSI 和 MSI⁃X 中断机制 10. 1 MSI / MSI⁃X Capability 结构 10. 1. ...
- pcie数据反_PCIe事务层の详解(一)
PCIe总线的通信机制:当一个设备要想另一个设备进行读取通信时,请求方requester需要向另一个设备发送请求request,靶向方作为事件完成方completer,以complete Packet ...
- PCIe系列第三讲、事务层通用 TLP 头结构分析
上一讲说道:"一个完整的TLP由1个或多个TLP Prefix.TLP头.Data Payload和TLP Digest构成",那么本讲将就谈一谈TLP的头,具体几种事务(存储器读 ...
- PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换
PCIe to AXI Translation--PCIe 内存空间到AXI内存空间的转换 UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功 ...
- PCIe学习笔记之pcie初始化枚举和资源分配流程代码分析
本文主要是对PCIe的初始化枚举.资源分配流程进行分析.代码对应的是linux 4.19, 平台是arm64. 文章首发于这里 1. PCIe architecture 1.1 pcie的拓扑结构 在 ...
- PCIe学习笔记之pcie结构和配置空间
PCIe概述 PCI Express,是计算机总线PCI的一种,它沿用现有的PCI编程概念及通信标准,但建基于更快的串行通信系统. PCIE总线使用的是高速差分总线,并采用端到端的连接方式, 现在的高 ...
最新文章
- XIV Open Cup named after E.V. Pankratiev. GP of Europe
- python毒酒检测_检测OpenSSL漏洞的脚本
- 安装ubuntu系统步骤
- Spring 整合 RocketMQ
- Socket 多线程FTP软件开发
- http长/短轮询和WebSocket 的介绍和比较
- 前端学习(2689):重读vue电商网站10之表格展开页
- [转载] java 枚举Enum源码解析
- com.alibaba.druid.pool.DruidDataSource : testWhileIdle is true, validationQuery not set
- am335x backlight
- 出现次数最多的整数-蓝桥杯算法训练
- 【CV】图像恢复(去噪,去模糊,超分)模型 DPDNN 论文笔记
- MATLAB最简单教程
- 手把手教你实现自己的预设滤镜
- 【自动驾驶】Stanley(前轮反馈)实现轨迹跟踪
- 比Excel还简单的SQL语句查询
- python多找表格进行数据对比
- 保龄球积分c语言程序,C语言保龄球积分.doc
- 我和电赛的成长故事与总结#2019年全国大学生电子设计竞赛#
- 真人口播视频号:流量不愁,变现才是重中之重丨国仁网络