1、第4章 存储系统4.2半导体读写存储器 半导体读写存储器简称RWM,习惯上也称为RAM。半导体RAM具有体积小、存取速度快等优点,因而适合作为内存储器使用 半导体读写存储器按工艺不同可将半导体RAM分为双极型RAM、MOS型RAM。MOS型RAM又分为静态RAM和动态RAM两类。4.2.1半导体基本存储单元 基本存储单元是用来存储一位二进制位的电路,是存储器最基本的存储元件,又称位单元。(1)双极型半导体存储位单元工作原理 用两个反向交叉耦合的三极管和两个电阻,构成双极型半导体存储位单元用来存储一位二进制,图4-2是电路和逻辑符号。4.2.1半导体基本存储单元(2)静态MOS存储位单元工作原理
2、 用6个MOS场效应管构成六管MOS基本存储位单元,电路如图4-3所示。4.2.1半导体基本存储单元(3)动态MOS存储位单元工作原理 动态MOS存储位单元利用电容来保存信息的,设定电容充有电荷表示存储“1”,电容放电表示存储“0”。在信息保持状态下,存储位单元中没有电流流动,因而大大降低了功耗。4.2.2半导体RAM芯片 用大量的位存储单元构成存储阵列,存储大量的信息,再通过读写电路、地址译码电路和控制电路实现对这些信息的访问,这样就构成了存储器芯片。半导体RAM存储器芯片主要有静态存储器芯片和动态存储器芯片两种。静态存储器芯片的速度较高,但它的单位价格即每字节的价格较高;动态存储器芯片的容
3、量较高,但速度比静态存储器慢。4.2.2半导体RAM芯片(1)静态存储器芯片(SRAM)的结构和工作原理4.2.2半导体RAM芯片静态存储器芯片由存储体、读写电路、地址译码和控制电路等部分组成。存储体(存储矩阵):由大量的存储位单元构成的阵列组成。阵列中包含很多行,每行由多列存储单元构成。阵列中用行选通线选择一行中的存储单元将数据读出,再用列选通线选择一行中的某一个存储单元。地址译码器:地址译码器的输入信号线是访问存储器的地址编码,地址译码器把用二进制表示的地址转换成驱动读写操作的选择信号。地址译码有两种方式:一种是单译码方式,适用于小容量存储器;另一种是双译码方式,适用于容量较大的存储器。4
4、.2.2半导体RAM芯片静态存储器芯片由存储体、读写电路、地址译码和控制电路等部分组成。驱动器:由于选通信号线要驱动存储阵列中的大量单元,因此需要在译码器输出后加一个驱动器,用驱动输出的信号去驱动连接在各条选通线上的各存储单元。I/O电路:I/O电路(输入输出电路)处于数据总线和被选中的单元之间,用以控制被选中的单元读出或写入,并具有放大数据信号的作用。数据驱动电路对读写的数据进行读写放大,增加信号的强度,然后输出到芯片外部。片选控制:产生片选控制信号,选中芯片。读写控制:根据CPU给出的信号控制被选中存储单元做读操作还是写操作。4.2.2半导体RAM芯片 在逻辑上,存储芯片的容量经常用字数M
5、位数N表示。字数M表示存储芯片中的存储阵列的行数 位数N表示存储阵列的列数,即数据宽度。存储器芯片的字数影响到芯片所需的地址线数量,数据宽度则对应着芯片的数据线数量。如1024*4的存储芯片,有10条地址线(210=1024)和4条数据线。4.2.2半导体RAM芯片 静态存储器芯片的引脚接口信号通常有:4.2.2半导体RAM芯片 如静态MOS存储器芯片62256,芯片引脚图如图4-7。62256容量为32KB,即32K*8。32K个存储字单元,每个字单元8位数据宽度。4.2.2半导体RAM芯片(2)动态存储器DRAM芯片的结构和工作原理 用动态存储位单元构成阵列,加上控制电路制作成动态存储器D
6、RAM芯片。但是由于动态RAM芯片容量一般比较大,所以地址线数量较多。为了减少地址线数量,将地址分成行地址和列地址分成两次输入芯片。两次地址的输入分别由芯片的地址选通信号控制 行地址选通信号,低电平有效,用于选中存储阵列中的一行 列地址选通信号,低电平有效,用于选中存储阵列中的一列。另外,DRAM芯片也具有读写控制信号。4.2.2半导体RAM芯片 动态存储芯片4164,芯片引脚如图4-8。4164的容量为64K*1。4.2.3用存储芯片构成主存储器 通常一个存储器芯片不能满足计算机存储器的字数要求和数据宽度的要求,需要用许多存储器芯片构成所需的主存储器。具体构成主存储器时,首先要选择存储芯片的
7、类型,是SRAM还是DRAM,还要考虑容量扩展的技术。用若干存储芯片构成一个存储系统的方法主要有 位扩展法 字扩展法 字位扩展法。4.2.3用存储芯片构成主存储器(1)位扩展 位扩展法用于增加存储器的数据位,即是用若干片位数较少的存储器芯片构成具有给定字长的存储器,而存储器的字数与存储芯片上的字数相同。位扩展时,各存储芯片上的地址线及读/写控制线对应相接,而数据线单独引出。4.2.3用存储芯片构成主存储器 例4-1用40961的芯片构成4KB存储器。4.2.3用存储芯片构成主存储器(2)字扩展 当存储芯片中每个单元的位数与CPU字长相同时,如果所要求的存储器容量大于一片芯片的容量,就要采用字扩
8、展法,在字方向上进行扩充,而位数不变。字扩展时,各存储芯片的低位地址线连接在一起,高位地址译码后连接各芯片的片选信号4.2.3用存储芯片构成主存储器 例4-2用16K8芯片构成64K8存储器。4.2.3用存储芯片构成主存储器(3)混合扩展 当选用的存储芯片容量和每个单元的位数都不能满足所需要的存储器要求时,就需要进行字位同时扩展,称为字位扩展,即混合扩展。混合扩展时,将各存储芯片的地址线与CPU提供的低位地址线相连,CPU提供的高位地址通过译码后连接各存储芯片的片选信号,有些存储芯片的片选会同时被选中。每个芯片提供选中的字单元中多位数据,同时被选中的多块芯片一起提供CPU需要的多个字。4.2.
9、3用存储芯片构成主存储器 例4-3用1K4的芯片构成4K8的存储器。4.2.3用存储芯片构成主存储器(4)用DRAM芯片构成主存储器 如果选用DRAM芯片构成存储器,DRAM芯片的地址分行地址和列地址,增加了地址选通信号。而CPU访问存储器时,地址信息是同时提供的,这就需要一个控制电路,以生成存储器需要的控制信号,并且将地址信息分成行地址和列地址,并按读写工作时序送出。另外,DRAM的刷新操作一般也在存储器控制电路的控制下进行。存储器控制电路用一个计数器提供一个刷新的行地址,对存储阵列中的一行数据读出,经过信号放大后再写回,就完成了一次刷新操作。这个控制电路就是DRAM控制器,它是CPU和DR
10、AM芯片之间的接口电路。4.2.3用存储芯片构成主存储器 DRAM控制器的主要组成结构如图4-12,组成部分包括:地址多路开关:将CPU送来的地址转换为分时向DRAM芯片送出的行地址和列地址。刷新定时器:定时产生DRAM芯片的刷新请求信号 刷新地址计数器:DRAM芯片是按行进行刷新的,需要一个计数器提供刷新行地址。仲裁电路:如果来自CPU的访存请求和来自刷新定时器的刷新请求同时产生,由仲裁电路进行优先权仲裁。控制信号发生器:提供控制信号,用于读写操作和刷新操作的控制。4.2.3用存储芯片构成主存储器4.2.3用存储芯片构成主存储器 DRAM的存储阵列中所有的存储电容必须周期地重新充电,上次对整
11、个存储器刷新结束到下次对整个存储器全部刷新一遍为止的时间间隔称刷新周期,一般为2ms。刷新时没有列地址和列选通信号,各单元的数据读写彼此隔离,并且不会送到读放电路,所以“刷新”操作一次可以刷新一行所有单元。为了使一次刷新操作尽可能多地对一些单元进行操作,芯片的存储阵列排列时使行数少一些,而列数多一些。常用的刷新方式有四种:集中式刷新、分散式刷新、异步刷新和透明刷新。4.2.3用存储芯片构成主存储器 集中式刷新:在整个刷新间隔内,前一段时间用于正常的读写操作。而在后一段时间停止读写操作,逐行进行刷新。在整个刷新间隔内进行的刷新操作的次数,正好是将存储器全部刷新一遍所需要的操作次数,所以用于刷新的
12、时间最短。但是,由于它在一段较长的时间里不能进行正常的读写操作(这个时间段称死区)分散式刷新:一个存储周期的时间分为两段,前一段时间用于正常的读写操作,后一段时间用于刷新操作。这样不存在死区,但是每个存储周期的时间加长。4.2.3用存储芯片构成主存储器 异步刷新:上述两种方式结合起来构成异步刷新。在2ms时间内必须轮流对每一行刷新一次。这种刷新方式比前二种效率高。透明刷新。CPU在取指周期后的译码时间内,存储器为空闲阶段,可利用这段时间插入刷新操作,这不占用CPU时间,对CPU而言是透明的。这时设有单独的刷新控制器,刷新由单独的时钟、行计数与译码独立完成,目前高档微机中大部分采用这种方式。4.
13、2.3用存储芯片构成主存储器 例4-4若128128矩阵的动态存储芯片中,设每个读写周期和刷新操作都为0.5us,刷新间隔为2ms,比较计算3种刷新方式的刷新次数,读写次数和效率。解:集中式刷新:刷新操作集中在一段时间内,次数为全部刷新一遍的操作次数。存储阵列有128行,所以刷新次数为128次。刷新时间为1280.5us=64us。可以进行的 读写次数为(2000-64)/0.5us=3872次。刷新周期中存在64us死区。4.2.3用存储芯片构成主存储器 分散式刷新:在存储读写周期中完成刷新操作。在存储周期中,进行读写和刷新,需0.5+0.5=1us,那么在刷新周期里读写和刷新次数为2000/1=2000次,其中读写次数2000次,刷新次数2000次。这种方式,没有死区,但读写次数少,刷新次数多 异步刷新:将刷新次数平均分配到刷新周期中,则2ms内必须对每一行刷新一次。刷新次数为128次,则刷新间隔:2000/128=15.5us。每个15.5us中15us读写,0.5us刷新,则读写次数15/0.5=30,总的读写次数为30128=3840次。这种方式没有死区,并且读写次数也较高。