← 返回 计组与微机控制

计组与微机控制

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 等