沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层
总目录在此哦~
https://blog.csdn.net/z123canghai/article/details/115644744
2.1 内容概述
主要PCIE事务层帧格式、帧内容、不同事务的作用及传输机制,对每种事务都有大致的理解和记录;
就是为了满足不同功能设备在PCIE架构下进行数据交换的需求。
2.2 PCIE的事务类型
2.2.1 通用帧头
其中“TLP Prefix”是前缀,可添加的数据内容,暂且不说了
Header是帧头,也是当前主要阐述的内容,总的来说,帧头形式如下,但根据Type的不同也变化多样。
如下图是所有TLP数据包所具有的帧头,也就是最前面的32bit。
这个是用来表示传输类型的,与fmt结合,就确定了数据包的属性。PCIE对数据类型分为四大类,也称为四大地址空间,每一种都有其独特的用途,分别是存储、I/O、配置和消息,如下图所示。
存储事务(Memory Transactions)包括的事务类型有读请求与响应、写请求、基于原子操作的请求与响应,并且支持3DW和4DW。
I/Ο事务(I/O Transactions),在PCIE3.0规范中说以后可能弃用该类型了,目前还是支持的,支持读、写的请求与响应,并只支持3DW。
配置事务(Configuration Transactions)用来访问设备的配置寄存器的,支持读、写的请求与响应事务类型。
消息事务(Message Transactions)支持设备间的带内通信(in-band),可能是支持设备间的数据交换吧,暂时不理解。
总之,PCIE的事务分为这四大类,并由3DW和4DW的选择共同确定了事务属性,如下表所示。
TLP TYPE |
Fmt |
TYPE |
描述 |
MRd |
000/001 |
0_0000 |
存储事务的读请求,支持帧头为3DW和4DW,不含数据段 |
MRdLK |
000/001 |
0_0001 |
锁定的存储器读请求,支持帧头为3DW和4DW,不含数据段 |
MWr |
010/011 |
0_0000 |
存储事务的写请求,支持帧头为3DW和4DW,含数据段 |
IORd |
000 |
0_0010 |
I/O读请求,支持帧头为3DW,不含数据段 |
IOWr |
010 |
0_0010 |
I/O写请求,支持帧头为3DW,含数据段 |
CfgRd0 |
000 |
0_0100 |
Type0的配置读请求,支持帧头为3DW,不含数据段 |
CfgWr0 |
010 |
0_0100 |
Type0的配置写请求,支持帧头为3DW,含数据段 |
CfgRd1 |
000 |
0_0101 |
Type1的配置读请求,支持帧头为3DW,不含数据段 |
CfgWr1 |
010 |
0_0101 |
Type1的配置写请求,支持帧头为3DW,含数据段 |
TCfgRd |
000 |
1_1011 |
PCIE3.0规范不推荐的数据类型,以前用于受信任的配置空间(TCS),如果接收方未实现TCS,则接收方必须将此类请求视为格式错误的数据包。 |
TCfgWr |
010 |
1_1011 |
|
Msg |
001 |
10r2r1r0 |
消息请求–子字段r [2:0]指定消息路由机制 000:路由到RC 001: 010: 011: 100: 101: 110-111: |
MsgD |
011 |
10r2r1r0 |
|
Cpl |
000 |
0_1010 |
Completion without Data。支持帧头为3DW,不含数据段,用于各种数据类型的读完成。 |
CplD |
010 |
0_1010 |
Completion with Data。支持帧头为3DW,含数据段,用于各种数据类型的读完成。 |
CplLk |
000 |
0_1011 |
锁定的完成报文,TLP 头大小为 3 个双字,不带数据。 |
CplDLk |
010 |
0_1011 |
带数据的锁定完成报文,TLP 头大小为 3个双字,带数据。 |
FetchAdd |
010/011 |
0_1100 |
Fetch and Add 读取添加原子操作 |
Swap |
010/011 |
0_1101 |
交换,原子操作 |
CAS |
010/011 |
0_1110 |
CAS,原子操作 |
LPrfx |
100 |
0L3L2L1L0 |
Local TLP Prefix |
EPrfx |
100 |
1L3L2L1L0 |
End-End TLP Prefix |
Attributes的缩写,属性的意思。“属性”字段用于提供允许修改事务的默认处理的方式。
表示 TLP 中的 TLP Digest 是否有效, 为 1 表示有效, 为 0 表示无效。 而 EP 位表示当前 TLP 中的数据是否有效, 为 1 表示无效, 为 0 表示有效。
AT 字段与 PCIe 总线的地址转换相关。 在一些 PCIe 设备中设置了 ATC(Address
Translation Cache)部件, 这个部件的主要功能是进行地址转换。 只有在支持 IOMMU 技术的处理器系统中, PCIe 设备才能使用该字段。
2.2.2 内存事务
内存事务是指存储器和I/O的读写请求还有原子请求操作,并且支持地址长度为32位或64位两种,如下图是两种格式,下面就简单介绍。
2.2.3 完成事务
以我理解,PCIE会有读请求、会有需要响应的写内存等操作,这时候需要目标设备的返回数据包,这个数据包我们不能严格意义上称之为响应数据包,因为有些数据是用来传递数据的,所以我们将其称为完成事务,因为这类事务或者说数据包都是被动发起的。
完成报文如下图所示,完成报文主要用于两类操作,一类是用于数据传递的,例如一个设备发来了读请求(MDR)、I/O读请求(IORd)、配置读请求(CFGRdx)以及原子操作,当我们接收到这类数据包时需要返回对应内容,返回的数据内容必然携带数据信息。另一类是I/O写请求(IORd)、配置写请求,它们时Non-Poste模式,需要对其响应(应答),当收到这样一包数据后就会发送一包不含数据信息的数据,也就是完成报文。无论何种类型,完成事务都采用ID路由的方式,即BDF路由方案,下面我们就解析下完成事务的帧格内容。
1、第一行(Byte0~Byte3)
这行内容是通用帧头,Fmt有“010”和“000”两种,分别表示含有有效数据和不含有有效数据内容。Type也分为“01010”和“01011”两种,表示不锁定的完成报文和锁定的完成报文。
2、Requester ID(Byte 8)
首先说请求ID,这个与内存事务的请求ID一致,该字段与Tag组成“Transaction ID”用来实现数据包的路由。当收到了上文所说的读请求(MDR)、I/O读请求(IORd)、配置读请求(CFGRdx)以及原子操作,需将接收数据包中的“Transaction ID”填充到此进行返回。
3、Completer ID(Byte4)
首先明确一件事情,对于ID路由模式,依靠的是“Transaction ID”,也就是Requester ID和Tag组合,所以“Completer ID”并不具有路由功能。它的存在是当发送的报文是用来实现应答响应功能时所要添加的。
4、Compl Status
这是一个3bit数,该字段保存完成报文的状态,具体如下
Status |
描述 |
0b000 |
SC(Sucessful Completion),响应成功,正常结束 |
0b001 |
UR(Unsupported Request),不支持的数据请求 |
0b010 |
CRS(Configuration Request Retry Status),要求数据请求方进行重试。当RC对一个PCIE目标设备发起配置请求时,如果该目标没有准备好,可以向RC发出CRS完成报文,当RC收到该报文时不能结束本次配置请求,必须择时重新发送配置请求。 |
0b100 |
CA(Completion Abort),数据夭折,表示目标设备无法完成本次数据请求 |
其它 |
保留 |
5、BCM和Byte Count
BCM(Byte Count Modified)是用于PCI-X设备的。PCI-X设备进行存储器读请求时,目标设备不一定一次就能将所有数据传递给源设备。此时目标设备在进行第一次数据传递时,需要设置Byte Count字段和BCM位,具体的日后有空补充吧,貌似不耽误学习PCIE。
6、Lower Address字段
如果完成报文是用来传递数据的,那么该字段存放的是存储器都完成TLP中的第一个数据所对应地址的最低位。因为在完成报文中,并没有“Last DW BE”和“1st DW BE”。但协议格式似乎并没有字段产生该报数据的长度,这些内容是在其它地方定义,称之为“Max_Payload_Size”和“Max_Read_Request_Size”。
2.2.4 配置事务
配置是从PCI就有的机制,PCIE继承了PCI的配置方式。对于PCIE,配置是由RC发起的,采用ID路由方式与目标设备进行数据交换实现配置功能,如下为配置事务的帧格式。
1、第一行(Byte0~Byte3)
这部分是通用帧头,与前文所述一致,但对于配置事务,有些字段是固定的。Fmt=000是配置读,=010是配置写,TC必须为0。Attr必须为0,Length必须为1。last DW必须为0。1st DW 字段根据配置读写请求的大小设置。
2、第二行(Byte4~Byte7)
这部分和内存事务一样,存储本地的BDF。
3、第三行(Byte8~Byte11)
“BDF”指的是目标设备地址。Ext.Reg. Number 和Register Numbers是存放寄存器号的,这部分内容会在配置相关章节进行阐述。
消息报文主要用于INTx中断消息报文、电源管理消息报文、错误消息报文、锁定事务消息报文、插槽电源限制消息报文和Vendor-Defined Messages。
2.3事务传输方式
正如前文所述,数据交换是基于请求与完成(响应)的机制,分为Non-Posted和Posted两种模式。Non-Posted模式即请求端(requester transmits)发送完一包数据到目标设备(completer),目标设备要返回一包数据到请求设备,告知其接收情况。Posted模式则不需要目标设备返回TLP数据包,但在链路层有相关的应答机制用于维护链路传输,如下是不同事物类型的传输机制。
2.3.1 Non-Posted事物类型
如上表,Non-Posted模式有可分为两类,第一类是读事物,即MRd、MRdLk、IORd、CfgRd0/1,第二类是写事物,即IOWr、CfgWr0\1。
首先看第一类读事物,如下图所示。
第二类写事物,如下图所示。
2.3.2 Posted事物类型
post事物类型包括MWr、Msg和MsgD。
2.3.3 一个案例
欢迎关注“沧小海的FPGA”微信公众号,回复“PCIE”可获取相关资料,其中包括
1、协议规范的中文翻译
2、相关英文资料
3、PCIE的使用教程
沧小海笔记之PCIE协议解析——第二章 详述PCIE事务层相关推荐
- 【沧小海笔记】之基于FPGA的以太网设计相关知识——第三章 xilinx 三速以太网IP核(TEMAC)的介绍
总目录在这里哦~ https://blog.csdn.net/z123canghai/article/details/114649502 Xilinx为我们提供了一个叫做"Tri-Mode ...
- 沧小海笔记之基于xilinx的三速以太网相关知识的学习与理解
目录 第一章 读<图解TCP/IP>笔记 第二章 互联网概述 第三章 物理层介绍(基于88E1111) 第四章 xilinx 三速以太网IP核(TEMAC)的介绍 第一章 读< ...
- 沧小海基于xilinx srio核的学习笔记之第二章 Rapidio技术概述
总的目录在这哦~ https://blog.csdn.net/z123canghai/article/details/114648658 目录 第二章 Rapidio技术概述 2.1 总体原则 2.2 ...
- 沧小海详解面试的必答题——I2C协议
目录 第一部分:I2C协议的概述 第二部分:I2C协议的阐述 第三部分:AT24C04简述 第四部分:基于verilog的程序设计(暂无) 对于大多从事FPGA行业的应届生来说,在面试过程中很可能会被 ...
- 沧小海笔记本之xilinx srio核的学习记录之目录
目录 第一章:互连问题 第二章 Rapidio技术概述 第三章 xilinx srio核结构 3.1 xilinx srio核的结构介绍 3.2 ilinx srio核的HELLO格式和流控 3.3 ...
- 沧小海笔记本之A7系列FPGA资源介绍
目录 第一部分:I / OBANK部分资源介绍 1.1 I/O BANK概述与ILOGIC资源概述 1.2 IDELAYE2.IDELAYCTRL和OLOGIC的资源介绍 1.3 OSERDES ...
- 计算机组成原理笔记(王道考研) 第二章:数据的表示和运算1
内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记. 感谢LY,他帮我做了一部分笔记.由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些. 西电的计算机组织与体系 ...
- 计算机组成原理笔记(王道考研) 第二章:数据的表示和运算2
内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记. 感谢LY,他帮我做了一部分笔记.由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些. 西电的计算机组织与体系 ...
- 叉积 微分 恒等式_考研真题分章解析 | 第二章 导数与微分
高数思维 导读:本系列专辑为考研真题分章解析,主要包括:函数.极限与连续.一元函数微分学.一元函数积分学.多元函数微分学.多元函数积分学.空间解析几何.级数.微分方程等内容,共计12章,整理了近32年 ...
- 沧小海读《图解TCP/IP》笔记——第六章 TCP与UDP
总目录在这里~ https://blog.csdn.net/z123canghai/article/details/107855399 子目录 6.1 传输层的作用 6.2 UDP 6.3 TCP 6 ...
最新文章
- mysql server远程连接_MySql server:开放mysql远程连接
- Bit-Z转入GXS、PPS、SPHTX、EOS未到账解决方案
- ​年底大会火爆,看“瑶台”如何搭建一场高质量沉浸式大会
- skynet源码阅读5--协程调度模型
- AIDL Service,跨进程调用Services
- Ubuntu用户Steam控制器不工作的解决办法
- javascript数组去重方法汇总
- ZigBee 快速入门(协议栈,协调器,路由器,终端设备,加入网络,安全,路由功能,频段)
- [笔记]numpy中的tile与kron的用法
- CISCO ASR9000 密码恢复
- dede获取顶级栏目
- Java8新特性——Map的新方法
- ajax,HTTP原理 : 网络传输协议,网页从输入url到渲染的流程,函数防抖和节流
- 用函数编程实现输出 m~n之间所有素数,并求和,m和n由键盘输入。(c语言)
- Java二叉树和红黑树
- 氢os android 7.0,氢OS 3.0正式推送!基于Android 7.0,简洁纯净
- 【EI会议推荐】第四届机器人、智能控制与人工智能国际学术会议(RICAI 2022)
- My97DatePicker 日期控制,开始时间不能大于结束时间,结束时间不能小于开始时间
- JAVA Json-Schema接口校验利器
- 本证方程的本征值 与 特征方程的特征值 的 区别 辨析