穿越计算机的迷雾
bit入门
如何用电来表达一个数字:
- 1v为1 、2v为2… 但难以计算到底是几v
- 开关,0代表无 1代表有。二进制
如何对二进制实现加法
- 对于每一位
- 两个输入一个进位
- 一个输出一个进位
- 多位串联起来
- 低位的进位传递给高位
电与磁
电能生磁,通过电流通断规律控制衔铁臂上下运动画出莫尔斯电报
距离太远?继电器实现不同回路的继电
磁生电,线圈切割磁感线产生电流:话筒 声波->电流 扬声器 电流->声波 二者可以是同一个东西
为什么是交流电
- 产生更容易,圆周运动
- 通过变压器轻松实现升降压,而高压传输损耗更小
全加器
- 用电磁继电器实现逻辑门 非(1)、与(2)、或(2)、与非(2)、异或门(
!AB+A!B
两非两与一或=8、或 与非 与 = 6)
同门电路
与非
异或门
对全加器列出真值表,化简出逻辑表达式,并使用继电器构造出来,22个->18个 1940年计数器
S = A ⊕ B ⊕ Cin
Cout = (A B) + (Cin (A ⊕ B))
至此我们得到了运算器
触发器
为了记录下1bit!!!(后面采用电容存储1bit(DARM 内存;晶体管做触发器SRAM cache))
二极管:加热的灯丝可以放出电子
三极管:中间增加一个栅极,可以截断或者放大
振荡器:把一个非门的输出接到输入
触发器:
输出永远相反,而当输入只有一个1时,可以改变输出状态(输入期望也相反) 问题:我只想在想记录时记录
输入S置为一后,Q一直会保持1,R(reset)可以将Q置零。都为1不稳定
D触发器:
增加一个控制端,实现1bit的保存。CP为1时,Q=D保存输入,CP为0时,忽略
上升沿D触发器:
CP为上升信号时,触发保存。对于继电器,一次记录可能需要延时1s
走马灯:移位寄存器
(移位寄存器)振荡器 + 循环连接的上升沿触发器,其中有一个1;每震荡一次1就传递给下一个。
寄存器:多个上升D
多个CP就可以构成寄存器存储数据
T触发器:
反转
串联: 二进制计数器,计算上升沿的数量
至此我们得到了寄存器,能够缓存一部分数据。
继电器 ->电子管 -> 晶体管 -> 集成电路
一连串加法
之前的加法器只能保证两个输入得到一个输出,但不能连续计算。结合寄存器优化!!
1.基本思想:使用寄存器保存值,一个数为直接输入,另一个为RA寄存器的值。加法器会实时计算两个输入的值
2.为了实现连续计算,加法器的输出要直接接到输入
问题:共用一条线(总线)会冲突,需要添加控制实现轮流使用总线
3.添加上总线控制GA,GB,总线控制是按住,而寄存器装载是上升沿按下松开
10+3+2
第一步为装载,2~3为相加
- 扳出10(在实际中,取数也是一个自动操作 后面实现),按住GA,延时后按下RA,装载输入1的值为10
- 扳出3, 按住GA,这时候加法器已经得到了实时输出,按下TR,装载输出到寄存器
- 再按住GB,代表输出需要占用总线,数据传输到RA时按下RA装载结果,实现一次计算
- 重复2过程,扳出数字2…
4.添加一个控制器控制,列出真值表,即可得到控制器电路(K的状态相当于指令,控制器电路需要解析指令)。延时问题后面解决
- 上面两个为模式,选择一个
- 下面两个为当前模式下的操作,k0~x只有一个为1
5.控制器优化,只使用一个控制
既然操作t只有一个为1,那么用循环移位寄存器RR实现
延时问题,我现在先让G(控制线先输出),而数据寄存器R需要再按下开关时才触发
松开开关代表切换操作,松开状态下数据参数门打开
松开后再按下代表上一个数据已经传过来了,要用快点用,按下瞬间装载数据
也就是松开实现模式切换,按下实现数据保存
全自动加法
现在还需要手动将数据输入,能不能一次性全部输入:需要先存储 存储器!!
单bit存储:输入和输出共用一条线,通过信号控制输入还是输出,G就相当于总线控制(输出器)
存储器
把多个bit连一起就可以组成一个大数(一行),多个数就可以组成存储器,需要地址译码器选择哪个数据(门牌号)
封装一下:输入:地址引线 RW , 输出n个bit
磁芯
W:不同的电流方向导致不同的磁场方向
R:写入一个0,如果原来是0,读出线上电压变化很小。如果原来是1,磁场变化导致读出线上感应电压大
1949年10月21磁芯存储器专利
自动取数
需要一个计数器ACC,AR寄存计数器的值(地址寄存器),DR寄存数据(数据寄存器)
- 按下K
AR锁存当前地址 - 按住K
RD读取数据,同时按下KDR寄存数据 - 按下K
AC实现地址增加
同样使用一个循环移位1器和译码器实现上面的逻辑结构,至此按下三下即可取出一个数据到DR寄存器
连接加法器
加法器包含2个操作,存储器包含三个,一共五个
将相加还是装载添加到指令中,指令也是从存储器中取,指令通过EC解析后,翻译出当前的任务,反过来影响译码器,也就是告诉计算机进行的下一步操作。IR + EC + 译码器相当于是控制器
现代的指令中,数据可以直接包含在指令中。原来的AC更像是现代中的PC指针,指向指令的位置
最后,把手动按下K换成一个振荡器,即可实现全自动。需要添加一个中止指令,代表程序结束了
如何处理进位?额外产生一个进位标志来影响控制器
现代计算机
SRAM:使用晶体管构建触发器,形成存储器,SRAM,但太贵了6个晶体管一个bit,只用来做cache
DRAM:使用电容和晶体三极管,2ms刷新一次DRAM,做内存
ROM:一开始只读,然后可擦除。U盘、固态硬盘
外存:磁芯 —> 磁盘(机械硬盘 磁头+ 磁道 + 扇区) —> 固态硬盘
流水线:充分利用CPU和内存,错开执行 取指 译码 运算 写回操作
IO设备
CPU从哪里读取数据:IO接口
什么时候去读:CPU不知道IO接口到底有没有数据
- 不停的读:CPU不能干别的事情了
- 定时询问
- 中断:中断向量号表示谁请求了中断,再根据中断向量表转到相应中断处理逻辑