第5章 存储器 5.1存储器概述 视频讲解 存储器(memory)是用来存储程序和数据的部件,是计算机系统中必不可少的组成部分。从与CPU的关系来看,可分为内存储器和外存储器。内存储器(内存,也称主存)通常由半导体存储器组成,它直接与CPU的外部总线相连,是计算机主机的组成部分,用来存放当前正在执行的数据和程序,是本章主要讨论的内容。外存储器(外存,也称辅存)位于主机外面,它通过接口逻辑电路与主机相连接,是作为计算机的外部设备来配置的。外存用来存放暂时不用的那些程序和数据,使用时必须先调入内存才能执行。常用的外存有硬盘、光盘、U盘等。 5.1.1半导体存储器的分类 从存储器的工作特点、作用等角度来看,半导体存储器分类如图5.1所示。 图5.1半导体存储器的分类 1. RAM RAM(随机存取存储器)的特点是存储器中的信息既可以读又可以写,且对存储器中的任一存储单元进行读写操作的时间大致相同。RAM中的信息在掉电后立即消失,是一种易失性存储器。RAM分为静态RAM(SRAM)和动态RAM(DRAM)两种。 1) SRAM SRAM是利用触发器的两个稳定状态表示“1”和“0”,最简单的TTL电路组成的SRAM存储单元由两个双发射极晶体管和两个电阻构成的触发器电路组成; 而MOS管组成的SRAM存储单元由6个MOS管构成的双稳态触发电路组成。SRAM的特点是只要电源不掉电,写入SRAM的信息就不会丢失,同时对SRAM进行读操作时不会破坏原有信息。SRAM的功耗较大,容量较小,存取速度快,不需要刷新,常用于容量较小的单板机、工业控制等小系统中。 2) DRAM DRAM是利用MOS管的栅极对其衬底间的分布电容来保存信息的。DRAM的每个存储单元所需要的MOS管较少,典型的由单管MOS组成,因此DRAM的集成度较高、功耗低; 缺点是MOS管栅极对其衬底间的分布电容上的电荷会随着电容器的放电过程而逐渐消失。一般地,信息在DRAM中保存的时间为2ms左右。为了保存DRAM中的信息,每隔1~2ms要对其刷新一次。刷新的过程就是“读出”的过程,由读出再生电路完成。因此采用DRAM的计算机必须配置刷新电路。另外,DRAM的存储器速度较慢,容量较大,且功耗低。DRAM广泛应用于内存容量较大的微型机系统,如PC的内存。 2. ROM ROM(Read Only Memory,只读存储器)的特点是用户在使用时只能读出信息,不能写入新的信息,存储信息断电后不会丢失。ROM用来存放固定的应用程序、系统软件、监控程序、常数表格等。ROM按写入信息方式的不同可分为以下几种。 1) 掩膜式ROM 掩膜式ROM(Masked ROM)存储单元中的信息由ROM制造厂家在生产时使用掩膜式工艺将信息一次性写入,其内部信息不再能更改,所以也称固定存储器。它适用于大批量生产。 2) PROM PROM(Programmable ROM)中的程序和数据是由用户使用专门的编程器自行一次性写入的,一旦写入就无法更改。 3) EPROM EPROM(Erasable Programmable ROM)也是由用户使用专门的编程器自行写入程序和数据,但写入后的信息可用紫外线照射芯片的石英窗口来擦除,芯片中的信息全部擦除后可再重新写入新的内容。EPROM可以多次擦除、多次写入。 4) EEPROM EEPROM(Electrically Erasable Programmable ROM)是可用电信号进行擦除和写入信息的存储器,芯片不离开插件板便可擦除部分或全部信息和写入其中信息。EEPROM为经常需要修改程序和参数的应用领域提供了极大的方便,但存取速度较慢,价格较贵。 3. Flash Memory Flash Memory(闪速存储器)又称为快闪存储器,简称闪存,是一种新型的可读/写、非易失性半导体存储器,近年来技术发展极快。Flash Memory芯片具有功耗低、集成度高、体积小、可靠性高等特点。目前,Flash Memory广泛应用于便携式计算机的PC卡存储器(固态硬盘),以及用来存放主板上的BIOS以代替原来的EPROM的BIOS。现在的移动设备普遍用Flash Memory来存储信息。对于需要实时代码或数据更新的嵌入式系统应用,Flash Memory也是一种理想的存储器。 近年来采用Flash Memory制作的“U盘”已广泛应用在台式机和便携机中替代软盘,成为大容量、高速度的移动式存储器。 5.1.2半导体存储器的主要性能指标 半导体存储器的主要性能指标有存储容量和存取速度。 1. 存储容量 一个半导体存储器芯片的存储容量是指存储器可以容纳的二进制信息量。一般存储器都采用一维线性编址,存储器中每个存储单元都被赋予一个地址。因此,存储器的存储容量与存储器中存储地址数有关,与每个存储单元的位数有关,即存储器的存储容量=2M×N,其中M是存储器的地址数,N是存储器的每个存储单元的位数。表示存储器容量的单位通常用字节(B)表示,也可用位(b)表示。这里有1B=8b。 例如,某存储器芯片的地址数为16位,存储字长为8位,则该存储器的存储容量为216×8b=64KB=512Kb。 2. 存储速度 存储器的存储速度可以用两个时间参数表示: 一个是“存取时间”TA (Access time),定义为从启动一次存储操作,到完成该操作所经历的时间; 另一个是“存储周期”TM (Memory cycle),定义为启动两次独立的存储器操作之间所需的最小时间间隔。通常存储周期TM略大于存取时间TA。 5.1.3典型的半导体存储器芯片 1. 静态RAM芯片HM6116 HM6116是一种2048×8位的高速静态CMOS随机存取存储器,其引脚排列如图5.2所示。 图5.2HM6116的引脚排列 HM6116片内有16 384(即16K)个存储单元,排列成128×128的矩阵,构成2K个字,字长为8位,可构成2KB的内存。该芯片有11条地址线A0~A10、8条数据线I/O1~I/O8,还有3条控制线: 片选信号CE,用来选择芯片; 写允许信号WE控制读/写操作,当WE为高电平时,为读出,当WE为低电平时,为写入; 输出允许信号OE, 用来把输出数据输出到数据线。 常用的静态RAM芯片有2114(1K×4b)、6116(2K×8b)、6264(8K×8b)、62128(16K×8b)、62256(32K×8b)、62512(64K×8b)及更大容量的HM628128(128K×8b)和HM628512(512K×8b)等。 2. 动态RAM芯片Intel 2164A Intel 2164A是64K×1b的动态随机存取存储器,其引脚排列如图5.3所示。 图5.3Intel 2164A的引脚排列 Intel 2164A的片内有64K(65536)个内存单元,有64K个存储地址,每个存储单元存储一位数据,片内要寻址64K个单元,需要16条地址线,为了减少封装引脚,地址线分为行地址和列地址两部分,芯片的地址引脚只有8条,片内有地址锁存器,可利用外接多路开关,由行地址选通信号RAS将先送入的8位行地址送到片内行地址锁存器,然后由列地址选通信号CAS将后送入的8位列地址送到片内列地址锁存器。16位地址信号选中64K存储单元中的一个单元。 Intel 2164A的数据线是输入和输出分开的,则WE信号控制读/写。当WE为高电平时,为读出,所选中单元的内容经过输出三态缓冲器,从DOUT引脚读出; 当WE为低电平时,为写入,DIN引脚上的内容经过输入三态缓冲器,对选中单元进行写入。 Intel 2164A芯片无专门的片选信号,一般行选通信号和列地址选通信号也起到了片选的作用。 常用的动态RAM典型芯片有2116(16K×1b)、2164(64K×1b)、21256(256K×1b)、21010(1M×1b)、21014(256K×4b)、44100(1M×4b)等。 3. 只读存储器芯片Intel 2732A Intel 2732A是一种4K×8b的EPROM,其引脚排列如图5.4所示。 图5.4Intel 2732A的引脚排列 Intel 2732A的存储容量为4K×8b,有12条地址线A11~ A0,8条数据线O7~O0。2个控制信号中CE为芯片允许信号,用来选择芯片; OE/VPP为输出允许信号及编程电源输入线。当CE为低电平时,若OE/VPP也为低电平,对存储器进行读操作,把输出数据送上数据线; 若OE/VPP加上21V编程电压,则对存储器重新编程。当CE为高电平时,Intel 2732A处于待用状态(又称为静止等待方式)。 常用的EPROM芯片有2716(2K×8b)、2732(4K×8b)、2764(8K×8b)、27128(16K×8b)、27256(32K×8b)、27512(64K×8b)等。 5.1.4存储器的分级结构 现在存储器的衡量指标主要从以下三方面: 速度、容量、价格。计算机对存储器的要求是价格低、速度快、容量大,需要尽可能满足这三个标准。但是,一般都是速度越快,价格越高,因此容量一般也比较小。为了尽可能满足计算机的运算速度和高容量的要求,现有的存储系统中都设置了高速缓冲存储器(Cache),并采用虚拟存储技术构成三级存储系统。微机系统中存储器的结构如图5.5所示。 图5.5微机系统中存储器的结构 Cache采用静态半导体存储器,具有速度快、容量小的特点。Cache位于CPU和主存储器(以下简称主存)之间,用于匹配两者的速度,达到高速存取指令和数据的目的。现有的Cache系统一般都设置了3级以上,其中一级Cache都集成到了CPU内部。 Cache和主存构成了微机系统的Cache主存系统。CPU读取数据都是先从Cache中读取,如果Cache不存在,才去访问主存。如果能够尽可能地保证CPU每次都能从Cache中读取到数据,从CPU的角度看,CPU的主存的速度接近Cache,容量则接近于主存。 主存和外存构成了虚拟存储器系统,主要目的是从逻辑上实现对内存容量的扩充。从整体上看,其速度接近于主存的速度,其容量则接近于外存的容量。 计算机存储系统的这种多层次结构,很好地解决了容量、速度、成本三者之间的矛盾。这些不同速度、不同价格、不同容量的存储器,利用了硬件、软件或软硬件结合的技术连接起来,组成了一个完整的存储系统。 视频讲解 5.2半导体存储芯片结构及使用 5.2.1半导体存储器的基本结构 计算机系统中内存储器的基本结构如图5.6所示。图5.6中虚线框内为半导体存储器,其中存储体是存储单元的集合体,容量为2M×N; MAR为存储器地址寄存器,用来存放CPU所访问的存储单元的地址; MDR为存储器数据寄存器,用来存放CPU对MAR地址所指存储单元的读/写操作的数据。内存储器通过M位地址线、N位数据线和相关的控制线与CPU交换信息。 图5.6存储器的基本结构 CPU对内存储器的访问只有读操作、写操作。当CPU启动一次存储器读操作时,CPU先将地址通过地址总线送入MAR,然后使读相关的控制信号有效,MAR中的地址码经过地址译码器译码后选中该地址对应的存储单元,并通过读/写驱动器将选中单元的数据送入MDR,最后通过数据总线读入CPU。 当CPU启动一次存储器写操作时,CPU先将地址通过地址总线送入MAR,再将数据通过数据总线送入MDR,然后使写相关的控制信号有效,MAR中的地址码经过地址译码器译码后选中该地址对应的存储单元,并通过读/写驱动器将MDR的数据送入选中的存储单元。 5.2.2半导体存储芯片的使用 1. 半导体存储芯片的使用概述 CPU对存储器芯片的使用,是通过软件和硬件协调工作完成的。在软件方面,CPU执行相应的指令实现对存储器的访问。例如,8086/8088 CPU读存储器操作可用指令MOV AL,[1000H]; 写存储器操作可用指令MOV [1000H],AL。在硬件方面,可以将存储器芯片的地址线、数据线、控制线与CPU的地址总线、数据总线、控制总线直接相连接,并采用译码电路产生存储器芯片的片选信号,实现CPU与半导体存储芯片的正确连接。 由8088 CPU组成的8位存储器系统如图5.7所示。存储器芯片同CPU的连接是构筑8位存储器子系统的主要工作,有如下三部分内容。 图5.78088 CPU组成的8位存储器系统 1) 地址线的连接 可以根据所选用的半导体存储器芯片地址线的多少,把CPU的地址线两部分: 一部分通常是低位的地址线直接和存储器芯片的地址线相连,用于芯片内的地址译码,选中该存储器芯片的一个存储单元; 另一部分通常是剩余的高位地址线经另加的地址译码器,产生存储器芯片的片选信号,用来选中CPU所要访问的存储器芯片。图5.7中,对存储器芯片而言,片内地址线为A15~A0,直接与CPU的地址线A15~A0相连接。CPU未连接的4位高位地址A19~A16即剩余地址线,经地址译码器译码后输出作为存储器芯片的片选信号。 2) 数据线的连接 图5.7中,存储器芯片有8条数据线,可直接同8088 CPU的8位数据线相连。 3) 控制线的连接 从图5.7中可见,CPU对存储器读/写操作的控制信号主要有WR、RD和IO/,前两个可直接同存储器芯片的控制信号线WE和OE连接,IO/可作为地址译码器的使能端实现对存储器的读/写操作。 2. 存储器芯片与CPU连接时应考虑的问题 存储器芯片与CPU连接时,原则上可以将存储器芯片的地址线、数据线、控制线与CPU的地址总线、数据总线、控制总线直接相连接,但在实际操作时,必须考虑以下几个问题。 1) CPU的负载能力 在微机系统中,由于CPU通过总线与多片存储器芯片及I/O接口相连接,这些芯片有的是TTL器件,有的是MOS器件,因此在构成系统时,CPU能否支持其负载是必须考虑的问题。当总线上连接的器件超出CPU的负载能力时,应设法提高总线的驱动能力。采取的措施通常有增加缓冲器或总线驱动器等。 2) 各种信号线的连接 由于CPU的各种信号要求与存储器的各种信号要求有所不同,往往需要增加一些必要的辅助电路。 (1) 数据线。存储器芯片的数据线可与CPU的数据线直接相连。CPU的数据总线是双向的,而存储器的数据线有输入输出共用和分开两种结构。对于输入输出共用的数据线,由于其芯片内部有三态驱动器,故可直接与CPU的数据总线相连。而对于输入和输出分开的数据线,则要外加三态门,才能与CPU的数据总线相连。 (2) 地址线。存储器的地址线一般可直接与CPU的地址总线相连。对于大容量的动态RAM,为了减少封装引线的数目,往往采用分时输入的方式。这时,需要在CPU与存储器芯片之间增加多路转换开关,用CAS和RAS分别将高位地址及低位地址送入存储器。 (3) 控制线。存储器的控制信号主要有读写信号OE、WE及片选信号CS,对于动态存储器芯片,还需要地址分时控制信号CAS和RAS等。 3) CPU的时序与存储器存取速度的配合 CPU在取指令和存储器读写操作时,其时序是固定的。因此,可根据CPU的时序来选择存储器。对存取速度较慢的存储器,还需增加等待周期TW,以满足快速CPU的要求。 4) 存储器的地址分配及片选信号的产生 内存通常分RAM和ROM两大部分,RAM又分系统区(监控程序及操作系统占用的区域)和用户区。所以,合理地对内存进行分配是非常重要的。此外,目前生产的存储器芯片的容量仍然是有限的,所以常常需要许多片存储器芯片才能组成一个存储器系统,这就要求正确选择片选信号。 通常,片选信号由CPU剩余的高位地址线译码产生,译码电路既可采取集成电路地址译码器,也可采用基本门电路实现。 图5.874LS138译码器引脚 (1) 采用集成电路地址译码器。 在微机系统中,常采用中规模集成电路芯片74LS138作为地址译码器,其引脚如图5.8所示。 74LS138是3线—8线译码器/分配器,有3个选择输入端C、B、A,3个使能输入端G1、2A、2B,以及8个输出端0~7。其逻辑功能表如表5.1所示。当3个使能输入端G1=1、2A=0、2B=0同时成立时74LS138才进行译码工作,此时8个输出端0~7仅有一个有效,由3个选择输入端C、B、A对应的二进制编码确定。 表5.174LS138译码器逻辑功能 输入输出 G2AG2BGCBAY0Y1Y2Y3Y4Y5Y6Y7 1×××××11111111 ×1××××11111111 ××0×××11111111 00100001111111 00100110111111 00101011011111 00101111101111 00110001110111 00110111111011 00111011111101 00111111111110 (2) 采用基本门电路实现地址译码。 对于存储芯片较少的存储器,可以采用基本门电路组成的逻辑电路来实现片选控制。典型的或门和与非门如图5.9所示。图中两逻辑电路的逻辑关系完全等价,读者可自行验证。 图5.9典型的基本门电路实现地址译码 5.316位/32位系统的存储器接口 16位及以上CPU,为了向下兼容8位、16位CPU指令,通常一个存储器单元仍采用8位。这样,在其存储器系统设计时,既要保证字节的读/写功能,又要保证字、双字读/写时序的效率,就要考虑存储单元地址对齐问题。地址对齐(adjustment)是指16位CPU(8086)数据的存放地址为2的倍数,即偶数(A0=0),32位CPU(80386)数据的存放地址为4的倍数(A1=A0=0),以此类推,以保证数据读/写时序的效率。这种思想体现在以下8086/80386存储器系统的设计应用中。 1. 8086 CPU存储器系统的奇偶分体 8086存储器系统中1MB的存储器地址空间分成两个512KB的存储体——“偶存储体”和“奇存储体”,图5.10为 8086系统中奇偶分体存储器和CPU的连接图。 图5.10中用3片74LS373地址锁存器和2片74LS245数据收发器分离8086的地址数据复用线AD15 ~AD0和地址状态复用线A19/S6~A16/S3形成20位地址总线AB和16位数据总线DB。偶存储体同8086的低8位数据总线D7~D0相连接,奇存储体同8086的高8位数据总线D15~D8相连接,地址总线的A19~A1同两个存储体中的地址线A18~A0相连接,A0不用在对存储器的存储单元寻址上,A0和BHE被用作对存储器奇偶字库的选择。A0接偶存储体的CE,A0=0时选中偶存储体。BHE信号与奇存储体CE端相连,BHE=0时选中奇存储体。当8086对地址对齐的字(对准字)进行读/写操作时,A0=0且BHE=0,可在一个总线周期内完成读/写操作,而8086对非对准字(奇地址开始的字)进行读/写操作时,需要两个总线周期才可完成。显然,软件应该使用对准字才能显现8086 CPU存储器系统的奇偶分体硬件结构的效率。 图5.108086 CPU存储器系统的奇偶分体 2. 80386 CPU存储器系统的分体 80386存储器系统中4GB的存储器地址空间分成4个1GB的存储体,图5.11为 80386 CPU存储器系统分体连接。 图5.1180386 CPU存储器系统的分体连接 利用高30位地址线A31~A2和4字节使能信号BE3~BE0来实现字节、字、双字的数据传送。BE3~BE0信号由CPU内部根据地址线A1~A0产生。4个1GB的存储体的地址单元分别是4n+0、4n+1、4n+2、4n+3对应连接在80386数据总线D7~D0、D15~D8、D23~D16、D31~D24上,当80386进行双字对准字(地址为4的倍数)数据传送时,BE3~BE0全部有效,可一次完成双字32位数据的读/写操作。 5.4存储器容量的扩展 视频讲解 存储芯片的容量是有限的,实际系统需要更大存储容量时,就必须采用多片现有的存储器芯片构成较大容量的存储器模块,这就是存储器的扩展。扩展存储器的方法有三种: 位扩展、字扩展、字位扩展。 5.4.1位扩展 当存储芯片的存储字的数量满足需要,而存储字长(存储单元的位数)不满足需要时,就需要增加存储字长,即进行位扩展。 如果采用Intel 2164芯片,因该芯片64K×1b芯片,必须由8片才能构成64KB的内存,如图5.12所示。 图5.1262K×1b芯片位扩展组成64K×8b的内存 位扩展时,各存储芯片的信号线的连接方法如下。 (1) 芯片的地址线全部并联,并与CPU地址总线中相应的地址线相连。 (2) 芯片的数据线分高低位分别与CPU数据总线的相应位连接。 (3) 芯片的读/写控制信号线并联,接CPU控制总线中的读/写控制线; 芯片的片选信号并联,可接CPU控制总线中的存储器选择信号,也可接地址线高位或地址译码器输出端。 5.4.2字扩展 当存储芯片的存储字长(存储单元的位数)满足需要,而存储字的数量不满足需要时,就需要增加存储字的数量,即进行字扩展。 字扩展时,各存储芯片的信号线的连接方法如下。 (1) 芯片的地址线全部并联,并与CPU地址总线中相应的地址线相连。 (2) 芯片的数据线全部并联,并与CPU数据总线中相应的数据线连接。 (3) 芯片的读/写控制信号线并联,接CPU控制总线中的读/写控制线; 芯片的片选信号分别接地址线高位或地址译码器输出端。 其中,关键是如何产生存储器芯片的片选信号。在存储器系统中,实现片选控制的方法有三种,即线选法、部分译码法和全译码法。 1. 线选法 线选法是指利用地址总线的高位地址线直接作为存储器芯片的片选信号,低位地址线和存储器地址相连。采用线选法需保证每次寻址时只能有一个片选信号有效。 线选法的优点是结构简单,缺点是地址空间浪费大。由于部分地址线未参与译码,会出现大量地址重叠。此外,当通过线选的芯片增多时,还可能出现地址空间不连续的情况。 图5.13为16位系统线选法字扩展的例子,图中4片6264芯片(8K×8b,SRAM),分为两组: 奇片和偶片。 图5.1316位系统线选法字扩展接线 由图5.13可知,奇片用BHE作为片选,8位数据线D7~D0连接到8086数据总线D15~D8上; 偶片用A0作为片选,8位数据线D7~D0连接到8086数据总线D7~D0上。6264芯片地址线13条A12~A0连接到8086地址总线A13~A1上。所以图5.13中1#芯片为偶片、2#芯片为奇片构成第1组,3#芯片为偶片、4#芯片为奇片构成第2组。根据线选法产生片选原则选择高位地址中的A14和A15作为2组存储器芯片的片选。故第1组中1#芯片(偶片)的片选是A14=0和A0=0同时成立,2#芯片(奇片)的片选是A14=0和BHE=0同时成立,图5.12中用或门实现上述逻辑。 表5.2给出图5.13中4片6264芯片的地址范围。A19~A16因未参与对2组芯片的片选控制,故其值可以是0或1(用×表示任取),这里假定取为全0,显然2组芯片有大量重叠区。考虑2组芯片不能被同时选中,所以地址中不允许出现A15A14=00的情况。 表5.2图5.13存储器芯片的地址范围 组别 高位地址线 低位地址线 A19 A18 A17 A16 A15 A14 A13~A1 A0 地址 范围 第1组 1#(偶片) × × × × 1 0 0000000000000 ~ 1111111111111 0 ~ 0 08000H ~ 0BFFEH 2#(奇片) × × × × 1 0 0000000000000 ~ 1111111111111 1 ~ 1 08001H ~ 0BFFFH 第2组 3#(偶片) 4#(奇片) × × × × 0 1 0000000000000 ~ 1111111111111 × ~ × 04000H ~ 07FFFH 2. 部分译码法 部分译码法是将高位地址线中部分地址进行译码,产生存储器的片选信号。对被选中的芯片而言,未参与译码的高位地址线可以为0,也可以为1,即每个存储单元将对应多个地址。使用时一般将未用地址设为0。采用部分译码法,可简化译码电路,但由于地址重叠,会造成系统地址空间资源的部分浪费。 图5.14所示的电路,是采用部分译码法用4片2732芯片(4K×8b,EPROM)组成的16位存储器系统。 图5.1416位系统部分译码法字扩展接线 图5.14中4片2732芯片分为两组,每组2片(奇片和偶片),其中1#和3#为偶片,2#和4#为奇片,1#和2#构成第一组,3#和4#构成第二组。2732芯片地址线12条A11~A0连接到8086地址总线A12~A1上。部分译码法采用高位地址的部分A16、A15、A14、A13经2片74LS138进行译码,74LS138的2B使能端一个接A0,另一个接BHE。表5.3给出图5.14中4片2732芯片的地址范围。部分译码时,未使用高位地址线A19、A18和A17。也就是说,这3位无论是什么,对芯片寻址都没有影响。所以,每个芯片将同时具有23=8个可用且不同的地址范围(即重叠区)。 表5.3图5.14存储器芯片的地址范围 组别 高位地址线 低位地址线 A19 A18 A17 A16 2A A15 C A14 B A13 A A12~A1 A0 地址 范围 第1组 1#(偶片) 2#(奇片) × × × 0 0 0 1 000000000000 ~ 111111111111 × ~ × 02000H ~ 03FFFH 第2组 3#(偶片) 4#(奇片) × × × 0 0 1 0 000000000000 ~ 111111111111 × ~ × 04000H ~ 05FFFH 3. 全译码法 全译码法是指将地址总线中除片内地址以外的全部剩余高位地址参加译码,产生各存储芯片的片选信号。采用全译码法,每个存储单元的地址都是唯一的,不存在地址重叠,但译码电路较复杂,连线也较多。 图5.15所示的电路是采用全译码法用6片62512芯片(64K×8b,SRAM)组成的16位存储器系统。 图5.1516位系统全译码法字扩展接线 图5.15中6片62512芯片分为3组,每组2片(奇片和偶片)。62512芯片地址线16条A15~A0连接到8086地址总线A16~A1上。8086的高位地址是A19~A17,全部经2片74LS138进行译码,A0、BHE分别接2片74LS138的使能端。表5.4给出图5.15中6片62512芯片的地址范围。 表5.4图5.15中62512芯片的地址范围 组别 高位地址线 低位地址线 A19 C A18 B A17 A A16~A1 A0 地址 范围 第1组 1#(偶片) 2#(奇片) 0 0 0 0000000000000000 ~ 1111111111111111 × ~ × 00000H ~ 1FFFFH 第2组 3#(偶片) 4#(奇片) 0 0 1 0000000000000000 ~ 1111111111111111 × ~ × 20000H ~ 3FFFFH 第3组 5#(偶片) 6#(奇片) 0 1 0 0000000000000000 ~ 1111111111111111 × ~ × 40000H ~ 5FFFFH 5.4.3字位扩展 当存储芯片的存储字长(存储单元的位数)和存储字的数量都不满足需要时,字和位都需要进行扩展,即进行字位扩展。字位扩展是字扩展和位扩展的组合,字位全扩展时,先把存储芯片分组,然后可以采取组内位扩展、组间字扩展或者采取组内字扩展、组间位扩展两种方案。 某8088微机系统采取组内位扩展、组间字扩展方案,要求使用2114芯片(1K×4b)若干,扩展4K×8b存储器模块,且扩展后的存储空间为从8F000H开始的连续存储区。扩展后的存储器模块如图5.16所示。 图5.168088系统字位扩展的接线 图5.16中2114所需芯片数=(4K×8b)/(1K×4b)=8片。组内位扩展: 2114芯片每两片一组,组成4组按字节存取的1KB容量的存储器,4位数据线分别与CPU数据总线的D3~D0及D7~D4分别相连接,地址线、控制线并联。组间字扩展: 4组存储器的地址线A9~A0、数据线D7~D0并联后分别连接到8088总线的低位地址A9~A0和数据线D7~D0上; 高位地址线A19~A10全译码后为4组存储器组提供片选信号,全译码用一片74LS138和逻辑门实现,A12、A11、A10分别连接在74LS138的C、B、A上,8088的IO/连接到74LS138的2B上,A18、A17、A16通过或门连接在74LS138的2A上,A19、A15、A14、A13通过与门连接在74LS138的G1上。4、5、6、7分别作为4组存储器的片选CS,可满足起始地址为8F000H。4组存储器的地址分配情况如表5.5所示。 表5.5图5.16中4组存储器的地址分配情况 组别 高位地址线 低位地址线 A19 ~A13 A12 C A11 B A10 A A9~A0 地址范围 第1组 2114(1#) 2114(2#) 1000111 1 0 0 0000000000 ~ 1111111111 8F000H ~ 8F3FFH 第2组 2114(3#) 2114(4#) 1000111 1 0 1 0000000000 ~ 1111111111 8F400H ~ 8F7FFH 第3组 2114(5#) 2114(6#) 1000111 1 1 0 0000000000 ~ 1111111111 8F800H ~ 8FBFFH 第4组 2114(7#) 2114(8#) 1000111 1 1 1 0000000000 ~ 1111111111 8FC00H ~ 8FFFFH 5.4.4存储器芯片与8086 CPU的连接举例 8086 CPU与半导体存储器芯片的接口如图5.17所示,其中存储器芯片1#~8#为SRAM芯片62512(64K×8b); 9#~16#为EPROM芯片2732(4K×8b)。试分析该接口电路的特性,计算RAM区和ROM区的地址范围(内存为字节编址)。 1. 电路分析 1) 8086 CPU是16位微处理器,存储区须奇偶分体 图5.17中1#、3#、5#和7#这4个RAM芯片的8位数据线接数据总线D7~D0,2#、4#、6#和8# 这4个RAM芯片的数据线接D15~D8。所以,前者4片构成偶存储体,后者4片构成奇存储体。同理,ROM区中9#、11#、13#和15#构成偶存储体,10#、12#、14#和16#构成奇存储体。RAM区中8片分为4组,ROM区中8片分为4组。 2) 8086 CPU的双重复用总线经过锁存器和数据收发器分离出地址总线、数据总线 图5.17中采用了3片74LS373和2片74LS245。74LS373有两个控制端G和OE,G为锁存允许信号,接8086 CPU的ALE(地址锁存允许)。ALE为高电平,将双重复用总线中的BHE/S7和AD15~AD0以及A19/S6~A16/S3地址信息存入74LS373,OE接地,保证74LS373输出有效的地址总线A19~A0和BHE。74LS245有两个控制端G和DIR,G为使能端,接8086 CPU的DEN(数据允许)。DEN为低电平,实现双重复用总线AD15~AD0中的数据信息与74LS245的连接; DIR为方向端,接8086 CPU的DT/R(数据发送、接收),当DT/R=DIR=1时,8086经74LS245发送数据; 当DT/R=DIR=0,8086经74LS245接收数据。 3) RAM区 图5.17中RAM的译码电路由2片74LS138(17#和18#)构成,62512芯片地址线16条A15~A0,考虑8086是16位存储器系统,连接到8086地址总线A16~A1上。高位地址A19~A17同17#和18#的C、B、A连接,采用全译码法。74LS138(17#和18#)的3个使能端G1、G2A、G2B中,17#和18#的G1与8086的M/IO相连,8086存储器读/写时M/IO=1,G1为有效电平。17#的G2A、G2B与地址总线A0相连,所以17#芯片负责产生RAM的偶存储体1#、3#、5#和7#芯片的片选信号。18#的G2A、G2B与地址总线BHE相连,所以18#芯片负责产生RAM的奇存储体2#、4#、6#和8#芯片的片选信号。17#芯片和18#芯片的输出端Y0分别接1#芯片和2#芯片的片选线,故1#芯片和2#芯片为一组。同理,3#芯片和4#芯片为第2组,4#芯片和5#芯片为第3组,6#芯片和7#芯片为第4组,同组的两个芯片前者是偶片,后者为奇片。62512芯片的写控制端WE和读控制端OE分别与8086的写控制信号WR和读控制信号RD相连。 4) ROM区 图5.17中ROM的译码电路由1片74LS138(19#)构成,2732芯片地址线12条A11~A0,考虑8086是16位存储器系统,连接到8086地址总线A12~A1上。高位地址为A19~A13,其中A15 、A14、A13同19#芯片的C、B、A连接。19#芯片的3个使能端G1、G2A、G2B中,G1与8086的M/IO相连; G2A与8086的读控制信号RD相连,当8086运行存储器读指令时使能; G2B与与非门的输出相连,与非门的4个输入是地址总线A19~A16,显然A19= 图5.178086 CPU与半导体存储器芯片的接口实例 A18=A17=A16=0时,G2B使能。A0负责ROM的偶存储体9#、11#、13#和15#芯片的片选。BHE负责ROM的奇存储体10#、12#、14#和16#芯片的片选。综上所述,高位地址A19~A13全部唯一确定为全译码法。 2. RAM区的地址范围 图5.17中RAM区各个芯片的地址范围如表5.6所示,整个RAM区的地址范围为00000H~7FFFFH,共占512KB。 表5.6RAM区各个芯片的地址范围 组别 高位地址线 低位地址线 A19 C A18 B A17 A A16~A1 A0 地址 范围 第1组 1#(偶片) 2#(奇片) 0 0 0 0000000000000000 ~ 1111111111111111 × ~ × 00000H ~ 1FFFFH 第2组 3#(偶片) 4#(奇片) 0 0 1 0000000000000000 ~ 1111111111111111 × ~ × 20000H ~ 3FFFFH 第3组 5#(偶片) 6#(奇片) 0 1 0 0000000000000000 ~ 1111111111111111 × ~ × 40000H ~ 5FFFFH 第4组 7#(偶片) 8#(奇片) 0 1 1 0000000000000000 ~ 1111111111111111 × ~ × 60000H ~ 7FFFFH 3. ROM区的地址范围 图5.17中ROM区各个芯片的地址范围如表5.7所示,整个ROM区的地址范围为F8000H~FFFFFH,共占32KB。 表5.7ROM区各个芯片的地址范围 组别 高位地址线 低位地址线 A19 A18 A17 A16 A15 C A14 B A13 A A12~A1 A0 地址 范围 第1组 9#(偶片) 10#(奇片) 1 1 1 1 1 1 1 000000000000 ~ 111111111111 × ~ × FE000H ~ FFFFFH 第2组 11#(偶片) 12#(奇片) 1 1 1 1 1 1 0 000000000000 ~ 111111111111 × ~ × FC000H ~ FDFFFH 第3组 13#(偶片) 14#(奇片) 1 1 1 1 1 0 1 000000000000 ~ 111111111111 × ~ × FA000H ~ FBFFFH 第4组 15#(偶片) 16#(奇片) 1 1 1 1 1 0 0 000000000000 ~ 111111111111 × ~ × F8000H ~ F9FFFH