NVMe事务层学习(一)

一、TLP分类

1、四种分类法

TLP 包按照请求类型可分为四个种类的请求,分别是 Memory 型,IO 型,Config 型,Message 型。其中,前三种 TLP 事务都是在 PCI 总线中就有定义的,而 Message 型事务是 PCIe 总线新定义的事务类型。

当一个设备要对另一个设备进行读写操作时,该设备要首先按照事务类型的不同,向对端设备发出相应的 TLP 包,而对端设备在接收到 TLP 包后,通过 Completion 包返回数据或一些

2、三种分类法

TLP 也可以分为 Posted、Non-Posted、Completion 三类

Posted 类事务,事务的发送端设备向接收端设备发出一个请求事务包,接收端在收到事务包后,不用向发送端返回相关信息。

Non-Posted 类事务,事务的发送端设备向接收端设备发出一个请求事务包,而接收端在收到事务包后应当向发送端发回一个完成包(Completion)作为响应。

Completion类事务,针对Non-Posted 类事务的返回类型,能确保正确性。

注意:Non-Posted 请求所对应的 Completion 包,是事务层用于返回相关信息的。

对于每一个 TLP,还有数据链路层的 ACK/NAK 机制确保其正确性, 即每一个 TLP 发出后,数据链路层都必须收到一个 ACK 包确保对端设备的正常收。

这与事务层的 Posted 和 Non-Posted 类型相互独立,互不干涉

二、事务包结构

可以是三部分(校验可选,由Header部分决定),其中1DW等于32bit

重点:Header 格式

TLP包的具体结构是和Header密切相关的,所以Header的格式十分重要

以下是 Header 中不同字段所表示的简要含义:

Fmt 字段:表示 Header 的长度以及这一个 TLP 是否包含数据

Type 字段:表示该 TLP 的事务类型。每一种类型的事务包对应不同的 Type 值

 TC 字段:表示传输类别,用于确定 TLP 的优先级。PCIe 最多可以支持 8 个 优先级,即 TC0~TC7。当终端设备不支持虚拟信道时,默认为 TC0.

TD 字段:表示该 TLP 是否使用了摘要字段,即 ECRC。如果 TD=1,则该 TLP 中存在 1DW 的 ECRC。当 TD 为 1,但没有 ECRC 时,该事务包为畸形事务;如果接收端设备不支持 ECRC,则接收方会忽略 ECRC。

Attr 字段:Attr 字段是监听位和排序位,主要是为了兼容一些 PCI 总线的特性。 其中,bit5 位是宽松排序位使能 RO。当 bit5 被置位 1 时,表明该 TLP 支持宽松排序,P 事务包可以超越 CPL,NP 事务包可以超过 P。

EP 字段:中毒字段。当 TLP 经过交换机时可能会产生数据损坏,当交换机探测到数据损坏时,将 EP 字段置位。如果 EP 为 1,则该 TLP 数据无效。但是该事务仍然会被正常传输

AT 字段:表示地址类型是否需要转码。

Length 字段:TLP 有效载荷的长度,即数据长度。长度的单位为 DW(双字 节),最长不超过 1024DW(4kb),其中 00_0000_0000b 表示 1024DW。

Last DW 和 1st DW 字段:这是两个字节使能字段。由于 PCIe 规定中包的长度必须是与 DW 对齐的,即在 PCIe 规范中,事务包的大小必须是 DW 的整数倍, 因此第一个 DW 和最后一个 DW 可能会出现无效数据位。这些 bit 与数据字节的第 一位和最后一个 DW 进行对应,表示 DW 中有效数据的字节位。

Tag 字段:这一字段用来表示事务序号,用来对 PCIe 事务进行区分和识别。 当发送端发出一个需要完成包的 NP 类型 TLP 时,接收方需要返回一个完成 TLP。 完成包的 Tag 字段与请求 TLP 的 Tag 字段相同。

请求者 ID 字段:这一字段用来识别发送设备,包括了发送方的总线号、设备 号、功能号。

Byte8~15 为 64 位地址字段,4DW的Header;如果只有32 位地址(Byte8~11),则3DW 的 Header。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值