一、半导体元器件存储二进制0/1的原理
一个存储器逻辑上分为MAR,MDR和存储体,这三块在时序逻辑电路的控制下相互配合工作。
而存储体有多个存储单元构成,每个存储单元又由每个存储元构成。一个存储元可以存放一位的二进制的0/1。
一个存储元由一个MOS管和一个电容组成。
MOS管是一种半导体,当通电压达到某一定阈值时它才会变成导体,否则是绝缘体。
上图所示电容下金属板接地为0V,下金属板若和上金属板存在电势差则会存储电荷,以此来决定存储元存储的是1还是0。
当接通MOS管时,若导线一端有电荷流出,则可以判断该电容保存的是二进制的1,否则保存的是0。这是二进制的读出。
存储也很简单,接通MOS管,接通导线,电容开始累计电荷,这样就在里面存储了1。这时候再断开MOS管,就可以防止电荷跑出去了。
如果把多个存储元排列在一起就可以组成一个存储单元(存储字)。上图红线链接了一个存储单元的所有MOS管,如果此时在红线上加入一个5v的阈值电压就可以一次读出该存储单元内所有的二进制数据(绿线用来检测有无电流导出判断是0/1)。
而多个存储单元又构成了存储体(存储矩阵)。上图所示的存储字长为8bit。存储字长根据一个存储单元中存储元的个数决定。但是1Byte=8bit是不会变的。
这也解释了为什么存储器一次读写都是以一个存储字长为单位
二、存储芯片的基本原理
1.译码器
如何根据地址决定我们要读/写哪一个字呢?这就涉及到译码器的工作原理。
对于译码器,我们给定n位地址对应2^n个存储单元,所以译码器会根据MAR给出的地址转变为某一条选通线的高电平信号,这样就可以读出一整排的存储元的数据了。
译码器的每一条选通线对应每一个存储单元的地址。
之后通过数据线(绿线)把每一位二进制数据送入MDR中,接着CPU会通过数据总线从MDR中取走一整个存储字的数据。(当然数据总线的宽度是和存储字长相同的)
2.控制电路
由于电信号的不稳定,除译码器之外,还要有控制电路来控制MAR,MDR和译码器来实现存储器的读写。
电信号是不稳定的,CPU通过地址总线将电信号送到MAR,但不会立刻送到译码器,当MAR中的电信号稳定之前,控制电路不会打开译码器的开关。
同样的,当输出的时候,控制电路同样会在MDR中的电信号稳定之后才能从MDR送出数据到数据总线。
另外,存储芯片还要对外提供一些线路如(芯片选择信号)/(芯片使能信号),上面带横线的意思就是当处于低电平的时候起作用。两个线路的意思就是,当处于低电平的时候,这块芯片可以工作了。
同时还有读写线。有些设计为两根线,一根表示读一根表示写(,)。有些则用一根既可以表示读也可以表示写。
片选线的作用如上图所示,上图内存条的每个黑块就表示一个存储芯片,当地址线搜索的地址在某一个存储芯片上,片选线自然要关闭除它以外的其它所有存储芯片。
同时存储芯片的引脚数应该等于地址线+数据线+片选线+读写控制线+供电+接地。
上图中存储器的逻辑构成我们只有读写电路和驱动器上面没有说。读写电路包括上面的红线绿线以及控制电路的读写控制线。
驱动器,我们前面说过电信号的不稳定性,而驱动器就是一个信号放大器,可以让信号离开译码器之后仍然稳定有效。
之前我们说过总容量 = 存储单元个数 X 存储字长。之后我们还要熟悉上图所示的描述方式。
例如:8X8位的存储芯片,前一个8表示的是存储单元的数量,后面的8则表示存储字长。
而通过存储单元的数量自然就可以推断出地址线是多少,如上面的例子,2^3=8,所以8X8位的存储芯片的地址线有3根,又因为每个存储字长为8,所以数据线有3X8=24根。
三、不同的寻址方式的实现
上图所示的每个方格表示一个字节,也就是8bit,而每一整行表示一个存储字,也就是说这块存储芯片它的字长是4B。假设它的总容量是1KB,那也就是说它有256个字(256行)。
现代计算机中通常按字节编址,也就是说每个字节一个地址。所以这个存储矩阵中有1K个地址。这也就是按字节编址。
但是存储器指支持的寻址形式可不是只有按字节寻址。按字节寻址自然需要10根地址线,因为2^10=1024,才足够寻1000个地址。
而如果按字寻址,一整行,也就是一个字合并看成一个地址。当我们需要读某个字的时候,假如我们现在要读的是第1个字,那只需要我们对1进行算术左移得到100,也就是4,就可以得到该字起始字节的字节地址。
按半字寻址和按双字寻址以此类推。