计算机科学——寄存器和内存

2021/05/21

Kkem Chen

寄存器 & 内存 (Registers and RAM)

1. 锁存器(Gated Latch)——存1位

  • 锁存器

  • 门锁

2. 寄存器(Resgister)——存8位

  • 并排放置8个锁存器,可以存储8位信息。一组这样的锁存器叫做__寄存器__。(SRAM)
  • 寄存器能存一个数字,这个数字有多少位,就叫做__位宽__。

3. 数据选择器、多路复用器(Multiplexer)——16*16的矩阵存256位

  • 随着所需存储的数据增大,并排放置锁存器效率低下。

  • 存储256位,采用16*16的网格锁存器。

4. 组合256位内存+多路复用器

  • 为了将上述网格锁存器想要打开的"交叉处"地址转换为行列,所以需要用多路复用器

  • (图2:一个8位数字是指,根据一个地址读出一个256位的存储器内的一个数字,8个存储器就是8位数字)

  • 将其看做一个整体抽象成一个整体可寻址的内存

5. 内存条(DRAM)

  • DRAM——Dynamic Random Access Memory(动态随机存储)

  • DRAM组成原理

    • Source(源极),Gate(栅极),Drain(漏极),Capacitor(电容) 如果三极管打开,电流从源极流向漏极,电容将被充电。 当关掉三极管,源极电流被阻挡,电容仍保持充电状态。(此时就代表二进制中的"1")

    此时三极管再打开,并且源极没有电压去驱动电容保持充电,电荷将跑出电容,直至放空。(这个完全没电的状态代表二进制中的"0") 不难看出读取存储单元的过程是破坏性的。


  • 在DRAM芯片中,存储单元呈二维阵列排布,上面接了字线(Word line)和位线(bit line)。实际上,一个DRAM阵列含有几百万个存储单元,通常有数以千计的字线和位线。

如果要读取某一具体单元的值,需要在位线的末端加上一些别的电路,名为——感测放大器(Sense Amplifier)。

为了读取那个单元里的数据,需要先读取一整行的单元。 首先位线被预加电到DRAM供电电压的一半(这里假设供电电压为3V),这个加电过程很短,一会就结束。位线与地端断开,所以他们任然处于充电的状态,尽管时间很短,与电容器不同,我们允许位线处于悬空态。 然后将字线加了高压态,这个过程被称为“置位”。通道三极管打开了。 如果电容器充满了电,电荷会从电容流向位线,电容放掉一点电,位线的电压就会升高一点。如果电容没有电,电荷会从位线流向电容,电容充一点电,位线的电压就会降低一点。 尽管这个过程电压正负变化只会发生几纳秒,电压变化也仅有十几分之毫伏,但这个电压变化足够让__感测放大器__感知到。 感测放大器把新电压与之前的电压作比较,(注意:另外一边的位线仍然处于1.5v的状态)。这也是这种放大器经常被称为“差分放大器”的原因。

感测放大器含有翻转器,锁存器等电路,可以用来临时存储刚刚读出来的值。 其中一个值将被输送到数据总线上。

  • 为了读取一个单元的值,那个单元以及那行的其他单元都至少得放一点电。这个过程是破坏性的。这意味着,每次读操作之后必须立刻进行写操作。这个也是感测放大器的工作之一。 根据锁存的值,这些位线有些被拉到DRAM的最高电压(3V),有些则被接地,存储单元内的值很快就被恢复了,字线也可以放开了。 这么多操作只为了读取一个单元的值,实际上,为了改变一个单元的值,这一行也需要先读后写。

事实上DRAM的通道三极管不可能是一个完美的开关。如果不管它,存储单元会漏一些电荷到位线上,即使通道三极管已经关了。因此所有存储单元必须时不时刷新一下。这个刷新操作每个单元大约每64纳秒就要执行一次。




comments powered by Disqus