来源: http://www.ssdfans.com/?p=3683


无论Request TLP,还是作为回应的Completion TLP,它们模样都差不多:

图5.1

TLP主要由三部分组成:Header,Data和CRC。TLP都是生于发送端的事务层(Transaction Layer),终于接收端的事务层。

每个TLP都有一个Header,跟动物一样,没有头就活不了,所以TLP可以没手没脚,但不能没有头。事务层根据上层请求内容,生成TLP Header。Header内容包括发送者的相关信息、目标地址(该TLP要发给谁)、TLP类型(前面提到的诸如Memory read,Memory Write之类的)、数据长度(如果有的话)等等。

Data Payload域,用以放有效载荷数据。该域不是必须的,因为并不是每个TLP都必须携带数据的,比如Memory Read TLP,它只是一个请求,数据是由目标设备通过Completion TLP返回的。后面我们会整理哪些TLP需要携带数据,哪些TLP不带数据的。前面也提到,一个TLP最大载重是4KB,数据长度大于4KB的话,就需要分几个TLP传输。

ECRC(End to End CRC)域,它对之前的Header和Data(如果有的话)生成一个CRC,在接收端然后根据收到的TLP,重新生成Header和Data(如果有的话)的CRC,和收到的CRC比较,一样则说明数据在传输过程中没有出错,否则就有错。它也是可选的,可以设置不加CRC。

图5.2

Data域和CRC域没有什么好说的,有花头的是Header域,我们要深入其中看看。

一个Header大小可以是3DW,也可以是4DW。以4DW的Header为例,TLP的Header长下面样子:

图5.3

红色区域为所有TLP Header公共部分,所有Header都有这些;其它则是跟具体的TLP相关。

稍微解释一下:

Fmt:Format, 表明该TLP是否带有数据,Header是3DW还是4DW;

Type:TLP类型,上一节提到的,Memory Read, Memory Write, Configuration Read, Configuration Write, Message和Completion,等等;

R: Reserved,为0;

TC: Traffic Class,TLP也分三六九等,优先级高的先得到服务。这里是3比特,说明可以分为8个等级,0-7,TC默认是0,数字越大,优先级越高;

Attr: Attrbiute, 属性,前后共三个bit,先不说;

TH: TLP Processing Hints,先不说;

TD: TLP Digest,之前说ECRC可选,如果这个这个bit置起来,说明该TLP包含ECRC,接收端应该做CRC校验;

EP: Poisoned data, 有毒的数据,远离,哈哈;

AT: Address Type,地址种类,先不说;

Length: Payload数据长度,10个bit,最大1024,单位DW,所以TLP最大数据长度是4KB; 该长度总是DW的整数倍,如果TLP的数据不是DW的整数倍(不是4Byte的整数倍),则需要用到下面两个域:

Last DW BE 和 1st DW BE。

我觉得,到目前为止,对于Header,我们只需知道它大概有什么内容,没有必要记住每个域是什么。

这里重点讲讲Fmt和Type,看看不同的TLP(精简版的,Native PCIe设备所有)其Fmt和Type应该怎样编码

Table 5.1

从上可以看出,Configuration和Completion 的TLP(以C打头的TLP), 其Header大小总是3字节; Message TLP的Header总是4字节;而Memory相关的TLP取决于地址空间的大小,地址空间小于4GB的,Header大小为3DW,大于4GB的,Header大小则为4DW。

上面介绍了几个TLP Header的通用部分,下面分别介绍具体TLP的Header。

Memory TLP

有两个重要的东西在前面没有提到,那就是TLP的源和目标,即该TLP是哪里产生的,它要到哪里去,它们都包含在Header里面的。因为不同的TLP类型,寻址方式不同,因此要具体TLP具体来看这两个东西。

图5.4

对一个PCIe设备来说,它开放给Host访问的设备空间首先会映射到Host的内存空间,Host如果想访问设备的某个空间,TLP Header当中的地址应该设置为该访问空间在Host内存的映射地址。如果Host内存空间小于4GB,则Memory读写TLP的Header大小为3DW,大于4GB,则为4DW。那是因为,对4GB内存空间,32bit的地址用1DW就可以表示,该地址位于Byte8-11;而4GB以上的内存空间,需要2DW表示地址,该地址位于Byte8-15。

该TLP经过Switch的时候,Switch会根据地址信息,把该TLP转发到目标设备。之所以能唯一的找到目标设备,那是因为不同的Endpoint设备空间会映射到Host内存空间的不同位置。

关于TLP路由,后面还会专门讲。

Memory TLP的目标是通过内存地址告知的,而源是通过"Requester ID"告知。每个设备在PCIe系统中都有唯一的ID,该ID由总线(Bus)、设备(Device)、功能(Function)三者唯一确定。这个后面也会专门讲,这里只需知道一个PCIe组成有唯一的ID,不管是RC, Switch还是Endpoint。

Configuration TLP

Endpoint和Switch的配置(Configuration)格式不一样,分别为Type 0和 Type 1来表示。配置可以认为是一个Endpoint或者Switch的一个标准空间,这段空间在初始化时也需要映射到Host的内存空间。与设备的其他空间不同,该空间是标准化的,即不管哪个厂家生产的设备,都需要有这么段空间,而且哪个地方放什么东西,都是协议规定好的,Host按协议访问这部分空间。由于每个设备ID唯一,而其Configuration又是固定好的,因此,Host访问PCIe设备的配置空间,只需指定目标设备的ID就可以了,不需要内存地址。

下面是访问Endpoint的配置空间的TLP Header (Type 0):

图5.5

Bus Number + Device + Function就唯一决定了目标设备; Ext Reg Number + Register Number相当于配置空间的偏移。找到了设备,然后指定了配置空间的偏移,就能找到具体想访问的配置空间的某个位置。

Message TLP

Message TLP用以传输中断、错误、电源管理等信息,取代PCI时代的边带信号传输。Message TLP的Header 大小总是4DW。

图5.6

Message Code来指定该Message的类型,具体如下:

图5.7

不同的Message Code,最后两个DW的意义也不同,这里不展开。

Completion TLP

有non-posted request TLP,才有Completion TLP。有因才有果。前面看到,Requester 的TLP当中都有Requester ID和Tag,来告诉接收者发起者是谁。那么响应者的目标地址就很简单,照抄发起者的源地址就可以了。因此,Completion TLP的Header如下:

图5.8

Completion TLP,一方面,可以返回请求者的数据,比如作为Memory或者Configuration Read的响应;另一方面,还可以返回该事务(Transaction)的状态,因此,在Completion TLP的Header里面有一个Completion Status,用以返回事务状态:

图5.9


09/21/2017 Thu


http://www.taodudu.cc/news/show-4553924.html

相关文章:

  • tcp协议系列文章(3):TLP算法
  • PCIE TLP报文
  • PCIE调试笔记理解--TLP理解
  • Mongodb 安装详解
  • 详细图解mongodb下载、安装、配置与使用
  • mongoDB简记
  • mongodb数据库的下载、安装、配置与使用
  • MongonDB下载、安装(Windows)、配置详解
  • 使用KlipC避开平台扫止损,控制止盈和延迟订单成交
  • 闵帆老师《论文写作》课学习心得
  • 论文写作经验 集萃
  • 论文写作课程内容总结
  • 存储过程排版工具_文案创作者必备的7个写作辅助工具类网站,记得收藏
  • 《控制系统设计指南》_George Ellis著_部分章节读书笔记
  • 读书笔记 节选示例
  • 深入浅出数据分析读书笔记
  • 多模型读后感【1】
  • The Phoenix Project 读书笔记00
  • 【方法】如何高效率的阅读一篇论文
  • 怎么样读论文?
  • 如何读一篇论文
  • 一文读懂汉明码
  • 《JavaScript DOM 编程艺术》读书笔记
  • java 邮件 已读回执_java – 在Firebase群组消息传递应用中实施已读回执功能
  • 读书清单2020
  • 读 Herbert George Wells 之 A Short History of The World
  • mit2021计算机竞赛女生,2021全国大学生计算机系统能力大赛操作系统设计赛第一场研讨会隆重举行...
  • 益聚星荣:阿里巴巴的“电商帝国”正走向衰落
  • CSDN高校俱乐部“名师高校行”——贵州遵义站
  • 万物云开启路演:拟募资8亿美元 淡马锡与高瓴是基石投资者

老男孩读PCIe之五:TLP结构相关推荐

  1. 老男孩读PCIe之四:TLP类型

    来源: http://www.ssdfans.com/?p=3704 Host与PCIe设备之间,或者PCIe设备与设备之间,数据传输都是以Packet形式进行的.事务层根据上层(软件层或者应用层)请 ...

  2. 老男孩读PCIe介绍系列

    老男孩读PCIe系列 文章目录 老男孩读PCIe系列 老男孩读PCIe之一:从PCIe速度说起 老男孩读PCIe之二:PCIe拓扑结构 老男孩读PCIe之三:PCIe分层结构 老男孩读PCIe之四:T ...

  3. [转]老男孩读pcie

    转自 http://www.ssdfans.com/blog/2017/08/03/%E8%80%81%E7%94%B7%E5%AD%A9%E8%AF%BBpcie%E4%B9%8B%E4%B8%80 ...

  4. 老男孩读PCIe之一:从PCIe速度说起

    老男孩读PCIe之一:从PCIe速度说起 Posted on 2017年8月3日 by SSD Fans 原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢! 从今天开 ...

  5. PCIe系列专题之二:2.3 TLP结构解析

    一.故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transacti ...

  6. 同一 等价和自然数的生成:皮亚诺公理3解读——皮亚诺读后之五

    同一 等价和自然数的生成:皮亚诺公理3解读--皮亚诺读后之五 鼠年的最后一晚,万里之遥的视频,带来孩子们新春的问候.春节的广州静悄悄的,牛年,就这么紧随着鼠年成为人们的过往记忆而款款而来.大年初二,一 ...

  7. PCIe各版本结构剖析

    最近在学习驱动开发过程中涉及到PCI相关知识,在网上看了很多文章,良莠不齐,我总结一下比较好的文章分享给大家,那就从源头开始说起. PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围 ...

  8. 戴德金的数学归纳法 戴德金读后之五(尾篇)

    标题 戴德金的数学归纳法 戴德金读后之五(尾篇) 理解戴德金完全归纳法的观念背景,似乎是在做一场哲学思辨.你面对的是那些在生活学习中经常碰到的一些抽象物,引你遐思,好像总能有些许领悟的感觉.但是,当你 ...

  9. PCIe扫盲——TLP Header详解(一)

    转:http://blog.chinaaet.com/justlxy/p/5100053352 事务层包(TLP)的一般格式如下图所示: 前面的文章介绍过,TLP Header为3DW或者4DW,Da ...

最新文章

  1. python求偶奇数和差编程_选择最大奇数Python
  2. 支持向量机原理(五)线性支持回归
  3. 在Centos 5.2下编译安装LAMP
  4. android倒计时录制视频下载,android录制视屏(预览,倒计时)
  5. Java远程方法调用
  6. 安装python的moviepy_MoviePy 安装 配置
  7. IDEA MAVEN Project 显示问题
  8. 处理大并发之四 libevent demo详细分析(对比epoll)
  9. 816 - Abbott's Revenge
  10. 字节跳动新加坡职位 Algorithm Engineer (Platform Governance)
  11. xshell的快捷复制粘贴设置(*)
  12. 开车二十年后得到的真实的26条教训!开车的人一定看看!
  13. 英语语法笔记——特殊句型(六)
  14. 关于Gson对日期的格式化
  15. java像素鸟素材_像素鸟FlappyBird素材(图片+音乐)
  16. 照片估计明星身高matlab,对比上万张合照,国内男星身高终极论证
  17. Propagation delay
  18. Android 13 针对 Intent filters 安全的再加强
  19. CSS3新增的相关属性
  20. 220V工频正弦波逆变器设计

热门文章

  1. 移动互联网:微信搜索功能大改版
  2. cvi读写.csv文件
  3. 项目管理:PMP、IPMP、CPMP之间区别
  4. eclipse安装svn插件报错
  5. CSS 发明者 Håkon Wium Lie 访谈(三)
  6. 《塞尔达传说:旷野之息》技术分析:游戏神作是怎么炼成的
  7. 基础进阶ODS、DWD、DWM等模型分层与项目实战
  8. Go微服务实战2:了解微服务
  9. 【S0021】【素材】创意几何海报、h5背景
  10. mysql is双竖线_MySQL 5.0 新特性教程 存储过程:第二讲