9.1 地址、数据与控制总线
第 8 章追踪了数据在 CPU 内部的流动。处理器还必须与外部部件交换指令字节和操作数。总线(bus)是一组共享信号线以及使用这些信号线的规则。“共享”表示多个部件连接在同一通路上,并不表示它们可以同时发送。
一次传送必须回答位置、内容与动作
外部传送由三组信号共同完成:
- 地址总线(address bus)指出存储单元或 I/O 端口,也就是“在哪里”。
- 数据总线(data bus)承载要读取或写入的有效内容,也就是“传什么”。
- 控制总线(control bus)指出操作类型与时机,也就是“做什么、向哪个方向、何时做”。
例如,从存储器地址 23456H 读取数据时,三组信息缺一不可。地址线给出 23456H,控制信号说明这是存储器读,被选中的存储器部件再把所需位模式放到数据线上,供 CPU 接收。
地址是一个二进制标签。若有 根独立地址线,就能形成 种位组合。8086 形成 20 位存储器地址,因此可以选择:
8086 的数据通路宽 16 位,因此一次正确对齐的传送可以承载一个 16 位字。地址宽度与数据宽度回答不同问题:地址宽度决定“能标出多少位置”,数据宽度决定“一次能搬多少位”。
8086 还区分存储器地址空间与 I/O 地址空间。同一个低位数值可以同时出现在两个空间中,M/IO 等控制信号告诉外部逻辑当前周期选中了哪个空间。
宽度分别改变容量、传送次数与硬件成本
加宽地址总线会让可选位置数按指数增长。从 16 位扩展到 20 位,位置数量变为原来的:
加宽数据总线会增加每次传送的载荷。8 位总线一次搬 1 字节,16 位总线一次搬 2 字节,32 位总线一次搬 4 字节。因此,在系统能利用全部字节通道的前提下,一条 6 字节记录分别需要 6 次、3 次或 2 次传送。
因此,更宽不一定更好。更多信号线需要封装引脚、电路板走线、连接器、接收器,通常还会增加功耗。设计者应在满足容量和吞吐约束的前提下选择足够的宽度,避免为长期闲置的线路付出成本。
控制线不承载有效数据,却决定地址与数据怎样解释。8086 最小模式中的常见控制信号包括:
- M/IO,用来区分存储器与 I/O;
/RD与/WR,分别发出读命令和写命令;
- ALE,用来标记复用地址有效的时刻;
- DT/R 与
/DEN,用来控制外部数据收发器;
- READY,用来表示被选设备能否完成传送。
信号名前的斜线表示低电平有效(active low):/RD=0 表示读命令有效,/RD=1 表示命令无效。标签必须保留这个约定,因为低电平并不等于“什么都没发生”。
总线是一份通信契约,不只是一束铜线。即使位模式正确,如果发送时机错误、方向错误或地址空间错误,整笔传送仍然错误。
第 9.1 节确定了接口上必须传递哪些信息。第 9.2 节将这些信息安排到 T1 至 T4,使设备知道何时捕获地址、何时驱动数据以及何时报告完成。