前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译文】【第一章①】Mindshare PCI Express Technology 3.0

【译文】【第一章①】Mindshare PCI Express Technology 3.0

作者头像
空白的贝塔
发布2021-12-27 16:34:04
1.9K0
发布2021-12-27 16:34:04
举报
文章被收录于专栏:摸鱼范式

原文:Mindshare

译者:Michael ZZY

校对: LJGibbs

欢迎参与 《Mindshare PCI Express Technology 3.0 一书的中文翻译计划》

https://gitee.com/ljgibbs/chinese-translation-of-pci-express-technology

扫描二维码进入仓库

Chapter 1 Background //背景

关于本章

为了建立理解PCI Express(PCIe)体系结构的基础,本章先回顾了早于PCIe总线出现的PCI(Peripheral Component Interface外设组件接口)的总线模型,并描述了他们的基本特征以及各自特点,接着讨论了从早期的并行总线模型迁移到PCIe使用的串行高速总线模型的出发点和动机。

关于下一章

下一章对PCIe体系结构进行了介绍,并打算作为一个“操作执行级(executive level)”的概述,它覆盖了高层体系结构的所有基础内容。它介绍了协议规范中给出的分层的PCIe端口设计方法,并描述了每个层级的职责作用。

1.1 引言

想要理解PCIe的首先一步,是要对PCIe所基于的先前的技术建立坚实的基础,而本章则将对它们的体系结构进行概述。对PCI已经比较熟悉的读者可以跳过本章去看下一章。如本章标题“背景”,本章仅意在给出一个简明的概述。对于关于PCI和PCI-X的更深更细节的内容,请参考MindShare的书籍《PCI System Architecture》以及《PCI-X System Architecture》。

这里可以通过举一个例子来说明为什么本章的背景介绍是对理解PCIe有帮助的,现在在PCIe上使用的软件(驱动)与当初在PCI上使用的软件大致相同。保持这种向后的兼容性,使得旧的设计迁移到新的设计(PCI到PCIe)时可以让软件修改的尽可能少、花费尽可能低的成本,这即是在鼓励就设计向新设计迁移。最终的结果就是,旧的支持PCI的软件在PCIe系统中的工作方式无需发生改变,而新的软件(PCIe的驱动软件)也将按照PCI一样的模型进行操作(例如对配置空间的操作)。基于这样的原因以及其他的一些原因,理解PCI以及它的操作模型将有助于促进对PCIe的理解。

1.2 PCI与PCI-X

PCI(Peripheral Component Interface外设组件接口)总线,其被开发出来的时间为1990年代初,当时人们期望用它来解决PCs(personal computer个人电脑)的外设总线的一些缺点。而那个年代的这个领域的技术标准是IBM的AT总线(Advanced Technology),它也被其他供应商称为ISA总线(Industry Standard Architecture)。ISA总线是为286 16位计算机而设计的,它在286上也发挥了足够的性能,但随着新型的32位计算机及其外设们出现,新的需求也出现了:更高的带宽、更多更好的功能(例如即插即用)。除此之外,ISA总线使用的连接器是具有较多针脚数的大型连接器。PC供应商们认识到了需要做出一定的改变了,几种用于替代ISA总线的设计也被提出,例如IBM的MCA(Micro-Channel Architecture),EISA总线(Extended ISA,这是由IBM的竞争对手提出的),以及VESA总线(Video Electronics Standards Association,它由声卡供应商们为适配声卡而提出)。然而,所有的这些设计都具有一些使得它们无法被普及的缺点。最终,一个由PC市场的主要公司们共同联合建立的组织PCISIG(PCI Special Interest Group)开发出了PCI总线,并将其作为一种开放总线。在当时,PCI这种新型总线体系结构在性能上大大的优于ISA,而且它在每个设备内部新定义了一组寄存器,称之为配置空间(configuration space)。这些寄存器使得软件可以查看一个PCI设备内部所需的存储和IO资源,同时让软件为一个系统下的各个设备分配互不冲突的地址。这些特性:开放式设计、高速、软件可见性与可控性(software visibility and control),帮助PCI克服了限制ISA与其他总线的发展障碍,让PCI迅速地成为了PC中的标准外设总线。

几年之后,PCI-X(PCI eXtended)被开发出来,作为PCI体系结构的一种逻辑扩展(logical extension),并将总线性能提升了不少。我们将稍后再讨论PCI-X相较于PCI的改变,但是需提前一提的是PCI-X的一个主要设计目标就是保持与PCI设备的可兼容性,而且是软件和硬件的兼容性都要保证,这将使得从PCI迁移至PCI-X尽可能的简单。不久后,PCI-X 2.0版本将速率提升到了更高,原始数据速率达到了4GB/s。因为PCI-X保持了对PCI硬件上的向后兼容性,所以它依然是一个并行总线,并继承了与该总线模型相关的一些问题。有意思的事情来了,并行总线的有效带宽最终会达到一个实际的上限(paractical ceiling),然后就无法简单的继续提升。而PCISIG一直在探索如何将PCI-X的速率进一步提升,但最终这项努力还是被放弃了。这种速率上限,连同多针脚的连接方式,虽然是并行总线的缺点但是同时也提供了动力,推动了并行总线模型向新型的串行总线模型转型。

这些早期总线的定义被罗列在表 1‑1,它展示了随时间发展而变得更高的带宽与频率。表中有一点很有趣的地方,那就是时钟频率和总线上插板卡的插槽数量之间的相关性。这是由PCI的低功耗信号模型带来的,这意味着更高的总线频率需要更短的板上走线以及更少的总线负载(详情可见“Reflected-Wave Signaling”)。另外有趣的一点是,随着总线频率的增加,共享总线上允许的设备数量在减少。当PCI-X 2.0被引入使用时,想要达到它的高速率需要要求总线变为一个点到点的互连(point-to-point interconnect)。

表 1‑1 总线频率、带宽、插槽数量的对比

1.3 PCI基础(PCI Basics)

1.3.1 基于PCI的系统的一些基础知识

图 1‑1展示了一个基于PCI总线的老系统结构。该系统包括一个北桥(North Bridge称为“北”是因为如果将图看做一张地图,它位于中央PCI总线的北方向),北桥是处理器与PCI总线之间的接口。与北桥相连的是处理器总线(processor bus)、系统存储总线(system memory bus)、AGP图像总线(AGP graphics bus),以及PCI总线。几个设备将会共享PCI总线,它们要么直接与总线相连,要么作为插入板卡插入到连接器上。在中央PCI总线的“南方”有一个南桥(South Bridge),它用于将PCI与系统外设相连接,这里的系统外设可以是为了使用旧的遗留设备而应用发展了多年的ISA总线。南桥通常也是PCI的中心资源区(central resource),它提供了一些系统信号诸如复位、参考时钟和错误报告操作。

图 1‑1基于旧PCI总线的平台

1.3.2 PCI总线发起方(Initiator)与目标方(Target)

在PCI层次结构中,总线上的每个设备(device)可以包含多达8个功能(function),这些功能都共享该设备的总线接口,功能编号为0到7(一个仅具有单功能的设备通常将被分配功能号0)。每个功能都能作为总线上事务(transaction)的目标方,而且它们中的大多数还可以作为事务的发起方。这样的发起方(称为总线主设备)有一对针脚(REQ#与GNT#,符号#表示他们为低有效信号),这一对信号用来处理共享PCI总线时的仲裁。如图 1‑2所示,请求信号(REQ#)有效时表示主设备需要使用总线,并将此信息告知总线仲裁器来与此时所有的其他请求一起进行评估仲裁,最终将得出下一时刻由哪一个设备来占用PCI总线。仲裁器通常位于桥(bridge)中,桥是一种在层次结构中位于总线之上的结构,它可以接收总线上所有事务发起方(总线主设备)所发出的仲裁请求。仲裁器将决定谁下一个占用总线,并将这个设备的Grant(GNT#)置为有效(asserts the Grant pin for that device)。根据协议,只要总线上的上一个事务结束且总线进入空闲状态时,对于任意设备,只要在此时看到自己的GNT#信号被置为有效,那么就可以认为它是下一个占用总线的主设备,它就可以开始发起它的事务。

图 1‑2 PCI总线仲裁

1.3.3 典型的PCI总线周期

图 1‑3展示了一次典型的PCI总线周期。PCI总线是同步总线,这意味着总线上的活动都发生在时钟边沿,因此将时钟信号放在图标的顶部,并将它的上升沿都用虚线标注出来,这是因为信号正是在这些虚线所表示的时刻被发出(driven out)或被采样(sampled)。下面对总线上发生了什么进行一个简明的描述。

\1. 在时钟沿1,FRAME#信号(此信号有效时被用来表示总线访问正在进行中)和IRDY#信号(Initiator ReaDY for data,发起方准备好数据)这两个信号都处于未有效状态,这表示总线处于空闲状态。与此同时,GNT#有效,这意味着总线仲裁器已经选择了该设备作为下一个事务发起方。

\2. 在时钟沿2,发起方将会把FRAME#信号置为有效,这表示一个新的事务已经被它发起。与此同时,它将把这个事务的地址与命令驱动到总线上。总线上其他所有的设备都将会把这些信息锁存起来,并将地址译码,查看自己的地址是否与之相匹配。

\3. 在时钟沿3,发起方将IRDY#信号置为有效,这表示它已经准备好了进行数据传输。图中AD总线上的环形箭头符号表示这个三态总线(可以理解为inout型)正处于“转向周期”,这意味着这个信号的拥有者(三态总线上的信号此时是谁驱动的)发生了变化(这里出现“转向周期turn-around cycles”是因为这是一个读事务;发起者发出地址信息和接收数据的信号引脚是相同的)。打开目标方(target)的缓冲buffer的时钟沿与关闭发起方缓冲buffer的时钟沿不能相同,因为我们想尽量避免两个buffer都在驱动同一个信号的可能性(即都往AD总线上驱动数据),哪怕只是很短的时间也不行。总线的争用将会损坏设备,因此,需要在前一个buffer关闭后的下一个时钟再打开一个新的buffer。在改变总线的驱动方向之前,每个共享信号都需要这样进行处理。

\4. 在时钟沿4,总线上的一个设备识别到了请求的地址与自己相匹配,于是便通过将DEVSEL#信号(device select)置为有效的方式对事务发出响应,声明参与到事务中。与此同时,它将把TRDY#信号(Target ReaDY)置为有效,这表示它正在发送读数据的第一部分,并将数据驱动到AD总线上(放到总线上的时间可以后延,总线允许目标方在FRAME#有效与TRDY#有效间间隔最多16个时钟周期)。由于此时IRDY#与TRDY#都处于有效状态了,数据将在此上升沿开始传输,至此完成了第一个数据阶段(first data phase)。Initiator知道最终一共要传输多少字节的数据,但是Target并不知道。在事务的命令信息中并不包含字节数信息,因此每当完成一个数据阶段,Target都必须查看FRAME#信号的状态,以此来得知Initiator是否对传输的数据量满意(即是否达到Initiator需要的数据量)。如果FRAME#依然有效,那么说明这并不是最后一个数据阶段,Target仍然需要继续向Initiator传输数据,事务将按照相同的方式继续处理接下来传输的字节。

\5. 在时钟沿5,Target还没有准备好继续发送下一组数据,因此它将TRDY#置为无效。我们将这种情况称为插入了一个“等待状态”,这使得事务被延迟了一个时钟周期。Initiator和Target都可以进行这样的操作,它们最多可以将下一次数据传输后延8个连续的时钟周期。

\6. 在时钟沿6,第二组数据被传输,并且由于传输后FRAME#信号依然有效,Target就知道依然需要继续向Initiator传递数据。

\7. 在时钟沿7,Initiator强制总线进入了一个等待状态。在等待状态中,设备可以使当前事务暂停,并快速地将要发送的数据填充进buffer或是将接收到的缓存在buffer内的数据搬出,能进行这样的操作是因为Initiator和Target允许事务在暂停后直接恢复,而不需要进行中止和重启事务的操作。但是从另一方面来说,这样的操作将会十分低效,因为它不仅使当前事务停顿,同时也禁止其他设备访问和使用总线,尽管此时总线上没有数据在传输。

\8. 在时钟沿8,第三组数据被传输,并且此时FRAME#信号被置为无效,因此Target得知这就是最后一次数据传输。因此,在这一个时钟周期后,所有的控制信号线都关闭,总线再次进入了空闲状态。

在PCI总线上,许多信号都具有多种含义,这是为了减少引脚数量,以此来保持PCI设计中的低成本这一设计目标。数据和地址信号一起复用32bit总线,C/BE#(Command/Byte Enable)信号也共享他们的4个信号引脚。尽管减少引脚数量是一种可行的方法,并且它也是PCI使用“转向周期”这种会增加延时的方法的原因。但是这种复用引脚的做法阻止了对事务的流水线操作(在发送上一个周期的数据的同时发送下一个周期的地址)。握手信号诸如FRAME#、DEVSEL#、TRDY#、IRDY#以及STOP#被用来控制在事务(transaction)进行期间,各事件(event)何时进行。

图 1‑3简单的PCI总线传输

1.3.4 反射波信号传输(Reflected-Wave Signaling)

PCI体系结构支持每路总线上最多挂载32个设备,但是由于实际的电气上限要小得多,在33MHz的基频下大约可以支持10到12个电气负载。出现这种现象是由于总线使用了一种技术称为“反射波信号传输”,该技术可以降低总线上的功率损耗(如图 1‑4)。在这个模型中,设备通过实现弱传输缓冲buffer(weak transmit buffer)来达到节省成本与功耗的目的,这种方法可以仅需一半的驱动电压即可完成信号电平的翻转。信号的入射波沿着传输线传输下去,直到到达传输线的末端。按照设计,传输线的末端没有终结电阻(termination)吸收回波,所以信号传输并没有就此中止,波阵面(wavefront)在遭遇传输线末端的无穷大阻抗后会被反射回来。这种反射自然是具有叠加性的,当信号返回发射方时,它会与入射信号叠加使信号增加到全电压电平。当这样的反射信号到达初始的buffer时,buffer驱动器的低输出阻抗会中止这个信号的传输以及停止其继续反射。因此,从buffer发出一个信号一直到接收方检测到有效的信号所花费的时间,就等于信号沿线路传输的时间加上反射回来的延迟时间和建立时间。所有这些都必须小于一个时钟周期。

图 1‑4 PCI的反射波信号传输

当走线长度和总线上的电气负载数量增加时,信号往返所需要的时间也增加。一个33MHz的PCI总线只能满足最多10-12个电气负载的信号时序要求。一个电气负载指的是系统板上安装的一个设备,但是实际上一个插了板卡的连接器插槽被算作两个电气负载。因此,如表 1‑1所示的那样,一个33MHz的PCI总线最多只能支持至多4个或者5个插入板卡型设备,否则将无法保证可靠性。

为了在一个系统中接入更多的负载,需要使用PCI-to-PCI bridge,如图 1‑5所示。当出现了越来越多更为先进的主芯片组后,外设的发展也十分迅速,以至于竞争访问共享PCI总线变成了限制外设性能的原因。PCI总线的速率没有跟上外设速率增长的脚步,虽然它依旧是主流的外设总线,但是已经成为了系统的性能瓶颈。这个问题的解决办法为,把PCI移到系统外设与存储器之间的主路径之外,将芯片组互连用一些专有的解决方案来替代(例如Intel的Hub Link Interface)。

PCI Bridge是拓扑结构的延伸。每个Bridge都能产生新的PCI总线,而且这种由PCI Bridge产生的PCI总线与上层PCI总线在电气上是相隔绝的,因此它也可以独立的提供额外的10-12个电气负载。PCI总线上的一些设备也可以作为Bridge,可以令较多的设备接入系统中。PCI体系结构允许在单系统中存在256路总线,每路总线下最多可以挂载32个设备。

图 1‑5 包含PCI-to-PCI bridge的33MHz PCI系统


原文:Mindshare

译者:Michael ZZY

校对: LJGibbs

欢迎参与 《Mindshare PCI Express Technology 3.0 一书的中文翻译计划》

https://gitee.com/ljgibbs/chinese-translation-of-pci-express-technology

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Chapter 1 Background //背景
    • 关于本章
      • 关于下一章
        • 1.1 引言
          • 1.2 PCI与PCI-X
            • 1.3 PCI基础(PCI Basics)
              • 1.3.1 基于PCI的系统的一些基础知识
              • 1.3.2 PCI总线发起方(Initiator)与目标方(Target)
              • 1.3.3 典型的PCI总线周期
              • 1.3.4 反射波信号传输(Reflected-Wave Signaling)
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档