MOS 管级 · 把任意字符串拆成晶体管

第 5 关 · 互补 MOS(CMOS)· 一条下拉支路 = 一项 · 并联 = 相加
这一关在做什么:上一关把字符串综合成了「反相器 + 与门 + 或门」,但门本身是从哪来的? 门是晶体管搭的。这一关把每一道门继续拆开,一直拆到 MOS 管:一个反相器 2 个管子、一个与非门 4 个管子、 一个与门 6 个管子(与非门后面再串一级反相)。目标字符串照样自定,每换一个字,整张管级账目重算。
怎么玩:点 b7 ~ b0 那排方块挑一位看它的账;点 A / B 两个方块改基本单元的输入, 看哪些管子导通(绿)、输出是 0 还是 1。下面 ④ 是同一句 b_k 的三种搭法账目,⑤ 是把最省的那一种真的画出来: 上半是上拉网络(PMOS),下半是下拉网络(NMOS),绿色 = 当前索引下导通的管子。
反直觉一:与门比与非门贵。CMOS 里与非门 4 个管子就够(上拉并联、下拉串联), 而「与」要多一级反相,变成 6 个 —— 所以芯片里 NAND / NOR 满地跑,AND / OR 几乎不单独出现。
反直觉二:门数不是成本,管子数才是。三种搭法画出来的框框个数差不多,管子数却差一大截。 芯片的面积、功耗、延时都按管子算,所以综合器优化的是管子(面积),不是门数 (默认目标 b6 那一格就是 32 → 24 → 20,换了字符串三张账单会一起重算)。
反直觉三:一个门就能算完整条 SOP。CMOS 的下拉网络天生是「串并联」:一条串联支路 = 一个乘积项, 几条支路并联 = 把它们相加。于是「或的与」可以直接塌进一个复合门(标准单元库里叫 AOI / OAI), 再在输出端反相一次就得到原函数 —— 这就是为什么真实的逻辑库不给你「与门」。