PCIe的事务传输层的处理(TLP)

主要从以下几个方面解决:

1.TLP基本的概念:

2.寻址定位与路由导向

3.请求和响应机制

4.虚拟通道机制

5.数据完整性

6.i/o,memory,configuration,message request、completion

1.

上文提到,传输层transaction Layer specification是用来接受请求和发送响应的,有四种地址空间,三种处理类型:

  1. 一类是对IO和memary操作的读写包,其中memary读请求包和响应包,写请求包,写不需要响应包,,IO的读写都需要请求和响应包。
  2. 一类是对配置寄存器操作的读写包,读写都请求和响应包,其中的请求包按属性分为NP-non posted和posted(不需要响应和需要响应)
  3. 数据包,用于描述通信状态并且把状态作为事件信号告知用户。

每个类型的包都有包头(TLP header),有效数据负荷(Data Payload),以及开销块(Tlp Digest)。

有数据的TLP包的传递规则是:按照指定DW长度单位传递数据,发送端的数据承载量不得超过“Device Control Register”中的“Max_Payload_Size”数值,接收端中,所接收到的数据量也不能超过接收端“Device Control Register”中的“Max_Payload_Size”数值。TLp Digest域是32位的ECRC校验

对于包头,具体的 组成部分

2

寻址定位和路由导向:

三种寻址方式:地址路由(address)、ID识别路由、间接路由(implicit)

  1. 地址寻址主要用于IO和memary的请求包寻址,对于memary而言,读写请求包支持的地址位是64位(TLP header是4DW)也可以是32位(TLP header是3DW),而IO的只支持32位。
  2. ID寻址主要用于confignation请求包,部分message包,响应包,ID包括Bus number、Divce number、function number为TLP定位目标接收器。ID寻址的TLP包头长度也有4DW和3DW两种,ID在TLP中位置见下图

处理层描述符(transaction Descriptor (TD),用于请求器件和应答器件间转送处理层信息,包括三部分,Transaciton ID、Attributes、Traffic class(TC)。如下图。

 

 

其中Transaction ID包括: Requester ID、Tag,如图。

 

 

Tag[7:0]是由产生请求包的器件生成的,如果请求器件需要应答,则每个Tag[7:0]和Function Number是独一无二的。Transaction ID是一个全局标识符用于响应包寻址请求器件。

TC的规定如下,描述服务的层次和用于映射虚拟通道:处理层描述符在请求包中第二个DW:中图中看出,描述字符放在第二个DW的前三个字节中。

3.请求和应答机制

 该机制的作用就是:对从DLL接到的已经经过数据完整性的TPL进行处理。抛弃无效的包,并且将保留字忽略。

  • 对所有的包分request handling和completion handling,按不同的规范处理。
      •   Request Handling Rules
      • 请求是一个不支持的请求包,并且需要响应,则Completion Status=UR,即不支持的请求
      • 2请求包是一个Message 包则按Message包处理规则处理,否则对这个request进行处理
      • 如果请求违反器件编程定义则给出ca响应,即响应器件放弃该请求,否则做出正确应答
      • completion handling: 如果接收到一个completion包的Transaction ID和requester的Transaction ID不一致则这个应答包是非预期包。合法的应答包将按Compl.Status域处理并提取有效数据负荷。

4

虚拟通道机制:

  • 在总线中用TC域来区分的虚拟信息通路,即某一传输通路,有不同的流程控制机制(Flow Control)。当某流程控制出现拥塞时,其他通路依然畅通。VC有自己的独立流控制,是实现Qos的秘诀。VC通道是解决拥塞的基础。
  • 每个TLP包并不包含具体的VC信息,VC是由TC映射得到的。每个器件的TC/VC映射是不同的,TC0/VC0是固定的。一个或多个TC映射到一个VC,同一个TC不能映射到不同的VC上,连接双方的映射机制一致。除了TC0外,其他的可以软件设置。链路两端的映射方案要一致,

每个虚拟通道有独立的流程控制的缓冲空间。流程控制能分辨三种包:posted requests(p)、non-posted requests(Np)、completions(cpl)。还可以分辨三种包的包头Header和数据Data,可以这样说,每个虚拟通道(VC)对应的特定流程控制包含6种不同的流程控制信息:1、PH=posted Request Header;2、PD=posted request Data Payload;3、NPH=non-posted request Header;4、NPD=non-posted request Data Payload;5、CPLH=completion Header;6、CPLD=completion Data Payload。

 

5

数据完整性

保证数据完整性的方式有:Data Link Layer中的crc(LCRC)。为了确保数据端对端的可靠性在Transaction层的TLp Digest域还选择性的做一ECRC校验

ECRC的初值是FFFF FFFF

 

原文地址:https://www.cnblogs.com/Dinging006/p/9014505.html