计算机组成原理之总线
- 总线的基本概念
- 总线上信息的传输
- 总线的基本结构
- 总线的分类
- 总线特性及性能指标
- 总线特性
- 总线的性能指标
- 总线标准
- 总线结构
- 总线结构实例
- 总线控制
- 总线判优控制(总线仲裁)
- 链式查询方式
- 计数器定时查询方式
- 独立请求方式
- 总线通信控制
- 总线传输周期
- 总线通信方式
- 同步通信
- 异步通信
- 半同步通信
- 分离式通信
总线的基本概念
在冯诺依结构的计算机中,计算机包含运算器、控制器、存储器、输入设备和输出设备五大部分。
即使是把运算器和控制器做在同一颗芯片上(做成 CPU),把输入设备和输出设备统一为 IO 设置,计算机的基本组成还是包括三大部分。
现在计算机的结构比这个基本结构复杂的多,计算机可能会包含多个 CPU,IO 设备也更加丰富。
只要把这些部件连接在一起,才能组成一个完整的计算机硬件系统,能够协调的进行工作。
那么,如何将这些组件连接在一起呢?
最直接的方法就是分散连接,需要通信的两个部件直接连接起来。
可以想象,如果一台机器有几百个部件需要两两连接,并且两两连接的部件之间有很多的线,那么合计起来会有非常多通信线路。
把这些线都做在 PCB 上,难度很大,成本也很高。
而且,设备之间进行连接的结构,需要占用大量的空间。
还有一个问题是,系统很难扩展。例如,新增加一个 IO 设备,该设备需要和计算机的 N 个部件连接,那么就会有 N 束线,并且每束线都有若干条。这样以来,实现难度是非常大。
为了解决分散连接带来的各种问题,引入了总线。
总线(Bus)是连接各个部件的信息传输线,是各个部件共享的传输介质。(共用的,所以英文名叫 Bus 十分的形象。)
在常规的连接方式中,任意两个需要通信的单元之间都需要连线。如果向系统中增加一个新的单元,必须要在这个新单元和它所连接的每一个单元之间增加一条新的连线。这样就会导致计算机内部的连线变得很复杂,计算机就会变得庞大和臃肿。
因此,总线的概念逐渐发展起来。总线是计算机系统中的 " 公共信息传输线路 “ , 该线路能被多个部件 “分时” “共享”。
总线结构的问题在于,每次只有唯一一个设备能够和其他设备通信,因此只有一条信息通路。
计算机的各个部件都连接到总线,如果两个设备同时请求使用总线,它们不得不去竞争总线的控制权。
术语仲裁用来描述这种两个或多个设备竞争同一资源(这里就是总线)的过程。
总线上信息的传输
总线上信息的传输有两种方式:串行和并行。
串行总线是指数据在单条 1 位宽的传输线上,一位一位地按顺序分时传送。例如,USB 就是串行总线。
优点:只需要一条传输线,成本低廉,广泛应用于长距离传输;应用于计算机内部时,可以节省布线空间。
缺点:在数据发送和接受的时候要进行拆卸和装配,要考虑串行-并行转换问题。
并行总线是指数据在多条并行的 1 位宽传输线上,同时由源传送到目的地。例如,CPU 和 主存之间的总线就是并行总线。
优点:总线的逻辑时序比较简单,电路实现起来比较容易。
缺点:信号线数量多,占用更多的布线空间;远距离传输成本高;由于工作频率较高时,并行的信号线之间会产生严重干扰,对每条线等长的要求也越高,所以无法持续提升工作频率。
总线的基本结构
单总线结构
最简单的总线实现方式就是将计算机的所有硬件都连接到同一条线上,这总线就是计算机的系统总线。
单总线的问题是,任何一个时刻,只能有一对组件进行通信。
如果某个时刻,IO 设备和主存之间通过总线进行数据传输,那么 CPU 和主存之间就不能进行数据传输,CPU 正在执行的程序就要停止,这会严重影响 CPU 的执行效率。
另外,如果设备很多,总线会很长,主存和远端设备之间的数据传输时间就会比较长。
为了解决单总线的各种问题,一个很自然的思路就是在计算机系统中引入多条总线,让数据尽可能的能够并行的传输。
面向 CPU 的双总线结构
面向 CPU 的双总线以 CPU 为核心,延展出两条总线:IO 总线和M 总线。
IO 总线连接多个 IO 设别,M 总线连接 CPU 和主存。
CPU 在执行程序的时候,指令和数据都来自于主存,CPU 和主存之间的信息交换是十分繁忙的,所以引入了 M 总线,专门用于 CPU 和 主存之间的数据传输。
但是这样的总线结构也有一个问题:主存和 IO 设备之间没有直接的数据通路,只能以 CPU 为媒介进行信息传输。
所以,一旦发生外部设备和主存之间的信息传输,CPU 的计算(或执行程序的)任务还是会被打断。
我们还需要对总线结构做进一步的改善。
以存储器为中心的双总线结构
以主存为中心发出两条总线:系统总线和存储总线。
基于这种结构,CPU、主存、IO 设备两两之间的数据交换可以互不影响。
但是,面向现代技术,系统总线和存储总线通常不能同时工作,因为主存一般只有一个访问端口。
虽然有双端口的主存,但是双端口的 Memory 向两个端口传送数据的时候还是分时进行的(课程是2014,现在 2026 年可以了嘛?老师的愿望实现了么?)。
总线的分类
要讲分类,首先就要有分类标准。
按照总线所处的位置,计算机中的总线可以分为片内总线、系统总线和通信总线。
片内总线
如果总线在芯片的内部,完成芯片内部不同组件之间的连接,称之为片内总线。
系统总线
有了片内总线,自然会想到芯片和芯片之间的连接。
如果总线在芯片的外部,完成计算机各个部件(例如 CPU 芯片和存储芯片)之间的连接,称之为系统总线。
为什么不叫片外总线或片间总线呢?因为这种命名覆盖的范围太大了。
根据总线上传输的信号的不同,系统总线又可以分为三类:
数据总线
传输数据信号,通常是双向的,总线宽度和机器字长(CPU 一次能处理数据的位数,与 CPU 中的寄存器位数有关)、存储字长有关。
通常情况下,数据总线的宽度小于等于机器字长或存储字长。例如,64位计算机的数据总线的宽度可以是 8 位。
地址总线
传输地址信号,通常是单向的,由 CPU 等设备发出。
地址总线的宽度和存储地址(和存储单元数量有关)、IO 地址有关。
控制总线
向计算机硬件系统的不同部件传输控制信号,或者是各部件将自己的状态信号向外传输,告诉 CPU 等。
通信总线
片内总线和系统总线都是计算机内部的数据传输,
通信总线则是用于计算机和计算机之间或者是计算机系统与其他系统(例如控制仪表、移动通信等)之间的通信。
通信总线包含串行通信总线和并行通信总线两大类。
总线特性及性能指标
在具体的物理实现上,总线是位于主板上(计算机内部的 PCB 板)。总线上会留出接口,计算机的其他部件连接到这些接口上,比如 CPU 插板、内存插板、IO 插板等。
为了实现计算机部件和总线之间通过插板这种方式进行连接,总线就需要有一些特性。
总线特性
总线有如下特性:
极限特性
机械特性用来保证计算机部件和总线之间的有效连接,包括尺寸、形状、管脚数以及排列顺序等。
电气特性
电气特性主要包括传输方向和有效的电平范围。
功能特性
功能特性指的是每根线上传输的信号到底是什么信号,包括地址、数据、控制和状态反馈信号。
时间特性
信号之间的时序关系(时序逻辑电路)。
总线的性能指标
总线宽度
总线可以同时传输的数据位数,其实就是数据线的根数。
标准传输率
标准传输率指的是总线每秒传输的最大字节数(MBps)。
时钟同步/异步
总线上数据的传输时同步的,还是不同步的。
这没有用异步这个词,是因为不同步在这里会包含很多种类型,后续会介绍。
总线复用
主要是指地址线和数据线共用总线,主要目的减少芯片的管脚数(管脚数量对芯片面积的影响很大)。
信号线数
地址线、数据线和控制线的线数的总和。
总线控制方式
总线的控制方式有突发、自动、仲裁、逻辑、计数等。
其他指标
负载能力:总线上可以挂载的 IO 设备的数量。
总线标准
现代的计算机系统时很复杂的,计算机的生产、设计和制造也越来越专业化。
例如,某些企业专门生产 CPU、某些企业专门生产某种类型的 IO 设备。不同企业生产的东西集成在一起,构成了计算机的硬件系统。
想要完成这个集成,大家在设计和生产计算机硬件的各个部件的时候,需要有一个约定。大家都遵守这个约定的时候,不同的计算机部件才可以连接起来,从而构成一个能够协调运行的计算机系统。
那么,关于总线的约定就是总线标准。
总线标准给出了一个标准界面(或者说接口),只要是按照这个标准生产的部件,最后就可以集成在一起。
总线的标准也是在不断的发展,从简单低速的总线,不断的向高速、可拓展性更强的方向发展。
几种不同的总线标准如下:
ISA(工业标准体系结构,Industry Standard Architecture)总线的宽度是 16,频率是 8Mhz,即也就是说,ISA 总线每秒可以传输 8M 次,每次传输 16bit,即带宽是 16MB/s。(1B = 8bit)
EISA 是对 ISA 的扩展,兼容 ISA。
VESA总线是由视频电子标准协会于 1992 年推出的,旨在满足视频显示的高数据传输需求。 VESA 总线属于 CPU 总线的扩展设计,通过将外设直接连接至 CPU 局部总线实现同步运行,解决了ISA总线传输速率低导致的系统效率问题。
PCI 是 Peripheral Component Interconnect(外设部件互连标准)的缩写,它是个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。
PCI 总线是一种同步的独立于处理器的总线,在 CPU 的供应商和原来的系统总线之间插入的一级总线,把 CPU 和外围设备分开,用户可以任意添加设备。
USB 是通用串行总线(Universal Serial Bus)的缩写,它是一种行业标准的串行总线和输入输出接口技术规范。其核心特点包括支持热插拔与即插即用,允许用户在设备运行时安全地连接或断开外设,无需重启系统。
此外,USB接口在传输数据的同时还能为连接的设备提供电力,这一核心功能使其被广泛应用于个人电脑、移动设备、摄影器材、数字电视及游戏机等各类信息通讯产品中。
总线结构
前面已经介绍过了几种总线结构,随着计算机技术的发展,总线也发展出很多其他结构。
- 双总线结构
还有一种双总线结构是由主存总线和 IO 总线构成,
主存总线和 IO 总线之间通过通道进行连接,从而实现 IO 设备和 CPU、主存之间的通信。
通道是一种结构简单、功能特殊的处理器,专门用于输入输出操作。
它有自己的控制器和指令系统,能够执行一些简单的指令和通道程序。
需要注意的是,通道程序通常是由操作系统编写的,而不是人工编写的。
- 三总线结构
还可以在增加一条 DMA(Direct Memory Access)总线,构成三总线系统。
外部设备通过 DMA 可以直接访问主存,通常是一些高速设备。
低速设备和主存之间的信息交换通常还是使用 IO 总线和主存总线。
另外一种三总线结构如下图所示:
CPU 的发展速度是很快的,但是存储器的发展速度比较缓慢,所以内存的速度成为计算机性能的瓶颈。
为了解决这个问题,现在计算机在设计的时候,在 CPU 和主存之间增加了一个小容量的高速存储器 Cache,对主存的数据进行缓存。CPU 运行的时候,主要是从 Cache 中获取需要的指令和数据。
局部总线就是用于连接 CPU 和 Cache,局部的 IO 控制器是用于连接一些高速的局部设备。
系统总线通过拓展总线借口,连接一条拓展总线,各种类型的外部设备都可以连接到扩展总线,这种方式解决了外部设备拓展的问题。
但是,这种总线结构中,不同速度的多种设别连接到了拓展总线,这会影响到外部设备的工作速度,四总线结构用来解决这个问题。
- 四总线结构
四总线结构包含系统总线、局部总线、高速总线和拓展总线。
这种总线结构将高速设别和低速设备分开,数据传输的效率更高。
总线结构实例
传统微型机总线结构
VL-BUS局部总线结构
PCI 总线结构
多层 PCI 总线结构
如果 PCI 总线上连接的设备过多,总线的驱动能力不够,可以通过 PCI 桥对总线进行扩展。
总线控制
总线上连接了多个设备,设备之间要进行通信,那么就必须要解决两个问题:
总线判优控制(总线仲裁):总线在同一时刻只能由一对设备使用,那么多个设备同时向总线发出占用请求时,到底哪个设备来使用总线呢?
总线通信控制:设备占用总线之后是要通信的,如何完成通信过程,保证通信过程的正确性?
总线判优控制(总线仲裁)
根据是否能提出总线占用请求,把总线上的设备分为两类:
主设备(模块)
对总线有控制权,可以提出总线占用申请。并且,在占用总线之后,可以控制和另外一台设备进行通信。
从设备(模块)
不能对总线进行控制,也是不能提出总线占用申请,只能响应从主设备发来的总线命令。
计算机系统中,有一些设备,既可以当作主设备,也可以当作从设备。有些总线只能有一个主设备,有些总线则可以有多个主设备。
总线的判优控制可以分为两种方法:
集中式:把总线的判优逻辑放在一个设备上(比如 CPU),包含链式查询、计数器定时查询和独立请求三种方式。
分布式:判优逻辑放在各个设备上
链式查询方式
结构最简单的链式查询方式的电路结构如下:
基本结构
总线控制部件是集中在一起的,这是集中式总线判优控制的特征;
数据总线用于信息交换过程之间的数据传输
主设备占据总线之后,通过地址总线找到要通信的从设备
BR:Bus Request,所有的设备同时通过 BR 线发送总线控制请求
BS:Bus Busy,如果某一个设别占用了总线的控制权,通过 BS 线高速总线控制部件或其他设别。
BG:Bus Grant,总线授权,链式查询的特点就体现在 BG 线上。
仲裁过程
所有的设备都是通过 BR 向总线控制设备提出占用请求,当控制设备受到请求,并且认为可以使用总线的时候,就会通过 BG 串行查询每个设备,找到是谁发出的请求,然后将总线控制权交给它。
在上图所示的实例中,是 IO 接口 1 和 IO 接口 n 发出请求,总线控制部件在通过 BG 串行查询的时候,会先碰到 IO 接口 1,那么 IO 接口 1 就会获得总线控制权。然后,接口 1 会通过 BS 总线设置总线忙。
特点
在链式查询方式中,各个设备占用总线的优先级和 BG 的查询顺序直接相关。也就是说,优先级是通过 BG 线的连接方式来事先确定的。
如果一个 IO 设备的优先级比较低,排的比较靠后,那么很有可能它提出的总线控制请求一直不会得到应答。
优缺点
链式查询方式对电路故障十分敏感,尤其是 BG 线。如果某个 IO 接口出现故障,导致 BG 线上的信号无法向下传递,那么后面的设备就永远不会获得总线控制权。
它的优点是结构简单,总线仲裁通过三条线就可以实现,而且易于增加设备,直接顺着向后连接就可以。
因为结构简单,链式查询电路的可靠性设计很容易实现,比如使用两根 BG 线,避免一条线故障导致电路无法工作。
因为要一直串行查询,所以它的速度很慢,一般用于微型计算机或者是结构简单的嵌入式电路。
计数器定时查询方式
电路结构
仲裁过程
总线控制部件内部有一个计数器,初始值一般是 0,可以是其他值。当总线控制部件接受到总线控制请求,并且总线可以使用的时候,计数器启动。
计数器的值通过设备地址这条线向外传输,当计数器的值为 0 时,它会对第一个设备(即 IO 接口0)进行查询,看它是否发出总线控制请求。
如果第一个设备没有发出请求,计数器自动加1,查询下一个设备,以此类推。
它的优点是优先级的确定十分灵活,改变计数器的初始值(比如通过软件设置初始值)就可以改变优先级;
独立请求方式
独立请求方式对应的电路结构如下图所示:
链式查询和计数器定时查询这两种方式,在查找时哪个设备发出总线占用请求的时候,都是按顺序进行的,速度都比较慢。
独立请求改变按顺序查询的这种方式,每个设备都有其各自的 BR 和 BG 线,优先级的确定在总线控制部件内部实现,更加灵活多变。
当多个设备同时通过各自的 BR 发出总线控制请求的时候,总线控制部件内部的排队器在根据优先级,选择其中一个作出应答。应答信息通过 BG 给到设备,告诉它可以使用总线。
独立请求这种方式虽然速度更快,但是使用的互连线比较多。
总线通信控制
总线仲裁解决了由哪一个主设备占用总线,使用总线的问题。那么,主设备占用总线,或者总线使用权之后,就要和从设备进行信息交换。
总线的通信控制就是为了解决主设备和从设备之间进行协调通信的问题。
总线传输周期
主设备和从设备之间完成一次完整的、可靠的通信需要的时间称为总线传输周期。
主设备和从设备之间的通信包括如下四个阶段:
申请分配阶段
主设备申请,总线仲裁决定,主设备获得总线使用权。
寻址阶段
主设备向从设备给出地址和命令,找到需要进行通信的从设备。
传数阶段
如果从设备做好接受数据的准备,总设备和从设备就进行数据交换。
结束阶段
主设备和从设备撤销相关信息。
总线通信方式
总线的通信有四种方式:
同步通信
由一个统一的、定宽定距的时标控制数据传送,每一个操作、每一个数据的传输都是由这个时标控制,在固定的时间进行信息传输。
假设 CPU 采用同步通信的方式,从某一个外部设备进行数据输入。从 CPU 的视角看,数据传输过程的时序图如下。
同步通信的特点是在固定的时间要完成固定的操作,同步数据输入的总线传输周期由四个时钟周期构成,具体过程如下:
T1 的时钟上升沿,主设备CPU 必须要给出地址信号;T2 的时钟上升沿,CPU 必须要给出读命令,告诉从设备它要读取数据。
T3 的上升沿到达之前,从设备必须通过数据总线给出数据信号,CPU 读取到数据;
T4 的上升沿,数据信号和控制信号可以撤销,T4 结束的时候,地址信号也可以撤销。
同步数据输出的过程与此类似,假设 CPU 要将数据输出到某个设备,时序图如下:
T1 的时候给出地址和数据,T2 的时候给出写命令,T3 的时候完成写操作,T4 撤销。
同步通信的时候,主设备和从设备之间是强制同步的,对于多个速度不同的设备,必须选择速度最慢的时钟作为信号传输的时钟。
即使是有些设备的工作速度很快,也要按照慢时钟进行数据传输。
所以,同步通信通常用于总线长度短,且各设备的存取时间比较一致的情形。
同步通信要求总线长度较短,根本原因在于信号传播延迟与时钟同步机制之间的冲突。
延迟差异:若总线过长,时钟信号从源端到达接收端需要时间,同时数据信号从发送端到接收端也需要时间。当两者路径长度不同(常见于多设备总线),或总线过长时,时钟边沿与数据到达接收端的时间差可能超出接收端的建立/保持时间窗口,导致数据采样错误。
Clock Skew:由于导线长度不同,同一时钟沿到达总线上不同设备的时间存在差异。总线越长,偏移越严重,时序就越难收敛,
无法数据重传:同步通信依靠固定的时钟节拍传输数据,没有像异步通信那样的应答(ACK/NACK)或重传机制。一旦因传输延迟导致采样错误,系统无法恢复错误。因此必须通过缩短总线长度来保证信号在一个时钟周期内稳定到达。
物理限制:为了提高吞吐量,同步通信常使用较高频率。时钟周期短时,允许的信号传播总延迟(发送端输出延迟 + 线延迟 + 接收端建立时间)必须小于时钟周期。例如,若时钟频率为50MHz(周期20ns),而信号在PCB上的传播速度约为5~6 ns/m,则总线长度最多只能1~2米,否则无法满足时序。
异步通信
异步通信没有统一的时标,它通过请求信号和应答信号之间的握手通信,采用应答的方式完成设备之间的通信。主设备发出请求,从设备给出应答信号,然后再进行数据传输。
异步通信的数据传输的过程,有三种具体的实现方式:
不互锁方式
主设备不管是否接到应答信号,一段时间之后,都会撤销请求信号,从设备也不管主设备是否接收到应答信号,一段时间后也撤销应答信号,
这种方式,通信的可靠性是存在问题的。
半互锁方式
主设备的请求信号会持续保持,直到接收到从设备的应答信号;而从设备在发出应答信号之后,不管主设备是否接收到应答信号,一段时间就撤销应答信号,
这种方式可能会造成请求信号一直保持高电平。
全互锁方式
主设备的请求信号会持续保持,直到接收到从设备的应答信号,主设备撤销请求信号之后,从设备才会撤销应答信号。
这种方式可以完成可靠的数据传输。
半同步通信
同步和异步相结合,主要是为了解决不同速度的设备之间的通信。
同步指的是发送方使用系统时钟发信号,接收方使用系统时钟进行判断和识别。
异步指的是允许不同速度的设备之间能够协调工作,为了调整主从设备之间的速度差异,增加了一条等待响应信号,由从设备给出。
以输入数据(比如某个设备到 CPU)的为例,假设总线通信周期为 4T,通信过程如下:
正常情况下,T3 的上升沿到来之前,从设备是要将数据放到数据总线上的。
如果主模块和从模块的速度不一致,比如 CPU 的速度比存储器快,T3 到来的时候,从设备无法提供数据,那么从设备就要发出等待信号,主设备会检测 WAIT 的值。
如果 WAIT 的值为 0,主设备就会插入一个 Tw,等待数据的到来。
下一个时钟周期到来的时候,主设备还会检测 WAIT 信号,直到 WAIT 变为高电平,然后进入 T3。
该过程的时序图如下:
分离式通信
前面的三种总线通信方式的共同特点是,数据的传输都要经过三个阶段:① 主模块发出地址和命令;② 从模块准备数据;③ 从模块向主模块发送数据。
在这个过程中,只有 1 和 3 占用总线,2 是不占用总线,总线处于空闲状态。总线上连接了很多的模块,是系统的瓶颈。
总线在数据传输过程中有空闲时间是对总线资源的浪费,那么有没有办法可以解决这个问题呢?答案是分离式通信。
分离式通信可以充分发掘总线在每个瞬间的潜力,它将总线的传输周期可以分为两个子周期:
子周期 1
主设备发出地址和命令,占用总线,使用完成之后,主设备放弃总线的使用权。
子周期 2
从设备准备好数据之后,发出申请占用总线,将各种信息送至总线。这个时候,从设备其实变成了主设备,因为它发出了总线占用请求。
在这个过程中,从设备准备数据的时间,总线是没有被占用的。
分离式通信的特点如下:
- 各模块都有权申请占用总线,从模块可以变成主模块;
- 采用同步通信方式,不需要等对方应答‘
- 各模块准别数据时,不占用总线’
- 总线被占用时,无空闲;
总线的带宽被充分利用。