目录
1 什么是总线
总线的英文单词是bus
,这个词有公共汽车的意思。公共汽车大家都可以坐,从这个角度看,bus
比较形象的说明了总线的特点——共享。概括的说,总线是连接各个设备的信息传输线,是各个设备共享的传输介质。
2 为什么要使用总线
先看总线是用来干什么的,总线用于连接CPU和各种设备,从而让它们能够相互通信。那么非要用总线来连接么,假如不用总线呢?比如说,需要通信的两个设备之间相互单独连接,这样做硬件上或许可行,但并不合适,用一幅图即可形象的说明:
不难将总线式连接与两两单独连接做个对比:
连接方式 | 硬件资源 | 可扩展性 |
---|---|---|
两两单独连接 | 占用引脚多,连线复杂 | 需要现有设备提供与新设备之间的接口,扩展起来麻烦 |
总线式连接 | 占用引脚少,连线简单 | 只需将新设备挂到总线,扩展方便 |
3 总线的分类
- 按照总线所在的位置
总线位置 | 分类 |
---|---|
芯片内部 | 片内总线 |
芯片外部 | 片外总线 |
- 按照总线的用途
总线用途 | 分类 | 特点 |
---|---|---|
传输地址 | 地址总线 | 单向传输,总线宽度与寻址空间有关 |
传输数据 | 数据总线 | 双向传输,对于CPU,宽度通常等于机器字长;对于存储芯片,宽度通常等于存储字长 |
传输控制信号 | 控制总线 | 单向或双向 |
- 按照传输方式
传输方式 | 分类 |
---|---|
串行传输 | 串行总线 |
并行传输 | 并行总线 |
串行总线与并行总线各有特点,没有绝对的优劣之分,各有各的适用场景:
类型 | 总线宽度 | 传输速度 | 抗干扰能力 | 适用场景 |
---|---|---|---|---|
串行总线 | 使用连线少,线宽小 | 信息逐位传输,速度慢 | 抗干扰能力强 | 适合较长距离或引脚资源有限的场景 |
并行总线 | 使用连线多,线宽大 | 信息多位同时传输,速度快 | 对同步的要求高、且存在信号衰减及线路间的相互干扰,抗干扰能力弱 | 适合距离短、速度要求高、电磁环境稳定的场景,如CPU或同一电路板内 |
总线的分类不止上述所说的几种,从不同的角度,就有不同的分法,这里就不再多说了。
4 总线的特性
特性分类 | 含义 |
---|---|
机械特性 | 尺寸、形状、引脚数、引脚的排列顺序等 |
电气特性 | 传输方向、有效电平范围等 |
功能特性 | 每根线的功能,如地址、数据、控制等 |
时间特性 | 时钟频率、信号的时序关系等 |
5 总线的结构
通过上述内容对总线的介绍,我们已经对总线有了一个基本的认识,但这还不够,要认识总线还需要很多更重要的内容。我们已经知道,总线的作用是连接CPU以及各种设备,那么总线到底如何连接的呢?是所有设备都挂在一条总线上吗?还是有着更复杂的结构?是什么决定了总线的结构?下面就从最简单的单总线结构开始,介绍总线的各种结构。
5.1 单总线结构
如果要我们这些初学者自己来设计总线,我想很多同学第一时间想到的就是单总线结构,也就是将CPU和各种设备一股脑的挂在单条总线上:
这样的结构连线简单,且利用了总线共享的优点,所有设备都共享一条总线,连线少。不过,虽说共享是总线的一大优点,但常言道过犹不及,是不是共享程度越高越好呢?当然不是,共享往往伴随着竞争,共享程度过高则会导致各个设备竞争总线加剧,最终降低整个系统的效率。既然过分的共享一条总线不合适,那么就再多加几条呗,于是我们想到了多总线结构。
5.2 双总线结构
考虑到CPU会经常访问主存,因此将CPU和主存之间使用单独的一条总线连接,而CPU与I/O设备之间则使用专门的I/O总线连接,从而得到了一种以CPU为中心的双总线结构:
上面的结构看起来比单总线结构要更合理了,但还是存在问题:主存和I/O设备没有总线连接,但主存和IO设备有时也会有通信的需求,因此再对上述结构做一些改动,从以CPU位中心变为以存储器位中心:
此时主存与CPU通过专门的总线连接,而与I/O设备通过系统总线连接。也就是说存储器有两套接口,对于这种多端口存储器来说,允许同时在CPU、IO设备之间传输数据。当然,在CPU和I/O设备同时访问同一地址单元的时候,仍然需要存储器内部的仲裁逻辑对访问的时序进行控制。
值得一提的是,不通过CPU,使I/O设备直接与主存交换数据,这通常需要DMA的帮助。DMA是什么东西呢?简单地说,DMA的物理实体是一坨集成电路,被称为DMA控制器,这个电路可以实现这么一个功能,让外部设备不通过CPU而直接与系统的主存交换数据。DMA的工作流程也比较简单:外设向DMA控制器发送DMA请求,接着DMA向CPU发送总线请求,CPU向DMA回复响应信号以允许其接管总线,进而DMA向I/O设备发送DMA应答,然后开始DMA传输,直到DMA结束。我们不妨将DMA控制器加入到上图中,以使其结构更加完整:
通过考虑总线竞争对系统效率的影响以及各个设备间通信的需求等方面内容,我们得到了上图所示的总线结构,看起来还凑合,但遗憾的是这些还是不够,不妨继续探索被我们遗漏的决定总线结构的要素。
5.3 层次化总线结构
首先梳理一下在设计总线结构时,我们还要考虑哪些因素:
- 设备接口的差异
不同的设备之间的接口不尽相同,因此它们可能无法连接在同一类总线上,也不存在一条“万能总线”能够兼容各种接口,因此需要让不同种类的总线得以互联通信的方案。 - 设备速度的差异
不同设备之间的速度差异可能是悬殊的,当慢速设备占据总线时,高速设备不得不陷入等待,此时慢速的设备会成为木桶的短板,严重限制总线的效率。 - 总线的负载能力
在上文中我们已经考虑了总线上设备过多时会产生激烈的竞争,影响总线效率,给出的解决方法是增加总线,但对于如何有效的增加总线有欠考虑。
综合上述的考虑,可以根据设备的接口、速度等方面的差异将设备划分开,分别使用不同的总线与这些划分开的设备相连接,然后再设计一种能够桥接两种不同总线的电路,将各个总线连接起来,进而形成层次化的总线结构。幸运的是能够桥接两种不同总线的电路已经存在了,通常被称为桥。简单的说,桥是一个总线转换器,它的一端连接一条总线,另一端连接另一条总线,两条总线可以不是同一种总线,当然也可以是同种总线(此时用于提高总线的负载能力)。下面给出层次化总线结构的示例:
总线结构部分就介绍这么多,值得一提的是,上述对总线结构的介绍都是非常基础的,只能够让人对总线形成一个初步的认识,而现代处理器使用的总线结构要复杂的多,想要对总线有更深的认识,还需要查阅更多内容更深入的资料。
6 总线的控制
通过合理的结构,我们可以使用总线将CPU及各个设备有效的连接起来,但连接不是目的,我们的目的是让CPU及各个设备之间能够通信。要想达到这个目的,总线的控制不可或缺,比如说有两个设备同时申请总线,总线就需要提供一个仲裁逻辑以决定到底该相应哪个设备;再比如说通信的双方不能随意把自己的数据往总线上扔,而应该在总线为通信制定的规则下,有秩序的你来我往,才能够正确的通信,这也就是总线的通信控制功能。
6.1 总线仲裁
挂在一条总线上的诸多设备可分为两类,一类是主设备,另一类是从设备,主设备对总线拥有控制权,通信通常由主设备发起,而从设备负责响应主设备通过总线发来的命令。试想这样一种情况,总线支持多个主设备,而这些主设备同时申请总线时,总线应该响应哪个主设备呢?对此,总线使用自己的仲裁逻辑来决定应该响应哪台设备。总线仲裁又分集中式和分布式两类:
-
集中式
集中指的是总线的仲裁逻辑集中在一处,比如CPU中,统一处理总线上的各个主设备对总线的竞争。根据其实现方式的不同,通常有链式查询、计数器定时查询、独立请求等几种。 -
分布式
分布指的是总线的仲裁逻辑分散在与总线连接的各主设备上。典型的例子有以太网,以太网上接入的各台计算机都可以发起通信,为避免无序竞争,它们都需要遵循以太网的仲裁逻辑,即载波侦听/冲突检测。
下面重点介绍集中式总线仲裁的几种实现方式:
- 链式查询方式
链式查询方式的示意图如下:
按照上图进行说明。I/O设备1和I/O设备n同时通过BR线请求总线,总线收到请求后,其控制部件通过BG线从I/O接口0开始,逐个查询设备是否发出请求,直到遇到第一个发出总线请求的设备,在图中是I/O设备1。然后,总线判定设备1获得总线,接着设备1通过BS线设置总线忙,从而占据总线(在被释放前,总线都不会响应新的请求),开始通信。之所以称之为链式,正是因为BG线将设备串起来,逐个查询的工作方式。不难看出,各个设备同时请求总线时,获得总线的优先级就是设备在BG上的排序。该方式结构简单,增加一个设备也很方便,和总线仲裁相关的线就是BS、BR、BG三条,但缺点是速度慢,且对电路故障特别敏感,比如BG这条线路上有一个设备出现故障,那么总线就不能正常工作了,进而影响总线上设备的通信。 - 计数器定时查询方式
该方式的示意图如下:
按照上图进行说明。I/O设备1和I/O设备n同时通过BR线请求总线,总线收到请求后,其控制部件根据内置的计数器的数值,通过设备地址线寻找设备,若被寻址的设备发出了总线请求,则通过BS线设置总线忙,否则计数器加1,总线控制部件继续寻找下一个设备。这种方式避免了链式方式对电路故障敏感的缺点,不过在扩展设备时有限制,设备地址线的数目决定了总线支持的最大设备数。该方式还有一个好处,通常总线内置的计数器是可编程的,我们可以通过编程这个计数器来实现灵活的优先级控制,比如每次从某个设备开始查询,或每次从上一次查询结束的地方开始查询等。 - 独立请求方式
该方式的示意图如下:
按照上图进行说明。I/O设备0、I/O设备1以及I/O设备n同时通过BR线请求总线,总线收到请求后,根据其内置的排队器的当前设置,确定设备1的优先级最高,因此通过BG线答复设备1,进而设备1获得总线,开始通信。这种方式的优点在于不需要逐个设备的查询,通过排队器的设置可以快速的决定对哪个设备进行应答,但缺点在于使用的连线比较多,扩展不灵活。我们同样可以通过编程设置总线内的排队器来实现灵活的优先级控制。
6.2 总线的通信控制
总线的通信控制作用是解决通信双方的协调配合问题,进而保证通信过程的正确性。总线上通信的双方在总线的协调下,有秩序的交换数据,一个总线传输周期通常分为4个阶段:
- 申请分配阶段
主模块申请总线,总线的仲裁逻辑决定响应谁 - 寻址阶段
主模块向从模块发出地址和命令 - 传数阶段
主模块和从模块交换数据 - 结束阶段
主模块结束通信,释放总线
总线通信同样有着多种不同的方式,分别为:
通信方式 | 特点 |
---|---|
同步通信 | 由统一的时钟控制数据的传输,主、从设备在同一个时钟的指挥下做出各自的通信动作 |
异步通信 | 没有统一的时钟,而是采用应答的方式进行通信:主设备发出请求(命令),从设备应答,进而完成数据交换 |
半同步通信 | 引入等待信号,解决在同一时钟下不同速度设备之间的通信问题 |
分离式通信 | 不在等待时占据总线,提高总线通信的效率 |
接下来进一步介绍总线如何控制实现通信时的一个总线传输周期,根据上述4种通信方式分别进行举例说明:
-
同步通信方式(数据输入)
由于同步通信时由统一的时钟控制,加入主、从设备速度不一致,那么时钟的频率需要按照速度最慢的那个设备的速度进行设置,因此采用同步通信方式时最好保证主、从设备的速度相近。 -
异步通信方式(不互锁、半互锁、全互锁三种设计)
不难看出,从不互锁到半互锁再到全互锁,要求越来越严格,通信的正确性也愈加能够得到保证。 -
半同步通信方式(输入数据)
从上图不难看出,半同步通信综合了同步和异步通信的特点,该方式下,主、从设备仍然使用统一的时钟进行控制(同步通信的特点),但主、从设备的速度可以不一致,通过增加一条等待响应信号,从设备在未准备好数据时可以通知主设备等待,从而避免了从设备跟不上主设备的情况,而主设备则需要检测到从设备撤销等待信号,然后才能读数据(异步通信的特点)。 -
分离式通信方式
从上文描述可以看出,采用半同步通信方式时,同一条总线上的速度不同设备的设备也可以相互通信,但效率相较于同步通信方式不高,这些因为等待信号的存在。仔细思考一下,等待时主设备虽然占据总线,但并未使用总线,从设备也在忙着准备数据,同样没有使用总线,也就是说这段时间总线资源完全被浪费了,对此进行改进,于是就有了分离式通信方式。在分离式通信方式下,没有绝对意义的主、从设备,总线上每个设备都可以申请总线。具体的说,该方式将一个总线周期拆分成两个子周期:
如此一来,总线资源得到充分利用,效率得到很大的提升。最后总结一下分离式通信的特点:
① 各个设备都可以申请占据总线
② 采用同步方式通信,无需等待对方应答
③ 设备在准备数据时不占用总线
④ 总线被占用时,无空闲
参考文献
[1] 哈工大计算机组成原理课程