【PCIE体系结构二】计算机内部总线

本文介绍了计算机硬件中的总线概念,包括片内总线、内存总线、系统总线和设备总线,重点讨论了PCI和PCIe的发展历程。PCIe作为PCI的升级版,解决了带宽限制问题,其速度从PCIe1.0的2.5GT/s提升到PCIe6.0的64GT/s,并引入PAM4编码以提高传输效率。

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

参考文章:

深入PCI与PCIe之一:硬件篇 - 知乎 (zhihu.com)计算机体系结构基础(第3版)-胡伟武等-微信读书 (qq.com)

目录

总线

片内总线

内存总线

系统总线

设备总线

PCIE总线的发展历程        


总线

        上一章节讲述了计算机硬件模块的构成,这些模块是通过各类“总线”连接的,也包括我们本文的重点PCIE总线。本小节介绍一下总线的基础知识。

       总线的分类这个不多说,大家看图,接下来针对总线在计算机系统中的物理位置分类一一介绍。

片内总线

        一个SoC芯片中,集成了很多IP模块,这些IP可能来自不同的厂家,为了使这些IP能够兼容应用,所以必然会定义一个芯片内模块互联的接口总线规范。目前业界公开的主流片上互连总线是ARM公司的AMBA系列总线。高级微控制器总线架构(Advanced Microcontroller Bus Architecture,简称AMBA)系列总线包括AXI、AHB、ASB、APB等总线。这里的内容很多,不是本文的重点,后续学习计算机体系结构的时候再重点研究。

内存总线

        从计算机硬件结构的发展变化了解到,当下的CPU或SOC都集成了内存控制器,内存模组和处理器通过内存总线连接。内存总线规范是由JEDEC(Joint Electron Device Engineering Council)组织制定的,它包含了一般总线的三个层级:机械层、电气层和协议层。这里的内容也很多,不是本文的重点,后续学习内存的时候再重点研究。

系统总线

        系统总线通常用于处理器与桥片的连接,同时也作为多处理器间的连接以构成多路系统。英特尔处理器所广泛采用的QPI(Quick Path Interconnect)接口及在QPI之前的FSB(Front Side Bus),还有AMD处理器所广泛采用的HT(HyperTransport)接口都属于系统总线。系统总线是处理器与其他芯片进行数据交换的主要通道,系统总线的数据传输能力对计算机整体性能影响很大。如果没有足够带宽的系统总线,计算机系统的外设访问速度会明显受限,类似于显示、存储、网络等设备的交互都会受到影响。随着计算机系统技术的不断进步,微处理器与其他芯片间的数据传输性能成为制约系统性能进一步提升的一个重要因素。为了提升片间传输性能,系统总线渐渐由并行总线发展为高速串行总线。也有的处理器通过PCIE与IO套片(或者叫南桥)连接,这里的PCIE按照位置划分就是系统总线。

设备总线

        设备总线用于计算机系统中与IO设备的连接,也可以称为局部总线,设备总线是系统总线的延伸,用来连接外部设备。

        PCI(Peripheral Component Interconnect)总线是一种对计算机体系结构连接影响深远并广泛应用的设备总线。PCIE(PCI Express)可以被看作PCI总线的升级版本,兼容PCI软件架构。PCIE总线被广泛地用作连接设备的通用总线,在现有计算机系统中已经基本取代了PCI的位置。从本章第2小节可以看到PCIE总线的位置,一般和SATA、USB、显示等设备接口位于同样层次,用于扩展外部设备,比如可以在PCIE插槽上插网卡、显卡、固态硬盘等,也可以通过接口转换芯片将PCIE扩展成其他接口。

        那PCI怎么出来的?为什么要用PCIE替代PCI呢?处理器工艺、主频不断提升,IO交互的数据量越来越大,比如说网口的速率越来越高、硬盘的容量越来越大、显示的分辨率越来越高等等,这就需要配备速率更快、带宽更高的设备总线。

        在PCI总线规范定义之前,计算机依次使用了8位的XT总线、16位的ISA总线、32位的EISA总线、VESA总线、MCA总线等局部总线。在1992年6月22日,intel发布了PCI 1.0规范,随后几年PCI总线快速获得了各大厂家的认可,迅速统一了当时并存的各种局部总线(对显卡来说,PCI的带宽不够,此时替代VESA总线的是AGP总线),从此后的较长一段时间PCI总线在计算机体系结构中一直占据着重要地位,大多数设备都是直接或间接通过PCI总线与处理器连接。

        从PCI到PCIE很好理解,因为并行的PCI总线带宽上不去了,于是在2001年,非营利组织PCI-SIG召集了英特尔、AMD、博通、IBM、微软等厂商提出了PCIe(Peripheral Component Interconnect Express)新总线标准,变成了高速串行总线。当下的计算机系统里PCIE是主流,PCI用的比较少了。

   关于计算机中局部总线的发展变化具体情况可以参考此文:深入PCI与PCIe之一:硬件篇 - 知乎 (zhihu.com)

PCIE总线的发展历程        

        如下图,PCIe 从2003年的1.0版本开始到2022年的6.0经历了数次更新,速度从2.5GT/s提升到了64GT/s(下面这张图是2022年以前的,没有更新)。

        PCIE从1.0到6.0,几乎每一代物理线路传输速率都是翻倍增长,注意这里的传输速率单位为GT/S,也就是Giga transation per second (千兆传输/秒),每一秒内传输的次数,重点在于描述物理层通信协议的速率属性,和链路吞吐量不是相等关系。吞吐量单位一般为GB/s或Gb/s,表示每秒可以传输的原始数据比特数,吞吐量=传输速率*编码方案,比如PCIe 2.0协议的每一条Lane支持 5GT/s * 8 / 10=4 Gbps=500 MB/s的吞吐量。详细的速率变化如下表:

PCIE版本

PCS编码

Raw bit传输速率

吞吐量

X1

X4

X8

X16

1.0

8b/10b

2.5GT/s

250MB/s

1GB/s

2GB/s

4GB/s

2.0

8b/10b

5GT/s

500MB/s

2GB/s

4GB/s

8GB/s

3.0

128b/130b

8GT/s

984.6MB/s

3.938GB/s

7.877GB/s

15.754GB/s

4.0

128b/130b

16GT/s

1.969MB/s

7.877GB/s

15.754GB/s

31.508GB/s

5.0

128b/130b

32GT/s

3.9MB/s

15.8GB/s

31.5GB/s

63GB/s

6.0

1b/1b

64GT/s

8GB/s

32GB/s

64GB/s

128GB/s

       这里需要再说明一下PCIE 6.0的吞吐量计算方式。我们以前在《以太网硬件》系列文章提到过以太网的编码,分为介质无关编码和介质相关的编码(或者说是调制),文章链接:(2条消息) 【以太网硬件四】以太网信道编码方式有哪些?_以太网编码方式_highman110的博客-CSDN博客

        PCIE中也类似,上表中列的pcs编码为介质无关编码,是在信号往外发之前在芯片内部的编码,pcs层编码完成后得到了上表中描述的raw bit数据,顾名思义raw bit就是未加工的数据bit,这些数据在发送到外面的介质上传输时还需要经过一次介质相关的调制,比如1.0到5.0的NRZ,把芯片内部代表数据流bit0和bit1调制到外部走线所要求的对应电平,这种调制不会改变信号的传输速率,一个bit对应一个电平码元。而到了PCIE 6.0就不同了,为了使吞吐量翻倍,raw bit数据速率达到了64GT/s,如果还用NRZ这种方式,外部走线传输速率也用64GT/s,频率过高带来的插损过大,无法进行可靠的传输。所以采用了PAM4的编码方式,把原来的数据流通过4电平码元进行传输,一个码元可以表示2bit的数据,所以外部走线的波特率可以保持和PCIE 5.0一样,为32GBd,大大降低了插损的要求。关于NRZ与PAM4的区别,大家可查阅下其他文章。

浅谈PCIe体系结构 浅谈PCIe体系结构 - 1 - 目录 - 1 - 第I篇PCI体系结构概述 - 1 - 第1章PCI总线的基本知识 - 3 - 1.1 PCI总线的组成结构 - 6 - 1.1.1 HOST主桥 - 6 - 1.1.2 PCI总线 - 7 - 1.1.3 PCI设备 - 7 - 1.1.4 HOST处理器 - 8 - 1.1.5 PCI总线的负载 - 9 - 1.2 PCI总线的信号定义 - 10 - 1.2.1 地址和数据信号 - 10 - 1.2.2 接口控制信号 - 11 - 1.2.3 仲裁信号 - 13 - 1.2.4 中断请求等其他信号 - 14 - 1.3 PCI总线的存储器读写总线事务 - 15 - 1.3.1 PCI总线事务的时序 - 15 - 1.3.2 Posted和Non-Posted传送方式 - 16 - 1.3.3 HOST处理器访问PCI设备 - 17 - 1.3.4 PCI设备读写主存储器 - 19 - 1.3.5 Delayed传送方式 - 21 - 1.4 PCI总线的中断机制 - 23 - 1.4.1 中断信号与中断控制器的连接关系 - 23 - 1.4.2 中断信号与PCI总线的连接关系 - 24 - 1.4.3 中断请求的同步 - 25 - 1.5 PCI-X总线简介 - 28 - 1.5.1 Split总线事务 - 28 - 1.5.2 总线传送协议 - 28 - 1.5.3 基于数据块的突发传送 - 29 - 1.6 小结 - 29 - 第2章PCI总线的桥与配置 - 30 - 2.1 存储器域与PCI总线域 - 30 - 2.1.1 CPU域、DRAM域与存储器域 - 31 - 2.1.2 PCI总线域 - 32 - 2.1.3 处理器域 - 32 - 2.2 HOST主桥 - 34 - 2.2.1 PCI设备配置空间的访问机制 - 35 - 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 - 37 - 2.2.3 PCI总线域地址空间到存储器域地址空间的转换 - 39 - 2.2.4 x86处理器的HOST主桥 - 42 - 2.3 PCI桥与PCI设备的配置空间 - 45 - 2.3.1 PCI桥 - 45 - 2.3.2 PCI Agent设备的配置空间 - 47 - 2.3.3 PCI桥的配置空间 - 50 - 2.4 PCI总线的配置 - 54 - 2.4.1 Type 01h和Type 00h配置请求 - 54 - 2.4.2 PCI总线配置请求的转换原则 - 56 - 2.4.3 PCI总线树Bus号的初始化 - 58 - 2.4.4 PCI总线Device号的分配 - 60 - 2.5 非透明PCI桥 - 62 - 2.5.1 Intel 21555中的配置寄存器 - 63 - 2.5.2 通过非透明桥片进行数据传递 - 65 - 2.6 小结 - 67 - 第3章PCI总线的数据交换 - 68 - 3.1 PCI设备BAR空间的初始化 - 68 - 3.1.1 存储器地址与PCI总线地址的转换 - 68 - 3.1.2 PCI设备BAR寄存器和PCI桥Base、Limit寄存器的初始化 - 70 - 3.2 PCI设备的数据传递 - 72 - 3.2.1 PCI设备的正向译码与负向译码 - 72 - 3.3.2 处理器到PCI设备的数据传送 - 74 - 3.2.3 PCI设备的DMA操作 - 74 - 3.2.4 PCI桥的Combining、Merging和Collapsing - 75 - 3.3 与Cache相关的PCI总线事务 - 77 - 3.3.1 Cache一致性的基本概念 - 77 - 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写 - 82 - 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写 - 83 - 3.3.4 PCI设备进行DMA写时发生Cache命中 - 85 - 3.3.5 DMA写时发生Cache命中的优化 - 87 - 3.4 预读机制 - 89 - 3.4.1 Instruction Fetch - 89 - 3.4.2 数据预读 - 92 - 3.4.3 软件预读 - 94 - 3.4.4 硬件预读 - 96 - 3.4.5 PCI总线的预读机制 - 97 - 3.5 小结 - 101 - 第II篇PCI Express体系结构概述 - 102 - 第4章PCIe总线概述 - 104 - 4.1 PCIe总线的基础知识 - 104 - 4.1.1 端到端的数据传递 - 104 - 4.1.2 PCIe总线使用的信号 - 106 - 4.1.3 PCIe总线的层次结构 - 109 - 4.1.4 PCIe链路的扩展 - 111 - 4.2 PCIe体系结构的组成部件 - 114 - 4.2.1 基于PCIe架构的处理器系统 - 114 - 4.2.2 RC的组成结构 - 117 - 4.2.3 Switch - 118 - 4.2.4 VC和端口仲裁 - 120 - 4.2.5 PCIe-to-PCI/PCI-X桥片 - 122 - 4.3 PCIe设备的扩展配置空间 - 124 - 4.4 小结 - 125 - 第5章PCIe总线的事务层 - 126 - 5.1 TLP的格式 - 126 - 5.1.1 通用TLP头的Fmt字段和Type字段 - 127 - 5.1.2 TC字段 - 129 - 5.1.3 Attr字段 - 130 - 5.1.4 通用TLP头中的其他字段 - 131 - 5.2 TLP的路由 - 133 - 5.2.1 基于地址的路由 - 133 - 5.2.2 基于ID的路由 - 135 - 5.2.3 隐式路由 - 138 - 5.3 存储器、I/O和配置读写请求TLP - 139 - 5.3.1 存储器读写请求TLP - 139 - 5.3.2 完成报文 - 144 - 5.3.3 配置读写请求TLP - 146 - 5.3.4 消息请求报文 - 147 - 5.4 TLP中与数据负载相关的参数 - 148 - 5.4.1 Max_Payload_Size参数 - 148 - 5.4.2 Max_Read_Request_Size参数 - 149 - 5.4.3 RCB参数 - 149 - 5.5 小结 - 150 - 第6章 MSI和MSI-X中断机制 - 151 - 6.1 MSI/MSI-X Capability结构 - 152 - 6.1.1 MSI Capability结构 - 152 - 6.1.2 MSI-X Capability结构 - 154 - 6.2 PowerPC处理器如何处理MSI中断请求 - 158 - 6.2.1 MSI中断机制使用的寄存器 - 159 - 6.2.2 系统软件如何初始化PCIe设备的MSI Capability结构 - 162 - 6.3 x86处理器如何处理MSI-X中断请求 - 165 - 6.3.1 Message Address字段和Message Data字段的格式 - 165 - 6.3.2 FSB Interrupt Message总线事务 - 168 - 6.4 小结 - 169 - 结束语 - 170 -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

highman110

你的鼓励将是我最大的创作动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值