Crash Course(三)

5.算术逻辑单元(ALU)
我们真正的目标不是表达和储存,而是计算,有意义地处理数字。这由计算机的算术逻辑单元(ALU)( archmetic& Logic)处理。
接下来用布尔逻辑造个ALU,然后尝试造个电脑(?)
ALU有两个单元,算术单元和逻辑单元。
算术单元负责计算机里所有数字操作(比如给某个数字+1被称为增量操作)
两个数字求和的操作:
1)一位加法器
不进位时:0+0=0,0+1=1,1+0=1(用XOR就可以解决)
进位时:1+1=10,所以除了XOR我们还需要一根线表示carry bit(进位)
因为该位只有两个输入都为1时才为1,明显是AND。
在这里插入图片描述

我们将其称为(half adder)半加器,简化为下图所示。
在这里插入图片描述

想计算超过1+1我们需要full adder(全加器)。
下图为三个一位数求和。
在这里插入图片描述
用半加器实现:
在这里插入图片描述
以此类推,我们可以做到8位加法。 在这里插入图片描述

(字母后面的数字表示位数。比如A0就是A的第一位)进位c连接到下一位,s连接到sum。
最后一位的carry是当数字过大时相加,会进到第九位,叫做溢出(overflow)
溢出会导致不可预想的结果。比如吃豆人游戏用8位存当前关卡数,所以最大关卡数为255.当你玩到256关时就会出现
在这里插入图片描述

我们可以使用更多全加器来避免溢出。但是每次进位都要花一点时间,而如今量级是每秒几十亿次运算,所以累积起来计算会变慢。所以现在计算机用的加法电路不同,“carry-look-ahead”adder(超前进位加法器)可以更快地完成一样的操作。
(ALU没有乘除,而是多次加减,因为乘法电路更加复杂)
逻辑单元在这里插入图片描述
零测试电路
该逻辑单元用于判断ALU输出结果是否为0.只有全为0,out才为1.在这里插入图片描述

ALU
从上面两个口输入8位input,再给予计算代码(operation code,4位的,加或减。比如可能1100代表加,1000代表减)下面输出output结果。
output还可能会输出“标志”(flags,1位)包括overflow, zero, negative(负)
比如前面做的零测试电路,可以判断结果是否为0或两数是否相等。

6.寄存器&内存
游戏中途关机,损失进度原因:电脑用的是随机存取存储器(RAM, Random Access Memory),只能在有电的情况下储存东西
另一种存储:持久存储(persistent memory)关机数据也不会消失
今天尝试制作存储器
首先尝试不是单向的电路(OR)
在这里插入图片描述

输入均为0:0
A1,B0:1
然后把A变回0,但电路还是1
该电路可以记录1。但是记录1之后无法回到0的状态。
接下来尝试(AND)

在这里插入图片描述

A1,B1:1
A变回0:输出0
该电路可以记录0.
接下来结合两个电路

在这里插入图片描述
在这里插入图片描述

the AND-OR Latch(AND-OR锁存器)
“设置”输入,把输出变成1
“复位”输入,把输出变成0
然后把两个输入都变成0,电路会输出最后放入的内容。这个电路存住了一位的信息。
这叫锁存。放入数据叫写入(writing),拿出数据叫读取(reading).
我们简化为只有一条输入线
在这里插入图片描述

将输入线设为0或1来储存值。
另一条线:允许写入线,启用时允许写入,没启用时锁定。
在这里插入图片描述

门锁(GATED LATCH)
在这里插入图片描述

简化
只有允许写入线输入1时才能存储数据,关闭后会保存
放很多锁存器:寄存器(register)可以存一个数字。这个数字有多少位叫位宽(width)
现在计算机很多都有64位寄存器。

写入寄存器前先启用里面所有锁存器,我们可以用一根允许写入线串联
在这里插入图片描述

用8根数据线发数据后,将允许写入线设为0
但是随着锁存器数量的增加,我们需要的数据输入线也会越来越多。
解决办法:我们把允许写入线以矩阵形式表示,而只用一根数据线连接所有锁存器。
在这里插入图片描述

放大看该锁存器。
在这里插入图片描述

我们只想启用这一个锁存器。所以交叉的允许写入线用AND连接
再用一根允许写入线连接所有锁存器(见上图中部,write enable wire)
想启用该锁存器,行线、列线、允许写入线都必须是1
这代表我们可以只用1根“数据线”连所有锁存器来传数据(允许写入线上面,data in/out)
因为只有一个锁存器会启用、存数据,其他锁存器没有启用,也就忽视该数据线上的值了
类似的,我们可以用1根“允许读取线”(见上图下部,read enable wire)来读数据
线少省了不少事。不过我们因此要使用(坐标)来定位memory address
比如12行 8列:11001000
为了把地址转成行和列,我们需要多路复用器(Multiplexers)
16行需要1道16多路复用器,行一个列一个,输入地址后接到相应的允许写入线

256位内存当做整体
在这里插入图片描述

然后把他们并排放置,就像寄存器一样
在这里插入图片描述

一行8个,可以存一个8位数字,也叫一个字节(byte)
为了存一个8位数字,我们给每个256位内存一个相同的address,这样方法我们可以存256个字节。
把这个也看作整体
在这里插入图片描述

256个地址,每个地址可以读或写一个8位值。
以此类推。
随着内存地址增多,内存地址也越来越长。8位最多表示256个。千兆或十亿字节要用32位的地址。
内存的一个重要特性是:可以随时访问任何位置,因此被叫做随机存取储存器(RAM, Random Access Memory)

在这里插入图片描述

一条真的内存,上面焊了8个内存模块
放大一个看看
在这里插入图片描述

再放大
在这里插入图片描述

再放大,一个矩阵
在这里插入图片描述

8192位
8192432,一个芯片大约存100万位
再乘8,800万位接近1MB
今天学习了用锁存器做SRAM(静态随机存取储存器Static random-access memory)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰海宽松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值