大话PCIe:总线结构与配置空间

原创 2017年06月30日 00:41:27

把有限的精力花在真正有价值的事情上。

每个PCIe设备都位于一个总线架构中(RC、SW和EP共同组成了一个PCIe网络),如何组织这些设备,以及如何访问这些设备呢?

一、网络拓扑与设备端口

上一篇已经讲到构成PCIe网络的三个角色:RC、SW和EP。其实这整个网络给人感觉就像乐高积木,上一级设备的下游端口接下级设备的上游端口,然后端口不但能看出链接状态,还提供包传输的链路。

这里有两个常见的概念:DSP(Down Stream Port)和USP(Upper Stream Port)。对每个功能设备来讲,用来连接上下游设备的端口统称为DSP或者USP。

整个网络的拓扑如图[1]所示

屏幕快照 2017-06-29 23.05.43.png

上面有这么多的设备,自然而然想到的第一个问题是:怎么来标记各个设备呢?答案是通过总线号和设备号。

举例如下:第一级RC所在的层级,定义为Bus 0,这个没有什么问题。那么下一级bus怎么定义的呢?通过bridge或者switch设备来定义,每个bridge或者switch代表一级bus。对于同样连接在RC上的bridge和switch,根据深度优先搜索来定义bus,譬如上图中,如果最下面的switch是RC上的第一个device,那么这个switch就代表了Bus 1。连在这个switch DSP上的设备都属于Bus 1。

关于总线,设备和功能:PCIe规范规定,一个PCIe设备网络中,最多支持256级Bus,每条Bus下面可以挂32个device,每个device最多拥有8个function。如果一个device存在,那么必须存在function 0。这样的话,通过Bus、Device和Function就能唯一匹配到特定的功能设备。

二、配置空间

上一节说到定义Bus的问题,根据深度优先搜索,我们知道了应该给每一级bridge分配的总线号,具体到操作上讲,其实就是往对应设备(一定是bridge或者switch)的配置空间的0x18位置写总线号。配置空间是针对function而言的,每个function都有其配置空间(说白了其实就是一堆配置寄存器)。

如果一个device是bridge或者switch,那么其function的配置空间[2]是这个样子的。

屏幕快照 2017-06-30 00.12.32.png

每个PCIe设备下的function都要实现4KB的配置空间,从设备内部地址0开始,注意这里是在设备内部的。因此访问PCIe配置空间不能通过直接读写系统总线实现,因为系统总线上看到的是CPU地址。在PCIe标准中,访问PCIe配置空间的是cfg tlp(configuration transaction layer packet)。cfg tlp又分为type 0和type 1,type 1用来访问PCIe桥,type 0访问端点设备。综上所述,要访问SW的配置空间,就要发起cfg type1 tlp;要访问EP配置空间,就要发起cfg type0 tlp。每种cfg tlp又分read(rd)和write(wr),排列组合一下,cfg tlp就有四种形式:type 0 rd、type 0 wr、type 1 rd、type 1 wr。

综合地址编码和配置空间的介绍,这里给出每个function在PCI域的配置基址:cfg_base[27:20] = Bus Number,cfg_base[19:15] = Device Number,cfg_base[14:12] = Function Number。

这里遗留了两个问题:

  1. 既然PCIe设备配置空间是内部的,和外部总线地址有什么关系呢?每个function在PCI域的配置地址是怎么被应用的?
  2. 如何发起cfg type0 tlp或者cfg tpe1 tlp?

这两个问题留待下篇文章解决吧。

下篇预告:PCIe地址空间与tlp

[1] PCI_Express_Base_Specification_Revision_4.0.Ver.0.3
[2] DWC_pcie_reference

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

大话PCIe:设备枚举

人的一生是一个不断认识自我,发展自我的过程。 认识PCIe设备的枚举过程需要以下知识: 拓扑结构 设备的表征及配置空间的访问 BAR空间的含义和访问 其中第1/2点在总线结构与配置空间已经介绍过了,第...

卡拉ok应用Soulo Karaoke评测

Soulo Karaoke是一款堪称自Square支付应用发布以来最酷的iPad应用。通过该应用,用户可以自己录制歌曲,并可对自己喜欢的歌曲实现一键式分享。   Soulo设置和使用均超级简单,...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

访问PCIe BAR空间

对BAR空间以及配置空间的访问做一个系统的总结,其实就是在回答以下几个问题: 1. PCIe中四种tlp和BAR空间的关系是怎样的? 2. tlp是怎么发起的? 3. tlp是怎么到相应的下游设备的...

PCIE BAR空间

PCIE应用程序编程,首先就要理清PCIE BAR空间到底说的是什么。在PCIE配置空间里,0x10开始后面有6个32位的BAR寄存器,BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的...

大话PCIe: 发展与应用

介绍PCIe的基本概念,用途。 一、串行总线PCIe作为串行总线的一种,它的发展必然和另一种总线架构密不可分:并行总线。早先,人们普遍认为提高数据位宽就能提高数据传输速率,这是谁都会想到的问题,早期的...

大话PCIe:BAR空间和TLP

上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去...

NVMe驱动解析-关键的BAR空间

PCIe的Header空间和BAR空间是PCIe得以广泛使用的关键特性。Header空间是PCIe设备的通有属性,所有的PCIe Spec功能和规范都在这里实现;BAR空间则是设备差异化的具体体现,B...

PCI/PCIe基础——配置空间

PCI/PCIe基础——配置空间

大话PCIe:DMA机制

PCIe控制器也提供DMA(Direct Memory access)功能,用来批量地异步数据传输。 一、PCIe中的DMA读和写 假设现在

大话PCIe:Linux访问PCIe空间

Linux在枚举PCIe设备的过程由内核中的PCI框架负责,在EP配置完成之后,驱动通过以下接口访问PCIe空间,原理参考前文《大话PCIe:设备枚举》一、访问配置空间相关接口位于drivers/pc...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)