参考:

【十分钟速成课:计算机科学】6.寄存器&内存

要想聊寄存器Latch,首先要聊内存。什么是内存?

Memory,就是储存信息的东西。

我们都玩过单机游戏,如果突然关机,游戏结束但是没有存档,那么下次就必须从新再玩。

这是因为游戏储存进度而使用的内存是RAM,类似于人的短期记忆。

那么问题来了,我们如何储存信息?

我们知道对于计算机来说,信息就是1或者0

因此,我们只要控制每一个位置的信息是1,或是0不变,就能把信息保存下来。

现在来聊点实际的:

如何储存信息1?

来看这个门:

这个门的输出永远是1,不论A的输入是什么。

同理,这个门的输出永远是0

我们可以结合这两个电路,得到  :

我们通过置1或者置0的电路输入信号,让他的输出永远是1或者0。

它记住了一个信息!!! That‘s what we call Memory~

这叫做锁存,因为它锁住了一个值。

再优化一下:

这个电路由两个信号控制,enable 和 Input  如果enable了,就允许数据读入,否则无法读入数据。

接下来,把他抽象成一个黑盒就好了。这个盒子能够储存一个bit

我们可以并排8个latches 这就是一个八位寄存器。其中八个成为位宽

然而一个寄存器有三条线,Input  output enable ,对于一个128位宽的寄存器来说,

即使enable只用一根线来代替,那也是128*2+1 根线。

如何减少?

Matirx

我们把256个寄存器放入16 *16 的矩阵中:

其中,我们通过导通某行和某列交叉线的位置上寄存器的enable,而其他寄存器上的enable 关闭。

这可以通过与门实现。

然后让数据在电路里流过,但是只有enable 打开的寄存器才能读入数据。

这样只需要35条线。

那么如何指定交叉位置?

比如说我想指定第12行,第8列的位置。

首先地址最多有6行,那么只需要用四位二进制数表示就好了。

12=1100

8=1000

那么,我们把12行8列对应的地址就可以表达为:11001000(就是12的二进制表示和8的二进制表示连接起来)

我们现在知道了如何将地址存储为二进制数了,

那么如何解读成第几行第几列呢、

here comes mutilplexer

现在我们把一个128位的寄存器抽象一下:“

他需要你输入一个储存的地址,和read enable write enable 还有data

这样一个256位的 memory 也没啥用,我们需要更大的内存,所以把它叠起来。

最新文章

  1. css-position
  2. ted be grateful
  3. 如何获取eID——公安部发行的网络实名认证方式
  4. Django模块学习- django-pagination
  5. zookeeper系列之九—zookeeper数据模型
  6. oracle 实例名和服务名以及数据库名区别
  7. linux下svn修改用户名和密码
  8. 【CF 549G Happy Line】排序
  9. BZOJ 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛( BFS )
  10. 在hadoop 的任务中设置 map数量
  11. DesignPatternPrinciple(设计模式原则)一
  12. SpringMVC学习笔记(二)
  13. jquery实现ajax提交表单
  14. chorme浏览器的Access-Control-Allow-Origin拦截限制
  15. codevs 1054 电梯
  16. BBS论坛(二十二)
  17. git权限
  18. PHP安装linux
  19. WPF 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项
  20. SpringCloud高可用和高并发

热门文章

  1. 哔哩哔哩批量采集器(支持windows和mac)
  2. 数组问题:a[i][j] 和 a[j][i] 有什么区别?
  3. Java8的Lambda表达式,你会不?
  4. flink1.11报错No ExecutorFactory found to execute the application
  5. maven-assembly-plugin插件打jar包时排出指定的依赖
  6. mybatis默认返回类型
  7. SpringBoot从入门到精通教程(三)
  8. 死磕以太坊源码分析之txpool
  9. Error:(12, 24) 警告: [deprecation] android.hardware中的Camera已过时.android
  10. Astra示例程序库正式上线啦