总线

概述

类型:

  1. 系统总线:连接CPU、存储器、I/O控制器和其他功能设备

  2. 通信总线:连接主机和I/O设备,或连接不同的计算机系统

设计要素:

  1. 用途

    • 专用总线、复用总线
  2. 仲裁

    • 集中式、分布式
  3. 时序

    • 同步、异步、半同步、分离事务
  4. 总线带宽和数据传输速率

  5. 总线层次结构

    • 单总线、双总线、多总线

总线结构

  1. 数据线:在系统组件之间传输数据

    • 数据线的数量决定了一次可以传输的数据的大小
  2. 地址线:在数据线和地址I/O端口上指定数据的来源和去向

    • 地址线的数量决定了寻址空间的大小
  3. 控制线:控制对数据线和地址线的存取和使用

    • 时钟:用于总线同步操作

    • 总线请求:表示模块需要获得对总线的控制

    • 总线允许:发出请求的设备已经被允许控制总线

    • 中断请求:表示某个中断正悬而未决

    • 中断响应:未决的中断请求被响应

    • 存储器读:从存储器读数据到总线

    • 存储器写:将数据从总线写入存储器

    • I/O读:从I/O端口读数据到总线

    • I/O写:将数据从总线写入I/O端口

总线上数据传输的特点

  1. 总线可以被多个设备监听,但同一时刻只能由一个设备发送数据

    • 如果同一时刻多个设备同时发送数据,会造成数据之间的混淆

    • 总线被使用时,其他设备不能抢占

  2. 如果连在总线上的某个设备希望向另一个设备发送数据,需要:

    • 获得总线的使用权

    • 通过总线传送数据

  3. 如果连在总线上的某个设备希望向另一个组件请求数据,需要:

    • 获得总线的使用权

    • 通过总线向另一个设备发送请求,等待另一个设备发送数据

用途

  1. 专用总线:始终只负责一项功能,或始终分配给特定的计算机组件

  2. 复用总线:将同一线路用于多种用途

仲裁

总线仲裁:当多个设备需要与总线通信时,通过某种策略选择一个设备

平衡因素

  • 优先级:优先级高的设备优先被服务

  • 公平性:优先级最低的设备不能一直被延迟

仲裁方案

  1. 集中式:由仲裁器或总线控制器负责分配总线使用权

    • 链式查询/菊花链

    • 计数器查询

    • 独立请求

  2. 分布式:每个设备都包含访问控制逻辑,各设备共同作用分享总线

    • 自举式

    • 冲突检测

链式查询

所有的设备都是串行连接的,并允许信号从优先级最高的设备下发到优先级最低的设备

  • 总线仲裁器收到请求后,在总线不忙的前提下,发起允许信号

  • 如果某个设备收到了允许信号并且发起了总线请求,该设备将总线设置为繁忙状态,允许信号将不再被进一步传递

PPT - 第2 章总线与接口芯片PowerPoint Presentation, free download - ID:3756437

优点

  1. 确定优先级简单

  2. 可以灵活地添加设备

缺点

  1. 不能保证公平性

  2. 对电路故障敏感

  3. 限制总线的速度

计数器查询

将总线允许线替换为设备ID线

  • 如果总线空闲,总线仲裁器通过设备ID线发送计数

  • 如果当前发送请求的设备ID等于总线仲裁器当前的计数,中线仲裁器将停止计数,并将总线设置为忙

第3章系统总线| MyBlog - GxkOrd

优点

  1. 通过使用不同的初始计数,可以灵活确定设备优先级

    • 强调优先级:从1开始

    • 强调公平性:从下一个设备的ID开始

  2. 对电路故障不敏感

缺点

  1. 需要添加设备ID线

  2. 需要解码和比较设备ID信号

  3. 限制总线的速度

独立请求

每个设备都有自己的总线请求线和总线允许线,且直接连接到总线仲裁器

  • 当一个设备请求总线时,它通过总线请求线将请求信号发送给总线仲裁器

  • 总线仲裁器决定哪个设备可以使用总线

    • 固定优先级、公平链式、LRU、FIFO、$\cdots$

了解计算机系统的总线- 墨天轮

优点

  1. 快速响应

  2. 可编程的优先级

缺点

  1. 复杂的控制逻辑

  2. 更多的控制线路

自举式

每个设备在其总线请求线上发送请求,固定优先级,自行判断自己是否在请求总线地设备中优先级最高

  • 最低优先级的设备没有请求线

  • 箭头最少的优先级最高

冲突检测法

冲突:如果两个设备发现总线空闲,它们可能同时使用总线

  • 在传输数据时,设备会监听总线,检查是否存在冲突

  • 如果发生冲突,所有使用总线的设备将停止数据传输,并分别在随机间隔时间后再次请求总线

时序

确定每个总线事物的开始和结束时间

  • 总线事务:地址 + 数据 + $\cdots$ + 数据

类型:同步时序、异步时序、半同步、分离事物

同步时序

时间的发生由始终决定

优点

  1. 更容易实现和测试

缺点

  1. 所有设备共享一个时钟

  2. 总线长度受到时钟偏差的限制

    • 同步总线很短,不然会出现时钟混乱
  3. 数据过长会导致不同步,造成问题

异步时序

一个时间的发生取决于前一个事件的发生

分为非互锁、半互锁、全互锁三个阶段(使用握手规则

  • 蓝色表示先后关系,也就是“一次握手”

  • 非互锁(第一次握手):我告诉你我准备好了

  • 半互锁(第二次握手):我告诉你我已经收到了

    • “我准备好了”信号只能在你说“我收到了”之后才能撤回
  • 全互锁(第三次握手):我知道了你知道“收到了”之后才能撤回

优点

  1. 可以灵活地协调速度不同的设备

缺点

  1. 接口逻辑复杂

  2. 对噪声敏感

异步数据传输

  1. CPU设置地址并设置ReadReq线

    • 存储器读取相应地址
  2. 存储器读取相应地址并设置Ack线

    • CPU释放地址线和ReadReq线
  3. CPU释放地址线和ReadReq线

    • 存储器释放Ack线
  4. 存储器释放Ack线

    • 存储器将数据传到数据线
  5. 存储器将数据传到数据线并设置DataRdy线

    • CPU读取数据
  6. CPU读取数据并设置Ack线

    • 存储器释放数据线和DataRdy线
  7. 存储器释放数据线和DataRdy线

    • CPU释放Ack线

半同步时序

同步时序和异步时序相结合

为了减少噪声的影响,在异步计时中使时钟

  • 准备和响应信号在时钟上升沿有效

分离事务

设备准备数据期间释放总线,将一个总线事件分离为两个过程

优点

  1. 增加总线利用率

缺点

  1. 增加每个总线事件地持续时间和系统复杂度

  • 将两个信号之间的总线释放出来

总线带宽和数据传输速率

总线带宽:总线的最大数据传输速率

  • 不考虑总线仲裁、数据传输等因素

数据传输速率

  • 考虑地址传输、握手等因素

总线宽度:组成总线的线数

  • 数据总线越宽,一次传输的数据位数就越多

  • 地址总线越宽,一次传输的地址位数就越多

例子:

我们假设同步总线的时钟周期为50ns,并且每一次数据传输需要一个时钟周期,异步总线每次握手需要40ns。两种总线均为32位宽,并且数据的准备时间均为200ns,计算当总线从内存中读取一个字(32位)的时候的数据传输率

  1. 同步总线

    数据传输率:$\frac{32bit}{(50 + 200 +50)ns} = 106.7Mbps$

    • 发送指令和地址到内存:50ns

    • 内存准备数据:200ns

    • 将数据传输到CPU:50ns

  1. 异步总线

    数据传输率:$\frac{32bit}{(40 + 200 +120)ns} = 106.7Mbps$

    • 步骤1:40ns

    • 步骤2、3、4 / 数据准备:$max((40 \times 3) ns,200ns)$

    • 步骤5、6、7:$(40 \times 3)ns$

  • 如果把存储器的数据准备时间改为230ns,则同步总线的数据准备时间应该是250ns,异步总线仍是230ns

    • 同步总线一个时间周期不可以做两件事情

不同数据块大小的数据传输速率

假设系统存在以下特征:

  • 支持访问大小为4到16个字(每个字32位)的块

  • 同步总线具有64位宽和200MHz时钟频率,需要1个时钟周期来传输地址或64位数据

  • 在两个总线事务之间有2个空闲时钟周期

  • 内存访问时准备前4个字需要200ns,后面每4个字准备需要20ns

  • 当前面的数据在总线上传输时,内存可以同时读取后面的数据

如果读取256个字,分别计算每次传输4个字和16个字时的数据传输速率、传输时间和每秒总线事务数:

  1. 每次传输4个字

    总线事务:地址 + 4个字

    • 地址传输:1个时钟周期

    • 数据准备:200ns(40个时钟周期)

    • 数据传输:2个时钟周期

    • 空闲:2个时钟周期

      总共:$\frac{256}{4} \times (1+40+2+2) = 2880$ 个时钟周期

      传输时间:$2880 \times 5ns = 14400ns$

      每秒总线事务数:$\frac{64 \times 1s}{14400ns} = 4.44M$

    • 乘以64是因为:计算的总时间是传输256,而非一个总线事务

      数据传输速率:$\frac{256 \times 32bit}{14400ns} = 568.9Mbps$

  2. 每次传输16个字

    总线事务:地址 + 16个字

    • 地址传输:1个时钟周期

    • 数据准备(前4个字):200ns(40个时钟周期)

    • 数据传输:2个时钟周期(同时读取后4个字:20ns

    • 空闲:2个时钟周期

      总共:$\frac{256}{16} \times (1+40+3 \times max(2,4)+2+2) = 912$ 个时钟周期

      传输时间:$912 \times 5ns = 4560ns$

      每秒总线事务数:$\frac{16 \times 1s}{4560ns} = 3.51M$

    • 乘以16是因为:计算的总时间是传输256,而非一个总线事务

      数据传输速率:$\frac{256 \times 32bit}{4560ns} =1796.5Mbps$

提高总线数据传输率

  1. 增加时钟频率

  2. 增加数据总线宽度

    • 每次传输更多数据
  3. 块传输

    • 传输一次地址就传输一块数据
  4. 分离总线事务

    • 减少总线空闲时间
  5. 分离地址线和数据线

    • 同时传输地址和数据

总线层次结构

单总线结构

CPU、存储器、I/O模块都连接到一条系统总线

优点

  1. 简单,易于扩展

缺点

  1. 连接的设备越多,总线长度越大,传输延迟也就越大

  2. 聚集的传输请求接近总线容量时,总线成为瓶颈

双总线结构I

在CPU和存储器中间增加一个存储器总线

优点

  1. 增加CPU和存储器之间的传输效率,同时降低系统总线的负担

双总线结构II

将系统总线分为存储器总线、I/O总线和IOP(input/output processer)

优点

  1. 降低I/O对总线的负担

多总线结构I

增加一个本地总线来连接CPU和Cache

优点

  1. 分离了CPU和I/O的交互

多总线结构

将系统总线分为存储器总线、I/O总线和DMA总线

优点

  1. 增加I/O效率

多总线结构III

增加一个高速I/O总线来连接高速设备

优点

  1. 增加I/O交互效率