PCIE学习笔记(三)事务层协议

2 篇文章 3 订阅

目录

事务层包(TLP)概述

TLP 包结构

TLP 包帧头格式

TLP包帧头格式解析:

TLP包类型编码

处理层描述符(Transaction Descriptor)

TLP寻址

包请求和完成过程的帧头格式详解

I/O request 包

Memory request 包

Configuration request包

Completions 完成包

Message Request 包

TLP报文例子 


本文主要内容来自PCI_Express System Architecture 第四章“Packet-Based Transactions”内容学习。

事务层包(TLP)概述


前面介绍过TLP包主要四种类型为:

  • 内存Memory
  • IO
  • 配置Configuration
  • 消息Message

对memory的读写包分为读请求包和响应包、写请求包(不需要存储器的响应包);I/O类型的读写请求都需要相应包;配置类型的包的读写请求也有响应包。这些包请求还可以按属性来分类:NP-nonposted, 即请求需要返回completion的响应包;还有一种就是post,不需要completion返回响应包。TLP 包类型如下表

TLP 包结构


事务层包(TLP) 有三部分组成,帧头、数据、摘要(或者称ECRC),如下图所示:

每种TLP包都有一定的格式的帧头,根据不同包的特性还有数据负荷(Data Payload)和摘要(TLP Digest).帧头中的数据用来对包的管理和控制,Data Playload 用啦存放有效数据。TLP Digest中存放32位的ECRC校验。TLP包传递以DW为长度单位,发送端不得超过“Device Control Register” 中的“max payload Size”的数值,接收端中,所接收的数据量也不能超过接收端”Device Control Register”中的“Max Payload Size”数值。

TLP包组件

协议层

功能

帧头(HDR

事务层

TLP 头标长 3 或者 4 DW,格式和内容随事物类型变化

数据(DATA

事务层

可选段,为 TLP 帧头定义下的数据段,如果该 TLP 不携带数据,那该段为空

摘要(DIG

事务层

可选段,基于头标、数据字段计算出来的 CRC,称为 ECRC。通常长度为1DW

TLP 包帧头格式


如下图所示,1个DW为4Byte,头标(HDR)长度可以是3DW或者4DW,图中以4DW为例子。

 

TLP包帧头格式解析:


Header Field

Header Location

Field Use

Fmt[1:0]

Byte 0->Bit 6:5

TLP 头的大小是由 3 个双字还是 4 个双字组成,当前 TLP 是否包含有效负载。

Type[4:0]

Byte 0->Bit 4:0

TLP 使用的总线事务

TC(Traffic Class)

Byte 1->Bit 6:4

TLP 的服务层次和用于映射的虚拟通道,PCIe 总线规定了 8 种传输虚拟通道,分别为TC0TC7,缺省值为 TC0

TD(TLP Digest Field Present)

Byte 2->Bit 7

表示 TLP 中的 TLP Digest 是否有效,为 1 表示有效,为 0 表示无效

EP(Poisoned Data)

Byte 2->Bit 6

表示当前 TLP 中的数据是否有效,为 1 表示无效,为 0 表示有效

Attr(Attribus)

Byte 2->Bit 5:4

Bit5示是否支持 Relaxed Orderingbit4表示该 TLP 在经过 RC 到达存储器时,是否需要进行 Cache 共享一致性处理。

 

Length[9:0]

Byte 2->Bit 1:0

Byte 3->Bit 7:0

描述 TLP 的有效负载(Data Payload)大小。PCIe 总线规范规定一个 TLP Data Payload 的大小。PCIe 总线设置 Length 字段的目的是提高总线的传送效率。Length 字段以 DW 为单位,其最小单位为 1 DW

 

1st DW Byte Enables

Byte 7->Bit 3:0

Bit3=1 表述数据payload 第一个双字节3有效

Bit2=1 表述数据payload 第一个双字节2有效

Bit1=1 表述数据payload 第一个双字节1有效

Bit0=1 表述数据payload 第一个双字节0有效

Last DW Byte

Enables

Byte 7->Bit 7:4

Bit7=1 表述数据payload 最后一个双字节3有效

Bit6=1 表述数据payload 最后一个双字节2有效

Bit5=1 表述数据payload 最后一个双字节1有效

Bit4=1 表述数据payload 最后一个双字节0有效

 

 

Ps:R为保留信息为,一般设置为0,路由器switch对此位不做修改,接收端忽略该bit信息。

TLP包类型编码


Fmt[1:0] 和 Type[4:0] 字段确认当前 TLP 使用的总线事务,TLP 头的大小是由 3 个双字还是 4 个双字组成,当前 TLP 是否包含有效负载。Fmt+Type配置信息如下

TLP包类型

Fmt[1:0]

Type [4:0]

Memory Read Request (MRd)

存储器读请求

00 3DW的帧头, 无数据

01 4DW的帧头, 无数据

0 0000

Memory Read Lock Request (MRdlk)

锁定存储器读请求

00 3DW的帧头, 无数据

01 4DW的帧头, 无数据

0 0001

Memory Read Request (MWr)

存储器写请求

10 3DW的帧头, 有数据

11 4DW的帧头, 有数据

0 0000

IO Read Request IORd

IO读请求

00 3DW的帧头, 无数据

 

0 0010

IO Write Request IOWr

IO写请求

00 3DW的帧头, 有数据

 

0 0010

Config Type 0 Read Request (CfgRd0)

Type 0 配置写请求

00 3DW帧头,无数据

0 0100

Config Type 0 Write Request (CfgWr0)

Type 0 配置写请求

10 3DW帧头,有数据

0 0100

Config Type 0 Read Request (CfgRd1)

Type 1 配置写请求

00 3DW帧头,无数据

0 0101

Config Type 1 write Request (CfgWr1)

Type 1 配置写请求

10 3DW帧头,有数据

0 0101

Message Request (Msg)

消息请求

014DW帧头,无数据

10 rrr*

Message Request W/data (MsgD)

带数据的消息请求

11 4DW帧头,有数据

1 0rrr*

Completion (Cpl)

完成

00 3DW帧头,无数据

0 1010

Completion W/Data (CplD)

带数据的完成

10 3DW帧头,有数据

0 1010

Completion-Locked (CplLk)

锁定完成

00 3DW帧头,无数据

0 1011

Completion-Locked W/Data

带数据的锁定完成

10 3DW帧头,有数据

0 1011

 

处理层描述符(Transaction Descriptor)


Transaction Descriptor 用来请求设备和应答设备之间传送处理层信息。包括三部分,Traffic class (TC). 、Attributes、Transaction ID如下图红色部分所示:

其中Transaction ID 包括了Request ID字段和 Tag字段,Request ID包含“生成返个 TLP 报文”的 PCIe 设备的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number)。Tag 由请求包的设备生成,如果请求设备需要应答,则每个Tag和Function Number是唯一的。Transaction ID 是 一个屈居标识符用于响应包寻址请求。

 

TLP寻址


TLP 寻址主要由三种方式:地址路由(address)、ID识别路由、间接路由(implicit)。地址路由主要用于Memory和I/0请求包,memory 读写请求包支持64位地址和32位地址,I/O请求只支持32位地址。ID 寻址方式主要用在configuration 请求包、部分message包、响应包中。ID中包含了Bus Number、Device Number、Function Number为TLP 定位目标设备。ID寻址中包长度有3DW和4DW两种。Implicit路由也可以称为隐式路由,只能用于Message路由,包长度 都是4DW.

包请求和完成过程的帧头格式详解

 

I/O request 包


I/O request包只有32位地址寻址,每次只传输一个DW数据,格式如下:

 

Ps:TC/Attr/AT/Length/Last DW BE 均为固定值。

Memory request 包


采用直接地址寻址,有64bit地址和32bit地址两种地址。其中读请求包的长度不能大于Max_Read_Request_Size寄存器中设置的值。请求设备不能请求一个超过4KB空间的read request 包。下图是两种不同地址长度的Memory request 包格式:

Configuration request包


Configuration request包采用ID寻址方式,PCIE支持Type 0 和 Type 1 两种配置操作。帧头固定长度为3DW, 如下图示:

Ps:TC/Atre/AT/Length/ Last DW BE为固定值

Completions 完成包


完成包是对应以下几种包的响应包:

完成包里的信息和请求包里面的信息有很多事相同的,如traffic Class, Attribute bits, 以及 原始的Requester ID. 固定长度为3DW,格式如下图:

 

Message Request 包


Message Request 可以用来取代早期协议中中断,错误,电源管理信号。所有的Message 都使用4DW帧头格式,可以使用ID/地址/间接三种寻址方式。格式如下图示:

TLP报文例子 


这是一个内存写请求的TLP报文:CPU 给32bit地址0xfdaff040写数据 0x12345678

报文内容0000000f40000001+12345678fdaff040,由于一次发送64位,因此这个报文的前64位是标头,后64位是数据和地址。

 

按照上图的数据格式可知

    Request ID:16’b0000_0000_0000_0000

    Tag:8’b0000_0000

    Last DW BE:4’b0000

    First DW BE:4’b1111

    Fmt:2’b10

    Type:5’b0_0000

    Length:10’b00_0000_0001

    Data:32’h12345678

    Address:32’h3f6bfc10(低两位无效)

 

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值