← 返回 计组与微机控制

计组与微机控制

6.5 CPU工作时序

6.5 CPU工作时序

最大工作模式、8288 总线控制器、CPU 复位启动和总线读操作时序。

一、最大工作模式

前面讲过最小模式:CPU 自己直接产生大部分控制信号。最大模式不一样。

最大模式下系统中可能有:

8086/8088 主处理器 8087 数值协处理器8089 I/O 协处理器 DMA 控制器

所以总线控制更复杂,不能全靠 CPU 直接发 RD、WR、M/IO 这些信号。

因此最大模式下要加:8288 总线控制器 8289 总线仲裁控制器 8259A 中断控制器

1. 最大模式下 MN/MX 怎么接?

书上说:MN/MX 接地 → 最大模式 MN/MX 接 +5V → 最小模式

所以图 2.25 中 MN/MX 接地,表示 CPU 进入最大模式。

6.5 CPU工作时序 图 1

二、最大模式下 CPU 不直接输出 RD/WR

最大模式的核心变化是:8086/8088 不再直接输出完整的总线控制信号,而是输出状态信号,让 8288 根据状态信号产生控制命令。

也就是:

CPU 输出状态码 S2 S1 S0 8288 解码这些状态码8288 再产生 MRDC、MWTC、I ORC、IOWC 等总线命令

这和最小模式对比:

最小模式:CPU 直接告诉外部“我要读内存/写内存/读I/O/写I/O”最大模式:CPU 先告诉 8288“我现在是什么总线状态”,8288 再生成具体控制信号

三、QS1、QS0:指令队列状态信号

QS1、QS0这是 Instruction Queue Status,指令队列状态信号。

这两个信号告诉外部:8086/8088 内部指令队列现在发生了什么。

1. QS1 QS0 = 00:无操作

表示指令队列没有发生取代码操作。QS1 = 0 QS0 = 0 含义:无操作

2. QS1 QS0 = 01:从指令队列第一个字节取走代码

表示 EU 从指令队列的第一个字节取出指令代码。QS1 = 0 QS0 = 1含义:从队列第一个字节取代码

3. QS1 QS0 = 10:队列为空

表示指令队列已经空了。QS1 = 1 QS0 = 0含义:指令队列为空 这说明 BIU 预取没有跟上,EU 可能要等待取指。

4. QS1 QS0 = 11:从队列第一个字节及后续字节取代码

表示取走了一个多字节指令的后续字节。QS1 = 1 QS0 = 1含义:从队列第一个字节及后续字节取代码

QS1、QS0 是给外部观察 CPU 指令队列状态用的。

四、S2、S1、S0:总线周期状态信号

最大模式下最重要的是:S2、S1、S0它们表示当前总线周期的类型。

也就是 CPU 告诉 8288:我现在要进行什么总线操作?

然后 8288 根据这三个状态信号产生具体总线命令。

表 2.9:S2 S1 S0 对应操作

注意书上这些信号上方有横线,表示低电平有效的状态编码

6.5 CPU工作时序 图 2

最大模式下,CPU 用 S2 S1 S0 编码告诉 8288 当前总线周期类型。

什么是“无源状态”?无源状态就是:当前总线周期即将结束,新的总线周期还没开始

书上说,当 S2、S1、S0 都为高电平时,表示无源状态。

如果在 T4 状态中 S2/S1/S0 有一个信号变化,就表示下一个新的总线周期要开始了。

五、LOCK:总线封锁信号

它的作用是:当 LOCK 有效时,其他总线主控部件不能占用总线。

1. 为什么需要 LOCK?

有些操作必须连续完成,不能中途被 DMA 或其他处理器抢走总线。

比如某些“读—修改—写”操作:

先读内存 修改数据 再写回内存

如果中间被别的主控部件抢走总线,数据可能就乱了。

所以 CPU 可以用 LOCK 锁住总线。

2. LOCK 什么时候有效?

LOCK 为低电平时,其他总线主控部件不能占用总线

LOCK 通常由带 LOCK 前缀的指令产生。

比如:LOCK XCHG ...

执行这类指令时,总线在关键操作期间被锁定。

3. 中断过程中 LOCK 也可能自动有效

书上提到,为防止中断过程中总线被其他主控部件占用,LOCK 信号也会自动变低。

LOCK = 防止别人抢总线

六、RQ/GT0、RQ/GT1:总线请求/允许信号

最大模式下不用最小模式的 HOLD/HLDA,而是用:

RQ/GT0 RQ/GT1

RQ/GT 是:Request / Grant 请求 / 允许

它们是双向信号,既可以输入请求,也可以输出允许。

1. 它们用来干什么?

外部协处理器或其他主控部件想使用总线,就通过 RQ/GT 向 CPU 请求。

CPU 同意后,通过同一根线返回 Grant 允许信号。

所以它承担了最小模式中 HOLD/HLDA 类似的功能。

2. 优先级

RQ/GT0 的优先级高于 RQ/GT1

所以如果两个外部部件同时请求总线,RQ/GT0 更优先。

七、8288 总线控制器 最大模式下,8086/8088 要配合 8288。

书上说 8288 由四部分组成:

状态译码器 命令信号发生器控制信号发生器 控制电路

重点是它的作用:8288 接收 CPU 输出的 S2、S1、S0 状态信号,经过译码,产生具体的总线命令和控制信号。

8288 产生哪些总线命令?

6.5 CPU工作时序 图 3

8288 会根据 S2 S1 S0 产生:INTA I ORCIOWC AIOWCMRDC MWTCAMWC 这些都是总线命令。

1. INTA:中断响应

对应:CPU 状态:中断响应8288 命令:INTA

和最小模式中的 INTA 功能类似。

2. I ORC:I/O 读命令

I ORC 是:I/O Read Command

表示读 I/O 端口。相当于最小模式下:

M/IO = 0 RD = 0

3. IOWC:I/O 写命令

IOWC 是:I/O Write Command

表示写 I/O 端口。相当于最小模式下:

M/IO = 0 WR = 0

4. AIOWC:提前 I/O 写命令

AIOWC 是 Advanced I/O Write Command。

它比 IOWC 提前一个时钟周期有效。

作用是让外部设备更早知道写操作即将发生。

5. MRDC:存储器读命令

MRDC 是:Memory Read Command

表示读内存。对应最小模式下:

M/IO = 1 RD = 0

“IO/M=0/1” 是因为最大模式 8288 的信号名称可能用 IO/M,和最小模式的 M/IO 正好相反

6. MWTC:存储器写命令

MWTC 是:Memory Write Command表示写内存。

7. AMWC:提前存储器写命令

AMWC 是 Advanced Memory Write Command。

比 MWTC 提前一个时钟周期有效。

九、8288 其他控制信号

这一页继续讲 8288 的几个控制输入/输出。

1. CEN:命令允许 CEN 是 Command Enable。

作用是允许或禁止 8288 输出总线控制命令。

CEN = 高电平:允许 8288 发出控制信号CEN = 低电平:禁止 8288 发出控制信号

当系统里有多片 8288 时,CEN 可以用来选择当前哪一片有效。

2. AEN:地址允许 AEN 是 Address Enable。

它来自总线仲裁器 8289,低电平有效。它用于支持多总线结构中的同步控制。

AEN 用于多处理器/多总线系统中控制 8288 是否响应当前总线周期。

3. MCE/PDEN:双功能信号

这个信号有两种用途。当 8288 工作在系统总线方式时,作为:

MCE:主级联允许信号

在中断响应周期 T1 状态有效,用于控制主 8259A 输出级联地址。

当 8288 工作在 I/O 总线方式时,作为:PDEN:外设数据允许信号

控制外部设备通过 I/O 总线传送数据。

4. IOB:总线方式控制

IOB 用来决定 8288 工作方式。

IOB = 1:8288 只控制 I/O 总线IOB = 0:8288 工作于系统总线方式

一般系统中,IOB 决定 8288 面向哪类总线组织。

十、8289 总线仲裁控制器

在多处理器系统中,可能有多个部件想使用总线。

比如:8086 8087 8089 DMA 控制器 其他处理器

这些主控部件不能同时控制系统总线,否则会冲突。

所以需要总线仲裁。8289 的作用就是:

决定当前总线使用权给谁 书上说它可以支持几种优先权处理方式:

并行优先权仲裁串行优先权仲裁循环优先权仲裁

8288:根据 CPU 状态产生总线控制命令8289:负责总线使用权仲裁

十一、8086/8088 的主要功能:

这里进入:2.3.3 8086/8088 的主要功能

第一部分讲:系统的复位和启动操作

RESET 复位和启动 复位信号加到 RESET 引脚。

前面讲过,RESET 有效后 CPU 进入复位状态。

通过图 2.27 讲具体时序。

6.5 CPU工作时序 图 4

1. RESET 高电平第一个时钟上升沿

当 RESET 引脚收到高电平后的第一个时钟周期上升沿,8086/8088 进入内部 RESET 阶段。这时 CPU 开始停止当前工作,准备复位。

2. 之后三态输出线变高阻

再过一个时钟周期,所有三态输出线被设置成高阻状态。

高阻就是:CPU 不驱动这些引脚这些引脚像断开一样

这可以避免复位过程中 CPU 对外部总线造成干扰。

3. 复位要求保持多久?

RESET 至少保持 4 个时钟周期高电平

如果是初次加电启动,则要求高电平持续:大于 50 μs

这是为了确保电源和硬件稳定后再启动 CPU。

4. 哪些引脚进入高阻?

书上列了一堆三态输出线:

AD15~AD0 A19/S6~A16/S3BHE/S7 M/IODT/R DENWR RD INTA

这些在复位时会进入高阻。

还有一些非三态输出线,复位后无效但不浮空,比如:

ALE HLDA RQ/GT0RQ/GT1 QS0 QS1

复位后内部寄存器状态

复位后:

FLAGS = 0000HIP = 0000HCS = FFFFHDS = 0000HSS = 0000HES = 0000H指令队列 = 空其他寄存器 = 0000H

所以 CPU 复位后的第一条指令物理地址是:

CS × 10H + IP= FFFFH × 10H + 0000H= FFFF0H

也就是:CPU 从 FFFF0H 开始取指令

十二. 为什么 BIOS 程序入口在高地址附近?

因为 CPU 复位后固定从 FFFF0H 开始执行。

所以系统设计时,会把一段启动代码或跳转指令放在这个位置附近。

通常 FFFF0H 处不是完整 BIOS 程序,而是一条跳转指令,跳到真正的初始化程序。

FLAGS 清零有什么影响?FLAGS 被清零意味着所有标志位都清除。

所以系统程序启动时,不能假设某个标志位天然就是想要的状态。

必须通过指令设置相关标志。

十三、复位结束后什么时候开始正常工作?:

RESET 从高电平到低电平的跳变会触发 CPU 内部复位逻辑。

经过 7 个时钟周期后,CPU 启动并恢复正常工作,从 FFFF0H 开始执行程序。

所以启动过程大致是:

RESET 高电平保持足够时间CPU 内部清零/初始化RESET 变低 等待若干时钟从 FFFF0H 取指执行

十四、总线读和总线写操作

CPU 和内存/I/O 之间的数据交换都通过总线操作实现。

一个总线周期至少包含:T1、T2、T3、T4

如果外设或存储器慢,还要插入:Tw 等待周期

十六、最小模式下的总线读操作

图 2.28 是最小模式下总线读操作时序。

这是很重要的时序图。按时间分阶段看。

6.5 CPU工作时序 图 5

1. 一个读周期的基本结构

读操作大致是:

T1:CPU 输出地址,ALE 锁存地址T2:CPU 发读控制信号,数据总线方向设为接收T3:外部设备把数据送上数据总线,CPU 检查 READYTw:如果设备没准备好,就等待T4:CPU 读入数据,结束总线周期

T1 状态做什么?T1 状态主要做三件事。

1. M/IO 指出访问对象 读操作开始时,CPU 先用 M/IO 表明这次读的是:

内存 还是 I/O 端口

在最小模式下:M/IO = 1:访问内存 M/IO = 0:访问 I/O 所以 M/IO 是选择对象。

2. 地址总线输出地址

T1 期间:

AD15~AD0 输出低 16 位地址A19/S6~A16/S3 输出高 4 位地址BHE/S7 输出 BHE

也就是 CPU 把本次要访问的地址送到总线上。

因为 AD 线后面要变成数据线,所以地址必须在 T1 被锁存。

3. ALE 有效,锁存地址

T1 中 ALE 输出高电平。 ALE 告诉外部地址锁存器:

现在总线上是地址,请锁存下来

之后即使 AD15~AD0 改成数据线,外部系统仍然能通过锁存器得到稳定地址。

十八、读时序图里各信号怎么理解?

6.5 CPU工作时序 图 6

图 2.28 里有很多信号,我们按关键线看。

1. CLK CLK 是时钟。

T1、T2、T3、Tw、T4 都是根据 CLK 划分的。

2. M/IO M/IO 在读周期一开始就确定本次访问类型。

高:存储器 低:I/O

3. A19/S6 ~ A16/S3

T1 时输出高 4 位地址。 T2 以后变为状态信号输出。

所以图中 T1 部分标“地址输出”,后面标“状态输出”。

4. BHE/S7

T1 时输出 BHE,用于选择高 8 位数据总线是否有效。

后面变成 S7 状态信号。

5. AD15~AD0

T1 时输出低 16 位地址。 T2 以后切换成数据总线。

读操作中,T2 后期或 T3 开始,外部设备把数据放到 AD15~AD0 上,CPU 在合适时刻采样。

所以图中先是“地址输出”,后面是“数据输入”。

6. A LEALE 在 T1 出现一个高脉冲。

作用就是锁存地址。

7. RD RD 是低电平有效。

读操作时,RD 在 T2、T3、Tw 期间有效为低。

它告诉外部设备:CPU 要读数据,请把数据送到数据总线

8. DT/R

读操作时,CPU 是接收数据。所以:DT/R = 0

表示数据方向是:外部设备 → CPU

9. DEN

DEN 是数据允许信号,用来打开总线收发器。

读操作中,DEN 有效后,外部数据才能通过收发器送到 CPU。

十九、读操作全过程总结

最小模式下总线读操作可以这样背:

T1:CPU 输出地址输出 M/IO输出 BHEALE 有效,锁存地址T2:AD 总线由地址切换为数据方向RD 变低,发出读命令DT/R 指示接收方向DEN 有效,打开数据收发器T3:外部存储器或 I/O 把数据送上数据总线CPU 检测 READYTw:如果 READY=0,插入等待周期直到 READY=1T4:CPU 采样并读入数据撤销 RD、DEN 等信号总线周期结束

这就是图 2.28 的主线。

这一段总结:

最大模式:MN/MX 接地CPU 输出 S2 S1 S08288 根据 S2 S1 S0 产生总线命令8289 负责总线仲裁

QS1 QS0:表示指令队列状态

S2 S1 S0:表示总线周期类型000 中断响应001 读 I/O010 写 I/O100 取指101 读内存110 写内存111 无源状态

LOCK:低电平有效,锁住总线,不让其他主控部件占用

RQ/GT0、RQ/GT1:最大模式下的总线请求/允许信号RQ/GT0 优先级更高

复位后:CS = FFFFHIP = 0000H物理地址 = FFFF0HCPU 从 FFFF0H 开始执行

总线读周期:T1 给地址并锁存T2 发读命令T3 读数据并检查 READYTw 等待T4 完成