从开关到 CPU · LogicLab
从一只开关搭到一台 CPU:拨动串联、并联的开关和继电器,发现“与”“或”“非”;看信号沿发光的导线流过逻辑门,透视门里一只只通断的晶体管;亲手接线,只用与非门搭出所有的门,再搭出半加器、全加器,验证通过后封装成芯片;把四只全加器排成竖式,看进位一位一位传到最高位;最后按下时钟,看自己搭的加法器在一台 4 位小 CPU 里一条条执行程序,再拉远数一数一块芯片里有多少晶体管。
章节内容
开关会“算”吗
一只开关只有两种状态:断开和合上。把断开记作 0、合上记作 1,灯灭记作 0、灯亮记作 1,一个电路就成了一道“判断题”。
直接在画面里点开关。两只开关串联:都合上灯才亮;并联:合上任意一只灯就亮。把四种组合都试一遍,右边的真值表会一行一行填出来。
再换成继电器:线圈通电后变成电磁铁,把另一个回路的触点吸开。它是一只用电来拨动的开关。1937 年,21 岁的香农在硕士论文里指出:这样的开关电路,正好能表达逻辑里的“与”“或”“非”。电路本身的规律见 VoltLab。
逻辑门
把上一课的开关电路装进一个盒子,只留下输入和输出,就是逻辑门。导线上有电压记作 1(亮),没有记作 0(暗)。
拨动左边的输入开关,看信号沿导线走到门里,门“想”一下,再把结果送到指示灯。在右侧换一种门,把每种门的真值表都试出来:与门 Y = A · B,或门 Y = A + B,非门 Y = A;输出端带小圆圈的与非门、或非门是先算再取反;异或门在两个输入不同时输出 1。
点“透视”,看门的内部:没有任何会动的零件,只有几只晶体管——用电压控制的微型开关。左上角可以在形状符号和国标符号(&、≥1、1、=1)之间切换。
万能的与非门
这一课你来接线。板上只有与非门,任务是用它搭出别的门。
接线:按住一个引脚拖到另一个引脚(或者先点一个、再点另一个)。导线要从输出连到输入,一个输出可以分给好几个输入,一个输入只能接一根线。点一根线可以把它拆掉。拨动左边的开关,随时看信号怎样流过你接的电路。
接好后按验证:每一种输入都会自动试一遍,和目标真值表逐行比较。全对了就把它封装成芯片。芯片工厂正是这样做的:与非门只要四只晶体管,最省、最快,于是成了搭建一切的“积木”。卡住了可以按“提示一根线”。
只用 0 和 1 数数
一根导线只能表示 0 或 1,叫作一位(bit)。要表示更大的数,就把几根导线排成一排,像十进制的个位、十位、百位那样,每一位有自己的位权——只不过这里是 1、2、4、8,逢二进一。
拨动四只开关,每只下面的灯表示这一位是 0 还是 1,右边的数码管显示它对应的十进制数。1011 就是 8 + 0 + 2 + 1 = 11。
再按“加 1”一下一下地数:最低位是 1 时再加 1,它变回 0 并向左进位。从 0111 加 1,进位会一连传过三位。四位都是 1 之后再加 1,就溢出了。
半加器
两个一位二进制数相加只有四种情况:0 + 0 = 0,0 + 1 = 1,1 + 0 = 1,1 + 1 = 10。结果要用两位表示:本位的和 S,与向高位的进位 C。
对照右边的目标真值表:S 这一列像哪一种门?C 这一列又像哪一种?板上摆着四种门,挑出合适的两个,把 A、B 接进去,再把输出接到 S 和 C 两盏灯上。多余的门不用管。
验证通过后把它封装成一只半加器芯片。1937 年,贝尔实验室的斯蒂比兹把几只继电器、两个手电筒灯泡带回家,在厨房的餐桌上搭出的,就是这样一个二进制加法电路。
全加器
列竖式做加法时,每一位其实要加三个数:A 的这一位、B 的这一位,还有低位送来的进位 Cin。能处理这三个输入的电路叫全加器。
板上有你刚封装好的两只半加器芯片(HA)。先用第一只把 A 和 B 加起来,再用第二只把这个结果和 Cin 加起来,第二只的“和”就是最终的 S。
两只半加器各有一个进位输出,只要其中一个是 1,就该向高位进位。挑一个门把它们合并成 Cout。验证八种输入,全对后封装成全加器芯片(FA)。
四位加法器
四只全加器排成一行,和竖式一模一样:上面一排开关是 A,第二排是 B,下面一排灯是和。每只全加器的进位输出,接到左边高一位的进位输入——橙色的线就是进位。
拨动开关出一道题,看信号一位一位算过去。试试 1111 + 0001:最低位产生的进位要依次穿过四只全加器,高位的结果要等低位算完才能定下来,所以它叫行波进位加法器。右侧的波形图记下了每个和位是什么时候稳定的。
右边还有一只“减”开关 M:打开后,每个 B 先经过异或门被取反,最低位再多加一个 1。A − B = A + B + 1,减法也交给了同一只加法器。
从加法器到 CPU
你搭的四位加法器成了这台小 CPU 的运算器。它周围多了几样东西:寄存器 A、B 用来记住数;程序存储器里存着一条条指令;程序计数器 PC 记着现在执行到第几条;控制器看懂指令,决定这一拍把哪些数送进加法器。
每按一下时钟,它执行一条指令,分四拍:取指令 → 译码 → 执行 → PC 加 1。先一步一步执行“3 + 4”,再运行“倒数”和“3 × 4”——它没有乘法器,乘法是用加法循环做出来的。右侧的程序可以改:点操作数旁的 − 和 +,换个数再运行。
最后按“拉远”,数一数从一只开关到一块芯片要多少晶体管。1971 年的 Intel 4004 也是 4 位的,有 2300 只。机器怎样用更多的加法和乘法“学习”,见 NeuroLab。
随堂检测
回顾八个课题,完成下面的选择题。
更多实验
- VoltLab 电学实验台
- 地球运动课堂
- 细胞 · 三维结构
- 元素周期表 · PeriodicLab
- 水循环三维沙盘 · WaterCycle
- 神经网络识数字 · NeuroLab
- 神舟发射与返回 · RocketLab
- 我们曾在此 · ArtHistory
- 孟德尔豌豆杂交实验 · PeaLab
- 体液免疫 · ImmuneLab
- 细胞的能量“货币” · ATPLab
- 立体几何 · GeoSpace
- 等高线 3D 课堂
- 大气环流粒子课堂
- 潮汐的形成 · TideLab
- 海陆的变迁
- 流水地貌 · RiverLab
- 地质构造与喀斯特沙盘 · KarstLab
- 飞进风眼 · TyphoonLab
- 穿透地球 · QuakeLab
- 显微镜实验台 · MicroLab
- DNA 的结构 · DNALab
- 植物的一生 · PlantLab
- 胃的结构与功能 · StomachLab
- 细胞的分化 · StemLab
- 基因的表达 · GeneLab
- 生态系统 · EcoLab
- 四十亿年 · DeepTime
- 实验室制取气体 · GasLab
- 化学分析实验台 · AnalytLab
- 反应机理 · 分子动画
- 催化剂实验室 · CatalystLab
- 原电池与电解池 · ElectroLab
- 分子构型 · VSEPR
- 原子轨道 · 电子云
- 化学反应 · 微观世界
- 圆锥曲线 · ConicLab
- 函数图像 · FuncLab
- 尺规作图 · ConstructLab
- 勾股定理 · PythagoLab
- 趣味数学 · WonderLab
- 运动与力 · MotionLab
- 简单机械 · MachineLab
- 液体压强与浮力 · FloatLab
- 热力学 · ThermoLab
- 传热与物态变化 · HeatLab
- 声现象 · SoundLab
- 光学实验台 · OpticsLab
- 光电效应与光子 · PhotonLab
- 甲骨文 · OracleLab
- 原子的结构与光谱 · AtomLab
- 振动与波 · WaveLab
- 电场与磁场 · FieldLab
- 著名战役沙盘 · WarTable
- 疆域变迁 · HistoryAtlas