2026/2/14 14:24:49
网站建设
项目流程
百度给做网站收费多少钱,昆明网站制作专业,电脑做网站用word,微信公众网站怎么做的用或非门“从零造计算机”#xff1a;半加器设计实战与底层逻辑揭秘你有没有想过#xff0c;现代计算机里那些复杂的运算#xff0c;其实都可以拆解成最简单的开关动作#xff1f;而这一切的起点#xff0c;可能只是一个小小的或非门#xff08;NOR Gate#xff09;。别…用或非门“从零造计算机”半加器设计实战与底层逻辑揭秘你有没有想过现代计算机里那些复杂的运算其实都可以拆解成最简单的开关动作而这一切的起点可能只是一个小小的或非门NOR Gate。别小看这个看起来不起眼的逻辑单元——它有个了不起的身份功能完备性。也就是说只要你有足够的或非门就能搭建出任意复杂的数字电路甚至是一台完整的CPU。这就像只给你一种乐高积木却要拼出整个城市。今天我们就来干一件“反常识”的事不用异或门、不用与门只用或非门实现一个本该需要多种门电路的半加器。这不是炫技而是带你深入理解数字电路的本质——布尔代数如何在物理世界中落地。或非门不只是“或非”它是数字世界的“原子”我们先来重新认识一下或非门。它的逻辑很简单只要有一个输入是1输出就是0只有当所有输入都是0时输出才是1。两输入或非门的真值表如下ABY001010100110对应的表达式是$$Y \overline{A B}$$听起来很基础对吧但关键在于它能自己“生”出其他所有逻辑门。怎么用或非门实现 NOT、AND、ORNOT非门把同一个信号接两个输入端就行了。$$\overline{A} A \downarrow A$$OR或门先做或非再取反——也就是再过一个或非门。$$A B \overline{\overline{A B}} (A \downarrow B) \downarrow (A \downarrow B)$$AND与门利用德摩根定律转换。$$AB \overline{\overline{A} \overline{B}} (\overline{A}) \downarrow (\overline{B})$$而 $\overline{A}$ 和 $\overline{B}$ 又可以用或非门生成。看到没三个最基本的逻辑门全都能由或非门构造出来。这意味着整个布尔代数体系可以在硬件上仅靠一种门来实现。这不仅是理论上的优雅更在某些特殊场景下有实际价值。比如航天级芯片要求高可靠性统一使用一类门可以简化测试、提高容错能力再比如早期集成电路工艺受限时工程师就曾大量采用“全或非架构”。实战只用或非门构建一个半加器现在我们来挑战一个经典组合电路——半加器Half Adder。它的任务很简单把两个一位二进制数相加输出“和”Sum与“进位”Carry。真值表如下ABSumCarry0000011010101101我们知道数学表达式是- $ Sum A \oplus B $- $ Carry A \cdot B $问题来了如果手头只有或非门怎么实现这两个功能第一步搞定反相器NOT我们需要先得到 $\overline{A}$ 和 $\overline{B}$。很简单assign not_A ~(A | A); // 等价于 ~A虽然写法用了~但在物理实现中这就是一个双输入短接的或非门。第二步构造 Carry原式是 $AB$但我们不能直接用与门。怎么办用德摩根定律变形$$AB \overline{\overline{A} \overline{B}}$$右边正是一个“或非”操作输入是 $\overline{A}$ 和 $\overline{B}$输出就是 $AB$所以$$Carry (\overline{A}) \downarrow (\overline{B})$$只需要一个或非门前提是先有 $\overline{A}$ 和 $\overline{B}$。第三步构造 Sum这才是难点Sum 是异或即$$Sum \overline{A}B A\overline{B}$$这是标准的“积之和”形式但我们想用或非门实现最好转成“和之积”或双或非结构。这里有个巧妙的方法观察到$$Sum \overline{(A B) \cdot (\overline{A} \overline{B})}$$展开验证一下- 当 AB0$(00)(11)0\cdot10$ → 取反得1不对等等错了。换个思路。我们尝试用中间变量重构定义- $X A \downarrow B \overline{A B}$- $Y \overline{A} \downarrow \overline{B} \overline{\overline{A} \overline{B}} AB Carry$然后让$$Sum X \downarrow Y \overline{X Y}$$代入看看- A0, B0X 1, Y 0 → XY1 → Sum0 ✅- A0, B1X 0, Y 0 → XY0 → Sum1 ✅- A1, B0同上 → Sum1 ✅- A1, B1X 0, Y 1 → XY1 → Sum0 ✅完全匹配所以最终$$Sum (A \downarrow B) \downarrow ((\overline{A}) \downarrow (\overline{B}))$$注意$(\overline{A}) \downarrow (\overline{B})$ 正是我们前面算 Carry 的那个门也就是说Carry 就是这个中间结果 Y。最终电路结构5个或非门搞定门编号功能输入输出G1生成 $\overline{A}$A, Anot_AG2生成 $\overline{B}$B, Bnot_BG3计算 $X A \downarrow B$A, BXG4计算 $Y \overline{A} \downarrow \overline{B}$not_A, not_BCarryG5计算 $Sum X \downarrow Y$X, YSum总共只需5个两输入或非门就实现了完整的半加器。对比传统方案一个异或门 一个与门 ≈ 2~3个复合门。虽然这里门数更多但胜在结构统一适合特定制造工艺或教学演示。Verilog建模让代码贴近硬件本质虽然现代综合工具不会强制你用或非门但为了理解底层映射过程我们可以写出行为级模型module nor_half_adder ( input A, input B, output Sum, output Carry ); wire not_A, not_B; wire X, Y; // Step 1: NOT using NOR (tie inputs together) assign not_A ~(A | A); // ~A assign not_B ~(B | B); // ~B // Step 2: Intermediate terms assign X ~(A | B); // A NOR B assign Y ~(not_A | not_B); // (~A) NOR (~B) A AND B // Step 3: Final outputs assign Sum ~(X | Y); // X NOR Y assign Carry Y; // Direct output from Y endmodule这段代码每一行都对应一个真实的门电路。如果你在一个只提供NOR2单元的标准单元库中进行逻辑综合EDA工具如Synopsys Design Compiler会自动将上述结构映射过去。当然在FPGA上这么做效率不高——毕竟LUT查找表更适合实现任意组合逻辑。但在ASIC设计中这种“门级约束”非常常见尤其在功耗敏感或高可靠场景。设计背后的工程权衡为什么没人总这么干既然或非门这么万能那为什么不全用它答案是代价太高。延迟更大每个逻辑层级都会累积传播延迟。上面的半加器有3级门延迟NOT → NOR → NOR而专用异或门可能只有1~2级。面积开销大5个门 vs 2个门芯片面积翻倍不止。功耗更高更多晶体管切换意味着更高的动态功耗。所以现实中“全或非”更多用于教学、原型验证或极端环境下的定制设计。但它的思想价值不可忽视当你掌握了一种通用构建块你就拥有了无限可能。写在最后从或非门看系统设计哲学这次实践不只是教你如何搭电路更是展示一种思维方式复杂系统可以从极简规则中涌现。就像生命源于DNA碱基对的排列组合计算机的智能也始于这些简单门电路的协同工作。而或非门正是那个最小的“可复制单元”。下次你在写代码、设计架构时不妨想想这个问题我的系统中是否存在那样的“或非门”——一个足够简单、又能构建一切的基础模块如果你找到了它恭喜你已经掌握了抽象的艺术。如果你也动手实现了这个或非门半加器欢迎在评论区晒出你的仿真波形图我们一起聊聊你在卡诺图化简时踩过的坑。