【PCIe】TLP结构与配置空间

本文详细介绍了PCIeTLP(TransactionLayerProtocol)结构,包括Header的组成部分、TLP类型及其编码,以及PCIe配置空间和地址空间的构成,特别是BaseAddressRegister(BAR)的作用和内存映射过程。此外,还提到了如何通过BDF寻址PCIe设备的不同功能。
摘要由CSDN通过智能技术生成

在这里插入图片描述

🔥博客主页:PannLZ


PCIe TLP结构

在这里插入图片描述

TLP 主要由3个部分组成: Header 、 数据(可选,取决于具体的TLP 类 型 ) 和 ECRC (End to End CRC, 可选)。TLP 都始于发送端的事务层,终于接收端的事务层。

每个 TLP 都有一个 Header 。 事务层根据上层请求内容,生成 TLP Header Header 包括 发送者的相关信息、目标地址(该 TLP 要发给谁)、TLP 类型(诸如前面提到的内存读、内 存写)、数据长度(如果有数据的话)等。

ECRC 域为之前的 Header 和数据(如果有的话)生成一个CRC, 在接收端根据收到的 TLP 重新生成 Header 和数据(如果有的话)的CRC, 与收到的 CRC 比较, 一样则说明数据 在传输过程中没有出错,否则就有错。

TLP Header的公共部分各项内容:

  • Fmt : Format, 表明该 TLP是否带有数据,Header 是 3 DW 还是4 DW。
  • Type : TLP 类型,包括内存读、内存写、配置读、配置写、消息和响应等。 口 R : Reserved, 等于0。
  • TC: Traffic Class,TLP也分三六九等,优先级高的先得到服务。TC : 3 bit 说明可以 分为0~7这8个等级,TC 默认是0,数字越大,优先级越高。
  • Attr : Attribute, 属性,前后共三个位。
  • TH : TLP Processing Hints(处理提示)。
  • TD : TLP Digest,之前说 ECRC可选,如果这位被设置,则说明该 TLP包含 ECRC, 接收端应该做 CRC校验。
  • EP: “有毒”的数据,应远离。
  • AT : Address Type,地址种类。
  • 长度: Payload 数据长度,10位,最大为1024,单位为DW, 所以 TLP最大数据长 度是4 KB。该长度总是为DW 的整数倍,如果TLP 的数据不是 DW的整数倍(不是 4 B 的整数倍),则需要用到 Last DW BE和 1st DW BE这两个域。

TLP 格式和类型域编码:

TLPFm t域Type域说 明
Memory Read Request(内存读请求)000=3 DW,不带数据 001=4 DW,不带数据00000内存读不带数据,其Header大小为 3 D W 或 4 D W
Memory Write Request(内存写请求)010=3 DW,带数据 011=4 DW,带数据00000内存写带数据,其Header大小为 3 D W 或 4 D W
Configuration Type 0 Read Request (Type 0配置读请求)000=3 DW,不带数据0.0100读终端的配置,不带数据,Header 总是为3 DW
Configuration Type 0 Write Request (Type 0配置写请求)010=3 DW,带数据00100写终端的配置,带数据,Header总 是为3 DW
Configuration Type 1 Read Request (Type 1配置读请求)000=3 DW,不带数据00101读交换机的配置,不带数据,Header 总是为3 DW
Configuration Type 1 Write Request (Type 1配置写请求)010=3 DW,带数据00101写交换机的配置,带数据,Header 总是为3 DW
Message Request(消息请求)001=4 DW,不带数据1 0rrr消息的Header总是为4 DW
Message Request with Data(带数据 的消息请求)011=4 DW,带数据1 0rrr消息的Header总是为4 DW
Completion(响应)000=3 DW,不带数据01010响应的Header总是为3 DW
Completion with Data(带数据的晌应)010=3 DW,带数据01010响应的Header总是为3 DW

PCIe配置空间和地址空间

每个 PCIe 设备都有这样一段空间:主机软件可以通过读取它获得该设备的一些信息 也可以通过它来配置该设备。这段空间被称为PCIe 的配置空间。

PCI 或者 PCI-X 时代就有配置空间的概念,当时整个配置空间就是一系列寄存器的集合,由两部分组成:64 B的 Header 和192 B的 Capability(能力)数据结构。进入PCIe时代,PCIe能耐更大,192 B不足以罗列它的绝活。为了保持后向兼容,又 不把绝活落下,把整个配置空间由256 B 扩展成4 KB, 前面256 B 保持不 变。

配置空间的Header中很重要的是BAR(Base Address Register, 基址寄存器)。终端配置 (Type 0) 最多有6个BAR, 交换机 (Type 1) 只有2个。

CPU 如果想访问某个设备的空间,让RC 去办。例如:如果CPU 想读 PCIe设备的数据,先让RC 通过TLP 把数据从PCle 设备读到主机内存,然后CPU 从主机 内存读数据;如果CPU 要往PCle 设备写数据,则先把数据在内存中准备好,然后让RC 通 过TLP 将其写人PCle 设备。

具体实现就是上电的时候,系统把 PCle 设备开放的空间(系统软件可见)映射到内存 地址空间,CPU 要访问该PCIe 设备空间,只 需访问对应的内存地址空间。RC 检查该内 存地址,如果发现该内存地址是某个PCle 设 备空间的映射,就会触发其产生TLP 去访问 对应的PCle 设备,从而实现读或者写PCIe 设备.

设备出厂时, 这些空间的大小和属性都写在配置BAR 寄存器里面。上电后,系统软件读取这些BAR, 并 分配对应的系统内存地址空间,然后把相应的内存基地址写回BAR 。

(BAR 的地址其实是 PCI 总线域的地址, CPU 访问的是内存地址。CPU 访问PCle 设备时,需要把总线域地址转 换成内存地址。)

上电时,系统软件首先会读取 PCle设备的BAR 0, 得到数据,然后系统软 件往该BAR 0中写入全1,BAR 寄存器有些位是只读的,是PCIe设备在出厂前就固定好的,写全1进去,如果值保持不变,就说明这些位是厂家固化好的。这些固化好的位提供了这块内部空间的一些信息。

XXXX XXXXXXXX XXXX XXXX000000000000

低4位用于表明该存储空间的一些属性,比 如是/O 映射还是内存映射

一个PCIe 设备可能有若干个内部空间需要开放 出来,系统软件依次读取 BAR 1 、BAR 2 , 直到BAR 5, 完成所有内部空间的映射。

一个PCIe 设备 可能具有多个功能,比如硬盘功能、网卡功能 等,每个功能对应一个配置空间。

在整个 PCle 系统中,只要知道了总线序号、设备序号和功能序号,就能找到唯 一的功能。寻址基本单元是功能,它的ID 由总线、设备、功能(BDF) 组成。

这节详细的推荐看书《深入浅出SSD:固态存储核心技术、原理与实战(第2版)》。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PCI Express (PCIe) TLP (Transaction Layer Packet) 是 PCI Express 协议的一个重要部分,它用于在不同的 PCIe 设备之间传输数据。PCIe TLP 由四个部分组成:头部、有效载荷、可选的可扩展有效载荷和 FCS(帧校验序列)。 具体来说,PCIe TLP 的格式如下: |---------------------------| | PCIe TLP 头部 (12 字节) | |---------------------------| | 有效载荷 (0 - 1024 字节) | |---------------------------| | 可扩展有效载荷 (0 - 1024 字节) | |---------------------------| | FCS(帧校验序列)(4 字节) | |---------------------------| PCIe TLP 头部包括以下字段: - TC(传输类别):指定 TLP 的类型,比如请求(Memory Read/Write)、Completion 等。 - TD(传输方向):指定 TLP 的传输方向,是从上游设备到下游设备还是相反。 - EP(端点):指定 TLP 的目标设备端口号。 - Length(长度):指定有效载荷的长度。 - First DW BE(第一个双字节字节 Enable):指定有效载荷的第一个双字节的哪些字节是有效的。 - Last DW BE(最后一个双字节字节 Enable):指定有效载荷的最后一个双字节的哪些字节是有效的。 - Tag(标签):可选字段,用于匹配请求和 Completion TLP。 - Requester ID(请求者 ID):可选字段,用于标识发起 TLP 的设备。 - Completer ID(完成者 ID):可选字段,用于标识处理 TLP 的设备。 PCIe TLP 的有效载荷可以是数据、地址或控制信息。可扩展有效载荷在某些情况下用于传输额外的数据或信息。FCS 是一个校验序列,用于检测传输中的错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值