编辑
2024-02-28
工作知识
0
请注意,本文编写于 464 天前,最后修改于 451 天前,其中某些信息可能已经过时。

目录

PCIE事务层-tlp包格式
TLP事务类型
TLP包格式
tlp prefix
tlp header
tlp data payload
tlp digest

PCIE事务层-tlp包格式

事务层主要处理生成和接收TLP包,以及其他如交换流控信息,支持软件和硬件启动的电源管理,这里主要说TLP包。

image.png

TLP事务类型

主要包括四个类型,内存,IO,配置,消息。如下图

image.png

TLP包格式

TLP包有前缀,头,数据,摘要四个部分组成,如下图

image.png

详细的TLP包格式如下图

image.png

tlp prefix

对于TLP的包的前缀包含如下字段。

image.png

前缀默认只有1dword,也就是上述字段。这里注意的是prefix的fmt一定是100b,其中type位的4位代表前缀的类型。对于local tlp prefix的type字段如下

image.png

组合起来如下

  • 1000 0000 ---> MR-IOV
  • 1000 1110 ---> VendPrefixL0
  • 1000 1111 ---> VendPrefixL1

对于end-end tlp prefix 的type字段如下

image.png

组合起来如下

  • 1001 0000 ---> ExtTPH
  • 1001 0001 ---> PASID
  • 1001 1110 ---> VendPrefixE0
  • 1001 1111 ---> VendPrefixE1

这里VendPrefix均是Vendor定义的TLP前缀字段

tlp header

和prefix一样,header的第一个dword也是固定格式

image.png

但是对于fmt字段,不是prefix的固定的100,而是如下定义

image.png

这里fmt的值代表整个header包含多少个dword,

而接下来的type字段确定tlp的类型,故fmt和type的对于tlp包的类型如下图

image.png

image.png

这里还有如下字段解释

  • R:预留
  • TC[2:0]: 流量控制,默认是0,最大流量,001-111是基于优先级的流量控制等级
  • Attr[2]:是否支持ID-Based Ordering(设置允许不相关流量之间放宽排序要求,避免pcie在生产者和消费者模型中发送死锁)
  • LN:对于内存请求中,指示是否为LN Read还是LN Write,对完成者指示LN是否完成
  • TH:是否存在TPH(TLP Processing Hints)
  • TD:确定是否存在1个dword的tlp digest
  • EP:确定tlp的数据是否有效(CRC校验),1代表无效
  • Attr[1:0]:bit5标识是否打开Relaxed Ordering,bit4标识是否打开硬件(cache)一致性管理
  • AT: 与地址转换有关,00b=未转换的地址,01b=地址转换请求,10b=已转换的地址,11b=预留

关于length域,主要如下

  • Length[9:0]:tlp的data payload的大小,以dword为单位

image.png

tlp data payload

对于data payload,需要注意如下

  1. 通常情况下,payload的size是length[9:0]大小的dword,但是在Device Control寄存器会设置一个Max_Payload_Size,length[9:0]的值不能超过这个size。
  2. header后面的数据第一个字节更趋近于0,后面的字节逐步增加(非AtomicOp Request和AtomicOp Completion)
  3. 如果是AtomicOp Request和AtomicOp Completion,则第一数据字节应该是数据的最低有效字节,如果涉及到小端,则是header-0x100-0x107。因为0x100是最低位字节,如果涉及大端,则是header-0x107-0x100。 如下图

image.png

对于数据 76543210,如果非AtomicOp Request和AtomicOp Completion,则0x100存放0,0x107存放7(第二点) 如果是AtomicOp Request和AtomicOp Completion,如果目标内存架构是小端,则100存放0,107存放7(小端数据高位存在低地址)。如果是大端,则100存放7,107存放0.

tlp digest

如上述可知,TD位如果是1,则tlp址出digest,并且digest域存放ecrc的值,当然,如果tlp本身不支持ecrc校验,则应该主动忽略digest域的内容

这里ECRC的意思是,end to end crc,端到端crc。ecrc与lcrc不同的点是,数据的内部转发不会对lcrc值进行校验,如果转发过程中出现错误,则可以通过ecrc来进行判断。