Skip to content

第 5 章 处理器总线时序和系统总线

一. 8086 的引脚功能

1. 芯片引脚的外部特征

1.1. 引脚功能

定义引脚的作用,其名称通常用英文缩写表示。例如 AD,RD,WR\displaystyle{ A D , R D , W R }

电源:VC,GND,VDD\displaystyle{ V \mathbb{C} , G N D , V D D } 等固定引脚名称

1.2. 信号流向

信号的流向有三种情况:输出输入双向

  • 单线:单一信号线。例如:INTR\displaystyle{ I N T R } 是输入,RD\displaystyle{ R D } 是输出
  • 总线:多线同时输入或输出。例如:A19A0A_{19}\sim A_{0} 地址是输出,D7D0D_{7}\sim D_{0} 是双向,AD15AD0AD_{15}\sim AD_{0} 是分时复用

1.3. 有效电平

信号起作用的电平,或触发沿。低有效就是在信号的上端加“—”。

1.4. 三态能力

指信号是否具有三态。例如:当 CPU 空闲状态时,数据线处于高阻态(即第三态)

一般总线信号具有三态能力

2. 8086 的两种组态

  • 最小组态
  • 最大组态

常用的是最大组态。要求有较强的驱动能力。此时 8086 要通过一组总线控制器 8288 来形成各种总线周期,控制信号由 8288 供给。

8086 的两种组态条件下,脚24~脚31有不同的名称和意义,因此通过引脚 MN/MXMN/\overline{MX} 引脚来规定 8086 处于什么组态。

MN/MXMN/\overline{MX}工作组态
连接电源 +5V+5\,\mathrm{V}最小组态
接地 0\displaystyle{ 0 }最大组态
最大组态——总线控制器8288
  • 具有产生 8 种总线周期下的控制信号;
  • 可控制系统总线信号浮空,以允许直接存储器访问 DMA,或仲裁总线优先权;
  • 对写信号提供先行控制输出,专为慢速存储器或 I/O 接口而设计的;
  • 可以封装控制信号,作为多总线或多微处理器结构中实行存储器保护逻辑的一种方法;
  • 产生线路驱动器所需的信号;
  • 产生简单或复合中断逻辑所需的控制信号。

S2,S1,S0\overline{S_2},\overline{S_1},\overline{S_0} 输出三态

  • S2,S1,S0\overline{S_2},\overline{S_1},\overline{S_0} 由 8288 总线控制器用以产生有关存储器访问或I/O访问的总线周期和所需要的控制信号;
  • 时钟周期 T4\displaystyle{ T _{ 4 } } 状态期间, S2,S1,S0\overline{S_2},\overline{S_1},\overline{S_0} 的任何变化,指示一个总线周期的开始;
  • T3\displaystyle{ T _{ 3 } }Tw\displaystyle{ T _{ w } } 期间返回到无源状态,即 S2,S1,S0\overline{S_2},\overline{S_1},\overline{S_0} 都处于高状态(111),表示一个总线周期结束;
  • CPU 处于 DMA 响应状态时, S2,S1,S0\overline{S_2},\overline{S_1},\overline{S_0} 浮空
S2\overline{S_2}S1\overline{S_1}S0\overline{S_0}性能信号
000中断响应INTA\overline{INTA}
001读 I/O 信号IORC\overline{IORC}
010写 I/O 端口IOWC,AIOWC\overline{IOWC}, \overline{AIOWC}
011暂停\displaystyle{ - }
100取指MRDC\overline{MRDC}
101读存储器MRDC\overline{MRDC}
110写存储器MWTC\overline{MWTC}, AMWTC\overline{AMWTC}
111无源\displaystyle{ - }

RQ/GT0,RQ/GT1\overline{RQ}/\overline{GT_0}, \overline{RQ}/\overline{GT_1} 输入输出

  • 其它总线设备输送一个宽度为一个时钟周期的脉冲给 8086,表示总线请求,相当于 HOLD\displaystyle{ H O L D } 信号
  • CPU 在当前总线周期的 T4\displaystyle{ T _{ 4 } } 或下一个总线周期的 T1\displaystyle{ T _{ 1 } } 状态,输出一个宽度为一个时钟周期的脉冲给请求总线的设备,作为总线响应信号,相当于 HLDA\displaystyle{ H L D A } 信号,下一个时钟周期开始,CPU 释放总线
  • 当外设 DMA 传送结束时,总线请求主设备输出一个宽度为一个时钟周期的脉冲给 CPU,表示总线请求结束。下一个时钟周期 CPU 恢复总线控制

LOCK\overline{LOCK} 输出 三态

  • 低电平有效,有效时别的总线设备不能获得对系统总线的控制
  • LOCK\displaystyle{ L O C K } 信号由前缀指令 LOCK 使其有效,且在下一个指令完成以前保持有效;
  • CPU 处于 DMA 响应状态时,此线浮空

QS0,QS1\displaystyle{ Q S _{ 0 } , Q S _{ 1 } } 输出

  • QS1,QS0\displaystyle{ Q S _{ 1 } , Q S _{ 0 } } 提供一种状态(Queue Status)允许外部追踪 8086 内部的指令队列
  • 队列状态在 CLK 周期期间是有效的,在这以后,队列的操作已完成。
QS1\displaystyle{ Q S _{ 1 } }QS0\displaystyle{ Q S _{ 0 } }性能
00无操作
01从队列中取走操作码的第一个字节
10队列空
11除第一个字节外,还取走队列中的其他字节

BHE/S7\overline{BHE}/S_7 输出

  • 在总线周期的 T1\displaystyle{ T _{ 1 } } 状态, BHE\displaystyle{ B H E } 低电平有效,把读/写的 8 位数据与AD15AD8AD_{15}\sim AD_8 连通;
  • 在总线周期的 T2,T3,T4\displaystyle{ T _{ 2 } , T _{ 3 } , T _{ 4 } }Tw\displaystyle{ T _{ w } } 状态,BHE/S7\overline{BHE}/S_7 引脚输出状态信号 S7\displaystyle{ S _{ 7 } }

3. 8086 的引线

AD15AD0AD_{15}\sim AD_0 (输入/输出,三态)

  • 这些地址/数据引线是多路开关的输出
  • 在每个总线周期开始 T1\displaystyle{ T _{ 1 } } 时,用作地址总线的 16 位 A15A0A_{15}\sim A_0,给出内存单元(或 I/O 端口)的地址;
  • T2,T3,Tw\displaystyle{ T _{ 2 } , T _{ 3 } , T _{ w } } 状态进行数据的读写
  • 在 DMA 方式时,这些线浮空。

地址线 20 位的低 16 位与数据线 16 位公用,在时间上加以区分

A{19}S6,A{18}S5,A{17}S4,A{16}S3\displaystyle{ \frac{ A _{ \left\lbrace 19 \right\rbrace } }{ S _{ 6 } } , \frac{ A _{ \left\lbrace 18 \right\rbrace } }{ S _{ 5 } } , \frac{ A _{ \left\lbrace 17 \right\rbrace } }{ S _{ 4 } } , \frac{ A _{ \left\lbrace 16 \right\rbrace } }{ S _{ 3 } } } (输出,三态)

  • 这些地址/数据引线是多路开关的输出
  • 在存储器操作的总线周期开始 T1\displaystyle{ T _{ 1 } },作地址总线的高 4 位 A19A16A_{19}\sim A_{16},在 I/O 操作时引线均为低电平;
  • 在总线周期的其余时间,这 4 条信号线指示 CPU 的状态信息S6\displaystyle{ S _{ 6 } } 表示 CPU 与总线连接情况,S5\displaystyle{ S _{ 5 } } 指示当前中断允许标志IF的状态。S3\displaystyle{ S _{ 3 } }S4\displaystyle{ S _{ 4 } } 的代码组合用来知名当前正在使用的段寄存器;
  • 在 DMA 方式时,这些线浮空。
S4\displaystyle{ S _{ 4 } }S3\displaystyle{ S _{ 3 } }含义
00当前正在使用 ES
01当前正在使用 SS
10当前正在使用 CS,或者未使用任何段寄存器
11当前正在使用 DS

RD\overline{RD} (输出,三态)

  • 读选通信号,低电平有效;
  • 当前有效时,表示正在进行存储器读或者 I/O 读操作
  • 在 DMA 方式时此线浮空。

HOLD\displaystyle{ H O L D } (输入)

  • 保持请求信号;
  • 当外部逻辑把 HOLD\displaystyle{ H O L D } 引脚信号置为高电平时,8086 在完成当前总线周期以后进入 HOLD\displaystyle{ H O L D }(保持)状态,让出总线控制权。(DMA 方式请求总线控制权)

HLDA\displaystyle{ H L D A } (输出)

  • 保持响应信号;
  • HLDA\displaystyle{ H L D A } 有效时,8086 的三条信号线全部处于高阻态,使外部逻辑可以控制总线。(DMA 方式 CPU 让出总线控制权)

WR\overline{WR} (输出)

  • 写信号,低电平有效;
  • 当前有效时,对存储器读或者 I/O 写操作
  • 具体操作取决于 M/IOM/\overline{IO} 引脚信号。

M/IOM/\overline{IO} (输出)

  • 存储器/IO 控制信号;
  • 用于区分 CPU 是访问存储器(高电平)还是访问 I/O 端口(低电平)。

DT/RDT/\overline{R} (输出)

  • 数据发送/接收信号;
  • 用于指示 CPU 是进行写操作(高电平)还是进行读操作(低电平)。

DEN\overline{DEN} (输出)

  • 数据允许信号;
  • DEN\overline{DEN} 在 CPU 访问存储器或 I/O 端口的总线周期的后一段时间内,该信号有效,用作系统中总线收发器的允许控制信号。

ALE\displaystyle{ A L E } (输出)

  • 地址锁存信号;
  • 8086 CPU 在总线周期的第一个时钟周期内发出的正脉冲信号,其下降沿用来把地址/数据总线(AD15AD0AD_{15}\sim AD_0)以及地址/状态总线(A19/S6A16/S3A_{19}/S_6\sim A_{16}/S_3)中的地址信息锁住存入地址锁存器中。

INTR\displaystyle{ I N T R } (输入)

  • 可屏蔽中断请求信号
  • 电平触发输入信号,高电平有效,只要检测到高电平就一直触发中断
  • CPU在每一个指令周期的最后一个 T\displaystyle{ T } 状态采样 INTR\displaystyle{ I N T R } 以决定是否进入中断响应周期。

INTA\overline{INTA} (输出)

  • 中断响应信号
  • 当 8086 响应来自 INTR\displaystyle{ I N T R } 引脚的可屏蔽中断请求时,在中断响应周期内,INTA\displaystyle{ I N T A } 变为低电平。

READY\displaystyle{ R E A D Y } (输入)

  • 准备就绪信号,高电平有效,有效时完成数据传送;
  • 是从所寻址的存储器或 I/O 设备来的响应信号;
  • 当被访问的部件无法在8086CPU规定的时间内完成数据传送时,应由该部件向 8086 CPU 发出 READY=L\displaystyle{ R E A D Y = L }使8086 CPU 处于等待状态,插入一个或几个等待周期 TW\displaystyle{ T _{ W } },当被访问的部件可以完成数据传输时,被访问的部件将使 READY=H\displaystyle{ R E A D Y = H }(高电平),8086 CPU 继续运行。

TEST\overline{TEST} (输入)

  • 等待测试控制信号,由 Wait 指令来检查;
  • 低电平有效,引线出现低电平则执行继续;否则处理器就等待进入空转状态;
  • 信号在每个时钟周期的上升沿由内部同步。

NMI\displaystyle{ N MI } (输入)

  • 非屏蔽中断输入信号;
  • 边沿触发信号,当引线电平出现由低到高变化时,将在当前指令结束以后引起中断;
  • NMI\displaystyle{ N MI } 引线的中断请求信号不能用软件加以屏蔽

RESET\displaystyle{ R E S E T } (输入)

  • 复位信号,引起处理器立即结束当前操作
  • 这个信号必须保持有效至少 4 个时钟周期以完成内部的复位过程,当其返回为低电平时,它重新启动执行。

CLK\displaystyle{ C L K } (输入)

  • 时钟输入信号,为 8086 CPU 提供基本的定时脉冲

V{C}\displaystyle{ V _{ \left\lbrace \mathbb{C} \right\rbrace } } (输入)

  • 电源输入
  • 5V±10%5\,\mathrm{V}\pm10\%

GND\displaystyle{ G N D }

  • 接地线

二. 8086 处理器时序

1. 时序的基本概念

在时钟的统一控制下,一个一个节拍实现;取指令 → 译码 → 执行

  • 执行一条指令所需要的时间称为指令周期
  • 8086 通过总线接口单元完成一次总线操作,称为一个总线周期,每个总线周期通常包含 4 个 T 状态,每个 T 状态是 8086 中处理动作的最小单位,即时钟周期(Clock Cycle);
  • 指令周期由以下的总线周期组成:
    • 存储器读或写
    • 输入输出端口的读或写
    • 中断响应

  • ALE\displaystyle{ A L E } 下降沿将地址存入地址锁存器
  • RD\overline{RD} 低电平指定读取数据
  • DEN\overline{DEN} 低电平,总线收发器允许控制信号
  • 如果存储器无法在 T4\displaystyle{ T _{ 4 } } 周期前沿完成数据的读出,则需要加入 Tw\displaystyle{ T _{ w } } 周期(等待周期),在每个 Tw\displaystyle{ T _{ w } } 周期的前沿采样 READY\displaystyle{ R E A D Y } 线信号,如果没有完成数据的读出则继续进入等待周期。

2. 8086 的典型时序

8086 工作在最大组态下的基本总线周期由 4 个 T 状态组成

T1\displaystyle{ T _{ 1 } } 状态

  • 8086 发出 20 位地址信号,同时送出状态信号 S0,S1,S2\overline{S_0}, \overline{S_1}, \overline{S_2} 给8288总线控制器;
  • 8288对 S0,S1,S2\overline{S_0}, \overline{S_1}, \overline{S_2} 进行译码,产生相应的命令的控制信号输出
    • 8288在 T1\displaystyle{ T _{ 1 } } 期间送出地址锁存允许信号 ALE\displaystyle{ A L E },将 CPU 输出的地址信息锁存至地址锁存器中,再输出到系统地址总线上。

T2\displaystyle{ T _{ 2 } } 状态

  • 8086 开始执行数据传送操作,8086 内部的多路开关进行切换,将地址/数据线 AD0AD15AD_0\sim AD_{15} 上的地址撤消,切换为数据总线,为读写数据作准备;
  • 8288发出数据总线允许信号和数据发送/接收控制信号 DT/RDT/\overline{R} 允许数据收发器工作,使数据总线与 8086 的数据线接通,并控制数据传送的方向;
  • 地址/状态线 A16/S3A19/S6A_{16}/S_3\sim A_{19}/S_6 切换成与总线周期有关的状态信息,指示若干与周期有关的情况。

T3\displaystyle{ T _{ 3 } } 状态

  • 周期开始的时钟下降沿上,8086 采样 READY\displaystyle{ R E A D Y } 线
  • 如果 READY\displaystyle{ R E A D Y } 信号有效(高电平),则在 T3\displaystyle{ T _{ 3 } } 状态结束后进入 T4\displaystyle{ T _{ 4 } } 状态,在 T4\displaystyle{ T _{ 4 } } 状态开始的时钟下降沿,把数据总线上的数据读入 CPU 或写到地址选中的单元,T4\displaystyle{ T _{ 4 } } 状态中结束总线周期
  • 如果 READY\displaystyle{ R E A D Y } 信号无效,插入等待周期 Tw\displaystyle{ T _{ w } },在 Tw\displaystyle{ T _{ w } } 状态 CPU 继续采样 READY\displaystyle{ R E A D Y } 信号直至其变为有效后再进入 T4\displaystyle{ T _{ 4 } } 状态,完成数据传送,结束总线周期。

T4\displaystyle{ T _{ 4 } } 状态

  • 8086 完成数据传送,状态信号 S0,S1,S2\overline{S_0}, \overline{S_1}, \overline{S_2} 变为无操作的过渡状态;
  • 8086 结束总线周期,恢复各信号线的初态,准备执行下一个总线周期。

3. 8086 工作在最大组态下的典型时序

最大组态下存储器读周期时序

T1\displaystyle{ T _{ 1 } } 周期
  • S2S1S0=101\overline{S_2}\,\overline{S_1}\,\overline{S_0}=101 读存储器控制信号
  • A19A0A_{19}\sim A_{0} 共 20 位地址信号线
  • 发出 ALE\displaystyle{ A L E } 信号将地址锁存
  • DT/RDT/\overline{R} 低电平读操作
T2\displaystyle{ T _{ 2 } } 周期
  • AD15AD0AD_{15}\sim AD_{0} 切换为数据总线准备传送数据
  • MRDC\overline{MRDC} 低电平有效,8288 发出都存储器命令,使地址选中的存储单元把数据送上数据总线
  • DEN\displaystyle{ D E N } 高电平有效,接通数据收发器,允许数据输入至 8086
T3\displaystyle{ T _{ 3 } } 周期
  • 采样 READY\displaystyle{ R E A D Y } 信号
  • 数据输入
  • S2S1S0\overline{S_2}\,\overline{S_1}\,\overline{S_0} 发出 111 状态信号,使信号在 T4\displaystyle{ T _{ 4 } } 周期恢复初态
T4\displaystyle{ T _{ 4 } } 周期
  • READY\displaystyle{ R E A D Y } 有效,进入 T4\displaystyle{ T _{ 4 } }
  • 各信号回复出台,准备执行下一个总线周期

最大组态下存储器写周期时序

最大组态下 I/O 读写时序

中断响应时序

系统复位时序

CPU 中的部分内容
标志位清除
IP0000H
CSFFFFH
DS0000H
SS0000H
ES0000H
指令队列

CPU 进入和退出保存状态的时序

  • 当系统中有别的总线主设备请求总线时。向 CPU 输送请求信号 HOLD\displaystyle{ H O L D }HOLD\displaystyle{ H O L D } 信号可以与时钟异步,则在下一个时钟的上升沿同步 HOLD\displaystyle{ H O L D } 信号。
  • CPU 接收同步的 HOLD\displaystyle{ H O L D } 信号后,在当前总线周期的 T4\displaystyle{ T _{ 4 } },或下一个总线周期的 T1\displaystyle{ T _{ 1 } } 的后沿输出保持响应信号 HLDA\displaystyle{ H L D A },紧接着从下一个时钟开始 CPU 就让出总线
  • 当外设的 DMA 传送结束,它将使 HOLD\displaystyle{ H O L D } 信号变低,HOLD\displaystyle{ H O L D } 信号是与 CLK\displaystyle{ C L K } 异步的,则在下一个时钟的上升沿同步,在紧接着的下降沿使 HLDA\displaystyle{ H L D A } 信号变为无效

三. 系统总线

1. 概述

采用一组公共的信号线作为微型计算机各部件之间的通信线

1.1. 分类

1.1.1. 按位置分
  • 片内总线:位于微处理器芯片内部,ALU 与各种寄存器或其他功能单元之间的互连
  • 片总线:是一台单板计算机或一个插件板的板内总线,用于各芯片之间的连接
  • 内总线:又称为微型计算机总线或系统总线,用于微型计算机系统各插件板之间的连接
  • 外总线:又称通信总线用于系统之间的连接,如微机系统之间,微机系统与仪器等等
1.1.2. 规定
  • 物理特性:总线的物理连接方式
  • 功能特性:一组总线中每一根线的功能
  • 电气特性:定义每一根线上信号的传送方向、有效电平范围
  • 时间特性:每根线在什么时间有效
1.1.3. 类型
  • 地址总线
    • 地址线的数目决定了直接寻址范围
    • 单向、三态总线
  • 数据总线
    • 双向信号线、三态总线
  • 控制总线
    • 实现命令、状态传送、中断、直接存储器传送的请求与控制信号传送,以及提供系统使用的时钟和复位信号等
    • 根据不同的使用条件,控制总线有的为单向、有的为双向,有的为三态,有的为非三态
  • 电源和地线
  • 备用线

1.2. 总线的操作过程

1.2.1. 申请阶段
  • 当系统总线上有多个主控模块时,需要使用总线的主控模块提出申请,由总线仲裁部分确定将下一阶段的总线使用权授给哪个模块
  • 如果系统总线上只有一个主控模块,则无需申请阶段。
1.2.2. 寻址阶段
  • 取得总线使用权的主控模块,通过总线发出本次打算访问的从属模块的地址及有关命令,以启动参与本次传输的从属模块。
1.2.3. 传输阶段
  • 主控模块和从属模块之间进行数据传输,数据由源模块发出经数据总线流入目的模块。
1.2.4. 结束阶段
  • 主控模块的有关信息均从系统总线上撤除,让出总线。

1.3. 总线的数据传输方式

1.3.1. 同步式传输
  • 用系统时钟作为控制数据传送时间标准
  • 主模块与从属模块统一,快的迁就慢的
1.3.2. 异步式传输
  • 应答式传输
  • 根据模块的速率自动调整相应时间
  • 应答关系完全互锁,ACK 和 REQ 之间右确定的制约关系
1.3.3. 半同步式传输
  • 使用系统时钟
  • 对于慢速的从模块,其传输周期可延长时钟脉冲周期的整数倍。增加信号线(WAIT或READY)。READY信号线无效说明从设备尚未准备好数据传输。允许不同速度的模块协调工作。
  • 能按时完成:同步
  • 不能按时完成:强制主模块延迟等待若干周期

2. PC 总线

3. ISA 总线

4. PCI 总线

外部设备互连总线,能与其他总线互连

5. USB 总线

因为使用了总线的设计,所以可以在一个 USB 接口上接多个设备,理论上一个 USB 接口可以共同支持连接 127 个设备

USB 接口可以为设备提供 +5V 的电源供应,所以只要所接外设不是高耗电的设备,如电机等(+12V),那么就可以由 USB 口直接供给电源,而无需另接电源了。

速度快,USB 接口可以连接一些高数据量的存储设备,比如外置存储器等

USB 是一种独立的串口总线,所以它在驱动设备的时候不需要占用中断和 DMA 通道,这样对于不太懂电脑的人来说,不需再设定这些参数。