8086微处理器(CPU)的构成
8086微处理器主要由运算器(算术逻辑运算单元ALU、地址加法器)、控制器(总线控制器)、内部寄存器组(14个内部寄存器)三部分组成。
CPU从功能上分为执行单元EU和总线接口单元BIU,其中执行单元EU负责指令的执行;而总线接口单元BIU负责与存储器及I/O接口之间的数据传送操作。具体来看,完成取指令送指令队列,配合执行部件的动作,从内存单元或I/O端口取操作数,或者将操作结果送内存单元或者I/O端口。
EU和BIU的工作逻辑关系如下所示:
① 每当8086的指令队列中有两个空字节,或BIU就会自动把指令取到指令队列中。其取指的顺序是按指令在程序中出现的前后顺序;
② 每当EU准备执行一条指令时,它会从BIU部件的指令队列前部取出指令的代码,然后用几个时钟周期去执行指令。在执行指令的过程中,如果必须访问存储器或者I/O端口,那么EU就会请求BIU,进入总线周期,完成访问内存或者I/O端口的操作;如果此时BIU正好处于空闲状态,会立即响应EU的总线请求。如BIU正将某个指令字节取到指令队列中,则BIU将首先完成这个取指令的总线周期,然后再去响应EU发出的访问总线的请求。
③ 当指令队列已满,且EU又没有总线访问请求时,BIU便进入空闲状态。④在执行转移指令、调用指令和返回指令时,由于待执行指令的顺序发生了变化,则指令队列中已经装入的字节被自动消除,BIU会接着往指令队列装入转向的另一程序段中的指令代码。
从上述BIU与EU的动作管理原则中,不难看出,它们两者的工作是不同步的,正是这种既相互独立又相互配合的关系,使得8086可以在执行指令的同时,进行取指令代码的操作,也就是说BIU与EU是一种并行工作方式,改变了以往计算机取指令→译码→执行指令的串行工作方式,大大提高了工作效率,这正是8086获得成功的原因之一。
总线时序
CPU的各个引脚的总线时序表明了各个引脚的工作上的逻辑关系,一个总线周期包括四个时钟周期,一个总线周期内CPU完成了读/写存储器的操作(包括输出访问地址和读写数据),一个时钟周期的时序关系图如下所示:
在T1时刻,各引脚的工作时序解读如下所示:
CLK | 时钟信号 | 高电平有效 |
A19/S6-A16/S3 | Bit19-bit16地址信号 | 地址信号 |
A15-A8 | Bit15-bit8地址信号 | 地址信号 |
AD7-AD0 | Bit7-bit0地址信号 | 地址信号 |
ALE | 地址锁存信号 | 高电平有效 |
IO/#M | 接口/存储器访问控制位 | #表示低电平访问内存 |
#RD | 读数据操作使能信号 | 高电平无效 |
DT/#R | 数据访问方向控制位 | 低电平允许数据读操作 |
#DEN | 允许数据读写信号 | 高电平允许访问数据 |
由上述9组引脚在T1时刻的时序和信号有效性可以知道“T1时刻执行的是地址输出操作“。
注意:
1. A19/S6-A16/S3这四个引脚为bit19-bit16高四位地址和bit6-bit3状态信号的复用引脚,多引脚信号有效性判别:
2. 地址锁存信号ALE含义如下所示:
图中,DT/#R和#DEN信号都是针对于数据收发的信号。
3. 对于8086和8088微处理器来说IO接口/存储器访问标志位有效性不同:
8088微处理器 | IO/#M |
8086微处理器 | #IO/M |
4. 数据的收发方式分为“同步(只管发送数据)”,“半同步(在数据收发前,先确定对方的状态再进行数据的同步传输)”,“异步(每发送完1byte数据就停下来等待对方的应答)”。半同步与异步的区别就在于:半同步是每检测一次对方状态就传输一次,异步是每发送1byte数据就停下来等待对方的应答。
在T1时刻,各引脚的工作时序解读如下所示:
CLK | 时钟信号 | 高电平有效 |
A19/S6-A16/S3 | Bit6-bit3状态信号 | 状态信号 |
AD7-AD0 | Bit7-bit0数据信号 | 数据信号 |
ALE | 地址锁存信号 | 低电平无效 |
IO/#M | 接口/存储器访问控制位 | #表示低电平访问内存 |
#RD | 读数据操作使能信号 | 低电平有效 |
DT/#R | 数据访问方向控制位 | 低电平数据读操作 |
#DEN | 允许数据读写信号 | 低电平允许读操作 |
注意:由于8088微处理器数据的输入输出采用的8位宽总线结构而且T2时刻CPU处于读数据状态,因此A15-A8信号没有用处。
总线分类
总线按照传输信号种类进行分类:数据总线DB、地址总线AB、控制总线CB:
总线按照结构层次分类:
1. CPU总线(CPU内部的总线)
2. 系统总线(CPU至接口的总线)
3. 外部总线(接口至外设的总线)
总线的结构
1. 单总线结构:
我们知道存储器除了存储数据并无其它操作,因此CPU访问存储器的最高速度远高于访问IO接口的速度(比如DAC这样的外设,其运行速度一般最高位14MHz但是存储器被访问的速度可以达到上百MHz)。低速设备和高速设备共用一条通道这就限制了CPU访问高速设备的速度,因此CPU访问总线的速度是一定的不可能依据访问设备来回变化。
2. 双总线结构:
① 存储器与IO接口间无直接通道:
这种结构虽然可以使得高速设备按照高速进行访问,低速设备按照低速进行访问,但是当我们的外设通过I/O端口访问存储器时就必须要经过CPU,只要访问流程中间经过CPU访问速度难免会下降并且给CPU造成数据传输的巨大压力。
② 存储器与IO接口间有直接通道:
此时高速设备不仅可以使用高速访问,低速设备使用低速访问而且外设可以直接访问到存储器,这就避免了CPU只做传输数据这种无用功,这也是我们现如今多总线结构的雏形,我们称这种外部设备通过IO端口直接访问存储器的总线以及控制器为DMA(direct memory access)。
3. 多总线结构
总线及总线控制器存在的意义
1. 总线作为信号的传输通道必须拥有足够的总线驱动能力和数据传输能力
总线驱动能力:由总线的工作频率体现,总线的工作频率越高说明数据传输的速度越快;
数据传输能力:由总线的位宽体现,总线的位宽越宽说明同样的传输速度传输的bit数量越多。我们可以将总线的工作频率和总线的位宽做如下类比:
总线的工作频率 | Hz | 汽车车道上形式汽车的速度 |
总线的位宽 | Bit | 汽车车道的宽度 |
总线的带宽 | Bps(每秒传输比特数) | 汽车车道单位时间的车流量 |
我们想一下总线上传输的数据长度越长传输速度越快,那么总线在每秒传输的bit数量就越多,因此总线的工作频率和总线的位宽就决定了总线的带宽:
2. 总线作为CPU与多个外部设备/多个存储器连接的通道必须要有“在出现多个占用总线的请求时,要予以仲裁“的能力
仲裁的依据无非就是“设备的优先级“以及”请求发布在时间上的先后顺序“。
3. 总线作为信息传输的通道难免有传输错误的时候,此时总线必须要检测出错误并予以处理