跳转至

Lecture 15. 总线

在系统内部,各个组件当中使用总线来进行通信;而不同系统之间通常使用串行链路实现(serial link)。

总线分类

  • 地址总线 address bus,是单向的,用来找指定地址的东西
  • 数据总线 data bus,双向的,用来传递数据
  • 控制总线 control bus,一般与 IO 相关,可以单向可以双向

  • 专用总线 dedicated bus,用来连接计算机和专用设备,比如打印机可能具有专用总线。

  • 共享总线,就是不同设备用同一条总线(但是不同时使用),比如 CPU、内存、IO 就使用共享总线

争吵 contention

对于单向的总线比如地址总线,比较容易实现。

但是对于双向的,可能就不那么容易。比如数据总线,搞不好俩数据混到一起传过来了。

利用 CMOS 检测争吵

回忆一下:CMOS 是互补的两个 MOS 管。

如果上图当中的 D0X 和 D0Y 位置的电势不相等,那么这个导线上就会有一个比较大的电流。出现这种异常大的电流,就意味着发生了一些错误。

利用三态缓冲器保护电路

但是实际上你肯定不能让电路中出现那种大电流。你可以加一个电阻,但是那样会比较浪费能源。

三态缓冲器拥有一条额外的控制器来决定是否位于 高阻态(high impedance)。如果不处于高阻态,那就是高电平或者低电平;如果处于高阻态,相当于断开电路。

使用三态缓冲器,就可以避免电路被烧毁,也可以避免使用电阻带来的高能耗问题。

同步总线与异步总线

在任意时刻,只有一个设备可以发送数据,其他所有设备要么监听这个数据,要么忽略这个数据。发送数据的是 master,其他设备叫做 slave。

同步总线,包含一个时钟信号,互联的设备通过一个时钟进行同步,在规定的时间内完成规定的操作,以实现数据交换。但是这样就有一个缺点,就是整个系统会被最慢的一个设备拖后腿。

异步总线没有统一的时钟信号,所有的设备之间通过握手的方式(handshake)来实现信息传递。

仲裁

假如有多个硬件设备想要同时使用总线,应该如何分配?

级联 daisy chaining

串联的那种感觉。每个设备都连向下一个设备。

设备在总线不忙的时候,如果收到了来自处理器的 grant 信号,就可以决定是否使用总线。如果用了,那么 busy 信号就会被设成高电平。否则,grant 信号传递给下一个设备。

并行打印机端口就是一个例子。

轮询:Polling

用若干条 polling line 来代替了 grant 信号。CPU 控制这几条 polling line,来进行询问。可以轮流来,也可以根据设定的优先级的顺序来。

独立请求 Independent Requesting

每个设备都分配一条 request 线以及一条 grant 线。这样可以有更好的自主性。而 data 和 busy 依然是共用的。

但是缺点在于,如果设备比较多,那么线就会很多,很杂。

PC 当中的总线

PC 当中主要包含两种总线,一种是 ISA 的,一种是 PCI 的。

ISA 是比较老的,但是兼容性很强;随着时代发展,PCI 越来越广泛。

ISA 总线

ISA 是工业标准架构的意思,兼容非常多的外设。

本来 ISA 总线是 8 位 4.8MHz,后来拓展到 16 位 8MHz。

ISA 设备会使用到一个叫做 ISA 连接器的东西。8 位的 ISA 总线只使用半个连接器,16 位的用整个。

PCI 总线

PCI 是外设元件互连的意思(Peripheral Component Interconnect),是目前最常见的 IO 总线。

32bit 宽,33MHz。由 PCI 控制器来管理仲裁.

PCI 总线还有一个优点在于:即插即用(plug and play)