第三章 系统总线

3.1 总线的基本概念

  • 为什么要使用总线

    面向总线的结构主要有以下优点:

    • 简化了系统结构,便于系统设计制造;
    • 大大减少了连线数目,便于布线,减小体积,提高系统的可靠性;
    • 便于接口设计,所有与总线连接的设备均采用类似的接口;
    • 便于系统的扩充、更新与灵活配置,易于实现系统的模块化;
    • 便于设备的软件设计,所有接口的软件就是对不同的口地址进行操作;
    • 便于故障诊断和维修,同时也降低了成本。
  • 什么是总线

    总线是连接各个部件的信息传输线,是各个部件共享的传输介质。

  • 总线上信息的传送

    • 串行:串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。

    • 并行:并行通信时数据的各个位同时传送,可以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。计算机或plc各种内部总线就是以并行方式传送数据的。另外,在PLC(可编程逻辑控制单元)底板上,各种模块之间通过底板总线交换数据也以并行方式进行。

      Q: 串行通信和并行通信哪种通信方式更优?

      A: 理论上,并行传输是优于串行传输的。实际中,串行传输往往远快于并行方式。因为并行通讯的线缆较多,因为串扰的存在,导致通讯频率难以提升,只能通过扩充通讯信道来提速。这会大量占用珍贵的PCB空间,尤其是电子设备小型化的今天。而串行通信通常只采用两条差分通讯线路,尽可能减弱串扰,有助于提高通讯频率,提高通讯速度。今天计算机上使用的高速总线技术,基本上都是串行方式,比如USB,SATA。

  • 总线结构的计算机举例

    • 单总线结构框图

      这样的结构存在的问题就是:总线是信号的公共传输线,在同一时刻只能有一个部件在使用这个总线,那么总线就会成为整个系统的一个瓶颈。

    • 面向CPU的双总线结构框图

      由于CPU运行程序的时候,指令和数据都是来自于主存,因此CPU和主存之间的信息交换是非常繁忙的。所以利用M总线专门为CPU和主存之间提供传输服务。但是这种结构也存在问题:比如主存要和某一个外部设备进行信息传输的话,由于主存和I/O设备之间没有直接的信息通路,因此只能把CPU当作中间媒才能进行信息传输。当主存和外部设备进行信息传输的话,那么CPU的计算任务还是会被打断。

    • 以存储器为中心的双总线结构框图

3.2 总线的分类

  • 根据总线的位置进行划分

    1. 片内总线:芯片内部的总线
    2. 系统总线:计算机各部件之间的信息传输线。系统总线根据总线上传输的信号不同,可以分为:数据总线、地址总线、控制总线。

      数据总线:双向,与机器字长、存储字长有关;地址总线:单向,与存储地址、I/O地址有关(在本教材的模型机中,地址总线的宽度和MAR的宽度相同);控制总线:向系统的各个部件传输控制信号或者是系统的各个部件把自己的状态信号向外传输,告诉主设备、CPU。

    3. 通信总线:用于计算机系统之间或计算机系统与其他系统(如控制仪表、移动通信等)之间的通信。

      传输方式分为:串行通信总线和并行通信总线

3.3 总线特性及性能指标

  • 总线的物理实现

  • 总线特性

    1. 机械特性:尺寸、形状、管脚数、排列顺序
    2. 电气特性:传输方向和有效的电平范围
    3. 功能特性:每根传输线的功能:地址、数据、控制
    4. 时间特性:信号的时序关系
  • 总线的性能指标

    1. 总线宽度:数据线的根数
    2. 标准传输率:每秒传输的额最大字节数
    3. 时钟的同步/异步
    4. 总线的复用:地址线和数据线复用(如Intel 8086,复用的目的是减少管脚数,进而减小芯片的大小)
    5. 信号线数:地址线、数据线和控制线的总和
    6. 总线控制方式:突发、自动、仲裁、逻辑、计数(指的是用什么方式控制总线的传输)
    7. 其他指标:负载能力(总线上可以挂载多少个IO设备)
  • 总线标准

    不同厂家生产的硬件都遵循一个约定,这样才能是不同厂家生产的硬件拼装成一台计算机。关于总线的约定就是总线的标准。

    总线标准:IES-232、USB等

3.4 总线结构

正如前面介绍的:单总线结构、多总线结构

双总线结构除了上面介绍的两种,还有一种双总线结构:将主存总线和IO总线分离。主存总线上连接CPU和存储器,IO总线连接IO设备。然后中间通过通道将主存总线和IO总线连接。通道是一种特殊类型、结构简单的处理器,专门用于输入输出操作。一般来说,通道有自己的控制器、有自己的指令系统,可以执行一些简单的指令和通道程序。

还有三总线结构(主存总线、IO总线、DMA总线)

DMA总线:直接存储器访问总线。一些高速设备和内存之间进行一些信息交换的话,可以通过DMA总线进行,而不需要通过IO总线和CPU来做。

当然还有其他的总线结构:四总线结构等。

3.5 总线控制

  • 总线的判优控制

    1. 基本概念

      根据是否能提出总线请求,我们可以把总线上的设备分为两类:

      • 主设备(模块):对总线有控制权,可以提出总线的占用申请,并且在占用了总线后可以控制和另外一台设备之间进行的通信过程。

      • 从设备(模块):响应从主设备发来的总线命令,不能对总线进行控制,也不能对总线提出占用请求。只能响应从主设备发来的命令。

      • 总线判优控制可以分为两种方法:集中式和分布式。

        集中式:把总线的判优逻辑做在一个部件上,比如CPU;集中式总线判优逻辑又可以分为链式查询、计数器定时查询、独立请求方式

        分布式:总线的判优逻辑分布在各个设备或者各个设备的端口上。

    2. 链式查询方式

      如图所示,总线控制部件是集中在一起的,这是集中式的标志。另外还有数据总线和地址总线。数据总线用于数据交换过程中数据的传输,地址总线用于寻找主设备与哪一个从设备进行通信。另外还有3条线:BR(所有设备都通过这条线发出总线的占用请求);BS(总线忙,当有主设备占用了总线,就会通过这条线通知总线控制部件总线忙);BG(总线同意)。

      通过BR这条线向总线控制部件提出占用请求,总线控制部件接受到这个请求,并且可以让出总线控制权,就会通过BG这条线进行查询,因为每一个IO设备都是通过BR一条线发出的占用请求,因此不知道总线的控制权应该交给哪个设备。于是就需要BG这条线逐个的去查询。找到第一个提出总线占用请求的设备,把总线的控制权交给它。然后通过BS这条线设置总线忙。

      这个方式的特征:设备的优先级和BG这条线的查询顺序有直接关系,因此设备的优先级是由连接方式确定的。缺点:对电路故障特别敏感。优点:结构简单。

    3. 计数器定时查询方式

      如图所示,总线控制部件是集中在一起的,这是集中式的标志。另外还有数据总线和地址总线。数据总线用于数据交换过程中数据的传输,地址总线用于寻找主设备与哪一个从设备进行通信。除了BS和BR两条线,还有一条设备地址线。在总线控制部件的内部有一个计数器。通过BR这条线向总线控制部件提出占用请求,总线控制部件接受到这个请求,并且可以让出总线控制权,此时计数器就会开始工作。0是起始值,会对IO接口0进行查询,看看IO接口0是不是发出了总线占用请求。如果没有发出占用请求,计数器就会加一,对IO接口1进行查询,如果IO接口1发出了占用请求就会通过BS这条线进行响应,设置总线忙。

      这种方式的优点:优先级的确定非常灵活,计数器的起始值可以灵活的设置。

    4. 独立请求方式

      任何一个IO接口都增加了两条线BR和BG。哪个BG有效,响应的IO接口就获得总线的占用权。优先级的排队是在总线控制部件的内部有一个电路集中的来完成。因此在总线控制部件内部有一个排队器

      这种方式的优先级的确定就非常的灵活。但是这种方式的缺点就是线的条数会比较多I。

  • 总线的通信控制

    总线的判优控制解决了由哪一个主设备来获得主线的使用权。

    1. 总线的通信控制目的是解决通信双方(主设备和从设备)协调配合问题

    2. 总线传输周期(指的是主设备和从设备之间完成一次完整可靠的通信需要的时间)

      • 申请分配阶段:主模块申请,总线仲裁决定(这一阶段就是总线判优做的工作)
      • 寻址阶段:主模块向从模块给出地址命令
      • 传输阶段:主模块和从模块交换数据
      • 结束阶段:主模块撤销相关消息
    3. 总线通信的四种方式

      • 同步通信:由统一的定宽定距的时标控制数据传送
      • 异步通信:采用应答方式,没有公共时钟标准
      • 半同步通信:主要解决不同速度的两个模块之间进行通信的问题,是同步和异步的结合
      • 分离式通信:充分挖掘系统总线每个瞬间的潜力

        a. 同步式数据输入(主设备输入,从设备输出)

        在第一个时钟周期的上升沿必须要给出地址信号,这个地址信号是主设备给出的。在第二个时钟周期的上升沿必须给出读命令*,告诉从设备 主设备要从 从设备或者从模块 读取数据。第三个时钟周期上升沿从设备必须给出数据信号(通过数总线给出)。第四个时钟周期上升沿,控制信号和数据信号就可以撤销啦。在第四个时钟周期结束后,地址信号也可以撤销啦。

        因此同步式数据传输的特点:第一、一定要有一个定宽定距的时钟来控制整个数据传输的过程。第二、在给定的时间点上出相应的操作。

        b. 同步式数据输出(主设备输出,输出到从设备)也是类似的:

        在第一个时钟周期的上升沿必须要给出地址信号,在第一个时钟周期的下降沿必须给出数据。第二个时钟周期上升沿必须给出写命令,向从设备进行数据写入。第三个时钟周期的上升沿进行写入操作。第四个周期的上升沿主设备可以撤销数据和写命令。第四个时钟周期结束的时候,地址信号也撤销。

        这种通信的优点是规定明确、统一,模块间的配合简单一致。其缺点是主从模块时间配合属强制性“同步”,必须在限定时间内完成规定的要求。并且对所有从模块都用同一限时,这就势必造成对各不相同速度的部件而言,必须按最慢速度部件来设计公共时钟,严重影响总线的工作效率,也给设计带来了局限性,缺乏灵活性。

        同步通信适用于总线长度较短、各部件存取时间比较接近的情况。这是因为,同步方式对任何两个设备之间的通信都给予同样的时间安排。就总线长度来讲,必须按距离最长的两个设备的传输延迟来设计公共时钟。但是总线长了势必降低传输频率。

        c. 异步通信

      异步通信可以分为三种:不互锁异步通信、半互锁异步通信、全互锁异步通信。

      不互锁异步通信:主设备发出通信请求,从设备接收到请求信号以后进行应答。之后进过一段时间的延时后,主设备撤销请求信号,从设备也撤销应答信号。

      半互锁异步通信:主设备发出通信请求,从设备受到请求信号后进行应答,主设备接受到应答信号后撤销请求信号,经过一段时间的延迟,从设备撤销应答信号。如果主设备未接受到应答信号则会保持请求状态。

      全互锁异步通信:主设备发出通信请求,从设备受到请求信号后进行应答,主设备接受到应答信号后撤销请求信号,只有主设备的请求信号撤销后,从设备才会撤销自己的应答信号。

      d. 半同步通信(同步和异步的结合)

      同步:发送方用系统时钟前沿发信号,接受方用系统时钟后沿判断、识别。

      异步:允许不同速度的模块和谐工作,增加一条“等待”响应信号,wait。这个wait信号是由从设备给出的。

      以输入数据为例的半同步通信时序(假设还是4个时钟周期)

      T1:主模块发地址;T2:主模块发命令;T3:在第三个时钟周期上升沿来临之前从模块提供数据;T4:从模块撤销数据,主模块撤销命令。

      如果主模块和从模块之间的速度不一致,比如说主模块是CPU,从模块是存储器。CPU的工作速度要比存储器的工作速度要快,在T3时钟到来之前,从模块无法向主模块提供数据。那么这个从模块在T3到来之前发出wait信号(低电平有效),主模块检测wait这条线,如果检测到wait信号为低电平,则插入一个TW周期,等待数据的到来。在下一个时钟周期到来之前,主模块还会检测wait信号是否为低电平,如果为低电平,那么还会在等待一个时钟周期。知道在下一个时钟周期到来之前,主模块发现wait信号为高电平,进入T3周期。

      在第一个时钟周期的上升沿必须要给出地址信号,这个地址信号是主设备给出的。在第二个时钟周期的上升沿必须给出读命令,告诉从设备 主设备要从 从设备或者从模块 读取数据。在第三个时钟周期带来之前,如果从设备无法提供数据,要发出wait信号,主设备检测wait信号,如果为低电平的话,会在T3周期到来之前,插入Twait周期。在下一个时钟周期开始之前,主设备还会检查wait信号。直到检测到wait信号为高电平(说明数据已经准备好啦,并且放在数据总线上),进入T3周期,接收数据。进入T4周期数据信号和控制信号(读命令)撤销,在T4周期结束时,地址信号撤销。

      上述三种通信的共同点:

      一个总线传输周期(以输入数据为例):

      • 主模块发地址、命令(占用总线)
      • 从模块准备数据(不占用总线)
      • 从模块向主模块发数据(占用总线)

        这个传输过程中会有一个阶段总线是空闲的,造成资源的浪费。为了解决这个问题,有了分离式通信。如下。

        e. 分离式通信

        充分挖掘系统总线每个瞬间的潜力。

        一个总线传输周期:

      • 子周期1: 主模块申请占有总线,使用完后,即放弃总线的使用权。

      • 子周期2:从模块申请占有总线,将各种信息送至总线上。(这个时候从模块 变为 主模块)

        分离式通信的特点:

      • 各模块有权申请占用总线(从模块可以变为主模块)

      • 采用同步方式通信,不等待对方回答
      • 各个模块准备数据时,不占用总线
      • 总线被占用时,无空闲