6.5 系统总线
系统总线通常用于处理器与桥片的连接,同时也作为多处理器间的连接以构成多路系统。
英特尔处理器所广泛采用的QPI(Quick Path Interconnect)接口及在QPI之前的FSB(Front Side Bus),还有AMD处理器所广泛采用的HT(HyperTransport)接口都属于系统总线。
系统总线是处理器与其他芯片进行数据交换的主要通道,系统总线的数据传输能力对计算机整体性能影响很大。如果没有足够带宽的系统总线,计算机系统的外设访问速度会明显受限,类似于显示、存储、网络等设备的交互都会受到影响。随着计算机系统技术的不断进步,微处理器与其他芯片间的数据传输性能成为制约系统性能进一步提升的一个重要因素。为了提升片间传输性能,系统总线渐渐由并行总线发展为高速串行总线。下面以HyperTransport总线为例介绍系统总线。
6.5.1 HyperTransport总线
HyperTransport总线(简称HT总线)是AMD公司提出的一种高速系统总线,用于连接微处理器与配套桥片,以及多个处理器之间的互连。HT总线提出后,先后发展了HT1.0、HT2.0、HT3.0等几代标准,目前最新的标准为HT3.1。
图6.18是采用HT总线连接处理器与桥片的结构示意图。
图6.18 CPU-南桥两片方案
与并行总线不同的是,串行总线通常采用点对点传输形式,体现在计算机体系结构上,就是一组串行总线只能连接两个芯片。以龙芯3A2000/3A3000为例,在四路互连系统中,一共采用了7组HT互连总线,其中6组用于四个处理器间的全相联连接,1组用于处理器与桥片的连接,如图6.19所示。而作为对比,PCI总线则可以在同一组信号上连接多个不同的设备,如图6.20所示。
图6.19 龙芯3A2000/3A3000四路系统结构示意图
图6.20 PCI总线设备连接
HT总线的软件架构与PCI总线协议基本相同,都采用配置空间、IO空间和Memory空间的划分,通过对配置寄存器的设置,采用正向译码的方向对设备空间进行访问。基于PCI总线设计的设备驱动程序能够直接使用在HT总线的设备上。
但在电气特性及信号定义上,HT总线与PCI总线却大相径庭,HT由两组定义类似但方向不同的信号组成。其主要信号定义如表6.3所示。
表6.3 HT总线主要信号定义
图6.21 HT总线连接
可以看到,图6.21中两个芯片通过定义相同的信号进行相互传输。与上一节介绍的DDR内存总线所不同的是,HT总线上,用于数据传输的信号并非双向信号,而是由两组方向相反的单向信号各自传输。这种传输方式即通常所说的全双工传输。发送和接收两个方向的传输可以同时进行,互不干扰。而采用双向信号的总线,例如DDR内存总线或者PCI总线,只能进行半双工传输,其发送和接收不能同时进行。而且在较高频率下,发送和接收两种模式需要进行切换时,为了保证其数据传输的完整性,还需要在切换过程中增加专门的空闲周期,这样更加影响了总线传输效率。
PCI接口信号定义如图6.22所示。PCI总线上使用起始信号(FRAME#)及相应的准备好信号(TRDY#、IRDY#)、停止信号(STOP#)来进行总线的握手,控制总线传输。与PCI总线不同,HT总线信号定义看起来非常简单,没有类似PCI总线的握手信号。
图6.22 PCI总线信号定义
实际上HT总线的读写请求是通过包的形式传输的,将预先定义好的读写包通过几个连续的时钟周期进行发送,再由接收端进行解析处理。同时,HT总线采用了流控机制替代了握手机制。
流控机制的原理并不复杂。简单来说,在总线初始化完成后,总线双方的发送端将自身的接收端能够接收的请求或响应数通过一种专用的流控包通知对方。总线双方各自维护一组计数器用于记录该信息。每需要发出请求或响应时,先检查对应的计数器是否为0。如果为0,表示另一方无法再接收这种请求或响应,发送方需要等待;如果不为0,则将对应的计数器值减1,再发出请求或响应。而接收端每处理完一个请求或响应后,会再通过流控包通知对方,对方根据这个信息来增加内部对应的计数器。正是通过这种方式,有效消除了总线上的握手,提升了总线传输的频率和效率。
这种传输模式对提升总线频率很有好处。PCI总线发展到PCI-X时,频率能够达到133MHz,宽度最高为64位,总线峰值带宽为1064MB/s。而HT总线发展到3.1版本时,频率能够达到3.2GHz,使用双沿传输,数据速率达到6.4Gb/s,以常见的16位总线来说,单向峰值带宽为12.8GB/s,双向峰值带宽为25.6GB/s。即使去除地址命令传输周期,其有效带宽也比PCI总线提升了一个数量级以上。
6.5.2 HT包格式
HT总线的传输以包为单位。按照传输的类型,首先分为控制包和数据包两种。控制包和数据包使用CTL信号区分,当CTL信号为高时,表示正在传输一个控制包,当CTL信号为低时,表示正在传输一个数据包。数据包依附于最近的一个带数据的控制包。
控制包根据传输的内容,再分为三种不同的包格式,分别为信息包、请求包和响应包。
信息包的作用是为互连的两端传递底层信息,本身不需要流控。这意味着对于信息包,无论何时都是可以被接收并处理的。流控信息就是一种典型的信息包。信息包的格式如表6.4所示。
表6.4 HT信息包格式
其中,“命令”域用于区分不同的包。对不同的命令,包的其他位置表示的内容之间有所不同。
HT也是采用DDR传输,即双倍数据率传输,在时钟的上升、下降沿各传一组数据。每种包大小都是4字节的倍数。图6.23是在总线上传输的时序示意图,以8位的CAD总线为为例。在CTL为高电平的时候,表示传输的是控制包,而CTL为低时,表示传输的是数据包。图中CAD信息上的数字对应包格式表中的具体拍数。
图6.23 HT总线传输示意图
表6.5为请求包的格式。因为需要传输地址信息,请求包最少需要8字节。当使用64位地址时,请求包可以扩展至12字节。大部分请求包地址的[7:2]是存放在第3拍。因为数据的最小单位为4字节,地址的[1:0]不需要进行传输。当传输的数据少于4字节时,利用数据包的屏蔽位进行处理。
表6.5 HT请求包格式
请求包主要是读请求和写请求。其中读请求不需要数据,而写请求需要跟随数据包。
表6.6是响应包的格式。响应包大小为4字节。与请求包类似,写响应包不需要数据,而读响应包需要跟随数据包。
表6.6 HT响应包格式
表6.7和表6.8分别是数据包的两种格式。在请求包或响应包中定义了专门的数据长度信息,这个长度以4字节为基本单位,最长为16,也就是64字节。因此数据包的大小是4字节的整数倍,最大为64字节。
表6.7为不带屏蔽位的数据包格式,最长可以为64字节。
表6.7 HT无屏蔽位数据包格式
表6.8为带屏蔽位的数据包格式,前4个字节用于定义数据的使能/屏蔽信息,每一位对应一个字节,最多可以为32个字节。也就是说,对于带屏蔽位的数据,一个数据包最多传输32字节数据。对于数据包,长度最多就是32+4个字节。
表6.8 HT带屏蔽位数据包格式