第五章 微处理器总线操作与时序 三、总线时序 一、 8086/8088引脚 二、最小模式和最大模式
8086/8088的时钟和总线周期 时钟周期 CPU的基本时间计量单位,由主频决定 8086的主频为5MHz,1个时钟周期就是200ns 指令周期(Instruction Cycle) 执行一条指令所需要的时间 总线周期 (Bus Cycle) 指令周期划分为一个个总线周期。 当CPU要从存储器或输入输出端口存取一个字节就是一个总线周期 一个最基本的总线周期由4个时钟周期组成 如果想延长总线周期,则在T3和T4之间可插入1~N个等待周期TW来延长总线周期。
例1 执行 MOV BX, AX 包含: 取指令 存储器读周期 例2 执行ADD [ BX ], AX 包含: 1) 取指令 存储器读周期 2) 取 DS:[BX]内存单元操作数存储器读周期 3) 存放结果到 DS:[BX] 内存单元 存储器写周期
典型的BIU总线周期波形图
一、8086CPU的引脚及功能 8086是16位CPU。它采用高性能的N—沟道,耗尽型负载的硅栅工艺(HMOS)制造。由于受当时制造工艺的限制,部分管脚采用了分时复用的方式,构成了40条管脚的双列直插式封装
1、8086的两种工作方式 最小模式:系统中只有8086一个处理器,所有的控制信号都 是由8086CPU产生(MN/MX=1)。 最大模式:系统中可包含一个以上的处理器,比如包含协处 理器8087。在系统规模比较大的情况下,系统控 制信号不是由8086直接产生,而是通过与8086配 套的总线控制器等形成(MN/MX=0)。
最小模式下的引脚说明 (1) AD15~AD0 (Address Data Bus): 地址/数据复用信号,双向,三态。 T1状态:传送的是地址信号的低16位A15~A0,然后在ALE信号控制下用锁存器将A15~A0锁存住; T3 ~ T4状态:AD15~AD0 上传送的是数据信号D15~D0。 T2状态:读总线周期为浮空状态 写总线周期传送数据信号D15~D0
访问存储器时作地址线A19~A16用,它们与A15~A0一起构成20位物理地址,可访问1MB内存单元 (2) A19/S6~A16/S3 (Address/Status): 地址/状态复用信号,输出。 在T1状态: 访问存储器时作地址线A19~A16用,它们与A15~A0一起构成20位物理地址,可访问1MB内存单元 访问I/O接口时,高4位地址信号无效,I/O端口仅用A15~A0线,寻址64K个I/O端口。
在T2~T4状态:输出状态信息。 S6=0 S5反映中断允许标志的状态 S5=1,允许可屏蔽中断请求 S5=0,禁止可屏蔽中断请求 S3和S4用来指示当前正在使用的段寄存器
S4 S3 当前正在使用的段寄存器 ES 1 SS CS或未使用任何段寄存器 DS
(3) RD# (Read) 读信号, 三态输出, 当CPU执行读存储器或I/O端口操作的指令时,RD#变为有效的低电平 到底是读内存还是I/O端口的数据,取决于M/IO#信号 M/IO# =1,读存储器 M/IO#=0,读I/O 端口 例,MOV CX,[BX];指令执行时, RD#=0,M/IO#=1,读存储器 IN AL,40H; 指令执行时, RD#=0,M/IO#=0,读I/O端口
(5) WR# (Write) 写信号,三态输出,低电平有效,表示当前CPU正在写存储器或I/O端口。 (6)M/IO# (Memory/IO ) 存储器或I/O端口访问信号,三态输出 M/IO#=1,表示当前CPU正在访问存储器, M/IO#=0,表示当前CPU正在访问I/O端口。
(7)RESET 复位信号。 由外部输入,高电平有效,至少要保持4个时钟周期。 复位时: CPU立即中止所有操作,总线无效。 使IP、DS、ES、SS和FLAG清0,CS=FFFFH 指令队列清空 当RESET回到低电平时,系统又进入正常工作状态 由于复位时,CS:IP=FFFFH:0000H,故复位后CUP 将从FFFF0H处开始执行程序,在该处可安排一条转移指令JMP ,执行检测内存等操作。
(8)INTR( Interrupt Request) 可屏蔽中断请求信号,由外部输入,电平触发,高电平有效。 INTR为高电平时,表示外部设备向CPU发出中断请求, CPU在每条指令的最后一个时钟周期对INTR进行采样,若INTR=1,并且当中断允许标志IF=1时,则暂停执行下条指令转入中断响应周期。 NMI( Non—Maskable Interrupt Request) 不可屏蔽中断请求信号。由外部输入,边沿触发,正跳沿有效。 CPU一旦测试到NMI有效时,待当前指令执行完进入类型为2的不可屏蔽中断 这类中断不受IF标志的影响,不能用软件屏蔽
(9)INTA# (Interrupt Acknowledge) 中断响应信号 当外设从INTR引脚向CPU发出中断请求信号,CPU响应后就进入中断响应总线周期 在中断响应周期的T2~T4状态,CPU从INTA#引脚向外设连续发出两个负脉冲(即INTA#信号) 第一个INTA#信号通知外设,CPU已响应中断 第二个INTA#信号将中断类型码置于数据总线上,以便转入相应中断服务程序
(10)ALE(Address Latch Enable) 地址锁存使能信号,输出,高电平有效。 用作地址锁存器8282/8283的选通信号 T1状态ALE为高电平,允许AD15~AD0, A19/S6~A16/S3输出地址信号 ALE的下降沿将20位地址锁存住,使上述复用总线可传送数据或状态信号,从而使地址/数据信号分离,地址/状态信号分离
(11)READY 准备就绪信号。 由外部输入,高电平有效,表示CPU访问的存储器或I/O端口己准备好传送数据。当READY无效时,要求CPU插入一个或多个等待周期Tw,直到READY信号有效为止。
在总线周期T1状态,BHE#有效,表示数据线上高8位数据有效。在T2~T4状态BHE # /S7 输出状态信息S7。S7在8086中未定义。 (12)BHE# /S7 (Bus High Enable/Status): 数据总线高8位使能和状态复用信号,输出。 在总线周期T1状态,BHE#有效,表示数据线上高8位数据有效。在T2~T4状态BHE # /S7 输出状态信息S7。S7在8086中未定义。
8086/ 8088系统的存储体结构 8088系统的存储体结构 8086系统的存储体结构
(14) DT/R#(Data Transmit/Receive): (13)DEN# (Data Enable) 数据允许信号,输出,三态,低电平有效。用于数据总线驱动器的控制信号。 (14) DT/R#(Data Transmit/Receive): 数据驱动器数据流向控制信号,输出,三态。在8086系统中,通常采用8286或8287作为数据总线的驱动器,用DT/R#信号来控制数据驱动器的数据传送方向。 当DT/R#=1时,CPU向外部发送数据; DT/R#=0时,CPU接收外部送来的数据。
8086 读/写控制信号对应的总线操作类型 总线操作 指令举例 1 读I/O接口 IN AL,DX 读存储器 MOV AX,[1000H] 1 读I/O接口 IN AL,DX 读存储器 MOV AX,[1000H] 写I/O接口 OUT DX,AL 写存储器 MOV [2000H],AL X 非法操作 无 无读写操作
总线请求信号。由外部输入,高电平有效器向CPU请求使用总线。 (15)HOLD(Hold Request) 总线请求信号。由外部输入,高电平有效器向CPU请求使用总线。 (16)HLDA(Hold Acknowledge) 共享总线的处理总线请求响应信号。向外部输出,高电平有效。
(17)TEST# 测试信号。由外部输入,低电平有效。 当CPU执行WAIT指令时(WAIT指令是用来使处理器与外部硬件同步),每隔5个时钟周期对TEST进行一次测试,若测试到该信号无效,则CPU继续执行WAIT指令,即处于空闲等待状态;当CPU测到TEST输入为低电平时,则转而执行WAIT的下一条指令。由此可见,TEST对WAIT指令起到了监视的作用。
MN/MX#=1(+5V),CPU工作在最小模式。MN/MX#=0(接地),CPU则工作在最大模式。 (18)MN/MX#(Minimum/Maximum Mode Control): 最大最小模式控制信号,输入。 MN/MX#=1(+5V),CPU工作在最小模式。MN/MX#=0(接地),CPU则工作在最大模式。 (19) GND 地。 (20) VCC 电源,接+5V。
最大模式下的引脚说明 当8086CPU工作在最大模式系统时,有8个管脚重新定义 。 (1)S2#、S1#、S0#(Bus Cycle Status,最小模式为M/IO#、D/TR#、DEN#): 总线周期状态信号,输出。这三个信号的组合表示当前总线周期的类型。在最大模式下,由这三个信号输入给总线控制器8288,用来产生存储器、I/O的读写等相关控制信号。如下表:
S2# S1# S0# CPU状态 8288命令 中断响应 INTA# 1 读I/O端口 IORC# 写I/O端口 IOWC# AIOWC# 暂停 无 取指令 MRDC# 读存储器 写存储器 MWTC# AMWC# 无作用
(2)LOCK# 封锁信号。 三态输出,低电平有效。LOCK有效时表示CPU不允许其它总线主控者占用总线。这个信号由软件设置。当在指令前加上LOCK前缀时,则在执行这条指令期间LOCK保持有效,即在此指令执行期间,CPU封锁其它主控者使用总线。 (3)QS1、QS0(Instruction Queue Status,最小模式为ALE、INTA#): 指令队列状态信号,输出。QS1,QS0组合起来表示前一个时钟周期中指令队列的状态,以便从外部对芯片的测试。
QS1 QS0 编码含义 无操作 1 从队列中取第一个字节 队列已空 从队列中取后续字节
(4)RQ#/GT0# ,RQ#/GT1# (Request/Grant) 总线请求信号请求/允许信号。双向,低电平有效,当该信号为输入时表示其它主控者向CPU请求使用总线;当为输出时表示CPU对总线请求的响应信号。两条线可同时与两个主控者相连,同时,RQ#/GT0#优先级高于RQ#/GT1#。
二、最小模式和最大模式 8086最小模式下的基本配置
8088最小模式下的基本配置
8086 读/写控制信号对应的总线操作类型 总线操作 指令举例 1 读I/O接口 IN AL,DX 读存储器 MOV AX,[1000H] 1 读I/O接口 IN AL,DX 读存储器 MOV AX,[1000H] 写I/O接口 OUT DX,AL 写存储器 MOV [2000H],AL X 非法操作 无 无读写操作
8088 读/写控制信号对应的总线操作类型 总线操作 1 中断响应 读I/O接口 写I/O接口 暂停 取指令 读存储器 写存储器 无操作
1.8282地址锁存器 8282用来作为地址锁存器,用ALE信号作为8282的选通脉冲STB输入,这样就能在总线周期的第一个时钟周期从地址/数据、地址/状态总线将地址信息锁存于8282中,从而保证了整个总线周期内存储器和I/O接口芯片能获得稳定的地址信息。
2.8286总线收发器 T 操作 1 数据从A0~A7到B0~B7 数据从B0~B7到A0~A7 X A0~A7,B0~B7均三态 8286用作数据总线驱动器,其T端同 连接,用于控制数据传送方向,而 端同 要连接,以保证只在CPU需要访问存储器I/O端口时才允许数据通过8286。
最大模式和处理器总线结构 8086最大模式下的基本配置
8088最大模式下的基本配置
, , 总线周期状态信号用来指示当前总线周期所进行的操作类型 , , 总线周期状态信号用来指示当前总线周期所进行的操作类型 总线操作类型 8288命令信号 中断响应 1 读I/O端口 写I/O端口 、 暂停 无 取指令 读存储器 写存储器 无效状态
8288总线控制器
三、8086/8088的总线时序 系统的复位和启动操作 总线操作 暂停操作 中断操作 总线保持或总线请求/允许操作
(一)系统的复位和启动操作 复位时各寄存器值 CPU复位时各寄存器值 内容 标志位 清除 指令指针(IP) 0000H CS寄存器 FFFFH DS寄存器 SS寄存器 ES寄存器 指令队列 空 在复位状态下,CPU内部的各寄存器被置为初态。代码段寄存器CS和指令指针寄存器IP分别被初始化为FFFFH和0000H 8086复位后重新启动时,便从内存的FFFF0H处开始执行指令。
(二)总线操作 1.最小模式下的总线读操作 2.最小模式下的总线写操作 3.最大模式下的总线读操作 4.最大模式下的总线写操作 5.总线空操作
1.最小模式下的总线读操作
...各状态下的操作… T1状态: CPU根据执行的是访问存储器还是访问I/O端口的指令,首先在 线上发有效电平。 从地址/数据复用线AD15~AD0和地址/状态复用线A19/S6~A16/S3发存储器单元地址(20位)或发I/O端口地址(16位)。 锁存地址信号,CPU在T1状态从ALE引脚上输出一个正脉冲作8282地址锁存器的地址锁存信号。 为实现对存储体的高位字节库(即奇地址库)的寻址,CPU在T1状态通过 7引脚发面有效信号(低电平)。 为了控制数据总线传输方向,使 变为低电平,以控制数据总线收发器8286为接收数据。
T2状态: (1)地址信号消失,此时AD15~AD0进入高阻缓冲期,以便为读入数据作准备。 (2)A19/S6~A16/S3及 7线开始输出状态信息S7~S3,持续到T4。前面已指出,在8086系统中,S7是未赋实际意义的。 (3) 信号开始变为低电平(有效),此信号是用来开放8286总线收发器的。这样,就可以使8286提前在T3状态,即数据总线上出现输入数据前获得开放。 维持到T4的中期结束有效。 (4) 信号开始变为低电平(有效)。此信号被接到系统中所有存储器和I/O端口。用来打开数据输出缓冲器,以便将数据送上数据总线。 (5) 继续保持低电平有效的接收状态。
经过T1、T2后,存储器单元或I/O端口把数据送上数据总线AD15~AD0,以供CPU读取。 TW状态: 当系统中所用的存储器或外设的工作速度较慢,不能在基本总线周期规定的四个状态完成读操作时,它们将通过8284A时钟产生器给CPU送一个READY信号。 CPU在T3的前沿(下降沿)采样READY。 当采到的READY=0时(表示“末就绪”),就会在T3和T4之间插入等待状态TW,TW可以为1个或多个。 T4状态: 在T4状态和前一状态交界的下降沿处,CPU对数据总线上的数据进行采样,完成读取数据的操作。
2.最小模式下的总线写操作
8088的总线读/写操作 8088和8086的总线周期时序波形基本上是一致的,所不同的只有以下几点: (1)由于8088只有8位数据总线,因此,地址线A15~AD8不是分时复用线。这些线上的地址信号在整个读/写周期中均保持。 (2)地址/数据的分时复用线只有AD7~AD0,其操作时序同8086的AD15~AD0。 (3)由于8088的34号引脚不是 7,而是 ,因此8088从T1开始就往 线上送出低电平有效信号,一直维持到T4。
3.最大模式下的总线读操作 图中带*号的信号――ALE, , 或 和DEN都是由8288根据CPU的 , , 的组合产生的
4.最大模式下的总线写操作
5.总线空操作 CPU只有在和存储器或I/O端口之间交换数据,或装填指令队列时,才由总线接口部件BIU执行总线周期,否则,BIU将进入总线的空闲周期TI。
(三)暂停操作 当CPU执行一条暂停指令HLT(Halt)时,就停止一切操作,进入暂停状态。暂停状态一直保持到发生中断或对系统进行复位时为止。在暂停状态下,CPU可接收HOLD线上(最小模式下)或 线上(最大模式下)的保持请求。当保持请求消失后,CPU回到暂停状态。
(四)中断响应总线周期操作 第一个中断响应周期 CPU从 引脚上向外设端口(一般是向8259A中断控制器)先发一个负脉冲,表明其中断申请已得到允许,插入3个或2个空闲状态TI(对8088则不需插入空闲周期) 第二个中断响应周期 从 发第二个负脉冲 ,接收外设的中断类型码
(五)总线保持或总线请求/允许操作 当一个系统中具有多个总线主模块时,除CPU之外的其它总线主模块为了获得对总线的控制,需向CPU发出总线保持请求情号,当CPU接到此请求信号,并在同意让出总线时,就向发该请求的主模块发响应信号。 1.最小模式下的总线保持请求/保持响应操作
2.最大模式下的总线请求/允许/释放操作