组成原理(三):存储器(上)

系列文章目录

 组成原理(一):基本概述icon-default.png?t=N7T8http://t.csdn.cn/uHkFn
组成原理(二):总线icon-default.png?t=N7T8http://t.csdn.cn/gAcm1
组成原理(三):存储器(上)icon-default.png?t=N7T8http://t.csdn.cn/PgUTh
组成原理(四):存储器(中)icon-default.png?t=N7T8http://t.csdn.cn/7PiKT


目录

前言

(一)存储器概述

1.存储器的分类

1.1.按照存储介质:

1.1.1.半导体存储器

1.1.2.磁表面存储器

1.1.3.磁芯存储器

1.1.4.光盘存储器

1.2.按存取方式分类

1.2.1.存取时间与物理地址无关(随机访问)

1.2.2.存取时间与物理地址有关(串行访问)

1.3.按在计算机中的作用分类

1.3.1主存储器

1.3.2.辅助存储器

2.存储器的层次结构

2.1.存储器的三个主要特性的关系

2.2.缓存—主存层次和主存—辅存层次

3.课后讨论

3.1.局部性原理如何与多级存储器的使用相联系?

3.2.存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机如何管理这些层次?

(二)主存概述

1.主存

1.1.主存的基本组成

1.2.主存与CPU之间的联系

1.3.主存中存储单元地址的分配

1.4.主存的技术指标

2.半导体存储芯片简介

2.1.半导体存储芯片的基本结构

2.2.半导体存储芯片的译码驱动方式(给出了存储单元的地址后,如何找到存储单元?)

2.2.1.线选法

2.2.2.重合法

3.随机存取存储器(RAM)

3.1.静态RAM(SRAM)

3.1.1 静态RAM基本电路

3.1.1.1.六管静态RAM基本电路的读操作

3.1.1.2.六管静态RAM 基本电路的写操作

3.1.2.静态 RAM 芯片举例

3.1.2.1.Intel2114外特性

3.1.2.2.Intel 2114 RAM 矩阵 (64 × 64) 读/写

3.2.动态RAM(DRAM)

3.2.1.动态RAM基本单元电路

3.2.1.1.三管式动态RAM基本电路

3.2.1.2.单管式动态RAM基本单元电路

3.2.2.1.三管动态RAM芯片 (Intel 1103) 读/写

3.2.2.2.单管动态RAM芯片intel4116(16Kx1位)外特性

3.2.2.3.intel4116芯片读/写原理

3.2.3.动态RAM刷新

3.2.3.1动态RAM刷新方法

集中式刷新

分散式刷新

异步刷新

3.3.动态RAM与静态RAM的比较


前言

哈工大计组网课的笔记,教材是《计算机组成原理》(唐朔飞)


(一)存储器概述

1.存储器的分类

1.1.按照存储介质:

1.1.1.半导体存储器

易失(断电失去数据)

  • TTL:晶体管-晶体管逻辑电路,集成度比较低,功耗高,速度快
  • MOS:金属氧化物半导体 ,功耗低,集成度比较高

现在的存储器,尤其是主存,主要是由MOS型的半导体构成的。

1.1.2.磁表面存储器

要有磁头、磁载体,非易失(断电也可保存数据)

描述:磁盘,磁带都是磁表面存储器。我们以磁盘为例,它有一个塑料的或者是合金的这个基片,在塑料或者合金的基片的表面涂上一层磁层,利用这个磁层被磁化不同的方向,我们来存储0和1。这个磁层被分成了若干个同心圆,每一个同心圆叫做一个磁道,每个磁道又分成了若干个扇区,每个扇区可以保存几百到几k个数据,磁表面存储器要有磁头要有载体。

1.1.3.磁芯存储器

硬磁材料,环状元件,非易失(断电也可保存数据)

磁芯存储器在计算机的发展历史上曾经起到了非常非常重要的作用。作为计算机系统的内存,曾经大大的提高了计算机系统的速度。这种存储器是华裔科学家王安博士在1948年发明,磁芯的英文名称是core,因此磁芯存储器也被称为core memory。

原理:磁芯里面有导线,导线通过一定的电流,电流可以对磁芯进行磁化,磁芯本身是铁氧体,在电流的作用下会被磁化成N极和S极,根据磁场的方向我们就可以用来保存信息。比如说我们把N极朝向某一个方向我们定为1,S极朝向某一个方向则定为0,这样的话磁芯存储器就可以用于保存两个状态,这两个状态分别对应我们的0和1。通常情况下在一个磁芯里穿两根导线,要想能让磁芯保存数,磁芯里面只要流过电流就会被磁化或者是改变磁场方向,那么事先我们可以通过实验和材料工艺来控制,得到能够让磁芯磁化或者是改变磁场方向的这个最小电流的阈值,然后每个磁芯里放了相互垂直的两个方向的导线,另外还有一条导线是斜着穿过去的,这两个相互垂直的这个导线是作为磁芯的数据写入和读出的驱动线,而进行数据读出的时候是从另外的一个导线进行读出。

这X,Y两个方向的导线,实际上起到了一个寻址的作用,实际工作情况中,磁芯的横,纵两个方向都是由导线构成的,这两个方向的导线构成了一个栅格,磁芯就是一个小磁环,穿在这个栅格的交叉点上。我们进行数据写入的时候,给每一条线包括横的和纵的其中的一条线加载电流,这个电流的大小略微超过改变磁场变化的电流的阈值的50%,横向上有一条线有电流,纵向上有一条线电流。对于这个横纵交叉点上的小磁环,其中通过的电流就超过了改变磁场方向的阈值所需要的电流,这个磁芯就会被磁化,有S极和N极,就可以存储我们的0/1,其他的磁芯,因为穿过其中的电流或者是没有或者是不超过50%磁化阈值所需要的电量,因此这些磁芯是不会被磁化的。由上述可以知X,Y这两条线,实际上是用作不同方向的寻数据,读出还需要另一根线。

1.1.4.光盘存储器

激光,磁光材料,非易失(断电也可保存数据)

1.2.按存取方式分类

1.2.1.存取时间与物理地址无关(随机访问)
  • 随机存储器:在程序的执行的过程中可读可写(RAM)
  • 只读存储器:在程序的执行过程中只读(可用来存放系统中的一些参数或者是系统程序)
1.2.2.存取时间与物理地址有关(串行访问)

顺序存取存储器:磁带

描述:顺序存取存储器代表设备就是磁带,假如我们的信息保存在磁带上的一个指定的位置,我们想对这个信息进行读出或者进行写入,必须转动这个磁带直到指定位置转到磁头下才能够开始读写。

直接存取存储器:磁盘

描述:直接存取存储器代表设备就是磁盘,磁盘在寻址过程当中,首先要找到给定的磁道。这个过程是通过磁头或者读写头在磁盘表面进行径向移动来完成,磁头停留在指定的磁道上,磁盘转动直到指定的扇区转到磁头下,才能开始读出和写入过程。

1.3.按在计算机中的作用分类

1.3.1主存储器

主存储器又可以划分为两类。可读可写的RAM(random access memory),就是随机访问存储器,一般来说用户的数据和程序都需要可读可写,那就把用户的数据和程序保存在RAM中。而系统程序和系统当中的一些参数为了防止用户修改,就可以把它保存在只读存储器ROM(Read-Only Memory)当中。

RAM我们还可以进行进一步的分类可以分成两类,一类叫静态RAM(Static Random-Access Memory,SROM)静态RAM运用触发器原理来保存数据。另外一个就是动态RAM (Dynamic Random Access Memory , DRAM) ,利用电容存储电荷的原理来保证信息。对ROM 来说,分的类型比较多。一类是MROM-掩膜只读存储,(mask ROM),还有PROM—可编程ROM。EPROM—电可编程ROM,E’PROM—可编程可擦写ROM,EEPEOM—电可擦写可编程ROM。

flash memory:辅助存储器和主存之间还可以放上一层存储器,那这个存储器就是flash memory,常用的U盘,就是用flash memory做的。flash memory是半导体存储器,速度比磁盘快,比主存储器慢。flash memory除了作为便携式存储器之外还可以作为计算机的硬盘。有一些高性能的计算机或者是个人需要这台计算机性能比较高,就可以用flash memory作为计算机的硬盘或者是作为部分硬盘。还有一种情况,由于主存和辅存之间速度差距比较大。那么可以在主存和辅存之间插入一层flash memory作为辅助存储器缓冲,一旦主存储器需要辅助存储器当中的信息,如果这个信息已经缓存在了flash memory当中,主存就可以直接从flash memory当中直接读取信息或者是把数据直接写到flash memory当中。现在很多磁盘阵列,都有一些用ssd的磁盘作为缓存,ssd核心的存储材料就是flash memory。

cache:另外还有一种就是高速缓存,高速缓冲存储器就是我们常说的cache,cache是放在主存储器和CPU之间的,速度很高,但实际上我们现在这个分类,高速缓冲存储器,通常情况下,就是由静态RAM来做,它的速度比flash memory要快,比主存要快,它可以作为CPU和主存之间的一个缓冲。

1.3.2.辅助存储器

磁盘,磁带,光盘都是辅助存储器。

2.存储器的层次结构

2.1.存储器的三个主要特性的关系

寄存器:整个存储器体系当中,有一部分类型的存储器我们把它做在存储器当中。比如说寄存器在CPU中,缓存的一部分也在CPU当中。这里说明一下,寄存器不仅仅CPU当中有,I/O端口当中也有寄存器。这些寄存器还可以分成两类,有些寄存器在指令当中可以使用,从体系结构的角度来说,这些寄存器是不透明的,是提供给机器语言程序员的。这样的寄存器,我们把它叫做体系结构寄存器。CPU当中还有一些寄存器不需要让机器语言程序员来了解,也就是说对机器语言程序员来说,他是透明的,这类寄存器我们把它称为非体系结构寄存器,指令不能直接对这些寄存器进行操作。

缓存:在早的计算机当中,CPU里面没有缓存。那么随着半导体技术发展和集成电路技术的发展,部分缓存就被直接集成到CPU当中,这样的话,如果CPU需要数据,可以直接从缓存当中进行读取,或者是把数据写入缓存,速度更快。但是做到CPU当中的缓存,容量不能达到提高系统速度的目的,所以我们可以把部分缓存放在CPU的外面,放在主板上。

寄存器,缓存加上主存,这三种类型的存储是放在主机里。下面像磁盘、光盘和磁带,都属于辅助存储器。这样的一个三角形的结构,越向下它的速度越慢,速度最快的是CPU里面寄存器,然后是缓存之后是主存。从容量上说,寄存器的数量比较少。有的CPU体系结构寄存器可能只有十几个。从这个三角形的结构来说,寄存器的容量是最小的。容量最大的是磁带。从价格上来说,和容量的分布正好相反,寄存器的价格是最贵的。

思考:计算机系统当中,为什么要使用这么多种存储器?从现在的层次划分来说我们已经划分了6层,为什么要这么多呢?这是为了用户的要求。用户需要的高速度,大容量,低价格。实际上这些种类型的单一的任何一种都没法满足用户的要求。怎么解决?解决的方法就是采用这种层次结构,形成一个存储体系。注意用词,用的是存储体系。存储体系是什么意思?它是指把两种或者是两种以上存储介质构成的存储器,用软件,硬件,或者是软硬件相结合的这种方式,把它连接成一个整体,使得从某一级程序员的角度去看这个整体,具有高速度。大容量。低价格。

这里面有两个关键点,第一个关键点,我们要用软件硬件或者是软硬件相结合的方式,把它连接成一个整体。第二个关键点,什么是整体?从某一级程序员的角度来看,她拥有的是一个高速度,大容量,低价格的一个存储,也就是说对她来说这个层次结构是透明的,她在使用存储器的过程当中,不需要考虑存储器层次结构。信息在层次结构之间的调入调出都是由软件硬件或者是软硬件相结合的机构自动来完成。那么通常情况下计算机当中有两个非常重要的存储层次。这个存储层次就是缓存—主存层次以及主存—辅存层次。

2.2.缓存—主存层次和主存—辅存层次

计算机的主机由CPU和主存储器两部分构成。CPU可以从主存当中读信息,也可以把运行的结果保存在主存当中。但是主存的容量是有限,如果程序足够大的话,可能在主存当中根本就放不下,另外我们有一些文档和一些资料我们要在计算机当中进行保存。那这些都需要辅助存储器。但是程序的运行是在主存这里,如果要使程序运行,就要把它调入到主存。那么主存和辅存之间也是有数据通信的。因此主存和辅存构成了一个存储层次。在这个存储层次上,用软硬件相结合的方法,把主存和辅存构成一个整体。从应用程序员的角度来看,这个整体有主存的速度,辅助存储器的容量,辅助存储器的价格。在程序执行的过程当中。即使程序非常大超过了储存的容量。应用程序员也不用自己去考虑如何把这个程序进行分割,哪些部分放在主存当中,哪些部分放在辅存当中,以及如果要执行现在还在辅存当中的那部分程序的话,那么这部分程序如何调入主存,应用程序程序员都不需要关心。从这实际上我们能够看出,主存—辅存这个存储层次,是为了解决储存容量的不足。

那么另外一个问题,主存的速度和CPU的速度之间是有差异的。CPU的速度发展非常快,从85年以后到20年,大概每年的提升的速度是52%,02年以后速度稍微降低那也要达到30%左右。但是主存的速度提高是有限的。因为每经过10年,我们访问一个数据的时间才会减少到原来的一半。CPU速度与主存速度中间的这个差距就越来越大,我们把差距叫为剪刀差。为了解决这个问题。我们在CPU和主存之间,加上了一层缓存。这条缓存就是我们常说的cache。cache的容量比主存的容量要小得多,功耗比主存大,但是它的速度比主存要高很多它。里面保存的信息。是主城当中一些信息的副本。CPU可以直接访问缓存,通过访问缓存来访问主存,缓存和主存之间也会进行信息交换。如果说缓存当中我们保存的内容是CPU最常使用这些信息,CPU需要的指令和数据绝大多数都可以从缓存当中获得的话,那么计算机的速度就会得到很大的提升。这里面用到了一个原理,叫做程序的局部性原理,包括时间的局部性。空间的局部性。

我们把现代计算机当中,各种存储设备,存储元件,分成了两个层次。一个是缓存和主存这个层次,一个是主存和辅存这个层次。缓存—主存我们是采用硬件的方法,把缓存和主存连接成一个整体,数据的调入调出对系统程序员对机器语言程序员来说都是透明的。而主存和辅存这个层次我们是用软硬件相结合的方法连接成一个整体。

思考:为什么缓存—主存这个层次用硬件来把它连接成为一个整体呢?主要原因是这个层次我们是要解决速度问题。CPU和主存速度不匹配,所以我们需要主存和缓存之间的数据的调入调出非常快,因此用硬件来说做。而主存和辅存之间主要是为了解决容量问题,速度并不是那么重要,所以是使用软硬件相结合的这种方法来做。

那这里会产生一个问题,主存和辅存构成这个整体,一般把它叫做虚拟存储器。既然它是由主存和辅助存储器构成的,那虚拟存储器它的地址空间我们如何进行定义?使用主存的空间来定义?还是用辅存的地址来定义呢?

在这个层次我们给出了一个新的地址空间,这个地址空间就是虚地址。在编写程序时用到的的逻辑地址。编写程序时所写的地址实际上都是由0开始,那真正的物理地址是在这个程序被装入到内存,或者是在指令要执行的时候由特定的机构,把这个地址由虚拟地址或者由逻辑地址把它转化成内存单元当中的地址。那么缓存和主存这个层次结构用什么地址呢?我们使用的就是主存储器的地址,没有定义一个空间也没有使用缓存的地址。实际上缓存是按内容来进行查找,即使给出一个地址,那也是比如说缓存块的编号。在程序的执行过程当中,那么即使指令在缓存当中,那么指令当中的地址或者是我们执行的时候需要的地址,实际上也是主存的地址。然后把主存的地址再转化成它在缓存当中的这个块号还有块内偏移地址,完成信息读取。主存储器我们用到的地址我们成为实地址,也就是物理地址。

3.课后讨论

3.1.局部性原理如何与多级存储器的使用相联系?

局部性原理: CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

  • 时间局部性:如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。
  • 空间局部性:在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。
  • 顺序局部性:在典型程序中,除小部分转移类指令外,大部分指令是顺序进行的。即程序的地址访问流有很强的时序相关性,未来的访问模式与最近已发生的访问模式相似。

根据这一原理,多级存储器体系把主存储器中访问概率最高的内容存放在Cache中,当CPU需要读取数据时就首先在Cache中查找是否有所需内容,如果有则直接从Cache中读取;若没有再从主存中读取,然后同时送往Cache和CPU,主辅亦是。故可以按对所使用的指令和数据的急迫和频繁程度,将其存入容量、速度、价格不同的存储器中,增加了时间优化的命中率,取得更高的性能价格比。

3.2.存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机如何管理这些层次?

存储器的层次结构主要体现在在CPU与主从之间插入缓存结构,和使主存与辅存整体化这两方面上。分层次可以提高数据的访问速度,用最小的成本达到最好的性能,还兼顾了存储的稳定性。通过软硬件结合,将其封装起来。

(二)主存概述

1.主存

1.1.主存的基本组成

MAR保存了要访问存储单元的地址,必须经过译码器译码以后,才能选定指定的存储单元。

MDR保存了要读出或要写入的数据,数据到底是读出还是写入,要通过读写电路和控制电路来进行控制,如果是写入的话,就把MDR当中的数据送到MAR指定的存储单元中,如果是读出,那指定的存储单元中的数据就送到MDR中。

1.2.主存与CPU之间的联系

  • 数据总线:直接连在MDR寄存器上,是双向的,可读出可读入,完成了CPU和主存之间的信息传输。
  • 地址总线:连接在MAR和主存之间,给出了要访问的存储单元的地址,所以这是单向的,从CPU送往主存。
  • 控制总线:图中的控制总线只给出了读和写两条,都是单向的,由CPU送往主存

1.3.主存中存储单元地址的分配

现在假设我们主存的存储字长是32位,也就是说我们对这个存储器的某一个单元进行读或写的话,一次最多可以写入或读出32位个0/1。主存的编址单位是字节,每一个字节都有一个地址,在这种情况下,一个存储字是32位,一个字节是八位,都有一个地址。那12345678H这八个十六进制数如何在主存中进行存储?

如果用二进制来表示这八个数,每个数四位,一共是32位,正好保存在一个储存单元中,那这个数据在存储单元中如何进行保存呢?

设地址线24根 ——- 按字节寻址 —— 224 = 16MB

  • 若字长为16位 —— 按字寻址 —— 8MW
  • 若字长为32位 —— 按字寻址 —— 4MW

计算题:一个16K×32位的存储器,其地址线和数据线的总和是多少?

地址线的长度决定了寻址范围,这里已知寻址范围是16k,可知MAR的宽度是14,所以地址线要有14根。这是一个32位的存储器,即MDR宽度为32,所以数据线有32根。一共是46根。

1.4.主存的技术指标

存储容量:主存中存放的二进制代码的总位数

存储速度:

  • 存取时间:从存储器给出地址,一直到得到稳定的数据输出或数据输入的时间,我们又把它细分为读出时间和写入时间。
  • 存取周期:要连续完成两次独立的存储器操作(读/写)所需的最小时间间隔
  • 一般来说,存取周期 > 存取时间

存储器带宽:单位时间里,单位时间里能够向存储器里读取或写入多少位数据(位/秒)

2.半导体存储芯片简介

2.1.半导体存储芯片的基本结构

片选线:确定要访问的信息在哪一个或者是哪几个芯片上。半导体存储芯片的片选线一般有两种标识方式,CS,CE(上面都有一道上划线表示低电平有效,但是我打不出来),CS上面的一横表示低电平有效,即这个管脚如果是低电平,这次访问的数据地址就在这块芯片当中。CE是芯片上的使能(据说翻译成启动更好)信号。

读写控制线:表示对半导体的操作到底是读操作还是写操作,可以是一根线控制,如WE,低写高读(也有上划线打不出来),它表示如果是低电平我们要对这个芯片进行写操作,高电平则芯片进行读数据操作。也可以用两根信号线来表示,第一根线是OE(同上),如OE有效则表示要进行输出,即把数据从存储矩阵当中指定单元的数据里写到数据线中,第二根就是WE

存储芯片片选线的作用

片选信号的作用可以让某一个芯片或者是某些芯片,同时进行工作。

16Kx1位表示这个芯片的容量是16K,每一个存储单元保存了一位信息。那么如果用8个这种类型的芯片,对8个芯片同时进行读写,每一个芯片给出或者是写入一位二进制信息。8个芯片连在一起就构成了一个8位的存储器。所以把这8个芯片分成一组。现在还不能满足CPU要求,CPU要求是64Kx8位。那这样的芯片组就布置4组。

我们看一下芯片的片选信号。每一组8个芯片要同时进行工作,才能够在每个芯片当中读出或者是写入一位二进制信号,满足CPU需要的这个存储体是每个存储单元8位的要求。所以所以每一组的这个型号存储器是联系在一起。从芯片的总数来说,一共是32个芯片,这32个芯片我把它分成4组,每组8片,每一组是同时工作的,我们用片选线给他联接在一起。然后把64k的空间进行划分,因为第1组是16k×8位,第2组也是16×8位,那么我们把CPU的地址当中从0~16k-1这些地址分配到第1组芯片当中,那么从16k~32k-1这个地址范围的数据就分配到第2组芯片当中,32k~48k-1这些地址我把分到第3组芯片当中。48k~64k-1这些地址我们把他分配到第4组芯片当中。如果说现在要访问的一个地址是65535,这个值是64k-1,按照我们地址分配规则,他应该在最后一组芯片当中。如果片选信号,看到这个地址,就选择第4组芯片,其他三组芯片所对应的片选信号是无效的,也就是说不管是CS还是CE都是高电平,只有最后一组芯片所对应的片选信号是低电平是有效的,使用这个数据就保存在最后一组。我们对最后一组芯片进行访问,片选有效, 8个芯片被同时进行访问。可以在8个芯片的地址的同一个位置,分别读出一位。构成一个字节,满足CPU对8位的这样一个要求。

2.2.半导体存储芯片的译码驱动方式(给出了存储单元的地址后,如何找到存储单元?)

2.2.1.线选法

图中给出的是A0~A3 一共四位地址。说明A有16个存储单元,数据线是D0~D7共8位,所以这个存储器是16×8位的。

地址译码器:地址译码器实质就是一个译码器。在学习数字电路和数字逻辑的时候学习过译码器,比如说24译码器。两个输入四个输出。如果在两个输入上输入的是全0,那四个输出当中对应零的那个信号线就会有效,其他的三根线就是无效。如果输入01。输出的四根线当中对应1的那根线就会输出有效信号枪,其他的三条线就是无效。这就是译码,完成了从编码向数据的一个翻译的过程。现在看一下这个地址译码器,输入是4根线。输出是16连线。给定一个输入,在输出这端,只有一根线是有效的。只有一根线上的信号会控制相应的这个存储单元当中所有存储元件进行数据输入或者输出操作。

读写控制电路:如果是读选通,这个线是由存储数据对外输出;如果是写选通,我们对芯片进行写操作,数据的方向是从外向芯片内部进行发送。那我们看一下这个工作过程。如果说我给出的地址是全0。那么被译码之后的信号,只有0这根有效,其他的钱都是无效的。如果说我们现在进行的是一个读操作,那么读信号会控制控制电路当中的通路打开,使数据能够从存储矩阵法送到数据总线上来。只有给定的单元才能够进行数据输出。

思考:那么这个过程里面存在什么问题呢,我们现在的地址线只有4条,容量是16×8。但是在现实中没有这么小的存储器。我们假设一个比较小的存储器,是1兆×8位的一个存储器。这20根地址线经过我们地址译码器译码以后,就会溢出出一兆条线。每给出一个地址,这一兆条线中的一条是有效,其他都是无效,大家可以想象一下,一兆也就是100万,100万条线做在这个芯片当中,非常密集,我们也很难把内存芯片的集成度做得很高。这种方法对容量稍大一点的芯片来说,是非常不合适的。

2.2.2.重合法

第一种方法对存储单元进行布局时实际上是把它布局成一个线性的数组。重合法进行布局时是把所有的存储单元布成一个二维的阵列。

过程:如图,我们把地址分成了两部分,X和Y。通常情况下叫做行地址和列地址。行,列地址分别进行译码,行地址只能有一条线是有效的,列地址也只能有一条线是有效的。在我们这个芯片上,数据线只有一位, 每一个存储单元的位数也只有一位。假如说我们现在给出的行地址是0,列地址也是0。那行地址译码器经过译码以后,只有X0这条线是有效的,即只有X0这条线上存储单元的信息才能进行读出和写入,或者只有这条线上所有的存储单元是被选中的。那列地址是全0,译码以后只有Y0这条线是有效的。Y0这条线有效这两个开关才会打开。这个时候,这条数据信号是畅通,可以直接进行数据输出,0的这个地址单元,它当中的数据就可以通过这个管子控制的管子进行输出。实际上在这个过程当中,像(0,31)这个存储元件,它的数据也会进行输出。但是由于Y31是无效的,这两个管子是不导通的,所以它的数据尽管进行输出但是不会送到数据线上,中间的从1~30都是类似的情况。这就是我们才能重合法的方式,进行存储器的译码驱动。

比较:线选法中,如果有20根地址线,这20根地址线有一个译码器来进行译码,输出是一兆根线。如果采用重合法。20位地址给他分成行,列两个部分,假如说每一部分都是10位。那行译码译出来1K条,列译码译出来也是1K条,译出来的线也是一条总计只有2K条。那么比献血法产生的一兆条少了很多。这种方法进行译码驱动的话。芯片的集成程度就可以做得比较高。

3.随机存取存储器(RAM

3.1.静态RAM(SRAM)

  • 保存0/1的原理是什么?
  • 基本单元的电路怎么构成?
  • 对单元电路如何进行读出和写入?
  • 典型芯片的结构是什么样子?
  • 静态RAM芯片如何进行读出和写入操作?
3.1.1 静态RAM基本电路

核心是利用了一个触发器,触发器由T1~T4四个晶体管构成,是一个双稳态触发器,两端用来存储信息,一端是触发器的Q端,一端是触发器的非端。T1~T4解决了用什么样的电路存储0/1,T5和T6是为了解决对于存取数据的读或写。T5和T6都是由一个行地址选择来控制,行地址选择一旦有效,这两个管子就会导通。如果某单元被选中了,那么它对应的行开关会打开,实际上这条行地址选择还会继续向下延续,这一行上所有单元都是这个行地址选择进行控制。

静态RAM的基本单元电路就包括了两部分,一部分就是负责存取0/1的触发器部分和控制读写的T5和T6两个晶体管。一共是六个晶体管。现在这六个晶体管只是一个存储元件,这个存储元件如果做到芯片中,肯定不能是一个单独的元件,我们会将它一列一列的堆排,而T7和T8是这一列上,所有的存储元件共有的控制开关。这个开关,我们叫做列开关。只有行地址和列地址都有效的存储单元才可以进行数据的读或写。

由于存储单元的核心电路是一个双稳态的触发器,所以写入的时候我们要把数据分成两个方向写入,在触发器原端我们写入数据本身,在数据非端,我们写入数据的非。

3.1.1.1.六管静态RAM基本电路的读操作

  • 信号步骤:给出行选信号开T5、T6 ——- 给出列选信号开T7、T8 ——- 读选择有效
  • 数据转移:VA ——- T6 ——- T8 —— 读放 —— DOUT
3.1.1.2.六管静态RAM 基本电路的写操作

  • 信号步骤:给出行选信号开T5、T6 ——- 给出列选信号开T7、T8 ——- 写选择有效
  • 数据转移:
  • (右)DIN —— 写放——- T8 ——- T6 —— VA
  • (左)DIN —— 写放——- 反相 ——T7 ——- T5 —— VA非
3.1.2.静态 RAM 芯片举例
3.1.2.1.Intel2114外特性

  • WE:读写控制信号,低电平写入高电平读出
  • CS:片选信号,只有CS为低电平时,这块2114芯片才会被选中
  • A0~A9:给出的地址线,一共十根地址线,所以2114共有1K个存储单元
  • I/O1~I/O4:给出的数据线,这是一个四位的存储器芯片
  • 布局:芯片的存储容量是1K x 4位,一共4K个基本单元电路,我们可以把它布局成64 x 64的阵列
3.1.2.2.Intel 2114 RAM 矩阵 (64 × 64) 读/写

有六位行地址,经过译码以后可以产生0~63一共64个行选信号,给出一个地址其中一行就会被选中。列地址只有四位,共16个列选信号,给出一个列地址,其中4个会同时被选中。即一个列地址同时控制四个列选信号,使这四列同时进行输入输出。

为了达到一个列地址同时控制四个列选信号的目的,将64列分成四组,每一组包含16行,四位列地址产生16个列选信号,每一组列选信号控制了每一组当中的一列。比如第0个列选信号,控制第一组中的第0列、第二组中的第0列(实际上是第16列)、第三组中的第0列(实际上是第32列)……

操作过程:操作过程中,首先要给出行地址。行地址是全0,第0行行选择信号有效,第0行上所有的基本单元电路都会被选中。第0列有效,每一组的第0列列开关都会打开。交叉点上的第1组的第0行,第2组的第0行,第3组的第0行和第4组第0行都会被选中。如果我们现在做的是写操作,WE低电平有效,对这个芯片操作,片选信号一定是有效,所以CS信号也是低电平有效。数据通过I/O1到I/O4进行输入。读写电路有效,数据通过读写电路,可以写到每一个给定的基本单元电路A端和A非端。如果是读操作,则WE为高电平,CS低电平有效,数据从基本电路单元传到Dout 进行输出。

3.2.动态RAM(DRAM)

  • 保存0/1的原理是什么?
  • 基本单元的电路怎么构成?
  • 对单元电路如何进行读出和写入?
  • 典型芯片的结构是什么样子?
  • 动态RAM芯片如何进行读出和写入操作?
  • 动态RAM为什么刷新?刷新方法?
3.2.1.动态RAM基本单元电路
3.2.1.1.三管式动态RAM基本电路

        Cg存储信息,T1,T2,T3是控制管

流程:T4是一个预充电晶体管。如果想对这个基本单元电路进行读出操作的话,首先要通过预充电信号,使t4这个晶体管导通。VDD就会通过T4这个晶体管,给读数据线进行通电,这个时候读数据线是高电平,表示1。如果我们进行读操作,读选择信号有效,T2晶体管导通。如果现在Cg中保持的信息是0,也就是Cg这个电容没有进行通电,那T1的阳极没有通电,T1是低电平,没有导通。读数据线就会保持高电平。也就是说,如果我们保存的信息是0,在读数据带上,读出的数据就是1。如果我们保存的信息是1,这个电容是被充电,T1的阳极通电,T1这个管子是导通的。数据线预充电的时候保存的是1,这个高电平就会通过T2和T1这个管子进行放电,变成低电平。从这个过程当中我们可以看到,读出的信息和原存的信息是相反的。如果想从单元电路当中读出并且读到正确的信号,那么在读数据线的输出端要加一个非门。如果进行写入的话,信息和输入的信息是相同。进行写入时写选择线有效,T3的管子导通。写数据线通过T3向Cg进行充电或者是放电,如果我们写入的信息是1,写数据线是高电平。数据线通过T3会像Cg进行充电,使Cg当中保存的是1。如果我们写入的是0,Cg会通过t3放电,Cg当中保存的信息就变成0。

  • 利用电容保存信息。
  • 读出的信息和原存的信息是相反的。
  • 写入的信息与输入的信号是相同的。
3.2.1.2.单管式动态RAM基本单元电路

        Cs存储信息

流程:竖着的是字线,是控制线。如果相应的行被选中,这个字线控制这行的T就会打开。电容就可以通过晶体管T进行充电或者是放电。如果CS保存的是0,数据线上就不会有电流。CS保存的是1是高电平,数据线上就会有电流,通过有无电流我们就可以确定这个基本单元电路当中保存的1还是0。

  • 读出数据的时候。我们有电流是存放的1,没有电流是存放的是0。
  • 进行写入时,我们写入的数据如果是1,就是对电容进行充电,是0就是对电容进行放电。
3.2.2.1.三管动态RAM芯片 (Intel 1103) 读/写

行地址每一行通过译码产生的信号,都对应两条控制信号,即读选择线和写选择线,也就是说在行地址译码器参加译码的不止有地址,同时还有读写控制信号。

读操作:假如读操作给出的行地址是全0,则第0行读选择线有效, 第0行所有单元都被选中,列地址也是全0,那第0列被选中,第0行和第0列交叉被选中的那个单元通过读数据线将数据送到读写控制电路上,同时可以向外进行输出 。

刷新发大器:由于动态RAM是使用电容存储信息,而电容经过一段时间会漏电,所以需要刷新发大器定期来进行数据重现。

写操作:假如写操作给出的行地址是全1,则第31行读选择线有效, 第31行所有单元都被选中,假如列地址是00001,那第1列被选中,第31行和第0列交叉被选中的那个单元被选中,数据通过D端,经过读写控制电路 ,写入被选中的存储单元。

3.2.2.2.单管动态RAM芯片intel4116(16Kx1位)外特性

这块芯片和之前看的芯片有一些不一样,我们看到这块芯片的容量是16Kx1位的,可以推测出芯片应该需要14根地址线,但是这块芯片只有7根地址线。那如何实现寻址?这里将行列地址从时间上拆分出来,先接收7位行地址,保存到行地址缓存器,再传入7位列地址,保存到列地址缓存器中,行地址和列地址经过译码以后,选中给定的存储单元进行数据的读或写。

另外这个芯片有一个自己的控制器,这个控制器由行选控信号RAS,列选控信号CAS和读写控制信号作为输入,产生行时钟,列时钟和写时钟。就是控制器产生的行时钟,列时钟和写时钟控制了芯片内部的读和写操作。

3.2.2.3.intel4116芯片读/写原理

读放大器:每一列上都有一个读放大器,读放大器实际上是个跷跷板电路,跷跷板电路就是如果一端强制为1的话,那另一端就变成0。

读操作:如果现在给出的的地址是0111111,第63行就会被选中,即第63行行选择有效,第63行上所有的晶体管都会被打开,电容中保存的信息就会被送到读放大器的一侧(如图是左侧),如果电容中有电,这个读放大器的左侧为1,右侧则为0。给出的列地址是全0,第0列就会被选中,即第0列列选择有效,相对应的晶体管打开,数据就会从读放大器的另一侧(如图是右侧)传输到读写线上,最后经过I/O缓冲和输出驱动,数据被送出来。注意,在读放大器左侧的单元电路的电容有电代表0,电容没电电代表1,右侧的单元电路的电容有电代表1,电容没电代表0。

写操作:假设给出的行、列地址和刚刚读操作一样,数据通过DIN 输入,通过I/O缓冲送到读/写线上,此时第0列的晶体管打开,数据通过第0列晶体管送到读放大器的右端,通过读放大器左端输出的信号取反然后放入指定存储单元。注意到在读放大器左端存放的数据,在存储的时候取了一次反,读取的时候又取了一次反,所有读放大器的跷跷板电路并不影响数据的正确性。

3.2.3.动态RAM刷新
  • 因为动态RAM是用电容来储存信息,而电容又做得非常小,容易漏电。在一段时间内,如果我们不对电容中的信息进行再生的的话,信息就会丢失。这就是我们要对动态RAM刷新的理由。
  • 对动态RAM进行刷新只与行地址有关,与列地址没有关系。每一次刷新操作,刷新的是动态RAM中一行所有的基本单元电路。
3.2.3.1动态RAM刷新方法
集中式刷新

将刷新的时间集中在相对集中的时间段来操作。

假设存取周期为0.5us,要刷新动态电容的周期假设是2ms,即动态RAM中的所有电容都要在2ms内完成信息的再生。

分散式刷新

        没有死区,但把读取周期加长了,芯片的性能下降了

异步刷新

3.3.动态RAM与静态RAM的比较

思考:DRAM的刷新为什么是按行进行的?因为刷新放大器。以DRAM读为例,行地址经译码后使某一行所有基本单元电路的MOS管打开,电容电荷不断流失。经过多次读以后会使这一行所有电容电荷流失,读出错误信息。这样,一行一个或几个基本单元电路的读会影响本行所有基本单元电路存入的信息,所以一次需要刷新一整行。

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值