一句话核心:Q 只在时钟 ↑ 那一瞬间跟着 D 变,其余时间一律保持。 下面几种方式都能看到这件事;想来点有难度的,先挑战「用一位触发器输出 I love U」, 再进阶到「8 个 D 触发器怎么接才能一次并行输出一整个字节」, 然后去 只用与非门 看一种门怎么变出 NOT / AND / OR / XOR, 再用 MOS 管级 把一个门拆成几个晶体管,看下拉网络的串并联 怎么直接变成一条 SOP(一条支路一项、并联即相加), 再到 8×8 行列寻址存储器 看 3 根地址线怎么管 64 个单元, 再到 直接映射 cache 看为什么光有存储器还不够快, 最后到 寄存器堆 看 CPU 为什么需要两个读口和一个写口, 再到 有限状态机 挑战「有记忆的逻辑」, 最后去 读扰动 看一条字线被反复敲的时候,隔壁的电容是怎么漏光的。
「8×8 行列寻址」那一关打开过电荷衰减,这一关把「谁在打扰它」也加进来:一条字线被反复 ACT / PRE,上下相邻行通过寄生电容 Cc 被一点点抽干。9×16 共 144 个单元,每颗都有自己的漏电率——工艺波动是乘性的,落成对数正态,右尾那几颗永远是先翻的。可以调 σ、调 hammer 速率,也可以开着 TRR 看格子「回血」;鼠标停在任意单元上能读出它的漏电倍率与剩余电荷。
第 10 关 · 有记忆的逻辑这一关输入不再是「要输出的内容」,而是「考题」:状态机每读一位走一步,走满目标模式才点一次灯。反直觉三连:失配不回零,而是回退到最长真前后缀(KMP 在硬件里的样子);重叠命中——1011011 里藏着两个 1011,共享中间那个 1;m 位模式只要 m+1 个状态,与位流多长无关。目标模式可以自定义(4–8 位二进制),状态转移图、转移表、波形与三个反直觉结论全部实时可见,附小红书分享卡片。
第 9 关 · 走向 CPU一条 add 指令要同时拿到两个源操作数,所以寄存器堆天生有两个读口;结果要存回去,所以有一个写口。32 个寄存器只要 5 位编号,读口是组合逻辑——改编号当拍就变、不消耗时钟;写口必须等上升沿。同一拍写入的值同一拍读不到,这正是流水线 RAW 冒险的根源。可以自己写一段程序:逐行预览结果、写错当场标红,每条指令一个时钟沿,随时单步后退把寄存器原样滚回去。$0 不是存了 0 的寄存器,而是读口接地、写口不接——白得一个常数 0,算完就丢也不报错。
第 8 关 · 存储层级7 位地址被切成 tag 2 位 / index 2 位 / offset 3 位:index 决定查 4 行里的哪一行,tag 决定这一行装的是不是你要的块,offset 决定取块内哪一位。tag 对上 1 拍拿到数据,对不上就整块从 DRAM 取回来、8 拍。5 组访问流随手跑:块 0 和块 4 抢同一行,命中率可以低到 0%;8 个块抢 4 行,扫第二遍照样全缺失。切到旁路能直接对比同一串访问的周期差。
第 7 关 · 并行输出并联寄存器:8 路独立 D,一个 ↑ 沿同时锁存 8 位(1 沿 / 字节);级联移位寄存器:右邻 Q 接到左邻 D,8 个 ↑ 沿才凑满一帧(SIPO,8 沿 / 字节)。两种拓扑随时切换对比,共享 CLK 的「先快照再统一写入」、帧同步、并行总线 HEX / DEC / ASCII 读出都看得见。目标可以随意换:左上角改成任何 ASCII 句子(最多 16 字符),目标行与输出行同字号逐格对照,对上变绿、错了变红。
第 6 关 · 行列寻址地址拆成行 3 位 + 列 3 位,共用同一组 ADDR[2:0] 分时传送:RAS ↑ 拉高一条字线并把整行 8 位读进行缓冲,CAS ↑ 从行缓冲选 1 位送到 Dout。点任意格子直接读它,跨行会自动 PRECHARGE;同一行连续访问是 Row Hit,换一行是 Row Miss。还可打开 DRAM 电荷衰减,亲眼看到不刷新就丢数据。目标仍是读回 I love U。
第 5 关 · 晶体管级门电路打字机把字符串拆成了门,这一关把门继续拆成晶体管:反相器 2 管、与非门 4 管、与门 6 管 —— 先撞见第一件反直觉的事,管子更少的那个门反而更常用。然后同一句逻辑用三种方式搭:与门+或门(教科书直译)2Σn+4m+2 管、全用与非门(德摩根)2Σn+2m 管、一个复合门加一级输出反相 2Σn+2 管,I love U 的 8 位合计是 204 / 154 / 132。第三件反直觉:那个最便宜的搭法根本不是「几个门」,下拉网络的串并联结构天生就是「或的与」—— 一条支路一个乘积项,并联即相加,整条 SOP 塌进一个 AOI 门里。自定义任意字符串(ASCII ≤16 字符),点任一位就能看到它的上拉对偶网络、下拉支路与输出反相器,当前导通的管子实时变绿,每一级的项编号与支路取值都标在图上。
第 4 关 · 逻辑综合把记忆拿掉,只留组合逻辑门:4 位索引当输入,8 位 ASCII 当输出,索引一变输出立刻跟着变,中间不存任何东西。那张 8 × N 的 0/1 矩阵就是这台打字机的全部真值表;8 个输出位各自被 Quine-McCluskey 综合成几条乘积项(就是卡诺图合并相邻项),门数从 62 砍到 50,换成 16 个字符能砍掉四成。三个反直觉:门没有记忆,想一个字一个字打出来得在外面加计数器推索引;逻辑综合真能省门;FPGA 的每个逻辑单元就是一张 16 格小真值表加一个多路选择器 —— 这一页就是 LUT 的原理。目标字符串自定(ASCII,最多 16 字符),点「打字」看它一个字一个字打出来。
第 3 关 · 组合逻辑D 触发器让一个比特被记住,但电路真正干活靠逻辑门。这一关只给你一种门 —— 与非门 NAND,五个谜题逐级加门:NOT 要 1 个、AND 2 个、OR 3 个、XOR 4 个、XNOR 5 个。点门上的输入徽章,把来源在 A / B / 常量 0 / 常量 1 / 前面门的输出之间循环,4 行真值表全部对上才算通关。搭完会撞见三件反直觉的事:一个 NAND 就能造出所有门(CMOS 里它只要 4 个晶体管,芯片里几乎全是 NAND / NOR);XOR 要比 AND 多花一倍门数和一级延迟,这正是加法器里进位比和慢的根源;还有 A · ¬A 本该恒为 0,A 翻转那一瞬间却会冒出一个毛刺 —— 所以时序电路必须等信号稳定再采样。
挑战关卡 · 推荐每个 ↑CLK 锁存一位,8 位解出一个 ASCII 字符。手动拨位、键盘连发或粘贴 64 位位流,把 Q 的 1 位输出拼成一整句话——串并转换 / 移位寄存器 / UART 的底层原理,完成还有彩蛋。目标可以随便换:输入框里改成你想要的任何 ASCII 句子(最多 16 个字符),格子、位流、答案全部重算。
推荐 · 可交互拨动 D 与 CLK,或直接点波形格子改输入;Q 由上升沿触发规则从初值整条重算。含真值表高亮、事件日志与建立/保持时间违例提示。
轻量播放器52 秒讲解动画的轻量版:12fps 节流、静态层复用、语音按需加载,页面自带实时资源开销面板与两种渲染方式对照。
完整讲解动画电路符号、主从锁存器、上升沿采样演示、8 拍时序波形、特性方程与真值表、应用与结语,带中文逐句字幕与内联语音。
离线分发1280×720、24fps、H.264 + AAC 中文旁白。适合离线播放、长时间连续观看或移动端省电场景。