真值表推算门电路逻辑与化简

前言

这是我大学还是一名籍籍无名的做题家时记下的笔记,主要是为了做题,但其实还是有实际意义的,从实际需要写出真值表,从真值表推算门电路逻辑,然后选取合适的电路设计。

有点感慨,当初的文字略显青涩还啰嗦,如今除了不是做题家还是和那时一样。

对我使用炎拳吧

推门电路核心四步

  1. 列真值表,筛选出输出Y=1的所有行(输出为0的行不用管,简化工作量);
  2. 每一行的变量组合,写成一个“最小项”(与项,比如A=0、B=1,就是A’B);
  3. 所有最小项用“或”(+)连接,得到原始的与-或标准式;
  4. 化简(用套路、极简公式、卡诺图)。

肉眼化简套路

约定:A' = A非(取反),· = 逻辑与(可省略,比如AB就是A·B),+ = 逻辑或

  1. 互补抵消
    • A + A' = 1(一正一反或运算,直接等于1,比如A+A’BC = 1·BC = BC)
    • A·A' = 0(一正一反相乘,直接等于0,比如A·A’B = 0·B = 0)
  2. 重复项删除
    • A + A = A(不管写多少次,只留1个)
    • A·A = A(同理,重复的与项只留1个)
  3. 短项吸收长项
    • A + AB = A(只要有单独的A,带A的长项全删,比如A + ABC + ABD = A)
    • A + A'B = A + B(留正项,去掉反项,比如A + A’BC = A + BC)
  4. 成对消去相反变量
    • AB + AB' = A(B和B’相反,直接消去,只剩相同的A)
    • A'B + AB = B(同理,A和A’相反,消去后只剩B)
  5. 交叉冗余项删除
    • AB + A'C + BC = AB + A'C(BC是冗余项,直接删,再比如AB + A’C + ABC = AB + A’C)

对于第五点,交叉冗余项,其中含义是有两项中有一个输入符号相同,相性想法,另外两个符号不同,而交叉冗余项就是取了那俩不同符号的项目,直接与上那个相同符号的1就行,,解释一下:

上面的符号,A是两项都有且相性相反的,BC是不同符号组合的项,那么直接与上A组合的1 -> BC(A+A') = ABC + A'BC,其中A+A'就是1,然后短项吃掉长项,就得到结果了。

公式

公式 备注
A + 1 = 1;A + 0 = A 或运算:遇1则1,遇0不变
A·0 = 0;A·1 = A 与运算:遇0则0,遇1不变
A + A’ = 1;A·A’ = 0 互补律,最常用,一眼识别
A + B = B + A;AB = BA 交换律,顺序随便换,不影响结果
A(B + C) = AB + AC 分配律,拆开括号用,化简常用
A + AB = A 短项吸长项,记“短吃长”
A + A’B = A + B 留正去反,记“删反项,留正项”
(A+B)’ = A’B’;(AB)’ = A’+B’ 德摩根定律,取反用,记“或变与、与变或,全取反”

卡诺图化简

核心逻辑

把真值表的最小项(Y=1的项)填入方格,相邻的方格(只变1个变量)可以合并,消去变化的变量,最终得到最简与或式。

关键规则

  1. 方格排列:变量按“格雷码”排列(00→01→11→10),保证相邻格子只变1个变量;
  2. 圈格子规则:只能圈2、4、8个格子(2的n次方),圈越大越好,重叠圈没关系;
  3. 写表达式:每个圈里,不变的变量保留(全1留原变量,全0留反变量),变化的变量消去。

卡诺图例子

例一:2变量卡诺图(Y=AB + AB’)

  1. 变量:A、B(2变量,卡诺图2×2方格)

  2. 真值表(只列Y=1的行):

    A B Y 最小项
    1 0 1 AB’
    1 1 1 AB
  3. 画卡诺图(行=A,列=B,格雷码排列):

    A\B 0(B’) 1(B)
    0(A’) 0 0
    1(A) 1 1
  4. 圈格子:把两个1圈起来(2个格子,符合规则)

  5. 化简:圈里A全是1(不变),B有0有1(变化,消去),所以Y=A(和套路4结果一致)

例二:3变量卡诺图(Y=A’BC + ABC + AB’C + A’B’C)

  1. 变量:A、B、C(3变量,卡诺图2×4方格)

  2. 真值表(Y=1的行):

    A B C Y 最小项
    0 0 1 1 A’B’C
    0 1 1 1 A’BC
    1 0 1 1 AB’C
    1 1 1 1 ABC
  3. 画卡诺图(行=A,列=BC,列按00→01→11→10排列):

    A\BC 00 01 11 10
    0(A’) 0 0 1 0
    1(A) 0 0 1 0

    (补充:3变量卡诺图行是A(0、1),列是BC(00、01、11、10),上面4个格子对应A=0,下面4个对应A=1;Y=1的格子是(A’,BC=11)、(A,BC=11)、(A’,BC=01)、(A,BC=10))

  4. 圈格子:把4个1圈成一个大圈(4个格子,符合规则)

  5. 化简:圈里C全是1(不变),A有0有1、B有0有1(变化,消去),所以Y=C

例三:4变量卡诺图(Y=ABCD + ABC’D + AB’CD + AB’C’D + A’BCD + A’BC’D)

  1. 变量:A、B、C、D(4变量,卡诺图4×4方格)

  2. 真值表(Y=1的行,只列最小项):ABCD、ABC’D、AB’CD、AB’C’D、A’BCD、A’BC’D

  3. 画卡诺图(行=AB,列=CD,均按格雷码00→01→11→10排列):

    AB\CD 00 01 11 10
    00(A’B’) 0 0 0 0
    01(A’B) 0 1 1 0
    11(AB) 0 1 1 0
    10(AB’) 0 1 1 0
  4. 圈格子:

    • 第一圈:(A’B,CD=01)、(A’B,CD=11)、(AB,CD=01)、(AB,CD=11)→ 4个格子
    • 第二圈:(AB’,CD=01)、(AB’,CD=11)→ 2个格子
  5. 化简:

    • 第一圈:B全是1,D全是1,A有0有1(消去),C有0有1(消去) → 表达式:BD
    • 第二圈:A全是1,B全是0(B’),C有0有1(消去),D全是1→ 表达式:AB’D
    • 最终最简式:Y = BD + AB’D = D(B+AB’) = AD + BD

逻辑表达式化简练习

习题一:原始式 Y = A’BC + ABC + AB’C

  1. 用套路化简:
    • 前两项:A’BC + ABC = BC(A和A’相反,消去A)
    • 剩余:BC + AB’C = C(B + AB’) = C(A + B)(用套路3:A + AB’ = A + B)
    • 最简式:Y = C(A + B) = AC + BC
  2. 用卡诺图验证:3变量,Y=1的最小项是A’BC、ABC、AB’C,圈格子后得到同样结果。

习题二:原始式 Y = AB + A’C + BC + ABC

  1. 用套路化简:
    • 先删冗余项:AB + A’C + BC(ABC被AB吸收,删去)
    • 再删冗余项:AB + A’C(BC是冗余项,删去)
    • 最简式:Y = AB + A’C
  2. 用卡诺图验证:3变量,圈格子后,AB和A’C两个圈,无冗余,结果一致。

SR锁存器逻辑式推算

像加法器、逻辑译码等电路,都属于组合逻辑电路:输出结果仅由当前时刻的输入唯一决定,电路无记忆能力。但除此之外,数字电路还有另一大类:时序逻辑电路,又分为同步时序与异步时序。

时序逻辑和组合逻辑最核心的区别是:具备状态记忆功能,输出不仅取决于当前输入,还依赖电路上一时刻的历史状态。而实现记忆的关键,就是引入反馈环路,将电路的输出反向接入自身输入端,以此锁住、保存数据状态,这也是锁存器这类电路能够存储 1 位数据的根本原理。

无论是哪种逻辑电路,推算逻辑表达式都万变不离其宗,下面推算一个SR锁存器的逻辑表达式。

首先明确SR锁存器的核心变量,它作为异步时序逻辑电路,推算时必须引入旧状态Qₙ(上一时刻的输出,体现记忆功能),输入为置1端S、置0端R,输出为新状态Qₙ₊₁(下一时刻的输出),同时排除S=1、R=1的非法状态(禁止使用,不参与表达式推导)。其完整特性表如下(仅保留有效状态):

异步时序靠自身线路反馈自行锁住状态、随时变化;同步时序必须等外部时钟CLK信号触发,才会统一更新状态。

S R 旧状态Qₙ 新状态Qₙ₊₁ 功能
0 0 0 × 非法禁用 禁止
0 0 1 × 非法禁用 禁止
0 1 0 0 复位清0
0 1 1 0 复位清0
1 0 0 1 置位写1
1 0 1 1 置位写1
1 1 0 0 保持
1 1 1 1 保持

首先,去除禁止行,不参与推算。

然后沿用组合逻辑的推算思路,只筛选出 新状态 Qn+1=1Q_{n+1} = 1 的行,写出对应的最小项(输入变量为 SRQnS、R、Q_{n},三者均为1时构成最小项):

Qn+1=SRQn+SRQn+SRQn Q_{n+1} = SR'Q_{n}' + SR'Q_{n} + SRQ_{n}

接下来进行化简,得:

Qn+1=S(R+Qn) Q_{n+1} = S(R' + Q_{n})

用德摩根定律可以得到这样的式子:

Qn+1=S(R+Qn)=S((RQn)) Q_{n+1} = S(R' + Q_{n}) = S((RQ_{n}')')

这样就只剩下与门和非门了,然后我们就能得到他的电路(先把Qn当做一个电路黑盒画出来,后面直接把式子输出替代Qn即可)

注意,这只是一种SR锁存器,还有别的类型;这里的SR锁存器是低有效的,即0触发动作,因为真值表是s和r都为1时保持数据,当他们变到0时才会触发置位或复位动作。

一种SR锁存器电路图

这里的输出是这样确定的,把两个与非门输出定义为G1(左),G2(右);然后就能得到:

{G1=SG2G2=RG1 \begin{cases} G_1 = \overline{S \cdot G_2} \\ G_2 = \overline{R \cdot G_1} \end{cases}

然后把S=1,R=0,输出为1的置位功能参数代入,就得到了G2输出一定为1,由此判定G2为输出Q,G1为输出Q’。

需要使用SR锁存器的话,只要推断S(置位)的表达式,R(复位)的表达式接入上面的结构即可(这句话实际是错误的,因为还要考虑如何不可达非定义状态,即S和R不能同时为0)。

实际电路设计

实际的电路设计比纸上谈兵的结果要复杂,毕竟书面上是理论上如何如何,实际电路是需要考虑物理特性的。

可以看看下面的视频讲解,讲到了双稳态电路,还有非定义状态(实际电路设计极力避免的情况,需要做到不定状态电路逻辑不可达,一般都是加个双稳态结构)和不定态(从非定义态转换到保持态,由于门电路延迟问题,总会有一个先变,一个后变,而且不固定,导致保持的数据不能确定),这在电路设计中都很重要,算是理解时序电路的起点吧:

【数字电子技术基础】一个视频带你彻底搞懂SR锁存器不定态和非定义状态

结语

  1. 化简优先级:先看套路(肉眼能化简的先化简)→ 再用公式 → 复杂的(3变量及以上)直接画卡诺图;
  2. 卡诺图关键:相邻格子必须只变1个变量,圈越大越简单,不用怕重叠;
  3. 不用死背复杂公式,记住套路和卡诺图,所有化简题都能搞定;
  4. 实际意义:化简后的逻辑式越简单,用的门电路越少,硬件成本越低(比如按键逻辑、IO判断,都会用到)。
  5. 组合逻辑电路和时序电路有所不同,实际设计电路往往要考虑更多的东西,不是按照组合逻辑连接门电路就一定能实现想要的效果。