9 存储器

学习笔记
作者: MingXiao

9.1 概述

什么是存储器

半导体存储器是由能够表示二进制0,1的,具有记忆功能的半导体器件构成的

能存放一位二进制(1bit)的期间称为一个存储元,8个存储元(1Byte)构成一个存储单元

分类

按位置分类

  • 内部存储器
    • 随机存取存储器:Random Access Memory,RAM
    • 只读存储器:Read Only Memory,ROM
  • 外部存储器
    • 磁带
    • 磁盘
    • 光盘等

9.2 内存和外存

内部存储器

CPU可以直接访问速度较快的半导体存储器,分为ROM和RAM

  • RAM:断电后内容全部丢失,随机读写,访问速度快,分为
    • SRAM,Static RAM,静态RAM
    • DRAM,Dynamic RAM,动态RAM
    • PSRAM,Pseudo SRAM,伪静态RAM
  • ROM:断电不会消失,只读,改写要用专门的编程器,广泛用于微机化仪器设计,分为
    • MROM,Masked ROM,掩膜ROM
    • PROM,Programmable ROM,可编程ROM
    • EPROM,Erasable Programmable ROM,可擦除可编程ROM
    • EEPROM,Electricity EPROM,电可擦除PROM
    • Flash Memory,闪存

外部存储器

CPU不能直接访问,使用接口电路读写,访问速度慢,数据不易丢失

9.3 存储器性能

存储容量:内存最大容量受CPU地址总线宽度限制,外存无限大(理论上)

存取速度:远低于CPU工作速度,对性能产生主要的影响,使用存取时间\(T_{AC}\)表示从接受到CPU的稳定的地址信息到完成读写的最大时间,一般在10ns级别

功耗:包括有效功耗和待机功耗,前者是主要的

可靠性:使用平均故障时间(Mean Time Between Failures,MTBF,Hours)

9.4 存储器设计

设计时要考虑的问题

  • CPU总线的宽度
  • CPU时序与存储器速度的配合
  • 存储器的地址分配和片选
  • 控制信号的连接

使用地址译码器进行内存单元的选择

  • 存储器由多个芯片构成,首先要选定芯片,称为片选,CPU传送的地址信号高位用来片选,低位直连芯片,实现片内寻址

  • 用高位地址实现片选的电路是地址译码器,有门电路译码器,N中取一译码器和PLD(Programmable Logic Device)译码器等

  • 常用74LS138(8中取一译码器)

    8个输出中产生一个低电平片选信号

9.5 存储空间的扩展

位扩展

存储单元的大小可以改变,但是主流的是8bit

将同类型的芯片并联,扩展一个存储单元的大小,使之与CPU匹配

例如,下面将一个x1的芯片扩展为x8的存储单元

地址信号并联,保证选中的是一个地址;将片选信号(\(\overline{\mathsf{CE}}\))和写入信号(\(\overline{\mathsf{WE}}\))并联,保证这个单元被同时选中;将每个芯片的I/O引脚串接,形成一个x8的地址单元,依次连接到数据总线的D0-D7

字扩展

芯片的位数符合CPU的要求,但是能够存放的地址个数没有地址总线宽,这时可以扩展

将同类型的芯片串联,扩展能表示的地址

例如,下面用4个16Kx8的芯片扩展为64Kx8的存储器,使用一个2-4译码器进行片选

这样,一个芯片能接受A0-A13共\(2^{14}=16\)K的地址,现在是\(2^{2} \times 2^{14}=64\)K的地址,前者是片选信号的位数

直连的低地址信号在各个芯片之间是并联的,高地址信号经过译码器作为片选信号

由于M/IO必须是1,也就是必须是对Memory操作,故虽然是一个3-8译码器,却只能作为2-4使用

字位扩展

当芯片的容量和位数都需要扩展时,可以综合上面两个方法

例如,下面使用8个1Kx4的SRAM芯片,扩展为了4Kx8的存储器

1K变为4K,需要2高地址作为片选,即4个单元串联;x4变为x8,需要两个芯片并联

9.6 形成选片信号的方法

线选法:用1位高地址做片选,低位地址直连芯片,片内选址

电路简单,但是浪费了很多空间(很多高位没用上),而且地址重叠且不连续

例:用两块2764芯片和线选法,组成一个存储器,写出地址范围

解:芯片能够接受13个地址信号A0-A12,那么考虑用A13, A14进行片选,得到的电路和地址范围是

A19-A15被浪费,会地址重叠;而且A14A13只能是表中的数据,地址不连贯

全译码法:全部高位地址参与译码

地址唯一,不会重叠,但是电路复杂

例:8bit系统,设计一个用1片27128和1个74LS138译码器,规定地址范围为1C000 - 1FFFF H的存储器

解:27128芯片是一个16Kx8的存储器,使用X/Y译码器进行片内选址,A0-A6是行地址,A7-A13是列地址

​ 首先看看地址范围:1C000 = 0001 1100 0000 0000 00001FFFF = 0001 1111 1111 1111 1111

​ 不难发现从全0变化为全1的是A0-A13,而A14=A15=A16=1,其余恒0

​ 74LS138是3-8译码器,有三个门控通道,其中一位必须是M/IO,那么按照上面的不变量存在很多中设计方法,下面给出一种

部分译码法:使用高地址中的几位作为片选信号

会产生重叠,因此这个只适用于小内存系统

例:用4块2732芯片构成16Kx8存储器,起始地址为10000H,要求地址连续,使用部分译码法和74LS138

解:2732是4Kx8芯片,有12根地址线,能直接连接A0-A11,那么使用A12-A19的几位进行片选

​ 地址的起点是0001 0000 0000 0000 0000,\(2^{14}=16\)K,有4块芯片,用2个信号选片,但是74LS138是

3-8译码器,故再选一个不会变的位

​ 要求的是地址连续,那么终点的地址就是0001 0011 1111 1111 1111,那么连续变化的是A14A13,作为片选信号,不变的A15=0作为第三个选择信号,那么整个存储器就是

9.7 8086的存储器奇偶分体设计

其中\(\overline{\mathsf{BHE}}\)表示Bus High Enable,选择高地址(奇地址),地址选择器的构造如下

其中\(\overline{\mathsf{LWR}}\)表示Low Write Enable,写入低地址(偶地址),因为A0作为最低为决定了地址的奇偶,故这里用A0

会看芯片表示的图就行

9.8 层次化储存结构

局部性原理

  1. 在任意一段时间内,程序只会访问地址空间中相对较小的一部分
  2. 时间局部性:某个数据被访问,那么在不久的将来还会访问
  3. 空间局部性:某个数据被访问,那么与它地址相邻的数据也很快被访问

由于这个规律,设计出层次化的存储结构

高速缓存(Cache)的工作原理

为了解决CPU速度和访问内存速度的差异,有以下几种方法

  1. 插入多个等待周期\(T_w\),但是浪费CPU的能力
  2. 用高速的SRAM存储,但是成本高
  3. 在慢速的DRAM和快速CPU中用容量较小的Cache(SRAM,功能由硬件实现)

第三个方法好啊



Comments