计算机科学速成课 Crash Course Computer Science 第六集 寄存器&内存 Registers and RAM-程序员宅基地

技术标签: 计算机科学速成课 Crash Course Computer Scie  

GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS
如果你觉得不错可以 Star 和 Fork

计算机科学速成课 Crash Course Computer Science

第六集 寄存器&内存 Registers and RAM

ALU计算后的结果若丢弃了则没有什么意义,所以需要找个方式进行存储,可能还需要进行多个连续操作,这就用到了计算机内存。

随机存取存储器RAM

由于断电而损失数据的原因是电脑用的是“随机存取存储器”(Random Access Memory),简称RAM。它只能在有电的情况下存储东西,比如游戏状态。另一种存储叫持久存储(persistent memory),电源关闭时数据也不会丢失,它用来存其他东西。

存储1位数据的电路:锁存器

需要回向电路,即把输出连回输入。

OR门:两个输入分别为A和B,将输出连回输入B。首先两个输入都设为0,0 OR 0 是0,所以电路的输出为0,如果将A变为1,1 OR 0 为1,所以输出为1,输出回到B,OR门的两个输入都是1,1 OR 1 仍然为1,所以输出不变,此时该电路能记录“1”,但是问题是这个记录是永久的,无论怎么改变输入A都没办法从1变回0。

在这里插入图片描述

AND门:两个输入分别为A和B,将输出连回输入B。开始时将A和B都设为1,1 AND 1 输出1,之后将A设为0,由于是AND门,输出会变成0,这个电路能记录0,并且无论A设为什么值该电路都始终输出0。

在这里插入图片描述

AND-OR 锁存器

有了能存0和1的电路,为了做有效的存储可以将两个电路结合起来,称为“AND-OR 锁存器”(AND-OR latch)。它有两个输入,“设置”(SET)输入把输出变成1,“复位”(RESET)输入把输出变成0,如果SET和RESET都是0,电路会输出最后放入的内容,即存储了1位的信息。这叫“锁存”(latch)是因为它“锁定”了一个值,放入数据的动作叫“写入”(writing),拿出数据的动作叫“读取”(reading)。

在这里插入图片描述

门锁

为了方便使用,增加逻辑门将AND-OR 锁存器改为“门锁”(Gated Latch),两个输入为数据输入(data input)和允许写入线(write enable),一个输出为数据输出(data output)。

在这里插入图片描述

将门锁抽象化(不关心内部的逻辑门实现),初始化数据输入和允许写入线都是0,数据输出也是0,此时数据输入从0换到1或从1换到0什么也不会改变——输出依旧为0,这是因为允许写入线是关闭的,所以内容不会变化。将允许写入线输入为1,此时数据输入设为1,1就能存起来,数据输出此时为1,现在关闭允许写入线,输出会保持1,不管数据输入怎么变化,数据输出都不会改变。

在这里插入图片描述

寄存器

如果并排放8个锁存器将可以存储8位信息,比如一个8bit数字。一组这样的锁存器叫“寄存器”(register),寄存器能存一个数字,这个数字有多少位叫做“位宽”(width)。早期电脑用8位寄存器,然后是16位,32位,如今许多计算机都有64位宽的寄存器。

在写入寄存器之前需要先启用里面所有的锁存器,可以用一根线连接所有“允许写入线”,把它设为1,然后用8条数据线发数据,然后将“允许写入线”设回0,这样8位的数据就存储完成。

在这里插入图片描述

若只有很少的位,把锁存器并排放置可以勉强解决问题,64位寄存器需要64根数据线,64根连到输出端,1根线启用所有锁存器,加起来需要129根线。如果存256位就需要513根线?!解决线过多的方法就是使用矩阵。

矩阵技巧实现寄存器

在矩阵中不并列排放锁存器,而是做成网格。可以用16*16网格的锁存器存储256位,要启用某个锁存器时就打开相应的行线和列线,需要打开交叉处锁存器的“允许写入线”,所有其他的锁存器保持关闭,所以可以用AND门,只有行线和列线都是1时AND门才输出1,用于选择单个锁存器。这种行列排列法用一根“允许写入线”连所有锁存器,为了让锁存器变成允许写入,行线,列线和“允许写入线”都必须是1,并且每次只有一个锁存器会启用,这代表我们可以只用一根数据线连接所有锁存器来传数据,因为只有一个锁存器会启用,只有它会存数据,其他锁存器由于没有允许写入所以会忽略数据线上的值。我们可以使用类似的技巧做“允许读取线”来从一个指定的锁存器读取数据。

在这里插入图片描述

在这里插入图片描述

所以对于256位的存储只要35条线,1条“数据线”,1条“允许写入线”,1条“允许读取线”,还有16行16列的线用于选择锁存器。

多路复用器

需要某种方法来唯一指定存储位置——地址(memory address),为了将地址转成行和列,需要“多路复用器”(multiplexer)。多路复用器有不同大小,因为以上例子有16行,所以需要1-16多路复用器,工作方式是输入一个4位数字,它会把那根线连到相应的输出线,如果输入0000,它会选择第一列,如果输入0001,会选择下一列,以此类推。一个多路复用器处理行,另一个多路复用器处理列。

在这里插入图片描述

把256位内存抽象化:它输入一个8位地址,4位代表列,4位代表行,需要允许写入线和允许读取线,还需要一条数据线用于读写数据。

在这里插入图片描述

扩大规模,将多个256位内存并排放置,类似寄存器,一行8个就可以存一个8位(一个字节byte)数字,为了存一个8位数字,我们同时给8个256位内存一样的地址,每个地址存一位,意味着这里总共能存256个字节。

在这里插入图片描述

可以抽象化为一个整体的可寻址内存,有256个地址,每个地址能读或写一个8位值。

在这里插入图片描述

现代发展

现代计算机的内存扩展到上兆字节(MB)和千兆字节(GB)的方式,随着内存地址的增多,内存地址也必须增长,8位最多能代表256个内存地址,要给千兆或十亿字节的内存寻址则需要32位地址。内存的一个重要特性是可以随时访问任何位置,因此叫随机存取存储器(RAM)。

如今用锁存器做了一块静态随机存取存储器(SRAM),还有其他类型的RAM,如DRAM,闪存和NVRAM,它们在功能上与SRAM相似,但是用不同的电路存单个位,比如用不同的逻辑门,电容器,charge traps或忆阻器,但根本上这些技术都是矩阵层层嵌套来存储大量信息。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43413123/article/details/104265568

智能推荐

FPGA存储块,有没有使能Primitives output Register作用-程序员宅基地

文章浏览阅读3.1k次,点赞7次,收藏15次。在FPGA中,ROM,RAM存储块在IP核配置中都有一个配置选项:Primitives output Register,比如下图的rom IP核配置界面接下来以RAM读写为例,我这里RAM的第一个数值为1,我们观察第一个数值的位置即可看出这个reg的作用,我这里是always Enable配置:没有勾选Primitives output Register的情况,当我们给了ADDR后,1个时钟周期后,RAM存储块能够读出数值。勾选Primitives output Register的情况,当._primitives output register

日期:将格林尼治时间(GMT)转化为北京时间_gmt日期在线转成中国日期-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏6次。 格里尼治时间,就是我们常常说的0度经线的地方平时,也叫格林平时,格林平时的英文是Greenwich Mean Time,简称GMT,实际上就是UT(universal time )也叫世界时的。 从0度格林经线到120度东八区时区经线,经差为120度,换算成时间为8小时(120除以15),所以格林平时和北京时间差八小时,而且是北京时间比格林平时快8小时,因此是在格..._gmt日期在线转成中国日期

设置VIM字体(zz)-程序员宅基地

文章浏览阅读850次。[url=http://blog.csdn.net/searun/archive/2007/06/29/1671897.aspx][Hacking VIM]之定制:改变字体[/url]在控制台下的VIM是不能够改变字体的,因为字体的改变是随着终端字体的变化而变化的,但是在GVIM中,你却有权力将字体改变成自己想要的样子。在Linux下设置字体的命令是::set guifont=..._vim控制台字体配置

unity3d 屏幕适配 iPhone X 解决方案_unity ios iphone displaymanager.mm-程序员宅基地

文章浏览阅读6.3k次。添加获取手机型号方法#import + (NSString*)getDeviceVersion{ struct utsname systemInfo; uname(&systemInfo); NSString *deviceVersion = [NSString stringWithCString:systemInfo.machine enc_unity ios iphone displaymanager.mm

鸿蒙系统外销吗,郭明錤:华为可能会在10月份出货搭载鸿蒙系统的手机-程序员宅基地

文章浏览阅读99次。原标题:郭明錤:华为可能会在10月份出货搭载鸿蒙系统的手机数码新资讯?互联新事件?手机快测评?二十年专业老司机,等你上车,点击右上角关注泡泡网即可目前,大家对华为鸿蒙系统的关注度还是非常高的。此前消息,华为已经在多个国家注册了鸿蒙系统。当然,大家最关心的还是搭载鸿蒙系统的华为手机什么时候出? 现在,著名分析师郭明錤在分析报告中指出:华为可能在10月开始出货搭载鸿蒙系统的手机。郭明錤也预测:鸿蒙手机..._鸿蒙系统手机出口

ArcGIS Pro试用申请_arcgis pro怎么注册-程序员宅基地

文章浏览阅读4k次。1.打开网址,注册相关信息https://www.esri.com/zh-cn/arcgis/products/arcgis-pro/trial2.填写相关信息,之后会发送邮件到注册邮箱3.登录注册邮箱,确认链接4. 打开上面的连接,填写用户名密码5.确认之后,会跳到www.arcgis.com主页,需要填写组织简称,需要记住组织的主页..._arcgis pro怎么注册

随便推点

c语言输入字符串以井号结束,想学好C语言必须得先学会自救(命令行必须以井号“#”开头 最后不能加分号“;”结尾)...-程序员宅基地

文章浏览阅读1.6k次。想学好C语言必须得先学会自救(命令行必须以井号“#”开头 最后不能加分号“;”结尾)2018-11-24【【编程学习】想学好C语言,必须得先学会自救】https://toutiao.com/group/6573450045876601348/?iid=15906422033&app=explore_article&timestamp=1530533291&tt_from=c..._dev c++的井号有要求吗?

python 接收微信pc端_GitHub - linhuisheng/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...-程序员宅基地

文章浏览阅读1.2k次。WechatPCAPI微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。可用于二次开发在线微信机器人、微信消息监控、群控软件、开发界面作多个微信控制软件等用途。当前版本:@钊@当前版本是免费版本另有更稳定、更可靠、更强大的付费版本,点这里了解。付费版本README如果帮到你,帮我点个star。遇到问题可以提Issues,或关注公众号“燕幕自安”联系我。延..._python获取微信所有群

lua:lua作配置文件-程序员宅基地

文章浏览阅读376次。lua的一项重要用途就是作为一种配置语言(configurationlanguage)。目前,我们常用的配置文件格式有XML和ini, XML层次分明,但其缺点就是写起来太繁杂,对一些关键字如<>之类的处理比较特殊。而ini呢,配置不够灵活,只有简单的段-键-值模式,对于一些多层结构的配置,或者一些列表类型的配置,就显得力不从心了,往往需要编码人员自己分割字符串。...

BAT文件读取文件夹下所有文件名并导出_bat获取文件名称后判断是否导出文件-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏13次。测试目录结构:E:\测试–测试1\----测试1.txt----测试2\------测试2.txt将脚本放到需要获取文件名的根目录中,直接运行脚本。执行:执行完成后会在当前目录生成allbook.txt文件,打开文件就能看到文件名。为了验证脚本是否正常完成我增加了end标志位,可以删除。脚本如下:echo off & color 0A::指定起始文件夹set ..._bat获取文件名称后判断是否导出文件

erwin 7.3 注册码 license key 亲测可用_erwin 序列号-程序员宅基地

文章浏览阅读1.8w次,点赞16次,收藏20次。erwin 7.3 注册码 license key 亲测可用module:GW3DJ-S4WG7-DDENL-FGPCD-SVUBAnavigator:6W4VQ-SKZG3-CVLPC-TGXMV-QWTYA_erwin 序列号

整型、浮点型转字符串(Format函数) - MFC_mfc浮点转字符串-程序员宅基地

文章浏览阅读2.7k次。在MFC程序中,CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。Format用于转换的格式字符%c单个字符%d十进制整数(int)%ld十进制整数(long)%f_mfc浮点转字符串

推荐文章

热门文章

相关标签