首页 > 代码库 > 存储器

存储器

可存取的D触发器

  这个存储器由一个上升沿D触发器构成,只能保存一个比特。

  G的作用是将触发器的输出Q同外部接通或断开。平时,W和R都为0,这个存储器什么也不做,既不能写入,也读不出比特,因为G是断开的,而触发器的CP端也没有接到任何有效的指示。

  当要写入数据的时候,使W从平时的0变成1(上升沿)。在W脉冲的上升沿,比特被D触发器保存。保存以后,使W重新为0。整个过程中,G是断开的。

  相反地,如果是要读出数据,那么必须使R=1以打开G,触发器Q端的比特被送入DB总线。虽然这个输出Q同时也被送入触发器输入端D。但是没有关系,因为在读的过程中,W必须为0。

  W和R不能同时从0变成1,意思是我既想读又想写。要是你非这样做,那么存储器会做一个很奇怪的动作,吞食自己的输出,这是没有任何意义的。

构造存储器

  通常一个二进制数包含许多比特,是一个比特串,所以,你可以把很多比特单元并排组织起来,以容纳该二进制的每一位。使用多少个这样的比特单元,取决于你要保存的二进制数有多大,换句话说,它包含了多少个比特。下面的例子中,使用了5个比特单元,所以它只能保存像11010这样的二进制数。

  这样,当你要写一个二进制数时,可以把它的每一位分别放到D0~D4这5根线上,保持“读”线为0不变,并通过“写线“发出一个上升沿脉冲,这时,它们将会分别被独立地保存起来;相反,当你要读取出这个二进制数时,只需要使”写“线保存为0不变,”读“线为1即可,它的每一位会自动出现在D0~D4上。

   直观上说,这5个比特单元并排在一起,很像一个楼层。既然一层楼可以保存一个二进制数,那么,只需多盖几层,就可以保存好几个二进制数。下图中,一共盖了4层,可以保存4个二进制数。当然,要想保存更多,完全可以盖更多层。

  上图中,每个楼层都有自己的读线和写线。平时,每一层的读线和写线都为0,它们既写不进去,也读不出来。要是你想往这个寄存器里写入一个二进制数,只需要使相应楼层的写线从0翻转到1即可,读的时候也与此类似。

  如果将上图中4个楼层编号为0、1、2、3,分别对应二进制数00、01、10、11,都是2个比特的二进制数,那么只需要2个开关就可以定位到要操作的楼层。

  下图中的新逻辑电路叫做”地址译码器“,A0和A1共同用来指定一个楼层。如果A1A0=00,表示它选择的是第0层;如果等于11则指的是第3层。

 

  一旦通过A0和A1给出一个存储单元的地址,那么,结合R和W的输入情况,就能得到另外一种形式的输出,使相应的存储单元开始读或者写。

  下图是一个封装之后的存储器。它有4个地址引线A0~A3,可以访问0000~1111这16非存储单元,这就是他的存储容量。另外,它有D0~D4五根数据线,这意味着它每次可以写入或者读出一个5比特的二进制数。

  这种存储器可以随机地、任意地决定访问哪个存储单元,不管访问哪个存储单元,所花的时间都一样,和地址没有关系。正是因为这样,我们称之为”随机访问存储器“,或者”自由存取存储器“,Random Access Memory,简称RAM。