Skip to content

第五章:总线及形成 ​

§ 5.1 总线定义及分类 ​

总线的定义:用来传输信息的电线叫做总线

分类:

  • 片内总线(CPU内部的总线)
  • 元件级总线(版内总线)
  • 内部总线(系统总线)(本章涉及到的就是系统总线)
  • 外部总线(通信总线)

§ 5.2 几种常见芯片 ​

74LS244(八位数据单向缓冲器)

74表示系列,74系列属于民品芯片,54系列就是军品芯片

名称当中的LS表示低速,74F244就表示高速

244表示器件编号

74LS244一共20个引脚,工作电源+5V

image-20210328210523865

image-20210328211833054

带A的引脚为输入引脚,带Y的引脚为输出引脚,带1的引脚受1G引脚的控制,带2的引脚受2G引脚的控制

输入端接外设,输出端接CPU,1G和2G接片选信号

74LS245(八位数据双向缓冲器)

image-20210328211841418

该芯片可以进行双向传送,如何传送受两个控制端控制 E非引脚和DIR引脚,这两个引脚的功能参考上方真值表

我们也可以通过控制DIR把双向缓冲器当做单向缓冲器用

我们一般也使用245来当单向缓冲器,因为244引脚分布神奇,采用的是输入输出交错分布,布线很难受

74LS373(八位锁存器)

image-20210328213543751

D端输入,Q端输出,373的引脚分布也很神奇,所以后来又有了74LS573,方便排线

§ 5.3 8086CPU引脚功能及时序 ​

image-20210330152232701

RESET:复位引脚,高电平有效

CPU 接通电源以后,给RESET引脚加一个高电平后才能正常工作

CLK:时钟引脚

CLK引脚用来产生时钟周期的

reset引脚加高电平的时候,上升沿必须和CLK的下降沿同步,并且RESET引脚的占用的时钟频率必须大于4个时钟周期才有效

为了使CLK的下降沿和RESET的上升沿同步,Intel公司研发了8284芯片,即时钟发生器,8086的CLK和RESET信号必须由8284产生

8086复位后:指令队列6字节全部清空,除CS以外的段寄存器全部清零,CS复位后为FFFFH,8086的启动地址为FFFF0H,通用寄存器不确定

由于8086启动地址为FFFF0H,只剩下了16个字节,所以在这16个字节里需要安排JMP FAR PTR指令远程跳走

一个基本的总线周期包含了四个时钟周期,分别是T1~T4

在T3周期会检测ready信号,如果设备在T3状态后没准备好(低电平),可以插入Tw等待周期来等待低速设备执行结束,插入后就成了一个带等待周期的总线周期,除此之外,在执行IN/OUT指令的时候,会自动插入一个Tw周期,故IN/OUT指令都需要5个总线周期

引脚为输入引脚,是最小模式和最大模式的选择引脚

CPU工作在最小方式时,8086给外部存储器或IO端口的控制信号由引脚直接产生,也就适合于构成单处理器系统 当CPU工作在最大方式时,8086给外部存储器或IO端口的控制信号不是由CPU引脚直接产生,而由8086CPU外部的总线控制器(8288)产生,这是由于在最大模式下,26,27,28脚变成了状态输出引脚,直接连接8288,一共能产生2^3^=8种信息,再通过8288的译码器进行译码就知道CPU在干嘛,所以在最大模式下,8086CPU的控制信号就是由8288将26,27,28三个引脚译码产生的,也就适合构成多处理器系统

image-20210330152849735

AD0~AD15

这16根引脚为服用引脚,既能输出地址信息,也能传输数据信息 既然这一组引脚可以传输两种信息,那就要考虑如何区分目前传输的信息 此时就引入了时序的概念,我们规定CPU在不同时间传输不同的信息,这个时序就是由总线周期来判断

我们说过,一个总线周期分为四个时钟周期,T~1~~T~4~ 在T~1~状态时,CPU输出地址信息,在T~2~状态及以后,一直到T~4~状态,这16个引脚传输的都是数据信息

A16/S3~A19/S6

这四根线也是地址线和状态信息的复用引脚 这四根线也一样,也是T~1~周期为地址信息,后面的周期为状态输出引脚

在T2~T4后,这三个引脚为状态引脚,S~6~始终为低电平,没有什么用,S~5~状态时钟和标志寄存器内IF的状态保持一致 S4和S3两个状态组合起来可以产生4个状态信息,反映CPU使用的哪一个段寄存器 image-20210330161212126

ALE

由于在第一个周期,以上复用引脚传输的都是地址信息,后面的周期都是其他信息了,那么我们就要想办法把这些地址信息保存起来,这样才能从这些地址线上把地址提取出来

ALE为地址锁存引脚,ALE高电平有效,只有T~1~状态时才为高电平,当ALE为高电平时,就让CPU抓住地址信息,可以把复用信号里的地址信号给提取出来,这里提取地址信息用的芯片就是上一节里的74LS373,一片74LS373能存8位地址,8086系统的20位地址就需要3片373芯片来锁存,当74LS373的G端收到ALE发出来的下降沿的时候,就会把地址锁存起来

在实际设计中,我们一般把OE非引脚接地,G端接到CPU的ALE段,我们再把20根地址线连接到三个锁存器的输入端,我们从输出端得到的就是系统级地址总线,这样的电路,就是系统地址总线形成电路

****引脚为输出引脚,功能为数据传送的方向控制引脚 DT有效表示CPU向外输出,R非引脚有效表示CPU向外读入数据 例如

NASM
MOV [BX],AX

这一个指令就是CPU向外写入数据,此时****引脚为高电平

为输出信号,该信号为数据有效信号,当DEN为低电平时,表明数据线上的数据有效

理论上在第二个周期以后都是有效的,但是一般在T~2~周期的后半周期才会有效,因为要保证此时数据是稳定的,并且在T~4~周期阶数之前要准备下一条指令,所以要提前变高,在设计时要避免这种不稳定期

为输出引脚

这个引脚在前面就说过,当该引脚为低电平,表示对IO端口操作,如果是高电平,表示对存储器操作,该引脚在第一个周期就会生效,直到整个总线周期结束

在8088中,这个引脚为

信号

这两个信号一定是在有效后才会产生,WR非为写允许信号,RD非为读允许信号,在失效之前,CPU肯定已经完成了读写操作,这两个信号要提前失效

根据DEN和DT/R引脚,我们又能设计出数据总线的形成电路,其中74LS245只能处理8位,对于16位数据的8086就需要2片245芯片来形成数据总线

引脚

是一个输出引脚,这个引脚比较重要,为高字节允许信号,该信号在第一个时钟周期有效,后面的都是S~7~信号,所以在用这个信号的时候也需要用373把这个信号锁存起来

在设计存储器时,我们把内存设计成两部分,偶体和奇体,数据线的低8位只能访问偶体,数据线的高8位只能访问奇体,当CPU对偶地址单元操作是,一定有A~0~=0,当CPU对奇抵制单元操作时,肯定有=0

NASM
MOV [2001H],AX

这里访问的就是一个未对准字,会把AL的内容写到2001H,AH的内容写到2002H,对未对准字单元的读写操作要用两个总线周期 第一个总线周期走高八位数据线把AL写到低地址单元,第二个总线周期走低八位数据线把AH写到高地址单元

当=0,表示当前选中的为奇地址单元,当A~0~=0时,表示当前选中的为偶地址单元

在8088系统下没有

image-20210330212636109

§ 5.4 系统总线的形成 ​

20190531163640712

通过以上图片可以看出,地址总线因为都是复用引脚,需要在第二个时钟周期到来之前把地址信息存起来,所以需要利用锁存器来对地址信息进行锁存.数据信息因为需要对信息进行放大处理,并且需要三态传输,所以需要数据收发器来控制,CLK的下降沿要和RESET信号的上升沿对其,所以有8284用来生成CLK和RESET信号,并且ready信号也要由8284管理,控制线直接拉出来就行了 在后续设计存储器电路和IO接口设计的时候,重点用到的会是

8088和8086的区别: 从内部看,8086的指令队列6个字节,8088的指令队列为4个字节 从外部看,8086有16根数据线,8088只有8根数据线,8086的引脚在8088上为 8086对字操作分对准字和未对准字,8088没有这样一个概念

NMI输入引脚为非可屏蔽中断请求端,上升沿有效

INTR输入引脚为外部可屏蔽中断输入请求端,高电平有效,必须要IF为1时,CPU才响应该类屏蔽

输出引脚和INTR是一对引脚,是对可屏蔽中断请求的响应信号,花费两个总线周期回答

INTR和引脚连接8259芯片,一个8259控制8个中断响应信号,8259提出中断请求后,如果IF为1,就通过发送一个低脉冲告诉8259,CPU响应此中断,当8259收到第二个负脉冲后,就会把中断类型号送到地址线上去,CPU在第二个负脉冲发送出去后就会通过数据总线把8259穿过来的中断类型号给拿过来,在响应请求完毕后,INTR引脚变为低电平

HOLD引脚是一个输入引脚

HODA引脚是一个输出引脚,和上面的HOLD引脚是一对

CPU在最小模式下也可以组成多处理器系统,当CPU在最小模式下组成多处理器系统时,只能有2个处理器,除了8086之外,其他的处理器叫做总线主控设备,当总线主控设备要使用总线时,要向CPU的HOLD端发出一个高电平申请总线使用权限,当CPU把总线让给你的时候通过HODA给你发一个高电平,告诉总线主控设备可以使用总线了

最大模式下的引脚和时序

image-20210330152232701

我们只有24~31脚的功能改变了

其中26~28引脚连接到8288总线控制器上进行译码,再由8288产生控制信号

image-20210330232138336

image-20210330152849735

QS1和QS0

在最大模式下24脚和25脚变成了这两个引脚,这两个引脚输出有四个状态,不同的状态表示CPU在指令队列中取指令的状态 真值表: image-20210330232654441

在实际电路设计的时候,这两个状态是不用的

这两个都是双向引脚,当最大模式时,31脚和30脚就变成了这样两个引脚

在CPU工作与最大方式多处理器系统时,总线主控设备要使用总线的时候就向输入一个负脉冲,CPU再通过这个负脉冲向总线上输出一个负脉冲告诉设备可以使用总线了,此时CPU输出引脚全部变成高阻态,使用完后,通过向CPU再发送一个负脉冲,相当于最小模式下HOLD和HLDA两个引脚的功能之和

和功能一样,当这两个设备同时发送总线控制请求时,就存在优先权的问题, 的优先权大于的优先权

引脚

最大工作方式时,29脚变成脚

在CPU执行程序的时候,如果一条指令用户认为非常重要,不允许其他处理器(总线主控设备)向CPU请求总线使用权,就在这条指令前方穿一个LOCK总线封锁前缀,在执行带LOCK前缀期间,就会在上输出一个低电平告诉其他设备总线被封锁了

在下一章会学习存储器扩展线路设计,接下来就是IO接口设计,都是基于系统级总线的设计,我们都默认系统级总线已经形成了,就比如说CPU在最小模式下时,扩展一个多大容量的存储器电路,或者扩展一个什么功能的IO接口电路,此时我们默认系统总线已经形成了,我们就要知道需要用到哪些信号

  • 8086最小需要用到的系统总线(重点)
    • 存储器设计需要用到20位地址总线,IO接口电路设计需要用到低16位地址总线
    • 不管是存储器还是IO电路的设计,都要用到16根数据线,如果我们给IO的地址是偶地址,就分配低八位数据线给IO,如果是奇地址,就把高8位数据线分给IO,存储器同理
    • 在存储器和IO电路设计都会用到,高电平表示访问存储器,低电平表示访问IO
    • 写控制信号和读控制信号
    • 高字节允许信号,用来判断访问的是存储器的奇体还是偶体
    • 如果工作在中断模式下,还要用到信号
  • 8086最大需要用到的系统总线
    • 存储器设计需要用到20位地址总线,IO接口电路设计需要用到低16位地址总线
    • 不管是存储器还是IO电路的设计,都要用到16根数据线,如果我们给IO的地址是偶地址,就分配低八位数据线给IO,如果是奇地址,就把高8位数据线分给IO,存储器同理
    • 8288产生的,这几个信号名都是方便记忆的别名,在8288里并不是这个名字
    • 高字节允许信号,用来判断访问的是存储器的奇体还是偶体
    • 如果工作在中断模式下,还要用到信号
  • 8088最小模式需要用到的系统总线
    • 存储器设计需要用到20位地址总线,IO接口电路设计需要用到低16位地址总线
    • 只需要低八位数据线
    • 控制信号:
    • 如果工作在中断模式下,还要用到信号
  • 8088最大模式需要用到的系统总线 (重点) (如果没说8088工作与哪种模式,默认为最大模式)
    • 只需要低八位数据线
    • 存储器设计需要用到20位地址总线,IO接口电路设计需要用到低16位地址总线
    • 8288产生的
    • 如果工作在中断模式下,还要用到信号

综上所述,不难看出,不论哪种工作方式,我们都需要用到 地址信息,数据信息,读允许控制信号,写允许控制信号以及判断是操作存储器还是操作IO的控制信号,只不过最小模式是CPU提供,最大模式是8288提供

IBM-PC/XT系统

PC/XT用的处理器是8088的最大方式,是一个多处理器系统

例如8237(DMA)(存储器直接访问控制器)

任何一个处理器都有权接管总线,但是总线只有一组,那么谁来管理总线就是一个问题了 用户的IO接口线路都是给主处理器执行的

为了让总线可以分部件独立进行控制,就有了下面的总线形成电路

image-20210331001939347

下图为IBM-PC/XT系统在主板上留给用户的总线插座

image-20210331002224714

其中A11的AEN为重点掌握,就来自于上上个图(图5.19)的AEN信号

image-20210331002714878

用户设计PC/XT系统总线需要用到的信号

  • 8根数据线
  • 20根地址线:其中低10根给IO分配地址,一共可以有1K个地址,其中,前半K给主板上的IO分配地址,后半K分配给插线板上的IO做地址,用户开发的IO地址肯定在后半K,并且要没人用的IO地址
  • 8288产生的
  • AEN信号,一定要让AEN等于0

以笔记为镜,可以知得失