计算机组成原理2——总线

524 阅读17分钟

本系列文章是学习了网课《哈尔滨工业大学--计算机组成原理》之后,用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点,如有不同意见,欢迎在评论区讨论。

总线是干什么的

计算机组成原理1——计算机系统概述中给出了计算机系统结构框图,可以看到冯诺依曼结构的计算机分为五个部分,计算机不是把这五个部件往哪里一摆就能运行的,它们之间需要控制和通信,它们之中的数据线、控制线和反馈线也体现了它们之间的数据和控制信号的传递方向。那就连线传递信号。

它们之间的连接方式有两种:分散连接和总线连接。难以想象分散连接在今天这么多外设和大内存的情况下,需要占用多少空间,IO设备和主机之间的连接不够灵活。现代计算机都采用总线连接的方式。

分散连接:设备之间单独连接,比如,输入设备和运算器之间设计单独的走线,运算器和控制器之间设计单独走线 总线连接:所有部件连接到同一组信息传输线上,只需要遵循总线协议进行传输即可(同一时刻不能两个以上的部件向总线发送信息,会造成信号的冲突,所以也需要仔细设计总线的结构,以提高效率)

在这里插入图片描述

总线结构及发展

定好了计算机中的部件采用总线连接的方式以后,那我们就开始设计总线的结构,一般有以下几种:

单总线

单总线所有的设备都挂在在同一根总线上,设备间通过这一根总线进行通信,但是很明显有两个问题:

1、总线上是不能同时有两个或两个以上的设备同时传输数据的,会引发数据冲突,所以上述结构,在多个IO给内存传输数据的时候,会占用CPU,让CPU进行总线的判优,影响CPU工作效率。 2、通常IO的设备的传输速度比较低。

在这里插入图片描述

双总线

下面是面向CPU的双总线结构框图,以CPU为中心,CPU和IO之间进行数据交换有IO总线,CPU和主存交换数据有存储总线,但是其问题如下:

1、当IO和主存进行数据交换的时候,还需要经过CPU,会降低CPU的利用效率

在这里插入图片描述 下面是面向存储器的双总线结构框图,可以看到其是在单总线结构上又添加了CPU和主存之间的数据传输通道,相当于所有的设备之间都有数据通路,降低了系统总线的负担,而且IO和主存之间的信息交互不需要经过CPU,但是其问题如下:

1、部分速度慢的IO会降低系统总线的利用效率

在这里插入图片描述 下面的双总线结构将速度低的IO设备从总线上分离出来,没有了速度低的IO设备对主存总线的拖累吗,CPU和主存之间的数据传输通路也被取消,主存总线的传输速度已经够快了。 在这里插入图片描述

三总线

在以CPU为中心的双总线结构中,因为主存和IO之间的交互导致CPU负担过重,那么我们可以在主存和IO之间加入数据通路——DMA总线以解决这个问题,下面是加入DMA总线之后的三总线结构在这里插入图片描述

下面的三总线结构加入了Cache,引入了拓展总线接口。Cache利用了计算机程序执行的空间局部性和时间局部性(你写的代码运行时只是在运行局部,你打游戏也是一样,到新的区域再加载),索引数据、指令更快,提高运行效率。拓展接口方便各类IO设备的拓展和连接。 在这里插入图片描述

四总线

在加入了Cache和拓展总线的三总线结构上,四总线结构又对高速和低速IO设备做了特殊处理,从三总线的Cache处,设计了桥,从桥引出了一根高速总线,用于连接各种高速IO设备,再在高速总线上,引出一根拓展总线用于连接低速设备。 可以认为CPU有Cache/桥和主存快速进行数据交互,主存也可以通过Cache/桥和外部IO设备进行数据交互,Cache/桥引出的高速总线和外部IO设备进行数据交互。 在这里插入图片描述

总线结构举例

可以看到,到双总线结构,已经可以较好的处理计算机各个部件之间的数据交互了,但是因为IO设备的高低速问题,衍生出了各种结构的多总线,引出了拓展总线、VL-BUS、PCI等主要用于外部IO设备结构,但是外设确实是计算机一个相当重要的部分,丰富了计算机的生态和应用领域,设计这么多总线结构以使其更好的服务于各个领域也不为过。

1、传统微型计算机的总线结构

这个类似于双总线结构,CPU、主存和IO通道共用系统高速总线,然后从高速总线分出低速IO总线供所有IO设备使用。但是IO设备之间的速度有不同,会造成IO总线数据传输利用率不高。VL-BUS局部总线结构针对高低速设备做了改进。 在这里插入图片描述

2、VL-BUS局部总线结构

VL-BUS在上面的总线结构上,将高速IO和低速IO分开,将高速IO设备挂在到局部总线VL-BUS上,VL-BUS直接与系统总线相连,低速IO设备挂在在由VL-BUS引出的低速ISA总线上。 在这里插入图片描述

3、PCI总线结构

PCI总线通过PCI桥路(PCI控制器和PCI加速器)和CPU相连,CPU总线和PCI总线相互隔离,但是仍然挂在在高速总线上,拥有高速的数据传输速率。 在这里插入图片描述

总线的分类、性能指标和几种总线标准

总线分类

1、片内总线,在芯片内部的总线,比如CPU芯片内部、寄存器之间、寄存器和算数逻辑单元之间。 2、系统总线,指CPU、主存、IO设备各大部件之间的信息传输线。有数据总线、地址总线、控制总线几种。 3、通信总线,用于计算机系统之间或者计算机系统与其它系统之间的通信。有串行通信、并行通信两种方式。

总线的性能指标

几种总线标准

总线的控制

总线的判优控制

挂载在同一条总线上的多台设备,如果同时要使用总线,需要由总线控制器进行判优、仲裁后确定按照一定的优先级确定哪个设备可以使用总线,只有获得总线使用权的主设备才能开始传输数据。

总线判优控制可以分成集中式和分布式两种,集中式将逻辑控制几种在一处(比如CPU中),分布式将控制逻辑分散在与总线连接的各个部件或者设备上。

1、链式查询

有三根线用于总线的控制:BS总线忙、BR总线请求、BG总线同意。 BG信号从总线控制部件串行的从一个IO接口送到下一个IO接口,如果BG到达的IO接口有总线请求,那么BG信号就不再往下传,意味该IO接口获得了总线使用权,并建立总线忙BS信号,表示它占用了总线。

该方式的优缺点是: 1、离总线最近的设备拥有最高的优先级,但是如果这些设备频繁请求,后边的设备就很难进入中断 2、对电路故障敏感,如果有一台设备损坏,那么后续的其它优先级更低的设备难以获得请求 3、只需要几根线按照优先次序排列就能实现总线控制

在这里插入图片描述

2、计数器定时查询

总线控制部件接收由BR送来的总线请求信号,在总线没有被使用的情况下(BS=0),总线控制部件中的计数器开始计数,并通过设备地址线,向各设备发出一组地址信号。当某个请求占用总线的设备地址和计数值一致时,便获得总线使用权,此时终止计数器查询。

这种方式的优缺点: 1、设备使用总线的优先级相等,只要由设备需要请求,总线控制部件就计数的方式向下查,直到查到指定设备,最坏情况,会把所有设备查询一遍 2、顺序排序不会导致有的设备一直被响应,因为被响应一次之后,起码要等一个循环才能被再次响应 3、对电路故障的敏感程度要更低 在这里插入图片描述

3、独立请求方式

每一台设备都有总线请求线BR和总线同意线BG,如果设备需要使用总线,就发送该设备的总线请求信号。总线控制部件中由排队电路,可以根据优先级次序确定响应哪一台设备的请求。

该电路的优缺点: 1、响应速度快 2、优先级次序灵活,可以通过程序编写优先级次序 3、总线更多,控制复杂 在这里插入图片描述

总线的通信控制

1、同步通信

同步通信的通信双方由统一时标控制数据传送,图中的总线传输周期是连接在总线上的两个部件完成一次完整且可靠的信息传输时间,包含四个时钟周期。

总线传输周期执行流程: 1、CPU在T1上升沿发出地址信息 2、在T2的上升沿发出读指令,与地址信号相符的输入设备按照命令进行一系列内部操作,且必须在T3的上升沿到来之前将CPU所需的数据送到数据总线上 3、CPU在T3时钟周期内,将数据线上的信息送到其内部寄存器中 4、CPU在T4的上升沿撤销读命令,输入设备不再向数据总线上传送数据,撤销它对数据总线的驱动

同步式数据输入传输 在这里插入图片描述

同步通信在设计系统总线时,四个时钟周期的动作都有明确、唯一的规定:

读指令: T1——主模块发地址 T2——主模块发读指令 T3——从模块提供数据 T4——主模块撤销读指令,从模块撤销数据 写命令: T1——主模块发地址 T1.5——主模块提供数据 T2——主模块发出写命令,从模块接收到命令以后,在规定时间内将数据总线上的数据写到地址总线所指明的单元中 T4——主模块撤销写命令和数据等信号

同步通信的优缺点: 1、模块间的配合简单一致 2、主从模块时间配合属于强制性同步,必须在限定时间内完成规定的要求,这导致必须按照最慢的期间设计公共时钟,严重影响工作效率,并且限制了设计 3、通常用于各部件存取时间比较一致、总线长度较短的场合

2、异步通信

异步通信允许各模块之间速度不一致,因为它不需要统一的时钟标准,那它如何传递数据呢。异步通信采用应答的方式,当主模块发出请求信号时,一直等待从模块反馈回来响应信号才开始通信,这需要主从模块之间增加两条应答线。

异步通信的应答方式可以分为三种类型: 1、不互锁方式:主设备发送请求,从设备接收后应答。不管从设备接有没有接收到主设备的请求信号,主设备一段时间之后都会撤销请求信号;不管主设备有没有接收到从设备的应答信号,从设备一段时间之后都会撤销应答信号。该方式不安全。 2、半互锁方式:主设备发送请求,从设备发送应答信号,主设备接收到应答信号之后,就不再喊话,否则,就一直喊话。但是从设备发送完应答信号以后,不会管主设备接收到与否,一段时间后就撤销应答信号了。如果有硬件问题,主设备接收不到应答信号,就会一直请求。 3、全互锁方式:主设备发送信号(必须从模块接收到之后才能撤回请求信号),从设备接收,从设备接收到之后,发出应答信号(从设备知道主设备撤销应答信号之后,才能撤回信号)。

在这里插入图片描述

关于异步通信中波特率解析数据的问题,可以详见这个文章: blog.csdn.net/wordwarword…

3、半同步通信

半同步通信保留了同步通信的基本特点,所有的地址、数据、命令的发出时间都严格按照系统时钟的某个前沿开始,接受方都采用时钟后沿来进行判断识别。但是为了允许不同速度的设备一起工作,它增加了一条“等待(wait)”响应信号线,以解决双方的配合问题。

以数据输入为例,主从速率一致的情况: T1:主模块发送地址 T2:主模块发送命令 T3:传输数据 T4:传输结束 主从速率不一致的情况: T3时刻无法提供数据,在T3时刻以前,给出WAIT'低电平信号,主模块得知没有数据,就会插入一个等待周期Tw,不从数据线上取数,只有当WAIT'高电平的时候,才会将下一个时刻当作正常的T3周期,此时获取数据;T4时刻结束传输。

该方式的优缺点: 1、适合工作速度不高但又包含了许多工作速度不一致的设备组成的系统 2、控制方式比异步通信简单 3、工作频率不高(低速设备会等待) 在这里插入图片描述

4、分离式通信

为了进一步节省时间,我们分析总线数据传输中时间的占用情况,时间花费在以下三个地方:

1、主模块通过传输总线向从模块发送地址和命令 2、从模块按照命令进行数据准备 3、从模块通过数据总线向主模块传输数据

其中的第二点,从模块准备数据时,总线纯属空闲等待,为了节省时间,分类式通信将传输周期分解为两个部分:

1、第一个子周期,主设备A快速发送地址和命令,然后放弃总线的使用 2、主设备A发送完成之后,从设备B准备数据 3、第二个子周期,从设备B准备完成后,申请总线使用,然后将数据(主设备A的数据和地址、B模块的地址)发送到总线上 4、每个子周期都只有单方向的数据流,每个模块都变成了主模块

其特点如下:

各个模块占用总线都必须提出申请 得到总线占用权之后,在限定时间内向对方传递数据,不必等待对方的应答 模块在准备数据的过程中不占用总线 总线在占用的过程中,一直在发送数据或者命令,而不是在等待中

书中重点概念

1、按照连接部件的不同,总线通常可以分为三种

片内总线:芯片内的总线 系统总线:连接CPU、主存、IO设备各部件的信息传输线 通信总线:连接计算机系统之间或计算机与其它系统之间的信息传输线

2、主模块和从模块

主模块:主模块对总线有控制权的模块 从模块:被主模块访问的模块,只能响应从主模块发来的各种总线命令

3、同步通信和异步通信的特点

同步通信:通信双方由统一时钟控制数据的传输 异步通信:通信双方没有公共的时钟标准,采用应答方式通信

4、总线宽度和总线带宽

总线宽度:数据线的宽度 总线带宽:单位时间内总线上传输数据的位数

5、波特率和比特率

波特率是单位时间内传送的二进制数据的位数,单位用bps表示,记作波特 比特率用于衡量异步串行通信的数据传输速率,bps 举例,比如异步串行传输系统中,假设每秒传输120个数据帧,其字符格式规定包含1个起始位、7个数据位、1个奇校验位、1个终止位。 其波特率为120 *(1 + 7 + 1 + 1)= 1200bps 比特率位1200 * 7 / 10 = 872.72bps

课后习题

问题1:为了减轻总线负载且避免多个部件同时占用总线,总线上的部件应该具备什么特点?

回答:以CPU片内总线为例,在每个需要将信息送到总线的寄存器输出端接三态门,由三态门的控制端控制什么时刻对哪个寄存器输出,当控制端无效时,寄存器和总线之间呈高阻态。 比如要设计一个具有双向传送功能的总线: 需要配置三态门,防止数据双向传输的时候,信号干扰。 在这里插入图片描述

问题2:设有一个32的微处理器配有16位的外部数据传输线,时钟频率为50MHz,若总线传输的最短周期为4个时钟周期,处理的最大传输速率为多少?若想提高一倍数据传输率,可以采用什么措施?

回答: 最大传输速率:2B * 50M / 4 = 25MBps 想提高一倍的数据传输率,将外部数据总线的宽度改为32位;或者时钟保持不变,CPU的频率改为2倍

问题3:链式查询方式、计数器定时查询、独立请求三种方式各自的特点?

回答: 1、链式查询方式,只需要一个总线请求线(BR)、一根总线忙线(BS)和一根总线同意线(BG)。BG线像链条一样,串联所有的设备,设备优先级固定,结构简单,容易扩充设备,但是对电路故障十分敏感。 2、计时器定时查询方式,设备的优先级可以不固定,控制比链式查询稳定。 3、独立请求方式,控制线多,N个设备有N个总线请求线和N个总线同意线,总线仲裁线路更加复杂;但是响应速度快,且优先级可以通过程序来改变。