在计算机的存储器中, 按存储介质进行分类的话, 可将存储器分成半导体存储器, 磁表面存储器, 磁芯存储器, 光盘存储器. 而除了半导体存储器中的数据易失以外, 其他的存储介质都具有非易失的特性.
那么, 半导体存储芯片的结构是怎样的呢?
话不多说, 我们来看下吧.
半导体存储芯片的基本结构
半导体存储芯片由译码驱动电路, 存储矩阵, 读写电路, 地址线, 数据线, 控制线, 片选线组成. 其中, 译码驱动电路, 存储矩阵, 读写电路属于核心结构.
存储矩阵用来存储 0/1 代码, 地址线, 数据线主要用来连接 CPU 和外部设备. 现在假设 CPU 或者外部设备给出地址, 表示要存 / 取的数据在存储矩阵的哪个存储单元中, 然后经过译码驱动电路, 选择对应的存储单元, 从而完成存 / 取数据.
地址线是单向的, 由 CPU 指向存储器, 或者由 I/O 设备的控制器指向存储器. 数据线是双向的. 由地址线和数据线可以计算出芯片的容量. 那么如何计算呢? 感兴趣的朋友可以阅读之前的这篇文章. 吐血整理! 这篇带你彻底理解主存中存储单元地址的分配
片选线, 也叫做芯片选择信号, 指出这次存 / 取操作给出的地址是不是这个存储芯片的地址. 半导体存储芯片的片选线一般有两种标识方式, 表示方式如下所示:
CS(芯片选择信号),CE(芯片使能信号), 低电平表示有效, 高电平表示无效, 也就是说, 如果片选线信号为低电平, 则表示想要存 / 取的数据位于片选线所在的芯片中.
读写控制线, 表示这次对半导体芯片的操作是读操作还是写操作. 可以用一根线或者两根线表示, 用一根线表示的话是 WE, 用两根线表示的话是 WE 和 OE, 具体如下所示:
存储芯片片选线的作用
接下来我们来详细讨论下存储芯片中, 片选线的作用.
假设 CPU 现在要求用 16K*1 位的存储芯片组成 64K*8 位的存储器. 如何用 16K*1 位的存储芯片组成 64K*8 位的存储器?
我们用图来看下, 实际上这个问题解决并不难
16K*1 表示存储容量, 每个存储单元存储 1 位的 0/1 数据. 那么, 我们用 8 个这样的芯片, 对 8 个芯片相同的地址同时进行操作, 每个芯片给出 1 位, 8 个芯片就构成了 16K*8 的存储器.
但是, CPU 要求的是 64K? 这个应该怎么做?
实际上, 也不难, 每 8 个芯片分成 1 组, 然后复制 4 组, 就构成了 64K*8 的存储器.
在进行读写操作时, 8 个芯片是同时进行工作的, 所以, 他们的片选线是连接在一起的.
然后对 64K 的空间进行划分, 所以 CPU 的地址中 0-(16K-1)的地址分配到第一组的芯片中, 16K-(32K-1)的地址分配到第二组的芯片中, 32K-(48K-1)的地址分配到第三组的芯片中, 48K-(64K-1)的地址分配到第三组的芯片中分配到第四组的芯片中.
现在假设访问的地址是 65535, 进行写操作, 那么这个地址表示的存储芯片应该在最后一组中, 片选信号看到这个地址后, 就会选择最后一组, 其他三组芯片对应的片选信号是无效的, 就是高电平, 最后一组对应的片选信号是有效的, 也就是低电平, 数据就会保存在最后一组的存储芯片当中.
半导体存储芯片的译码驱动方式
译码驱动电路的作用是: 在给出地址之后, 根据这个地址取找到这个地址对应的存储单元.
而半导体存储芯片的译码驱动方式有两种: 线选法, 重合法.
我们先来看下线选法
线选法
在上图中, 有 A0-A3 的 4 位地址, 那么 24 表示有 16 个存储单元, 那么每个存储单元可以存储多少位? 图中给出的数据线是从 D0-D7, 一共 8 位. 综合起来, 就表示这是一个 16K*8 的存储器.
如何进行选择?
在上图中, 地址译码器输入的是 4 根线, 输出的 16 根线. 给定一个输入, 在输出这一端, 只有一根线是有效的, 只有一根线上的信号会控制相应的存储单元中的所有存储元件进行数据的输入或者输出操作.
那么在读写控制电路中, 如果是读选通, 就会将数据矩阵中的数据进行对外输出; 如果是写选通, 就会将数据写入到矩阵中的存储元件中.
现在, 来看下具体工作过程:
假设地址译码器给出的地址是全 0, 进行译码过后, 只有 0 这根线是有效的, 其他的都是无效的. 现在进行的是读操作, 那么就会控制读 / 写控制电路打开, 使得数据可以从存储矩阵输出到数据总线上. 只有给定的单元才可以进行输出.
那么, 线选法有没有缺点呢? 缺点是什么?
在上图的译码中, 地址线是 4 根, 容量是 16K*8, 现在的计算机存储器, 并不存在这么小的容量.
现在假设有 1M*8 的存储芯片, 地址线有 20 根, 经过译码器译码后就有 1M 条线, 每给出一个地址, 1M 条线中, 只有一条有效. 而 1M 条线, 就是 1000000 条线, 做在芯片中将会非常密集, 这么高的集成度很难做到.
所以, 线选法对于容量很大的存储器来说, 是个不好的方法.
接下来, 来看下重合法
重合法
在线性法中, 存储单元的布局方法是一个线性的数组; 而在重合法中, 存储单元的布局方法是二维的数组.
在重合法中, 将地址分成了两部分, 一部分是 X, 另一部分是 Y, 也可以叫做行列地址. 行列地址分别进行译码, 只能有一根线是有效的. 具体工作过程:
假设给出的行列地址都是全 0, 行列地址进行译码后只有 (0.0) 这条线是有效的. 只有这条线上的存储单元被选中. 那么这时候, Y0 这条线上的开关就会打开, 数据就会通过这个开关进行数据输出. 在这个过程当中, X0 上的除了 Y0 上的存储单元的数据会进行输入以外, 其他的存储单元上的数据一样会进行输出, 但是, 当数据经过 Y31 线上的开关时, 由于这条线是无效的, 数据会被拦截, 所以, 数据就输出不了, 所以数据没有到数据线去. 那么 Y0 上的除了 X0 的存储单元的数据会进行输入以外, 其他的存储单元上的数据一样会进行输出, 同样的道理, 就不另外解释了.
那么, 重合法的优点是什么?
在上面的线选法中, 我们是假设有 1M*8 的存储芯片, 地址线有 20 根, 用线选法的话, 经过译码器译码后就有 1M 条线. 那么, 同样的大小, 我们采用重合法的话, 地址线就分成两部分, 每一部分都是 1K 条线, 总计就是 2K 条线, 那么, 就比线选法进行译码的 1M 条少很多了, 这样子, 芯片就能做到很高的集成度.
结语
讲了那么多, 不知道各位是不是清晰的理解了呢哈哈?
如果觉得我写的不错的话, 帮个忙呗
1. 关注我的知乎账号小丛, 上面有我的文章同步, 同时需要询问学习计算机经验的话, 也欢迎私聊.
2. 点赞, 关注我, 这是对我最大的鼓励了, 有了你们的鼓励, 我会写出更多的优质文章.
来源: https://www.cnblogs.com/codevald/p/codevald4.html