数字电路 - 电路分析
2025年11月5日
目录
目录
卡诺图和函数标准型
布尔函数标准型
这部分主要讨论了如何用标准和规范的形式来表示逻辑问题。
1. 逻辑函数的表示方法
一个逻辑函数可以用多种形式来表示,主要有三种:
- 真值表: 列出所有输入变量取值的组合以及对应的函数输出值。
- 优点: 直观、唯一。
- 缺点: 当变量增多时,表格会变得非常庞大。
- 逻辑表达式: 使用逻辑运算符(与、或、非)连接变量来表示逻辑关系。例如:
F = (X'Y'Z) + (XY'Z') + (XY'Z) + (XYZ') + (XYZ)- 简化后可以是
F = X + Y'Z
- 逻辑图: 使用标准的逻辑门符号(AND, OR, NOT 等)将逻辑表达式图形化,直观地表示电路结构。
核心思想:虽然一个逻辑函数的真值表是唯一的,但其逻辑表达式和逻辑图却可以有多种形式。不同的表达式和逻辑图功能相同,但其性能(如成本、速度)可能有很大差异。因此,我们需要找到最简化的形式。
2. 标准形式
为了使逻辑函数的表示更加规范,我们引入了“标准型”或“范式”的概念,主要有两种:
标准积之和 (SOP - Sum of Products)
-
最小项 (Minterm):
- 一个包含函数所有
n个变量的乘积项。 - 每个变量在最小项中以原变量或反变量的形式出现,且仅出现一次。
- 变量约定:原变量为
1,反变量为0。 - 例如,对于三变量函数
F(A, B, C),乘积项A'BC对应的二进制是011,所以它是最小项m₃。
- 一个包含函数所有
-
标准积之和表达式 (Sum of Minterms):
- 也称为“最小项之和”,是由若干个最小项通过逻辑或运算组成的表达式。
- 任何一个逻辑函数都可以表示为唯一的最小项之和形式。
- 示例:
F(A,B,C) = m₁ + m₃ + m₄ + m₅ = Σm(1,3,4,5)
标准和之积 (POS - Product of Sums)
-
最大项 (Maxterm):
- 一个包含函数所有
n个变量的和项。 - 每个变量在最大项中以原变量或反变量的形式出现,且仅出现一次。
- 变量约定:原变量为
0,反变量为1。 - 例如,对于三变量函数
F(A, B, C),和项A+B'+C'对应的二进制是011,所以它是最大项M₃。
- 一个包含函数所有
-
标准和之积表达式 (Product of Maxterms):
- 也称为“最大项之积”,是由若干个最大项通过逻辑与运算组成的表达式。
- 示例:
F(A,B,C) = M₀ · M₂ · M₆ · M₇ = ΠM(0,2,6,7)
最小项与最大项的关系
最小项和最大项之间存在互补关系:
因此,一个逻辑函数的最小项之和表达式与最大项之积表达式是等价的。例如:
卡诺图化简
代数化简法比较复杂,卡诺图提供了一种更简单、更直观的图形化方法来简化逻辑函数。
1. 什么是卡诺图 (Karnaugh Map)?
xy + xy' = x
卡诺图是真值表的一种图形化表示,它将 n 个变量的 2ⁿ 个最小项用 2ⁿ 个小方格表示。这些方格按照特定的规则排列(格雷码顺序),使得几何上相邻的方格在逻辑上也相邻(即只有一个变量不同)。
下面是一个三变量 (X, Y, Z) 的卡诺图结构示例:
graph TD
subgraph Z
direction LR
0
1
end
subgraph XY
direction TB
00
01
11
10
end
subgraph Karnaugh Map
direction LR
A[0] -- 2 --> B[6] -- 4 --> C
D[1] -- 3 --> E[7] -- 5 --> F
end
style A fill:#fff,stroke:#333,stroke-width:2px
style B fill:#fff,stroke:#333,stroke-width:2px
style C fill:#fff,stroke:#333,stroke-width:2px
style D fill:#fff,stroke:#333,stroke-width:2px
style E fill:#fff,stroke:#333,stroke-width:2px
style F fill:#fff,stroke:#333,stroke-width:2px
- 行和列: 代表了变量的不同取值组合。
- 方格: 每个方格对应一个唯一的最小项。
2. 使用卡诺图化简的步骤
用大白话说就是:如果两件事,唯一的区别是一个需要条件 y,另一个需要条件 y’,那么其实条件 y 根本不重要,只要满足共同的条件 x 就行了。(即满足:xy + xy' = x)
“画卡诺圈”这个动作,就是在用眼睛找出所有符合 xy + xy’ = x 这种模式的“邻居”! 每画一个圈,你就是在进行一次这样的化简,但你根本不需要动笔去算代数。
-
绘制卡诺图: 根据逻辑函数中的最小项,在对应的方格中标
1,其余方格标0(或不标)。 -
画卡诺圈 (Grouping):
- 将相邻的
1方格圈起来。 - 圈必须是矩形,且包含的
1的数量必须是 (如1, 2, 4, 8…)。 - 目标是圈尽可能大,圈的数量尽可能少。
- 卡诺图的边界是循环的,即第一行和最后一行相邻,第一列和最后一列也相邻。
- 将相邻的
-
写出最简表达式:
- 每一个卡诺圈对应一个化简后的与项。
- 找出圈内保持不变的变量,写入与项中。如果变量值为
1,则为原变量;如果为0,则为反变量。 - 将所有卡诺圈对应的与项相加(逻辑或),即可得到最简的“与或”表达式。

核心思想:画圈 = 目视化简
例1:最简单的横向圈 f = m₁ + m₃
-
填图:
- 这是一个2变量 (A, B) 卡诺图。
m₁是A'B(A=0, B=1),所以把1填在 A=0, B=1 的格子里。m₃是AB(A=1, B=1),所以把1填在 A=1, B=1 的格子里。
-
画圈:
- 我们发现这两个
1水平相邻。根据规则,相邻的1可以圈起来。 - 这个圈是一个 1x2 的矩形,里面有
2¹=2个1,符合规则。
- 我们发现这两个
-
解读圈 (写表达式):
- 现在问自己:“在这个圈覆盖的区域里,哪个变量的值没有变?”
- 看变量 B: 在这个圈里,两个
1都处在B=1这一行。所以 B 的值没变,一直是1。我们把它记下来:B。 - 看变量 A: 这个圈跨越了
A=0和A=1两列。所以 A 的值变了 (从0变成了1)。既然它变了,就说明它不重要,根据xy + xy' = x的原则,我们把它消掉! - 结论: 这个圈化简后的结果就是
B。所以f = m₁ + m₃ = A'B + AB = B。
例2:最简单的纵向圈 f = m₀ + m₁
- 画圈: 这次两个
1是垂直相邻的。圈起来! - 解读圈:
- 看变量 A: 两个
1都处在A=0这一列。A 的值没变,一直是0。我们记下来:A'。 - 看变量 B: 圈跨越了
B=0和B=1两行。B 的值变了。消掉它! - 结论: 这个圈的结果就是
A'。所以f = m₀ + m₁ = A'B' + A'B = A'。
- 看变量 A: 两个
例3:最关键的“卷起来”—— 3变量卡诺图
这张图展示了卡诺图最神奇的特性:它的边界是相通的! 你可以把它想象成一个圆筒。
-
看左边那个3变量图:
- 它圈了两个
1,一个在最左边的AB=00列,一个在最右边的AB=10列。 - 它们看起来不相邻,但是!因为卡诺图是“卷起来的”,最左列和最右列其实是相邻的!
- 为什么相邻? 我们看它们的编码:
00和10。是不是只有第一位(代表 A)不同?第二位(代表 B)都是0。所以它们逻辑上是相邻的!
- 它圈了两个
-
解读这个“卷起来的”圈:
- 看变量 C: 两个
1都在C=0这一行。C 没变,一直是0。记下来:C'。 - 看变量 A: 圈跨越了
A=0(在AB=00中) 和A=1(在AB=10中) 的区域。A 变了。消掉! - 看变量 B: 在
AB=00中 B 是0,在AB=10中 B 也是0。B 没变,一直是0。记下来:B'。 - 结论: 这个圈的结果是
B'C'。
- 看变量 C: 两个
例4:大圈的威力 —— 4变量卡诺图
这张图展示了画圈的核心目标:圈要尽可能大,圈的数量要尽可能少!
-
看那个最大的 2x4 的圈:
- 这个大圈把中间两行 (
CD=01和CD=11) 全都圈起来了。 - 我们来解读它:
- 看变量 A, B: 这个圈横跨了所有四列 (
AB=00, 01, 11, 10)。所以 A 和 B 都在变。全部消掉! - 看变量 C, D: 这个圈覆盖了
CD=01和CD=11两行。- C 的值变了 (从0到1)。消掉!
- D 的值没变,一直是1。记下来:
D。
- 结论: 这个包含了8个
1的巨大圈,最后只化简成了一个变量D!这就是大圈的威力!
- 这个大圈把中间两行 (
-
看那个 4x2 的圈:
- 它圈住了中间两列 (
AB=01和AB=11)。 - 解读它:
- 看变量 A:
AB=01中 A 是0,AB=11中 A 是1。A 变了。消掉! - 看变量 B:
AB=01中 B 是1,AB=11中 B 也是1。B 没变,一直是1。记下来:B。 - 看变量 C, D: 圈竖着跨了所有四行。C 和 D 都在变。全部消掉!
- 结论: 这个包含了8个
1的圈,最后化简成了B。
- 它圈住了中间两列 (
总结一下“画圈”和“解读”的动作
- 画圈 (Grouping):就是一个找邻居的游戏。你的任务是用尽可能大的矩形(大小必须是2, 4, 8…)把所有的
1都框起来。记住,地图是卷起来的,最左和最右是邻居,最上和最下也是邻居。 - 解读 (Writing the term):对于你画的每一个圈,你都要做一个“找不同”的游戏。把那些在圈内变来变去的变量都扔掉,只留下从头到尾保持不变的变量。

3. 含无关项的函数化简
- 无关项 (Don’t Care terms): 在某些实际逻辑问题中,一些输入组合永远不会出现,或者出现时其输出结果无关紧要。这些项称为无关项,在卡诺图中用
d或X表示。 - 化简策略:
- 在画圈时,可以利用
d项来使卡诺圈变得更大,从而得到更简化的结果。 d项可以被圈,也可以不被圈,取决于是否有利于化简。- 但是,不能单独只圈
d项。必须至少包含一个1。
- 在画圈时,可以利用

4. 冒险 (Hazards)
-
定义: 当电路的输入信号发生变化时,由于电路中存在的延迟,输出端可能会产生非正常的短暂尖峰脉冲(毛刺,Glitch)。这种现象称为冒险。

-
产生原因: 在卡诺图中,如果两个卡诺圈相切(即没有重叠部分),当输入信号在两个圈的边界切换时,就可能产生冒险。
-
消除方法:
-
增加冗余项: 在卡诺图中,为两个相切的卡诺圈增加一个跨立在这两个圈上的冗余圈。这样会使电路不再是最简的,但可以消除冒险。

-
其他方法: 增加滤波电容或使用选通脉冲。
-
小结
-
逻辑表达式:
- 有标准形式(最小项之和、最大项之积)。
- 不同的表达式形式,电路性能可能差异很大。
-
电路优化:
- 卡诺图化简是核心方法,对于6变量及以下的函数非常方便有效。
- 化简含无关项的函数时,可以利用无关项使电路进一步简化,而不改变其实际逻辑功能。
-
电路可靠性:
- 最简电路经常会出现冒险现象。
- 可以通过增加冗余项来消除冒险,以牺牲一定的简洁性换取电路的稳定性。
组合电路分析与设计
简单来说,就是学习怎么分析一个别人给你的逻辑电路,以及怎么根据需求自己设计一个逻辑电路。
什么是组合电路?
组合逻辑电路是数字电路中最基本的一种。你可以把它想象成一个“黑盒子”,它有几个输入端和几个输出端。
它的核心特点非常简单:
- 输出只看现在:在任何时候,电路的输出值只取决于那一瞬间的输入值,跟电路过去的状态一点关系都没有。
- 没有记忆:电路内部不包含任何能“记住”过去状态的元件(比如触发器)。
- 没有回路:信号从输入端流向输出端,是单向的,没有反馈回路(即输出信号不会再绕回到输入端)。
组合电路的分析
“分析”就像是给你一个已经搭建好的乐高模型,让你搞清楚它到底是什么,能做什么。
目标:从一个已知的电路图,推导出它的逻辑功能。
分析步骤(通用流程)
- 写出逻辑表达式:从电路的输入端开始,逐级向后推导,写出每个逻辑门的输出表达式,直到得到最终输出端的完整逻辑表达式。
- 化简或变换表达式:对得到的表达式进行化简(使用布尔代数或卡诺图),或者根据需要变换成“与或”、“或与”等标准形式。
- 列出真值表:根据最终的逻辑表达式,列出所有输入组合对应的输出值,形成真值表。
- 确定功能:观察真值表或分析逻辑关系,用语言描述出这个电路实现了什么功能。
举例:分析一个一位全加器
下面的电路有两个输出 J 和 H。

-
写表达式:
- 对于
J:J = (A·B) + ((A+B)·C) - 对于
H:H = (A+B+C) · (A·B + A·C + B·C)' + (A·B·C)(这个表达式比较复杂,可以通过化简或直接列真值表来分析)
- 对于
-
列真值表: 通过逐一分析输入
A, B, C的8种组合(从000到111),我们可以得到下面的真值表:
| A | B | C (进位输入) | J (进位输出) | H (和) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
- 确定功能:
观察真值表可以发现,这完全符合二进制加法规则。
A和B是两个加数,C是来自低位的进位。H是A+B+C的“和”,J是产生的向高位的“进位”。 所以,这个电路的功能是一个一位全加器。
组合电路的设计
“设计”则完全相反,是给你一个任务(比如“我要一个能比较大小的电路”),让你从零开始把它搭建出来。

目标:根据实际的逻辑需求,设计出最简单的、符合功能的逻辑电路。

设计步骤(通用流程)
-
逻辑抽象:
- 搞清楚需求:明确要解决什么问题。
- 定义输入输出:确定需要几个输入变量和几个输出变量。
- 赋予逻辑含义:定义
0和1分别代表什么状态(例如,1代表“有故障”,0代表“正常”)。
-
列出真值表:
- 根据第一步的逻辑定义,遍历所有可能的输入组合,并写出每种情况下期望的输出值。
-
写出并化简逻辑表达式:
- 从真值表中,为每一个输出变量写出它的逻辑表达式(通常先写成“最小项之和”的形式)。
- 使用卡诺图等工具对表达式进行化简,得到最简的“与或”式。这是为了让最终的电路使用的逻辑门最少,成本最低。
-
画出逻辑电路图:
- 根据化简后的逻辑表达式,使用对应的逻辑门(与门、或门、非门等)画出最终的电路图。
层次化设计方法
当电路变得非常复杂时(比如设计一个 CPU),一步到位画出所有逻辑门是不现实的。这时就需要“层次化设计”的思想。
核心思想:分而治之。把一个复杂的大问题,分解成若干个简单的小问题来解决。
graph TD
subgraph 设计流程
direction LR
A(自顶向下分解) --> B(自底向上实现);
end
subgraph 示例: 4位比较器
C(比较两个4位数) --> D(比较两个1位数);
D --> E(用逻辑门实现1位比较);
E -- 组合 --> F(用4个1位比较器搭成4位比较器);
end
-
自顶向下分解 (Top-Down):
- 从最高层的功能入手(例如:设计一个4位相等比较器)。
- 把它分解成几个功能更简单的子模块(例如:4个1位相等比较器)。
- 如果子模块还复杂,就继续分解,直到模块足够简单,可以用基本逻辑门直接实现。
-
自底向上实现 (Bottom-Up):
- 先设计和实现最底层的、最简单的模块(例如:用逻辑门搭建出1位相等比较器)。
- 然后像搭积木一样,用这些已经实现的小模块去组装成更高级、更复杂的模块(例如:用4个1位比较器模块,连接成一个4位相等比较器)。
优点:
- 思路清晰,降低复杂度:每次只专注于一个简单的小模块。
- 便于重用:设计好的模块可以被多次使用,提高效率。
- 易于维护和调试:如果出错,可以快速定位到具体是哪个模块的问题。