首页 理论教育PCIExpress体系结构导读:DLLP格式解析

PCIExpress体系结构导读:DLLP格式解析

【摘要】:设置DLLP的目的是为了保证TLP的正确传送和管理PCIe链路。值得注意的是,DLLP并不是由TLP加上Sequence前缀和LCRC后缀组成的,而具有单独的格式。图7-4 DLLP的格式大多数DLLP由PCIe设备自动产生,而与事务层没有直接联系。表7-1 DLLP的编码这些DLLP报文的描述如下。该DLLP表示接收端正确收到来自对端的TLP。ACK和NAK DLLP与ACK/NAK协议相关,是数据链路层的两个重要DLLP。这两个DLLP的详细作用如第7.2节所述。一些定制的DLLP,PCIe总线规范并未对此约束。这些DLLP由用户自定义使用。

DLLP与TLP的概念并不相同,DLLP产生于数据链路层,终止于数据链路层,这些报文不会出现在事务层中,而且对系统软件透明。设置DLLP的目的是为了保证TLP的正确传送和管理PCIe链路。

值得注意的是,DLLP并不是由TLP加上Sequence前缀和LCRC后缀组成的,而具有单独的格式。一个DLLP由6个字节组成,其中第1个字节存放DLLP的类型,第2~4个字节存放的数据与DLLP类型相关,而最后两个字节存放当前DLLP的CRC校验。DLLP的格式如图7-4所示。

978-7-111-29822-9-Part02-74.jpg

图7-4 DLLP的格式

大多数DLLP由PCIe设备自动产生,而与事务层没有直接联系。PCIe总线定义了以下几类DLLP报文,如表7-1所示。

表7-1 DLLP的编码

978-7-111-29822-9-Part02-75.jpg

这些DLLP报文的描述如下。

●ACK DLLP。该DLLP由接收端发向发送端。接收端收到TLP报文后,将根据数据链路层的阈值设置,向对端设备发送ACK DLLP,而不是每接收到一个TLP,都向对端发送一个ACK DLLP。该DLLP表示接收端正确收到来自对端的TLP。

●NAK DLLP。该DLLP由接收端发向发送端。该DLLP表示接收端有哪些TLP没有被正确接收,发送端收到NAK DLLP后,将重传没有被正确接收的TLP,同时释放已经被正确接收的TLP。ACK和NAK DLLP与ACK/NAK协议相关,是数据链路层的两个重要DLLP。这两个DLLP的详细作用如第7.2节所述。

●Power Management DLLPs。PCIe设备使用该组DLLP进行电源管理,并向对端设备通知当前PCIe链路的状态。PCIe总线还定义了一组与电源管理相关的TLP,这些TLP与这组DLLPs有一定的联系,但是其作用并不相同。PCIe总线使用该组DLLP保证电源管理状态机的正确运行。(www.chuimin.cn)

●Flow Control Packet DLLPs。该组DLLP包括InitFC1、InitFC2、UpdateFC DLLP,PCIe总线使用这些DLLPs进行流量控制。在PCIe总线中,数据传送由三大类组成,分别为Posted、Non-Posted和Completion。这三种数据传送方式有些细微区别,PCIe设备为这三种数据传送设置了不同的数据缓冲。流量控制是PCIe总线的一个重要特性,第9章将重点介绍这些内容。

●Vendor-specific DLLP。一些定制的DLLP,PCIe总线规范并未对此约束。这些DLLP由用户自定义使用。

本节将重点介绍ACK/NAK DLLP,这两个DLLP与PCIe总线的ACK/NAK协议直接相关。在PCIe总线中,数据链路层使用ACK/NAK协议保证TLP的可靠传送。ACK/NAK DLLP的格式如图7-5所示。

978-7-111-29822-9-Part02-76.jpg

图7-5 ACK/NAK DLLP

ACK/NAK DLLP各字段的详细说明如表7-2所示。

表7-2 ACK/NAK DLLP的详细说明

978-7-111-29822-9-Part02-77.jpg

发送端的数据链路层负责将TLP传送给接收端,而接收端的数据链路层在收到TLP之后,将向发送端发送ACK/NAK DLLP。发送端和接收端通过某种传送协议,完成数据链路层的数据交换,在PCIe总线中,这个协议称为ACK/NAK协议。