组合筑基
门接起来就能算一切——这句话,延迟之魔说对了一半。
算器之胚
筑基试炼的门是冷的。门楣上"组合"二字由无数细如发丝的蓝光勾出,像一张还没接通的电路图。
你攥着上一章炼成的逻辑门——与、或、非,几颗温热的小石子。你觉得它们已经够了。
「把门接起来,就能算。加法、比较、抉择——人能算的,它们都能算。打个赌吧——你造一个 32 位的加法器,又对、又快。我替你记账,每一级延迟都记。」
反直觉下注 · 哪件里没有组合逻辑电路?
先下注,指认一件。猜错,延迟账本记一笔。👆 点击下方按钮下注
组合逻辑图谱 · 五器归一
每件东西底层都是组合逻辑——输入进、门算、输出出、不留痕。没有例外。
详解 · K02-15 组合逻辑的本质
组合逻辑电路:输出仅由当前输入决定,无记忆、无反馈——同一份输入永远得到同一份输出。它与下一章的时序逻辑相对:时序电路有状态,组合电路没有。任何组合网络都可被一张真值表完全描述,而与/或/非(甚至仅 NAND 或仅 NOR)在功能上是完备的:任意真值表都能用它们搭出来。「输入进、门算、输出出、不留痕」说的就是这件事。
辨图台 · 从电路到真相
石径尽头是一面悬空的电路图,门与门之间蓝线纠缠,像一张没有标签的网。
「读它。别猜——推。从输入走到输出,每经过一个门,写下它做了什么。」
「一眼就能看出来吧?干嘛费劲。猜嘛。」
电路分析 · 探针逐门推导
先猜功能(四选一),再拖探针逐门推导,填真值表。
探针推导 · 沿电路从输入走到输出
详解 · K02-01 分析:从电路图到功能
分析是"读电路"的正规军打法,四步:① 逐级标注中间信号 → ② 沿信号流写布尔表达式 → ③ 代数化简 → ④ 列真值表验证。本章电路推出 Y = AB + AC + BC——标准的积之和(SOP)式;对照真值表,8 行中恰好"任两输入为 1"的 4 行输出 1,功能即多数表决器。猜测只能给假设,推导才给结论。
铸器炉 · 从需求到电路
铸器炉的火是冷的,蓝焰静静烧着。老祖丢过一片玉简:「三盏灯,任两盏亮则报警。造出来。」
「化简嘛,差不多就行。多几个门又不会怎样——又不会怎样。」
电路综合 · 真值表 → 卡诺图 → 门级电路
填三人(A,B,C)投票真值表,卡诺图圈组化简,投炉铸造。
卡诺图化简
详解 · K02-02 综合:从需求到电路(附冒险伏笔)
综合是分析的逆过程:真值表 → 最小项 SOP → 卡诺图圈组化简 → 门级实现。卡诺图按格雷码排列,相邻格只差一个变量;圈住 2/4/8 个相邻的 1 即可消去变化的那个变量。三人表决的三对相邻 1 圈出 AB + AC + BC,比原始 4 最小项省一个门。注意:若化简后的圈两两不交叠,输入翻转时两条路径延迟不等,输出会出现瞬时毛刺——这叫静态冒险(K02-14),补上搭桥的冗余项即可消除,Boss 战会考。
信使殿 · 编码与译码
信使殿立着两面墙。左墙八个信筒,右墙八盏灯。
「八个信筒只有一个会被投信,你要用三根线告诉别人是哪一个。反过来,给你三根线,你要点亮八盏灯里的一盏。」
「要是两个信筒同时来信呢?」
编码器 / 优先编码器 / 译码器级联
译码器级联 · 用使能端拼 4-16 译码器
详解 · K02-03 / K02-04 编码器与译码器
编码器把 2n 路互斥输入压成 n 位二进制码;输入不互斥时必须用优先编码器(如 74LS148),按编号优先级裁决。译码器是逆操作:n 位输入选中 2n 路输出之一,每个输出恰好对应一个最小项——因此"译码器 + 或门"也能实现任意函数。使能端是扩展接口:两片 3-8 译码器,最高位地址接一个的使能、取反后接另一个的使能,即拼成 4-16 译码器。
选路坊 · 一入多出
选路坊中央悬着一个带旋钮的匣子,八条进线、一条出线。
「旋钮指谁,谁通过。」又递来一张真值表:「别转数据了——把这张表喂给它。」
MUX 数据选择 + 函数实现 + Demux 路由
函数实现 · 把真值表喂给 MUX
详解 · K02-05 / K02-06 MUX 与 Demux
多路选择器(MUX):n 位地址从 2n 路数据中选一路输出。把 n 个函数变量直接接地址端、数据端依次接真值表输出列,一块 MUX 就实现了任意 n 变量函数——这其实是香农展开定理的硬件形态;若用 n-1 个变量作地址,数据端接 0/1/剩余变量/其反,还能省一档。多路分配器(Demux)是逆操作:1 入 2n 出做数据路由,本质就是"数据端作使能"的译码器。
半加台 · 一位之加
半加台上只有两个开关:A 和 B。一盏和灯,一盏进位灯。
「0+0、0+1、1+0、1+1。造出来。」
「那再加上低位来的进位呢?」
半加器 / 全加器 / 4 级串接
4 级串接 · 进位之链首亮
详解 · K02-07 半加器与全加器
半加器:两个输入位相加,S = A⊕B、C = A·B——没有低位进位入口,只能算"半"次。全加器补上 Cin:S = A⊕B⊕Cin,Cout = A·B + (A⊕B)·Cin("两位都为 1 必进位;一位为 1 且低位进位也进位")。两个半加器加一个或门可拼出一个全加器;n 个全加器进位首尾串接,就是 n 位行波进位加法器(RCA)。
涟漪深渊 · 进位的诅咒
你把 32 个全加器一字排开,进位线首尾相接。你输入 111...1 + 000...1。
最低位的进位亮了。然后是下一位。再下一位。蓝光一格一格向高位爬,像一声叹息穿过 32 道门。你等了很久。最高位才亮。
「你算对了。可你算晚了。」
RCA 延迟追踪 · 32 位最坏情况
详解 · K02-08 RCA 进位传播延迟
每级全加器的进位链是 AND-OR 两级门,n 位 RCA 最坏延迟 ≈ 2n 级——32 位即 64 级。最坏输入是让进位从 LSB 一路传播到 MSB 的组合(如 11…1 + 00…1)。这引出数字设计的铁律:功能正确 ≠ 时序收敛——时钟沿到来时输出必须已稳定(满足建立时间),否则采到的是中间态。64 级延迟对上约 20 级的时钟周期,就是"正确但迟到",而迟到等于错误。
先行之光 · 超前进位
老祖丢来两个新变量:P=A⊕B(进位传播)、G=A·B(进位生成)。
「C_{i+1}=G_i ∨ P_i·C_i。展开它——别等,算出来。」
「那 C31 呢?」
CLA 推导 · 4 位先行 → 32 位扇入爆炸
分层方案 · 面积换速度
详解 · K02-09 / K02-10 超前进位与快速加法器
定义进位生成 G = A·B 与进位传播 P = A⊕B,则 C(i+1) = G(i) + P(i)·C(i)。把递归式完全展开,每一位进位都只依赖原始输入——4 位 CLA 全部进位并行算出,仅约 4 级延迟。代价:C(n) 的最长乘积项含 n+1 个因子,扇入随位数线性膨胀,32 位单级 CLA 在物理上不可行。工程解法是分层折中(K02-10):块式 CLA(4 位一块、两级先行)、进位选择(两种 Cin 各算一份再选)、并行前缀加法器(Kogge-Stone 等,log₂n 级)。
比较之衡 · 三态之门
比较之衡上摆着两个 8 位数。老祖:「谁大?」你从最高位比起——高位定了就不必看低位。蓝光一路短路下去,很快。
「比 8 位是快。比 32 位呢?还是得一级级下去吧。」
「这条线,八个人都要说话。同时说,会烧。怎么办?」
比较器级联 + 三态门总线驱动
总线冲突 → 三态门救赎
详解 · K02-11 / K02-12 数字比较器与三态缓冲器
多位比较器从 MSB 起逐位比较:高位相等则把"待定"传给低位,第一个不等位即定胜负——级联比较器靠 A>B / A=B / A<B 三根级联信号串接扩展。三态缓冲器的输出有 0、1、Z(高阻)三态:未使能时与总线断开。多器件共享总线时,任意时刻只允许一个器件使能,否则两器件输出相反电平形成总线竞争——大电流直通,轻则数据错乱,重则烧毁。总线仲裁的本质就是"分时说话"。
ALU 操作台 · 把零件装进盒子(K02-13)
拨 A、B 的位(点击翻转),选操作码——所有功能单元同时算,操作码 MUX 只选一路输出。这就是 74181 的活法。
延迟之魔 · 排除法收网
ALU 刚一接通,灯全灭了。进位之链从盒子里挣脱,凝成一条横贯屏幕的赤色巨蛇——延迟之魔的真身。
「我是延迟之魔。我不住在"慢"里——慢救不了我。我住在你"以为逻辑对就万事大吉"的地方。三问。答错一题,链就长一节。」
「你的刻痕,够用了。」
渊账累计 0 笔 · 三问全对后清零
模块之门 · 组合筑基
魔散尽时,你脚下的电路图亮成一张完整的网。那 32 位 ALU 不再是一堆门——它缩成一个方块:两根输入、一根操作码、一根输出,旁边标着一个数:t_pd。
「你入门了。不是因为你算对了——算对的会忘。是因为你量过了每一级延迟,然后学会了把它们打包成一个带参数的盒子。但——你的 ALU 算完就忘。它记得上一秒算过什么吗?」
知识图谱点亮 · 十五碎片排认知链
点击下方碎片,按因果顺序点亮认知链。
黑箱层级打包 · 门 → 标准件 → ALU
详解 · K02-13 / K02-15 ALU 与模块化设计
ALU(算术逻辑单元)的结构:加法器、逻辑单元、移位器等所有功能单元并行计算,再用操作码驱动的 MUX 选出一路输出——经典 74181 用 4 位操作码提供 32 种算术/逻辑运算,并输出 Zero、Carry、Overflow 等标志位(标志位是下一章条件跳转的粮食)。模块化的契约只有两条:接口 + t_pd。上层模块不关心下层内部怎么造,只信它承诺的延迟参数——正是这层抽象,让百万门级的设计成为可能。