1.4 总线与系统组织
CPU、存储器与 I/O 需要交换大量比特。如果为每一对部件都铺设专用线路,会造成很大浪费。总线(bus)是一组共享信号线,用来在部件之间传送一类相关信息。
“总线”既可以指物理导线,也可以指其上的信号以及传送规则。在本章的初步模型中,系统总线分为三类功能。
地址总线:选择哪个位置或设备?
CPU 用地址信号选择存储位置或 I/O 寄存器。如果有 \(n\) 条相互独立的二进制地址线,它们可以形成 \(2^n\) 种不同的比特模式。
例如:
- 8 条地址线最多选择 \(2^8 = 256\) 个地址;
- 16 条地址线最多选择 \(2^{16} = 65{,}536\) 个地址;
- 20 条地址线最多选择 \(2^{20} = 1{,}048{,}576\) 个地址。
这里得到的是可寻址位置的数量,并不自动等于字节数。如果每个地址标识一个字节,16 条地址线对应 64 KiB 的字节寻址空间;也可能存在其他组织方式。
在基本的单 CPU 系统中,地址信息通常从 CPU 流向存储器与 I/O。
数据总线:传送什么数值?
数据总线携带被传送的数值,方向取决于操作:
- 读操作中,被选中的存储器或 I/O 设备向 CPU 发送数据;
- 写操作中,CPU 向被选中的存储器或 I/O 设备发送数据。
8 位数据总线一次可以传送 8 位。要移动一个 16 位数值,可能需要在这条总线上进行两次传送。更宽的总线一次能移动更多比特,但需要更多物理信号线与配套电路。
共享数据总线上通常只能由一个预定发送方进行驱动:
- 两个输出试图驱动相互冲突的值时,会发生总线争用;
- 没有任何发送方时,总线处于悬空状态,无法保证有效数值。
真实硬件依靠受控输出电路和精确时序避免这些状态。
控制总线:做什么,在什么时候做?
控制信号为其他信号提供上下文。常见例子包括:
- 读与写信号;
- 时钟或时序基准;
- 复位;
- 中断请求;
- 就绪或等待指示。
数据线上的比特模式不会自己说明它正在被读还是被写。地址、数据与控制必须共同形成一次一致的总线事务。
实验 1——指挥共享总线交通
配置存储器读、存储器写或 I/O 读操作。你可以控制目标、读写信号以及两个可能的数据驱动方;总线视图会立即报告方向、悬空或争用。
面对每个任务,请在操作开关前先说出规则:“拥有源数据的一方必须驱动总线。”然后检查是否只有这个发送方处于活动状态。
事务示例
从地址 0x20 读取存储器
1. CPU 把 0x20 放到地址总线上。 2. CPU 使读控制信号有效。 3. 地址译码逻辑选中存储器。 4. 被选中的存储器把所需数值驱动到数据总线上。 5. CPU 接收这个数值。 6. 各信号返回非活动状态。
把 0x5A 写入存储器地址 0x20
1. CPU 把 0x20 放到地址总线上。 2. CPU 把 0x5A 放到数据总线上。 3. CPU 使写控制信号有效。 4. 被选中的存储器接收这个数值。 5. 各信号返回非活动状态。
请比较数据总线的方向。地址仍然标识目标,但数据发送方发生了变化。
| 事务 | 地址来源 | 数据来源 | 有效操作 |
|---|---|---|---|
| 存储器读 | CPU | 存储器 | 读 |
| 存储器写 | CPU | CPU | 写 |
| I/O 读 | CPU | 被选中的输入设备 | 读 |
| I/O 写 | CPU | CPU | 写 |
宽度、时序与引脚取舍
总线设计会同时影响能力与物理成本。
地址宽度
更多地址线可以选择更多不同位置,增大可能的存储器或 I/O 空间,但也增加引脚与译码电路。
数据宽度
更多数据线可以在一次总线操作中传送更多比特,可能减少大数值所需的传送次数,但也会增加引脚与布线。
时钟与等待状态
快速处理器可能连接速度更慢的设备。等待状态会延长一次事务,让被选设备有时间响应。如果硬件无法满足更短的时序,删除所有等待状态并不是正确设计。
复用
有些处理器在事务的一个阶段用同一组引脚传送地址,在另一个阶段传送数据。这种地址/数据复用可以减少引脚数,却需要时序控制,而且通常需要外部锁存器保存地址。
不存在对所有任务都最好的总线。电池供电传感器、快速固件装载器和实验室仪器对成本、速度、兼容性与封装尺寸有不同偏好。
实验 2——在约束下设计总线
请选择地址宽度、数据宽度、时钟、等待状态和地址/数据复用。实验会针对三个任务计算地址空间、估算引脚、传送周期与时间。
满足任务后,只改变一个选项,找出最先被破坏的约束,并解释因果链。例如,数据总线变窄会增加传送次数,进而增加周期与时间。
第 1 章总结
微型计算机是一个有组织的系统:
存储器中的存储程序
↓
CPU 取指 → 译码 → 执行
↓
地址选择对象 · 控制说明操作 · 数据携带数值
↓
存储器与 I/O 负责保存、观察或行动现在,你已经能够区分处理器与完整计算机,为 CPU、存储器和 I/O 分配角色,跟踪指令周期,并分析一次总线事务。第 2 章将学习位级的数值与数据表示,为总线和存储器中的比特模式赋予精确含义。