计组与微机控制
6.6 时序章节总结和技术发展
6.6 时序章节总结和技术发展
总线读/写时序 收尾总结, 然后进入 80x86/Pentium 系列 CPU 技术发展。
一、最小模式下总线读操作读操作的目标是:
CPU 从存储器或 I/O 端口读取数据
所以方向是:存储器 / I/O → 数据总线 → CPU
1. T1 状态:先说明“读哪里”
T1 是整个总线周期的第一拍,主要做准备工作。
CPU 要先告诉外部三件事:访问内存还是 I/O 访问哪个地址高 8 位数据总线是否参与
2. M/IO 在 T1 就有效
书上说,M/IO 信号在 T1 状态成为有效,并保持到整个总线周期结束。
在最小模式下:M/IO = 1:访问存储器 M/IO = 0:访问 I/O 端口
所以 CPU 一开始就告诉外部:我这次是读内存,还是读 I/O?
这个信号要保持到 T4 结束,因为外部译码电路、存储器、I/O 接口都需要知道本次访问对象。
3. 地址在 T1 输出
8086 的 20 位地址分两部分输出:
高 4 位地址:A19/S6 ~ A16/S3 低 16 位地址:AD15 ~ AD0
注意:AD15 ~ AD0 是地址/数据复用线。
所以在 T1 时,它们表示地址;到后面 T2、T3 时,它们要变成数据线。
这就是为什么必须锁存地址。
4. ALE 锁存地址
T1 状态中,CPU 从 ALE 引脚输出一个正脉冲。ALE 的作用是:
告诉外部锁存器:现在地址有效,请把地址保存下来
书上说,8282 用 ALE 的下降沿锁存地址。
可以这样理解:T1:CPU 把地址放到 AD 线上ALE 有效:8282 把地址锁住T2 以后:AD 线可以改为传数据,但锁存器输出端仍然保持地址
所以外部存储器看到的是稳定的地址总线。
5. BHE 也在 T1 输出
BHE 用来表示高 8 位数据总线是否有效。
BHE = 0:高 8 位数据线 AD15~AD8 有效BHE = 1:高 8 位数据线无效
它通常和最低地址位 A0 配合,用于选择访问偶地址字节、奇地址字节,或者一个完整的字。书上这里强调:
奇地址存储体的数据通过高 8 位数据线传输;偶地址存储体的数据通过低 8 位数据线传输。
所以:A0 常作为偶地址存储体片选 BHE 常作为奇地址存储体片选
6. DT/R 在读周期中为低电平
如果系统中接有数据总线收发器,比如 8286,就要用 DT/R 和 DEN 控制它。
读操作时,数据方向是:
外部 → CPU
所以 DT/R 输出低电平,表示 CPU 接收数据。
读操作:DT/R = 0写操作:DT/R = 1
二、T2 状态:地址线让位给数据线
进入 T2 后,读操作进入正式传输阶段。
1. AD15~AD0 不再输出地址
书上说,在 T2 状态,地址信号消失。
更准确地说:AD15~AD0 不再作为地址线使用
因为地址已经被 8282 锁存住了。
此时 AD15~AD0 要准备作为数据输入线。
所以 CPU 会让 AD15~AD0 进入高阻状态,等待外部存储器或 I/O 设备把数据放上来。
2. 高地址线变成状态线
A19/S6 ~ A16/S3 在 T1 输出地址高 4 位。
到了 T2,它们变成状态信号:S6 ~ S3
同理,BHE/S7 也不再表示 BHE,而是输出状态 S7。
这里不需要细抠 S7,因为书上也说当前设计中 S7 没有实际意义。
3. DEN 变为有效
DEN 是数据允许信号,低电平有效。在 T2,DEN 变为低电平,表示:
打开数据总线收发器 允许数据通过
读操作中,DEN 有效后,外部数据才能经收发器传到 CPU。
4. RD 变为低电平
RD 是读信号,低电平有效。在 T2,CPU 把 RD 拉低,告诉外部:
我要读数据,请被选中的存储器或 I/O 设备把数据送到数据总线
注意,RD 信号会送到系统里所有存储器和 I/O 接口,但只有地址译码选中的那个设备才会真正响应。
所以过程是:
地址译码选中某个设备 RD 告诉它输出数据 设备把数据送到数据总线
三、T3 状态:外部设备送数据,CPU准备接收
T3 是读操作中很关键的一拍。
在 T3 状态,内存单元或 I/O 端口将数据送到数据总线上,CPU 通过 AD15~AD0 接收数据。也就是说:
外设/内存 → AD15~AD0 → CPU
但是这里还有一个问题: 外部设备一定来得及把数据准备好吗?
不一定。所以要看 READY。
四、Tw 状态:等待慢设备
如果存储器或外设速度比较慢,无法在基本的 T1、T2、T3、T4 之内完成读操作,就需要插入等待状态 Tw。
1. CPU 在什么时候检测 READY?
CPU 在 T3 状态的下降沿处采样 READY。
如果 READY 为低电平,说明:
外部设备还没准备好 数据总线上还没有有效数据
于是 CPU 在 T3 和 T4 之间插入 Tw。
2. Tw 可以有几个?Tw 可以是一个,也可以是多个。
每一个 Tw 中,CPU 都会继续检测 READY。
如果 READY 仍然低电平:继续插入 Tw
如果 READY 变为高电平:完成当前 Tw 然后进入 T4
所以 READY 的本质就是:
READY = 0:请 CPU 等一等READY = 1:数据准备好了,可以结束周期
3. 最后一个 Tw 和 T3 很像
书上说,在最后一个 Tw 状态,数据肯定已经出现在数据总线上。
所以最后一个 Tw 的作用和 T3 很像:
控制信号保持 数据已经有效CPU即将进入T4采样数据
其他较早的 Tw 状态中,控制信号虽然保持,但数据可能还没有效。
五、T4 状态:CPU 采样数据,结束周期
T4 是总线读周期的最后一拍。
在 T4 状态和前一状态交界的下降沿处,CPU 对数据总线进行采样。
也就是:CPU 真正把数据读入内部
然后 CPU 撤销 RD、DEN 等信号,总线周期结束。
六、读周期总流程
最小模式读周期:
T1:输出 M/IO输出地址输出 BHEALE 锁存地址DT/R 置为接收方向
T2:AD 总线由地址功能转为数据输入DEN 有效RD 有效T3:外部设备送数据CPU 检测 READYTw:若 READY=0,插入等待直到 READY=1T4:CPU 采样数据撤销控制信号读周期结束
七、最小模式下总线写操作
最小模式下总线写操作时序。写操作和读操作非常像。
不同点只有几个:读操作用 RD 写操作用 WR读操作数据方向是 外部 → CPU写操作数据方向是 CPU → 外部读操作 AD 总线后半段是数据输入写操作 AD 总线后半段是数据输出
1. 写周期 T1 状态
T1 和读操作基本一样。
CPU 先输出:
M/IO:说明写内存还是写 I/O地址:说明写到哪里BHE:说明高 8 位数据线是否参与ALE:锁存地址
所以 T1 阶段的任务仍然是:先把目标地址和访问类型说明白
2. 写周期 T2 状态 进入 T2 后,区别开始出现。
CPU 不再让 AD15~AD0 等外部送数据,而是自己把要写的数据放到 AD15~AD0 上。所以数据方向是:
CPU → 数据总线 → 存储器 / I/O 此时:DT/R = 1
表示 CPU 发送数据。DEN 有效,用来打开总线收发器。
WR 变为低电平,告诉外部:我要写数据,请被选中的存储器或 I/O 接口接收数据
3. 写周期 T3 状态
T3 中,CPU 继续保持数据和写控制信号。
外部被选中的存储器或 I/O 接口,在 WR 有效期间,把数据总线上的数据写入自己内部。如果外设比较慢,也可以通过 READY 让 CPU 插入 Tw。
4. 写周期 Tw 状态
和读操作一样,如果 READY 为低,CPU 插入等待周期。在 Tw 中:
地址仍由锁存器保持WR 仍有效数据仍保持在数据总线上
直到外部设备准备好,READY 变高,CPU 才进入 T4。
5. 写周期 T4 状态
T4 中,写操作结束。CPU 撤销 WR、DEN,数据线不再保持输出,整个写周期完成。
6. 读和写的核心区别
项目 | 读周期 | 写周期
控制信号 | RD 有效 | WR 有效
数据方向 | 外部到 CPU | CPU 到外部
DT/R | 低电平 | 高电平
AD 总线后半段 | 数据输入 | 数据输出
READY | 可插入等待 | 也可插入等待八、80x86/Pentium 系列 CPU 技术发展
这一节开始从 8086/8088 过渡到后来的 80386、80486、Pentium 等。
书上想表达的主线是:
CPU 位数变宽 地址空间变大流水线更强 Cache 加入浮点单元集成 保护模式和分页机制完善指令系统不断扩展
80386:第一个 32 位 80x86 CPU
书上说 80386 是 32 位 80x86/Pentium 系列中的第一个 32 位处理器。
它的关键变化有:32 位数据线 32 位地址线 32 位内部寄存器4GB 物理地址空间 支持虚拟 8086 模式引入分页机制
1. 32 位地址线为什么是 4GB?
因为:2^32 = 4GB
8086 只有 20 位地址线,只能寻址 1MB。
80386 变成 32 位地址线,寻址空间大大增加。
2. 寄存器扩展到 32 位
8086 有 AX、BX、CX、DX、SI、DI、BP、SP。
80386 扩展成:
EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP
其中低 16 位仍然兼容原来的寄存器。
比如:EAX 的低 16 位就是 AX AX 又可以分成 AH 和 AL
所以 80386 既能运行新的 32 位程序,也能兼容旧的 16 位程序。
3. 虚拟 8086 模式
书上说,80386 提供虚拟 8086 方式,使新 32 位 CPU 能有效执行为 8086/8088 编写的程序。
可以理解成:在 32 位保护模式环境中,模拟一个 8086 小环境
这样老程序还能跑,同时操作系统还能进行保护和管理。
十、80386 的功能结构
书上说 80386 由 6 个能并行操作的功能部件组成:
总线接口部件 代码预取部件指令译码部件 存储器管理部件指令执行部件 控制部件
这说明 80386 已经不是简单的“取一条执行一条”。
它进一步使用流水线思想:取指译码 执行地址转换总线访问
这些环节可以尽量并行,提高速度。
1. 总线接口部件
负责 CPU 与外部总线通信。
比如:访问内存 访问 I/O 读写数据 控制总线周期
相当于更复杂的 BIU。
2. 代码预取部件 负责提前从内存取指令。
这和 8086 的指令队列思想类似,但更强。
它的作用是减少执行单元等待取指的时间。
3. 指令译码部件
把机器指令翻译成 CPU 内部可以执行的控制信息。
也就是:这条指令是什么? 操作数在哪里?要做加法、传送、跳转,还是访问内存?
4. 指令执行部件 包括 ALU、寄存器组、移位器、乘除法部件等。
真正完成运算和数据处理。
5. 存储器管理部件 MMU
(在risc-V的操作系统第四章那里有说自动检查分页寄存器satp)
这是 80386 的重点。
MMU 包括:分段部件 分页部件
分段部件负责把逻辑地址转换为线性地址。
分页部件负责把线性地址转换为物理地址。
这和前面保护模式地址形成正好对应:
逻辑地址 → 线性地址 → 物理地址
6. 80386 的分页机制
书上说 80386 首次把分页机制引入 80x86 结构,页面大小固定为 4KB。
分页机制的意义是:
支持虚拟存储管理支持任务之间隔离方便操作系统管理内存
也就是说,程序看到的地址空间不一定等于真实物理内存位置,中间可以由操作系统和 MMU 映射。
十一、80386 相比 8086 的提升
寄存器:16 位 → 32 位地址空间:1MB → 4GB工作模式:实模式 → 实模式 + 保护模式 + 虚拟8086模式内存管理:分段 → 分段 + 分页特权机制:引入 0~3 级特权系统能力:支持多任务、任务切换、保护隔离
这就是 80386 在 x86 发展史上的重要地位。
十二、80486
80486 是在 80386 基础上的增强。
书上说:80486 把:
80386 微处理器 80387 FPU片上高速缓存 Cache 集成到一个芯片上。
1. 什么是 80387 FPU?
FPU 是浮点运算单元。在 80386 时代,浮点协处理器 80387 通常是单独芯片。
到了 80486,FPU 集成进 CPU 内部。
这带来的好处是:浮点运算速度更快 系统结构更简单
2. 五级流水线
书上说 80486 把 80386 的指令译码和执行部件扩展成五级流水线,进一步增强并行处理能力。流水线越完善,越能做到:
前一条指令在执行后一条指令在译码再后一条指令在取指
这样整体吞吐率提高。
3. 8KB 片上 Cache 80486 增加一个 8KB 高速缓存。
Cache 的作用是:
把最近常用的指令和数据放在 CPU 附近减少访问慢速主存的次数
CPU 访问 Cache 比访问主存快很多。
所以即使 CPU 主频没变,加入 Cache 后实际性能也会明显提高。
4. 支持外部二级 Cache 和多处理器系统
80486 的总线接口更复杂,可以支持外部 L2 Cache 和多处理器系统。
这说明 CPU 开始越来越重视:
缓存层次 总线效率 多处理器协同
十三、Cache 表和 Pentium
早期 80386:主要靠外部 SRAM Cache80486:开始有内部 L1 CachePentium:指令 Cache 和数据 Cache 分开Pentium Pro / II / III:L2 Cache 容量增大、封装方式变化后续 CPU:L1、L2 Cache 越来越大,速度越来越高
十四、Pentium(知道就行,稍微看看就好)
Pentium 相比 80486 的关键改进:
增加第二条执行流水线实现超标量片上一级 Cache 加倍 分支预测外部数据总线扩展到 64 位支持 APIC 加入 MMX 技术
章节总结:这一章其实从头到尾讲了三大块。
第一块是 8086/8088 的编程结构:
寄存器EU/BIU段地址和偏移地址逻辑地址到物理地址堆栈 和FLAGS
第二块是 8086/8088 的硬件总线与引脚:
地址/数据复用 BHE 和 A0最小/最大模式8282 地址锁存8286 总线收发8288 总线控制8289 总线仲裁总线读写时序
第三块是 80x86/Pentium 的发展:
80386:32 位、4GB、保护模式、分页80486:FPU 和 Cache 集成、五级流水线Pentium:超标量、分支预测、64 位外部数据总线、MMXPentium Pro:动态执行、更大 Cache、36 位地址Pentium II/III/IV:MMX、SSE、SSE2、NetBurst 等
