计算机科学: 寄存器&内存
参考:
【十分钟速成课:计算机科学】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 也没啥用,我们需要更大的内存,所以把它叠起来。
最新文章
- css-position
- ted be grateful
- 如何获取eID——公安部发行的网络实名认证方式
- Django模块学习- django-pagination
- zookeeper系列之九—zookeeper数据模型
- oracle 实例名和服务名以及数据库名区别
- linux下svn修改用户名和密码
- 【CF 549G Happy Line】排序
- BZOJ 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛( BFS )
- 在hadoop 的任务中设置 map数量
- DesignPatternPrinciple(设计模式原则)一
- SpringMVC学习笔记(二)
- jquery实现ajax提交表单
- chorme浏览器的Access-Control-Allow-Origin拦截限制
- codevs 1054 电梯
- BBS论坛(二十二)
- git权限
- PHP安装linux
- WPF 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项
- SpringCloud高可用和高并发
热门文章
- 哔哩哔哩批量采集器(支持windows和mac)
- 数组问题:a[i][j] 和 a[j][i] 有什么区别?
- Java8的Lambda表达式,你会不?
- flink1.11报错No ExecutorFactory found to execute the application
- maven-assembly-plugin插件打jar包时排出指定的依赖
- mybatis默认返回类型
- SpringBoot从入门到精通教程(三)
- 死磕以太坊源码分析之txpool
- Error:(12, 24) 警告: [deprecation] android.hardware中的Camera已过时.android
- Astra示例程序库正式上线啦