穿越计算机的迷雾
GPT摘要
文章摘要: 文章从基础的电信号表达数字开始,逐步揭示了现代计算机的基本原理。主要包含以下内容: 1. 数字表达与二进制:电压直接表示数字(如1V代表1)不精确,转而采用二进制(开关状态表示0和1),并介绍二进制加法器的实现逻辑(逐位计算,进位传递)。 2. 电与磁的转换:电能生磁(用于莫尔斯电报和继电器远距传输),磁也能生电(实现话筒和扬声器的声电转换)。交流电因其易产生、易变压和低损耗成为电力传输主流。 3. 逻辑门与电路设计:介绍与、或、非、异或等基本逻辑门,通过组合门电路实现加法器、寄存器等核心组件,逐步构建运算器。 4. 存储技术演进:从继电器到晶体管,再到DRAM(电容存储)和SRAM(触发器存储),以及现代硬盘和固态存储的原理。 5. 计算机核心架构: - 寄存器与总线:存储中间数据,通过总线控制实现数据流通。 - 控制器与指令集:解析指令,协调运算器和存储器的操作,自动化执行流程。 - 存储器层次:包括高速缓存(SRAM)、内存(DRAM)和外存(磁盘、固态硬盘)。 6. 扩展技术:如流水线提升CPU效率,中断机制处理输入输出请求,以及程序计数器和地址寄存器的协同工作。 最终,通过振荡器替代手动操作实现全自动计算,完成从简单电路到通用计算机的演进。
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不能干别的事情了
- 定时询问
- 中断:中断向量号表示谁请求了中断,再根据中断向量表转到相应中断处理逻辑