SPI 读取不同长度 寄存器_[读书笔记]《计算机科学速成课》—6 寄存器和内存

上节中介绍的ALU进行计算后得到的结果需要对其进行存储,可能还要进行多个连续操作,这就需要用到计算机内存了。计算机使用的是随机存取存储器(Random Access Memory, RAM),其只能在有电的情况下存储东西。另一种存储称为持久存储(Persistent Memory),电源关闭时数据也不会丢失,它用来存其他东西。

这一节中首先构建能够存储1位的存储器,然后对其扩展来得到内存模块。

之前构建的都是单向电路,我们同样可以构建回向电路,把输出连回输入。

48daa0138a410b8f1d3b1e6316638900.png
存储1的电路

当将OR门构建成回向电路时,可以分析其电路特性

  1. A和B初始为0时,输出结果为0
  2. 将A修改为1时,输出结果为1,此时B的输入就变为了1。随后输出始终保持为1,不论A如何变化。

所以这个电路能够永久记录1,并且无法将1变回0。

39c23cceacad4dd71d4da82acaf28ea1.png
存储0的电路

同理可以分析下AND门构建成回向电路时的特点

  1. A和B初始化为1,则输出结果为1
  2. 将A修改为0时,输出结果为0,此时B的输入就变成了0。随后输入始终保持为0,无论A如何变化。

所以这个电路能够永久记录0,并且无法将0变回1。

所以我们就得到了能够存储1和0的电路,为了得到有用的Memory,需要将两个电路结合起来,可以得到AND-OR锁存器(AND-OR Latch),上方的是SET输入,下方的是RESET输入,当SET=1、RESET=0,就能将输出设置为1,当RESET=1,就能将输出设置为0,当SET=0、RESET=0,则输出最后放入的内容。由此能够存储1位的信息(该信息存储在OR门上方的输入电极中)!

78f209a912ca4586254ca9e88e70029a.png
AND-OR 锁存器
技巧:当OR门其中一个输入为0,或AND门其中一个输入为1,则相当于另一个输入直接穿过这个门。当OR门其中一个输入为1,则直接输出1;当AND门其中一个门为0,则直接输出0。

这叫"锁存", 因为它"锁定"了一个值,放入数据的动作叫 "写入" ,拿出数据的动作叫 "读取"。

对其进行SET和RESET进行合并,并添加其他门控单元,可以得到一个门锁(GATE LATCH)

2a8a30ab85b62f4c4c11de5a65802a2e.png
门锁

其中DATE INPUT表示数据输入,WRITE ENABLE表示允许写入线,用来控制是否保存当前输入的数据。对这个电路进行分析。

  1. 当WRITE ENABLE=1时,电路可以化简为以下形式。当数据输入为0时,AND门可以忽略OR门的输出,直接输出0,并且OR门上方电极也将保存0。当数据输入为1时,相当于忽略了AND门,OR门的输出直接和OUTPUT相连,OR门输出1,并且OR门上方电极也将保存1。所以,当WRITE ENABLE=1时,数据输入会直接传到输出,而且数据输入会保存在OR门的上方电极,进行数据存储。

61e0632b4762bd31d634ad098d4cdaad.png

2. 当WRITE ENABLE=0时,电路可化简为以下形式。此时能够忽略AND门,直接将OR门的输出当做OUTPUT,而OR门的输出其实就是上方电极的数据,由于上方电极就是当前OUTPUT的数据,所以会保持OUTPUT不变。所以,当WRITE ENABLE=0时,会忽略数据输入,保持OUTPUT不变。

bf90a78b02b60386f348fd60f87e0da4.png

可以将门锁进行抽象,得到一个能够存储一个bit的部件。当允许写入线为0时,输出保持不变,当允许写入线为1时,输出就是数据输入,并且能够将数据输入进行存储。

f2f95ce5329820794771920db310b90b.png
门锁的抽象

如果我们并排8个锁存器,就能存储8位信息。一组这样的锁存器称为寄存器(Register),寄存器能够存一个数字,这个数字的位数称为寄存器的位宽(Width)

写入寄存器之前,要先启动里面所有的锁存器,可以将所有锁存器的允许写入线都连接在一起,把它设为1,然后用8条数据线发送数据,然后将允许写入线设回0,就能将8位数据存储在寄存器中。

0c4cba40df854f469aa438dd8a22a86d.png

但是通过这种形式排列锁存器需要太多的线路,64位寄存器需要129条线,256位寄存器需要513条线,可以通过矩阵形式排列来进行化简。我们可以构建16x16门锁矩阵(Latch Matrix),其中一共有256个,通过打开相应的行线和列线来启用某个锁存器。

0d86e8a37026ac603f61cb63c68634e3.png
门锁矩阵

局部更大的细节如下图所示。首先,只有当行列都为1时,设置WRITE ENABLE和READ ENABLE才有用,否则这两条线的经过AND门的输出始终为0。当WRITE ENABLE=1时,输入数据就会保存在门锁中。当READ ENABLE=1时,就会连通晶体管,将存储在门锁中的数据输出。这里添加了一个READ ENABLE线来控制读取,同时将输入输入和数据输出线合并,从3条线减少为2条。并且由于每次能够控制唯一一个锁存器,所以所有的数据线可以合并成一条。也就是说,对于256位存储,只需要一条数据线,一条允许写入线,一条允许读取线和16行16列的线用来选择锁存器,一共35条线。

62968984c99553021b5db02a6bbcdbd1.png
门锁矩阵局部细节

由于16x16门锁矩阵最多16行16列,所以可以分别用4位表示行和列的地址,就能用一共8位来定位一个锁存器,比如“12行8列”可以表示为11001000。

为了将地址转换成“行和列”,需要多路复用器(Multiplexer),多路复用器可以有不同的大小。当输入一个4位数字,它就会将那根线连接到对应的输出线,比如对列地址输入0000,它就会选择第一条线,输入0001,就会选择第二条线……有一个多路复用器处理行,一个多路复用器处理列,由此通过输入行和列的坐标就能定位到对应的锁存器了。

25379a9aff3c61598096eaf794e6492c.png
多路复用器

可以对256位寄存器进行封装,它的输入是一个8位地址,4位表示行,4位表示列,同时需要允许写入线和允许读取线,然后需要一条数据线用于读写数据。(注意:每次只能选择一个锁存器,所以数据线只能读写1bit数据

8da35fd277361fefe4b05cd3df44ea82.png
256位内存

对其再进步一扩展,可以将8个256位内存拼在一起,这样就能一次读写8bit数据,也就是一个字节数据。由于每个256位内存都使用相同的8位数据线,因此8位数据会存在每个256位内存的相同地址中,并且第一个256位内存存放第一位,第二个256位内存存放第二位,以此类推。这个模块可以在256个地址中存储256个字节。(由于这种设计,所以计算机中以一个字节为寻址的最小单位)

50546805877b5cf3237180db7def3bb5.png

可以对其进行抽象,看成一个整体的可寻址内存,其中有256个地址,每个地址能读写一个字节的值。

d0c5fa0dcdf141c810b3041321f3abaf.png
RAM

现代计算机可以在此基础上将内存扩展到MB和GB级别。我们这里使用8个16x16门锁矩阵可以得到256字节的内存,然后可以用4位表示行4位表示列来进行寻址,由此可以将门锁矩阵扩展到更大范围,但是需要更多位来表示地址。所以对于nxn门锁矩阵,存储空间为

字节,需要的寻址空间为
。比如要给千兆字节的内存寻址,就需要32位的地址。

内存的一个重要特性是:能够随时访问任何位置。所以称为随机存取寄存器(Random Access Memory, RAM)。RAM只记录当前在做什么。

RAM中存储的数据是保存在OR门其中一个电极上,所以断电后就无法保存。

这一节用锁存器做了一块静态随机存取存储器(Static Random-Access Memory,SRAM),还有很多其他类型的RAM,比如DRAM、闪存和NVRAM,它们的功能和SRAM相似,但是使用不同的电路存放单个位。但是根本上,这些技术都是矩阵层层嵌套来存储大量信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

one more step_KDA新歌《MORE》的一些冷知识:伊芙琳换回原声,摩托车是定制的

原标题:KDA新歌《MORE》的一些冷知识:伊芙琳换回原声,摩托车是定制的KDA女团在2020年宣布回归后就引发了很多的关注,回归后也是推出了首支单曲《THE BADDEST》,这首歌在之后也引发了不少网友的模仿以及翻唱&#xff0c…

java jdbc连接 代码块_java 中JDBC连接数据库代码和步骤详解及实例代码

•创建一个以JDBC连接数据库的程序,包含7个步骤:1、加载JDBC驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。 例…

Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?

目前排名比较靠前的答案都回答得很浅显易懂了。我这里给你一个最可靠的理论依据(虽然比较晦涩)。Java语言规范(JavaSE 1.8版本)章节3.10.5中对此作了规范,因此所有的Java语言编译、运行时环境实现都必须依据此规范来实现。里面有这么一句话Moreover, a string liter…

计算H时M分S秒以后是_关于工程量计算-深圳工程量计算培训

一、梯形体积计算公式?第一种:梯形的体积(上底下底)高2总长度第二种:把四棱台延长成椎上截面面积为s,下截面r,台高为h,那么体积1/3(r-s)*h.若是正梯形物体则为V〔S1+S2+开根号(S1*S2…

java数据库edit_Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一、JDBC简介JDBC是连接java应用程序和数据库之间的桥梁。什么是JDBC?Java语言访问数据库的一种规范,是一套API。JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类&#xff…

java ssm 系统的搭建_SSM框架下的javaweb学生管理系统--搭建系统结构

业务需求:一个登录页面,一个学生展示页面,添加、修改、删除三个功能目的是给大家了解一个初级系统的构造,不写那么复杂的需求了。从第一步开始:创建项目打开eclipse,点击右上角的File-->New-->Dynami…

opencv 高通滤波和低通滤波_滤波电路合集(低通滤波,CLCП滤波,DLC滤波,CRC П滤波)...

常见低通滤波电路L 一阶滤波C 一阶滤波CL 二阶滤波RC 二阶滤波LC 二阶滤波RCR T型三阶滤波LCL T型三阶滤波CRC π三阶滤波CLC π三阶滤波开关电源 单级低通滤波回路DLC 型二阶滤波器开关电源 双级串联式低通滤波回路CLC П型滤波器1、工作原理介绍a.输入正脉冲时,先给C1充电,充…

matlab语音信号处理实验_现代通信综合实验系统平台

现代通信综合实验系统平台近30年来,随着我国电信行业的迅猛发展,该行业的发展水平已成为衡量一个国家实力的一大关键因子。行业的发展同时,为当代相关专业大学生创造了极大的就业市场,市场对通信类人才有着极大的需求。培养一代全面型通信类人…

java 异常抛出空指针异常_java.lang.NullPointerException 抛出空指针异常

练习cookie做一个浏览商品记录显示,第一次会显示浏览过的商品,然后在浏览第二次就出现空指针异常2016-6-16 16:51:48 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [CookieDemo2] in context with path [/…

iphone储存空间系统怎么清理_教你快速清理 iPhone 系统缓存垃圾,拒绝卡顿!

「 改变能改变的一切,接受不能改变的一切!」▼“iPhone存储空间”里的系统为何占用了几十G的甚至上百G的内存,如何清理?当我们使用 iPhone 一段时间之后,系统或应用中会出现一些多余的缓存数据,如果长时间不…

倒N字形排列java_Java排序8大算法实现

概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复…

cross_val_score 如何对孤立森林_【收藏】森林防火手抄报素材汇总!

森林防火手抄报模板参考【文字素材参考】01森林防火根据森林火灾燃烧中央地点,蔓延速度,受害部位和程度,大致可把森林火灾分为三大类:一.地表火 二.树冠火 三.地下火。以受害森林面积大小为标准,森林火灾分为以下四类:1.森林火警:…

java io 转换流_Java编程IO流中的转换流

对于IO流中的转换流,顾名思义,就是将字符流转换成字节流或者是将字节流转换成字符流的对象。那么有时候我们得到的是一个字符流,但是我们又需要进行一些计算之类的,或者我们得到的是一个字节流,但是我们又需要进行一些…

pb9 调用系统语音_成都电销系统一个月多少钱_选择灵狐传媒_收费透明

灵狐传媒表示:成都电销系统一个月多少钱_选择灵狐传媒_收费透明,在成都想要找一家专业的电销系统,今天小编带您看看该怎么选择吧,和研发实践,融合互联网、云计算及人工智能、通信、大数据等技术,研发推出了以人工智能为…

java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

前言我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的。今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术。概念我们先来了解下线程和进程的概念…

python自动化_python自动化测试-Behave框架的用法介绍 - python测试学习

测码学院 Behave框架的用法介绍众所周知:行为驱动开发((behavior-drivendevelopment,BDD)是一种基于敏捷软件开发的方法。它可以鼓励开发人员,业务参与者和QA人员之间的协作。作为另一个Python自动化测试框架,“Behave”允许团队…

虚拟按键自己触发的java代码_在SystemUI添加虚拟按键

我们想要在volume、back、menu同一排添加一个虚拟按键,并且触发一个应用;1、首先我们要找到这些虚拟按键的位置:\frameworks\base\packages\SystemUI\res\layout-sw600dp\navigation_bar.xml2、横屏时,最左边的RelativeLayout 中添…

diskgeniusv4.4.0_入门TensorFlow2.0

今天老师带领我们入门TensorFlow2.0。至于tensorflow2.0是啥嘛,详细的可以度娘一下。我简述一下,就是一个end-to-end machine-Learning open source plantform(端对端的开源机器学习的平台)。学习tensorflow需要引入tensor这个概念,tensor的汉语意思就是…

java.close用法_void close()

void close()描述 (Description)java.io.FilterInputStream.close()方法关闭此输入流并释放与该流关联的所有系统资源。声明 (Declaration)以下是public void close()方法的声明 -public void close()参数 (Parameters)NA返回值 (Return Value)该方法不返回任何值。异常 (Excep…

php 其他页面获取session_PHP五十个提升执行效率的小技巧,和常见问题

在项目开发过程中,经常遇到了一些PHP处理程序性能底下的情况,程序运行在centosnginx环境,虽然这个有很多的原因如:服务器本身配置,运行环境nginx服务,php-fpm配置等等,更多有一点仍然是PHPer没有…