当前位置 博文首页 > jtwqwq的博客:Crash Course(3)

    jtwqwq的博客:Crash Course(3)

    作者:[db:作者] 时间:2021-08-19 09:55

    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)

    cs
    下一篇:没有了