
简介这是一份面向数字逻辑课程初学者的 Vivado 组合电路设计实验包围绕“仅使用非门和或非门实现 3-10 所述电路”的约束完整演示组合逻辑电路从设计、仿真到验证的流程。包体约 500KB内含 58 个文件除 Vivado 工程文件.xpr、.srcs、.sim与 Verilog 源码.v外还提供仿真波形、Tcl 与 bat 脚本等辅助文件方便对照工程结构查看设计输入、仿真结果与生成文件。资源另附实验任务书 PDF 和实验报告 docx便于理解题目要求和撰写报告。已有 872 人学习下载。读者可通过这份完整工程掌握组合逻辑最小化实现、Vivado 工程组织、波形仿真与结果分析等关键技能适合正在完成同类实验或准备复习考试的高校学生。1. 项目概述与实验目标数字电路实验做到第二个题目就是《组合电路设计——仅使用非门和或非门实现 3-10 所述电路》。说实话刚看到这个标题我第一反应是奇怪前面刚练过与非门连反相器都能用两个与非门拼出来为什么这次非要换成非门或非门的组合等我把 3-10 的真值表列出来、卡诺图圈完才反应过来这个实验真正想练的不是把电路搭通而是从逻辑表达式到门级网表的转换能力尤其是摩根定律在化简里的实际应用。简单解释一下背景组合电路是指输出只由当前输入决定、不依赖历史状态的电路常见的有译码器、编码器、多路选择器、加法器等。3-10 这个编号是典型教材习题通常是给一个三变量或四变量的逻辑函数要求你用指定的门电路实现。我这里以最常见的三人多数表决电路为例它的输出在三个输入中有两个或两个以上为 1 时为 1否则为 0。你这个实验里 3-10 给的函数可能不完全一样但只要手上有真值表或表达式后面的转换流程完全可以照抄。1.1 题目到底在考什么我总结下来这个实验核心考三件事。第一能不能根据需求列真值表并写出标准与或式。这是组合电路设计的基本功输入输出关系定义不清楚后面全白搭。第二能不能把与或式转化成只允许用非门和或非门的形式。这不是简单的代数拼凑而是要理解逻辑门的完备性。或非门本身就是一个完备集理论上只靠或非门就能实现任意组合逻辑再加上非门只是让表达更直观。第三能不能把转换后的门级电路画清楚并实际验证。很多同学卡在表达式已经化简出来了但不知道自己画出来的电路跟表达式到底对不对应。这一步需要你老老实实一列一列地检查每个门的输入输出。1.2 为什么偏偏限定非门或非门每年都有学生问为什么不用与非门与非门不也是万能的吗原因在于教学上要训练你换个角度看问题。与非门和或非门都自成一个完备集但同一个逻辑函数用与非门实现和用或非门实现思路恰好是互补的。与非门适合直接处理圈 1得到的与或式因为与非门天然实现了与项取反后再取反或非门则更适合处理圈 0得到的或与式因为一个或非门输出的恰好是若干乘积项的或非结果。限定了非门和或非门就是在逼你去做一次完整的对偶转换拿到最简与或式后先求反函数的最简与或式再整体取反。这个操作看起来绕但恰恰是卡诺图圈的进阶用法也是后面学时序电路、状态化简时经常要用到的技能。2. 组合电路设计核心思路2.1 从真值表到最简与或式先说我用的三人多数表决电路。输入是 A、B、C输出 Y。真值表如下| A | B | C | Y | | 0 | 0 | 0 | 0 | | 0 | 0 | 1 | 0 | | 0 | 1 | 0 | 0 | | 0 | 1 | 1 | 1 | | 1 | 0 | 0 | 0 | | 1 | 0 | 1 | 1 | | 1 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 |把 Y1 的四个最小项写出来得到Y ABC ABC ABC ABC用卡诺图化简可以合并出Y AB BC CA这个结果很直观任意两个输入为 1输出就是 1。到这一步很多同学觉得任务完成了一半剩下就是找与门、或门接线。但题目规定不能用与门和或门所以必须继续转换。2.2 圈 0 法把目标变成或非门友好的形式关键操作来了。既然最终只能用或非门那我就先看看反函数 Y 长什么样。观察真值表Y0 的行有 4 个也就是最小项 m0、m1、m2、m4。在卡诺图上圈这 4 个 0可以得到Y AB BC CA这个式子的每个项都是两个变量的反变量乘积非常有意思。因为或非门的输出正好是输入或的反比如NOR(A, B) (A B) AB这意味着 AB 这个乘积项直接用一个或非门就能生成不需要额外加非门。再把 Y 整体取一次反用或非门表示就是Y (Y) (AB BC CA)右边就是三个中间信号的或非。2.3 摩根定律是这次转换的钥匙整个转换过程用到最多的就是摩根定律的两条形式(A B) AB(AB) A B好多初学者只会背公式不会用。这里我给一个直观理解一个或非门的输出物理上就是所有输入都取反后做与。所以当你看到表达式中出现反变量乘积项时第一反应就应该是可以用一个或非门来实现而不是老老实实先放非门、再放与门。我在批改实验报告时发现凡是没有先对反函数化简、直接对着原式硬转的同学画出来的电路普遍多出至少四五个门而且很容易出现层数过多导致的竞争冒险问题。先圈 0再找反变量的乘积项再整体或非这套流程是这次实验最值钱的东西。3. 实操过程三人多数表决电路的门级实现下面我把完整的实操过程走一遍从卡诺图化简到门级连线每一步都可以直接抄作业。3.1 用卡诺图化简出 F 和 F先画三变量卡诺图把 Y1 的最小项填进去。圈 1 时会得到Y AB BC CA然后不要急着转换先圈 0。填 1 和填 0 是同一张图圈 0 得到的是 Y 的最简与或式Y AB BC CA这里要注意三个乘积项两两之间是有重叠的卡诺图化简后已经消掉了多余的变量但它们仍然是这个反函数的最简形式。不要试图把圈 1 和圈 0 的结果合并化简它们是同一个函数的两面最后要用的是 Y。3.2 把表达式映射到或非门网络现在开始映射。第一级生成三个中间量 P、Q、R。P NOR(A, B) ABQ NOR(B, C) BCR NOR(C, A) CA第二级把 P、Q、R 再做一次或非输出最终结果。Y NOR(P, Q, R) (P Q R)代入后正好得到Y (AB BC CA) AB BC CA这里你会发现整个电路一共只需要 4 个或非门不需要单独的非门。第一个或非门两个输入接 A 和 B第二个接 B 和 C第三个接 C 和 A第四个把前三级的输出并到一起。如果你实验箱上的或非门是三输入四输入的直接接线就行。3.3 验证接线逐行对真值表接完线以后一定不要急着交报告先把八个输入组合逐行打一遍。我习惯按 000、001、010、011、100、101、110、111 的顺序检查。重点看 000 这一组三个输入都是 0第一级三个或非门输出全部为 1第四级或非门输入有三个 1输出为 0正确。再看 011 这一组A0B1C1第一级 PNOR(0,1)0QNOR(1,1)0RNOR(1,0)0第四级输出 1正确。如果验证到某一组对不上不要急着拆线。先用万用表或逻辑笔量第一级每个门的输出确认是哪一级出了问题。大多数时候是导线松动或者或非门输入接到了不该接的地方。4. 常见问题与排查技巧实录每次做这个实验总有几个问题反复出现我整理成一份速查表。现象可能原因排查方向输出恒为 0最后一级或非门输入悬空被误判为高电平检查有未接的输入端是否接地某一行输出不对第一级或非门输入顺序接错重新核对 A、B、C 对应管脚波形出现毛刺门电路级联层数过多存在竞争冒险检查是否绕了太多门尝试化简想用二输入或非门搭三输入或非直接用两个或非门简单级联结果不对见下方 4.3 的接法4.1 化简不彻底导致门数爆炸这个坑我在实验室见太多了。有些同学拿到表达式 Y AB BC CA不圈 0而是直接试图把每个与项转换成或用非门。比如 AB 可以写成 NOR(A, B) 的形式也就是先取反 A、取反 B再用或非门。但下一步发现还需要把三项用或门合并又没有或门于是又去折腾一排或非门。结果一个本来 4 个门就能解决的电路硬生生画了 10 多个门。这不是能力问题是方向问题。记住用或非门实现组合逻辑时默认第一步是圈 0得到反函数的最简与或式而不是顺着原函数圈 1 的思路走。4.2 或非门怎么当非门用实验中如果题目允许使用非门直接用独立非门就行。但如果现场没有独立非门芯片可以用或非门接成非门。方法很简单把一个或非门的两个输入端短接再接同一个信号 A输出就是Y (A A) A这里要注意短接后输入阻抗会降低驱动能力会有所变化但对于实验箱上的低速信号完全够用。如果手头有 4 输入或非门也可以把多余输入全部接地留下一个输入当非门用效果一样。4.3 三输入或非门只有二输入或非门怎么办很多实验箱只有二输入或非门但最后一集明明需要三输入或非。这时不能简单地级联因为 NOR 门不满足两个二输入级联等于三输入的直觉。我给你的建议是先把前两级信号分别做或非得到中间量 P、Q再把 P、Q 分别取反得到 P、Q然后用二输入或非门R NOR(P, Q) PQ? 不对等等三输入或非的正确二输入门实现是P 和 Q 分别经过非门取反得到 P、Q再用二输入或非门得到 (P Q) PQ。这一步只是把前两级缩成了与关系还得继续。最稳的办法是直接换一块带三输入或非门的芯片或者用两个或非门加一个非门拼出三输入或非先让前两个信号经过或非得到中间变量 M再把 M 取反跟第三个信号接到同一个二输入或非门上输出再取反。别嫌麻烦这种展开本身就是对摩根定律的再一次练习。5. 一点实验心得与扩展思路我个人觉得这个实验最有价值的不是最后的电路图而是中间那段圈 0 再整体取反的转换过程。很多教材把卡诺图化简讲得很细但对化简之后怎么映射到指定门电路往往一笔带过。真正上手设计组合电路时门类型限制才是常态因为最终项目里用哪个门、哪种工艺通常是由芯片库存和成本决定的不是你想用什么就有什么。如果你做完了三人多数表决电路建议给自己加一道题用非门和或非门实现异或门。异或的表达式是 Y AB AB用圈 0 法会得到 Y AB AB实现时需要生成 A 和 B 两个反变量正好能练到什么时候必须引入非门这个点。我当时做完之后又用全加器试了一次整个思路清晰了很多后面学加法器、比较器都是同一个套路。最后分享一个小技巧做实验前先把目标函数画成卡诺图分别圈 1 和圈 0把两个结果都写出来。圈 1 的结果用来理解逻辑含义圈 0 的结果用来接或非门网络。两套表达式放在手边接线的时候基本不用动脑子验证的时候也快。这个小习惯我从学生时代用到现在确实能省不少返工时间。本文还有配套的精品资源点击获取