PCIe configuration 包分析

本文分析默认以EP为几点,不讨论关于RC的内容。本文的重点是配置包(cfgwr,cfgrd)包的分析,分析包的组成,包的作用域以及包的路由方式。开始分析之前,先给出以上的基础知识。

1基础知识

1. pcie包的分类

pcie根据组成,包可分为三种,TLP,DLLP, orderset。本文讨论的配置包为TLP包,由下图可知TLP有header以及数据payload。重点关注header部分。

TLP

DLLP

orderset

2. 配置包作用域

如下图所示,为PCIe的配置空间示意图。前面的256BYTE是必须的,后面的1K-256 BYTE是非必须的,配置空间就像一个清单,把这个设备的,准确说功能块的属性信息,包含id以及各种能力。配置包的操作的空间就是这块区域。

3. 配置包路由方式

根据PCIe的规格可知,枚举是根据深度优先搜索的遍历方法,进行编号。下图很形象的展示了,在整个拓扑结构中,通过BDF就可以确定功能块的位置,BDF即bus number + device number + function number(ARI能力除外)。配置空间是功能块独有的属性,所以用BDF的路由方式,比地址更加方便。

2. cfgwr包分析

1. 基本域分析

由包头的定义可知,更具长度分为3DW和4DW两种,包头的第一BYTE就知道包传输的是哪种类型,cfgwr是3DW,cfgwr为0x44,cfgrd0x04,下午主要讨论0x44这种包。

配置空间没有优先级虚拟等传输特性,所以TC/AT/ATTR必须为0. 因为是3DW,每次操作的数据只有一个DW,所以last BE为0,length为1。

由上文基础知识可知配置空间总共为1KB。必须实现的是256B,所以register number为6为,对应256B, ext_register为4位,总共10位正好对应1KB空间。分析可以访问的地址为

BDF + ext_register + register

2. 作用机制分析

下图颜色有些花,请海涵。对于cfgwr操作,需要有回复的cpl包。这点关于nonposted包的描述请查阅相关文档,本文不再赘述。由上文可知,BDF + ext_register + register可以访问到具体的寄存器。completer为执行操作的主体,所以completer id其实就是BDF,这点用相同颜色表示。为什么还要有tag呢?tag是为了做outstanding的实现,理论上我可以有256个写配置空间的请求在路上,在有应答之前。既然有BDF,为什么还需要requester id呢?想下,在一个拓扑有很多设备,那我的回复信息,应该给谁呢?虽然说PCIe是点对点的传输机制,最起码我要把完成的信息路由回去,这样master才知道配置写的操作已经完成了。

由上文,可以知道PCIe的配置包的工作机理,下面给出了一个包的实现例子,希望本文能让大家对配置包有个基本的认知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹海EE---(Mickey WMY)

您的估计是对笔者工作的最大支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值