news 2026/4/3 7:39:15

数字电路与逻辑设计手把手教程:从逻辑门到电路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数字电路与逻辑设计手把手教程:从逻辑门到电路

从零开始构建数字世界:手把手带你用逻辑门造一台“计算器”

你有没有想过,我们每天使用的手机、电脑,甚至智能手表,它们最底层的“语言”其实只有两个字——0 和 1
而让这两个简单的数字完成复杂计算的,不是魔法,而是由一个个微小逻辑门搭建起来的数字电路

今天,我们就来当一回“芯片建筑师”,不靠现成模块,从最基本的与门、或门出发,亲手设计出一个能真正做加法的电路。你会看到,如何从一张真值表,一步步推导出布尔表达式,再画成电路图,最后写成可烧录到FPGA的Verilog代码。

这不是理论课,这是一场实打实的数字系统建造之旅。


一切始于三个基本门:AND、OR、NOT

所有复杂的数字系统,都建立在三种最基础的逻辑单元之上:

  • 与门(AND):全1才出1,像串联开关。
  • 或门(OR):有1就出1,像并联开关。
  • 非门(NOT):输入取反,是唯一单输入门。

有了这三个,再加上异或(XOR)、与非(NAND)等衍生门,就能构造出任意逻辑功能。事实上,仅用NAND门就可以实现全部逻辑运算——它被称为“通用门”。

💡 小知识:CMOS工艺中,一个4输入NAND门由4个PMOS并联 + 4个NMOS串联构成。这种对称结构让它具有极佳的噪声容限和低静态功耗。

但别被晶体管吓退。对我们来说,更重要的是理解这些门的行为规则。怎么描述?靠的就是——真值表


第一步实战:做个“半加器”,让它学会1+1=10

让我们先解决一个简单问题:两个一位二进制数相加。

ABSumCarry
0000
0110
1010
1101

注意最后一行:1+1 不等于2(那是十进制),而是等于二进制的10—— 所以输出是Sum=0, Carry=1

观察这个表,你会发现:
-Sum = A ⊕ B→ 异或门直接搞定;
-Carry = A · B→ 与门即可实现。

于是,我们的第一个组合电路诞生了:

A ──┐ ├─ XOR ── Sum B ──┘ A ──┐ ├─ AND ── Carry B ──┘

这就是半加器(Half Adder)—— 它能加两位,但没法接收来自低位的进位。要真正用于多位运算,得升级为全加器


升级挑战:全加器,处理进位才是关键

现实中的加法总是涉及“进位”。比如十进制中9+5要向高位进1;二进制也一样。所以我们需要一个能处理三个输入的加法器:A、B 和前一级传来的进位 Cin。

ABCinSumCout
00000
00110
11111

通过分析可以得出:
-Sum = A ⊕ B ⊕ Cin
-Cout = (A·B) + (Cin·(A⊕B))

这两个公式看着复杂,其实有直观解释:

  • 先算 A+B 得到局部和 S1 与进位 C1;
  • 再把 S1 和 Cin 相加,得到最终 Sum;
  • 最终进位 Cout 来自两部分:A·B 或者 Cin 与局部和的交叠。

电路实现上,可以用两个半加器加一个或门完成:

A ────┐ ├── HA1 ──┐ B ────┘ │ ├── XOR ── Sum Cin ────────────┘ │ │ └─ OR ←────┘ ↑ HA2

虽然结构清晰,但这里已经埋下了一个隐患:延迟


多位加法器:纹波进位 vs 超前进位

如果我们想做一个4位加法器(比如 0110 + 0011),怎么办?

最直接的方法:级联四个全加器,低位的Cout连到高位的Cin——这就是著名的“纹波进位加法器(Ripple Carry Adder, RCA)”。

module ripple_carry_adder_4bit ( input [3:0] A, input [3:0] B, input Cin, output [3:0] Sum, output Cout ); wire c1, c2, c3; full_adder fa0 (.A(A[0]), .B(B[0]), .Cin(Cin), .Sum(Sum[0]), .Cout(c1)); full_adder fa1 (.A(A[1]), .B(B[1]), .Cin(c1), .Sum(Sum[1]), .Cout(c2)); full_adder fa2 (.A(A[2]), .B(B[2]), .Cin(c2), .Sum(Sum[2]), .Cout(c3)); full_adder fa3 (.A(A[3]), .B(B[3]), .Cin(c3), .Sum(Sum[3]), .Cout(Cout)); endmodule

✅ 优点:结构简单,易于理解和实现。
❌ 缺点:速度慢!因为第3位必须等第2位算完才能开始,就像多米诺骨牌一样逐级传递。

假设每个全加器延迟是1ns,那么4位加法最坏情况要等4ns。对于现代GHz级别的处理器,这是不可接受的。

那怎么办?

答案是:提前预判进位

这就是超前进位加法器(Carry Look-Ahead Adder, CLA)的核心思想。它引入两个概念:
-生成信号 G = A·B:本位一定会产生进位;
-传播信号 P = A⊕B:如果低位有进位,本位会把它传上去。

然后用逻辑门直接计算每一位的进位:
- C1 = G0 + P0·Cin
- C2 = G1 + P1·G0 + P1·P0·Cin
- …

这样,所有进位几乎同时生成,大大缩短关键路径延迟。

当然,代价是电路更复杂,占用更多逻辑资源。但在高性能场景下,这笔账值得算。


实际工程中的那些“坑”与应对策略

你以为写出正确的逻辑表达式就万事大吉?远远不够。真实世界充满了非理想因素。

🚫 问题1:竞争与冒险(Race & Hazard)

由于不同路径的传播延迟不同,可能出现瞬时毛刺。例如某个信号本该稳定为1,却在切换过程中短暂跳变到0。

👉解决方案
- 增加冗余项消除卡诺图中的相邻圈;
- 在敏感节点添加小电容滤波;
- 使用同步设计,避免毛刺进入时序逻辑。

📉 问题2:扇出限制与驱动能力

一个门不能无限带动下游门。TTL器件典型扇出为10,CMOS则更高,但仍受布线电容影响。

👉解决方案
- 插入缓冲器(Buffer)分担负载;
- 高速路径使用专用驱动单元;
- FPGA中工具会自动插入缓冲树优化。

🔌 问题3:电源完整性与地弹

多个门同时翻转时,瞬间电流突变会引起电压波动,严重时导致误触发。

👉解决方案
- 每颗芯片旁放置去耦电容(0.1μF陶瓷电容 + 10μF钽电容);
- 设计低阻抗电源平面;
- 关键信号避开高噪声区域走线。

这些问题,在仿真阶段往往难以发现,只有上板测试才会暴露。所以,“纸上得来终觉浅”,动手实践才是王道。


动手项目:做个8位简易计算器原型

现在,让我们把所学知识整合成一个小系统:一个基于FPGA的8位计算器。

系统组成

模块功能
输入按键数码输入 + 运算选择(+/-)
寄存器A/B锁存操作数(D触发器实现)
8位CLA加法器核心运算单元
七段译码器将结果转为数码管显示格式
控制状态机协调各模块工作流程

工作流程

  1. 按键输入第一个数 → 存入Reg_A;
  2. 选择“+”操作 → 控制信号置位;
  3. 输入第二个数 → 存入Reg_B;
  4. 按“=” → 启动加法器;
  5. 输出送至译码器 → 数码管显示结果。

其中,最关键的部分是加法器。我们可以复用前面的设计思路,将两个4位CLA拼接成8位,并加入溢出检测逻辑:

// 溢出判断:当两个正数相加得负,或两个负数相加得正时发生溢出 assign overflow = (A[7] == B[7]) && (A[7] != Sum[7]);

整个系统可用Verilog完整建模,并在开发板上验证。


为什么你要掌握这项技能?

也许你会问:“现在都有现成IP核了,谁还手动设计加法器?”

说得没错。现代SoC里确实直接调用综合库里的优化加法器。但懂原理的人和只会调API的人,面对问题时的反应完全不同

当你遇到以下情况时,基础知识就是你的“救命稻草”:
- FPGA资源紧张,需要定制面积最优的加法器;
- 时序不收敛,必须分析关键路径延迟来源;
- 仿真结果正确,但硬件跑飞,怀疑是毛刺引发状态机错乱;
- 要为AI加速器设计定制ALU,普通加法器效率太低。

更重要的是,从逻辑门到系统的思维方式,是你理解计算机底层运作的钥匙。无论是学习CPU架构、参与ASIC前端设计,还是调试嵌入式系统底层逻辑错误,这种能力都会让你事半功倍。


下一步该往哪走?

本文聚焦于组合逻辑,即输出只依赖当前输入的部分。但这只是数字系统的半壁江山。

接下来你应该深入:
-时序逻辑:掌握D触发器、JK触发器,理解建立/保持时间;
-有限状态机(FSM):设计控制单元的灵魂;
-同步设计原则:避免亚稳态,确保系统稳定;
-存储器设计:了解SRAM、ROM如何用基本单元构建;
-FPGA架构揭秘:弄清LUT、寄存器、布线资源如何协同工作。

一旦打通这两条主线,你就有能力去尝试更酷的事情:比如自己设计一个RISC-V CPU核心,或者打造专属的图像处理加速器。


如果你在实验室点亮了第一个由自己设计的加法器,那种成就感,堪比第一次用汇编打出“Hello World”。
因为你不再只是使用者,而是创造者。

欢迎在评论区分享你的第一个数字电路作品,或者提出你在实现过程中遇到的难题。我们一起,从0和1开始,重建数字世界。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 4:46:22

跨平台输入法词库转换:一键迁移你的个性化输入习惯

跨平台输入法词库转换:一键迁移你的个性化输入习惯 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为更换输入法时无法保留多年积累的个性化词库而烦…

作者头像 李华
网站建设 2026/3/26 12:24:27

小白指南:在树莓派上动手实验framebuffer显示功能

从零开始:在树莓派上玩转 framebuffer,亲手点亮屏幕的每一像素 你有没有想过,当你在树莓派上运行一个图形程序时,那些颜色是怎么“走”到屏幕上的?不是靠魔法,也不是神秘的黑盒——背后其实是一块内存&…

作者头像 李华
网站建设 2026/4/2 21:31:47

词库转换神器:让输入法迁移变得简单高效

词库转换神器:让输入法迁移变得简单高效 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为更换输入法而烦恼吗?深蓝词库转换工具正是你需…

作者头像 李华
网站建设 2026/4/1 3:41:55

深蓝词库转换:如何轻松实现不同输入法词库格式互通

深蓝词库转换:如何轻松实现不同输入法词库格式互通 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 还在为更换输入法时无法迁移个人词库而困扰吗&#xf…

作者头像 李华
网站建设 2026/4/3 5:19:21

智能引导重构开发模式:零代码三天交付,资深架构师的效率革命

在2025年的Java开发领域,一场由智能工具引领的效率革命正在悄然发生。某互联网公司资深架构师王工(14年开发经验)向记者展示了一组对比数据:在使用飞算JavaAI的智能引导功能后,其团队新成员仅用三天就完成了电商订单系…

作者头像 李华
网站建设 2026/4/2 8:38:35

MTK刷机实战:从BROM模式解锁到设备救砖的完整指南

MTK刷机实战:从BROM模式解锁到设备救砖的完整指南 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient是一款专门针对联发科芯片设备的开源刷机工具,支持多种M…

作者头像 李华