我们已经知道,一个逻辑表达式可以由相应的种逻辑门电路来实现。表达式简单,对应的电路也简单;表达式复杂,对应的电路也复杂。实际应用中总希望用尽可能少的元器件来完成特定的逻辑功能,这就需要对逻辑表达式进行化简。逻辑表达式化简的方法有多种,最常用的是代数化简法和卡诺图化简法。在介绍逻辑表达式化简方法前,有必要先了解一下逻辑表达式的表示形式。
1.“与或”式和“或与”式
一个表达式中若包含有若干个“与”项,每个“与”项中又可包含一个或多个以原变量或反变量形式出现的变量,所有这些“与”项的“或”所表示的表达式,就称为“与或”式,
如
一个表达式中若包含有若干个“或”项,每个“或”项中又可包含一个或多个以原变量或反变量形式出现的变量,所有这些“或”项的“与”所表示的表达式,就称为“或与”式,
如
实际的表达式可能是“与或”式,也可能是“或与”式,甚至是既包含“与或”式又包含“或与”式的混合表达式。但是,表示同一逻辑关系的表达式无论它的形式如何不同,它的真值表都是唯一的。
2. 最小项与标准“与或”式
一个n变量的“与或”式,若其中每个“与”项都包含了n个变量(每个变量以原变量或反变量形式在“与”项中出现且仅出现一次),这种“与”项称为最小项。例如,三变量的最小项有
共八个(即
个)。
理论上说,一个n变量的逻辑表达式应该有 个最小项。为方便起见,常用
来表示最小项,其中i为
中的任一数,其确定原则为:最小项中变量按规则顺序排列,其中的原变量记作1、反变量记作0,所得的n位二进制数所对应的十进制数值便为最小项的下标值 。如:
其中 表示累计的“或”运算,括号中的数字表示最小项的下标值
为进一步说明最小项的性质,以三变量表达式为例,列出其所有最小项的真值表如下表所示。
从上表中可看出,最小项具有下列性质:
(1)在输入变量的任何取值下必有一个最小项,而且仅有一个最小项的值为1。
(2)任意两个最小项的乘积为0。
(3)全体最小项之和为1。
(4)具有相邻性的两个最小项之和可以合并成一项并消去一个因子。
若两个最小项仅有一个因子不同,则称这两个最小项具有相邻性。例如, 和
两个最小项只有一个因子不同,所以他们具有相邻性。这两个最小项相加时可以合并,消去一个因子。如:
利用基本公式 可以把任何一个逻辑式展开为最小项之和的形式,这种形式就是标准“与或”式。标准“与或”式在逻辑表达式的卡诺图化简法中以及计算机辅助分析和设计中得到广泛的应用。例如,给定逻辑表达式如下:
化为最小项表示为:
有时也写成 或
的形式。
【例2】 将逻辑表达式 展开为标准的“与或”式。
解
由于表示同一逻辑关系的表达式具有唯一的真值表,故从真值表可以推导出标准“与或”式。具体方法是:将表达式L的真值表列出,找出真值表中使L为“1”的变量组合,依次将其中的“1”写成对应的原变量、“0”写成对应的反变量,在将所得的最小项相“或”便可。另外,还可以从真值表写出该逻辑表达式的反逻辑式的标准“与或”式。如例2的逻辑式L的真值表如下,从表中也可得到L的标准“与或”式和其反逻辑式的标准“与或”式
逻辑表达式 的真值表
3. 最大项与标准“或与”式
一个n变量的“或与”式,若其中每个“或”项都包含了n个变量(每个变量以原变量或反变量形式在“或”项中出现且仅出现一次),这种“或”项称为最大项。例如,三变量的最大项有
理论上说,一个n变量的逻辑表达式应该有 个最大项。为方便起见,常用
来表示最大项,其中i为
中的任一数,其确定原则为:最大项中变量按规则顺序排列,其中的原变量记作0、反变量记作1,所得的n位二进制数所对应的十进制数值便为最大项的下标值I。如;
其中“”表示累计的“与”运算,括号中的数字表示最大项的下标值。
为进一步说明最小项的性质,以三变量表达式为例,列出其所有最小项的真值表如下。
三变量最大项编码表
最大项具有下列性质:
(1)在输入变量的任何取值下必有一个最大项,而且仅有一个最大项的值为0。
(2)任意两个最大项之和为1。
(3)全体最大项之积为0。
(4)只有一个变量不同的两个最大项的乘积等于各相同变量之和。
如将三变量最小项编码表示与最大项编码表示相比较,可发现最大项和最小项之间存在如下关系:
例如,,则
如上所述,任何一个逻辑表达式都可化成 的形式。同时,我们又从最小项的性质得知全部最小项之和为1,即
。因此,根据
可知,
必然等于全部最小项中除去
以外那些最小项之和,即
故得出
利用反演规则又可将上式变换为
这就是说,如果已知逻辑表达式 时,一定可将它化成编号为 以外的那些最大项的乘积形式,这种形式就是标准“或与”式。
4.最简表达式的基本形式 最简表达式的标准是:所含项数(“与”项或“或”项)最少,且每项中所含变量最少。最简表达式的基本形式有“与或”式、“与非—与非”式、“与或非”式、“或与”式、“或非—或非”式等五种。同一逻辑关系可以用不同的最简表达式来表示,如:
“与或”式:
“与非—与非”式:
“与或非”式:
“或与”式:
“或非—或非”式:
在实际应用中,逻辑式经化简后,往往还需要根据所选的逻辑门电路,将最简表达式转换成合适的形式,以便电路实现,由于逻辑代数的基本公式和常用公式多以“与或”式形式给出,用以化简“与或”式比较方便,所以下面主要讨论“与或”式的化简。有了最简“与或”式以后,再通过公式变换就可以得到其他类型的逻辑式。但要注意,将最简“与或”式直接变换为其他类型的逻辑式时,得到的结果不一定也是最简的。
【例3】 试将“与或”式
解:根据 ,再利用反演规则可得
因此可知,只要将“与或”式两次求反,就转换成了“与非—与非”式。
【例4】 试将“与或”式
化为“与或非”式
解:首先将L化为标准“与或”式
又由 知
此即所求的“与或非”式。
公式化简法的实质就是反复使用逻辑代数的基本公式和常用公式消去多余的乘积项和每个乘积项中多余的因子,以求得逻辑式的最简形式,因此,化简时没有固定的步骤可循。现将经常使用的方法归纳如下。
一、并项法
运用公式 可以把两项合并成一项,并消去B和
这两个因子。根据代入定理,A和B还可以是任何复杂的逻辑式。
【例5】 化简逻辑式
解:
二、吸收法
根据公式A+AB=A可将AB项消去。A和B同样也可以是任何一个复杂的逻辑式。
【例6】 化简逻辑式
解:
三、消项法
根据公式 可将BC项消去。A和B同样也可以是任何一个复杂的逻辑式。
【例7】 化简逻辑式
解:
四、消因子法
利用公式 可将
中的因子
消去。A、B均可以是任何复杂的逻辑式。
【例8】 化简逻辑式
解:
五、配项法
1. 根据基本公式A+A=A可以在逻辑式中重复写入某一项,以获得更加简单的化简结果。
【例9】 化简逻辑式
解:
2. 根据基本公式 ,有时可将式中的某一项乘以
,然后拆成两项分别与其他项合并,以求得更简单的化简结果。
【例10】 化简逻辑式
解:
3.也可适当加上一些多余项或无关项,然后做进一步简化。
【例11】 化简例10中逻辑式L。
解:
从此例可看出,同一逻辑式的化简结果不一定相同,但都必须满足最简逻辑式的标准。
以上就是常用的公式化简法,在化简复杂的逻辑式时,往往需要灵活、交替的运用上列方法,才能取得满意的结果。
【例12】 化简逻辑式
解:
由上节可知,利用代数法可使逻辑函数变成较简单的形式。但使用这种方法要求熟掌握逻辑代数的基本定律,而且需要一些技巧,特别是经代数化简后得到的逻辑表达式是否是最简式比较难掌握,而本节介绍的卡诺图法可以比较简单地得到最简的逻辑表达式。
一、逻辑表达式的卡诺图表示法
1. 用卡诺图表示最小项
将n变量的全部最小项各用一个小方格表示,并使具有逻辑相邻性的最小项在几何位置上也相邻地排列起来,所得到的图形叫做n变量的卡诺图。所谓几何相邻,是指卡诺图上邻接的任意两个小方格所代表的两个最小项中,仅有一个变量互为反变量,其余变量均相同。这种相邻关系既可是上下相邻、左右相邻,也可是首尾相邻,即一列中最上格与最下格相邻、一行中最左格与最右格相邻。
如图2-10(a)、(b)、(c)给出常用的二、三、四变量的卡诺图。
图2-10 二、三、四变量卡诺图
图形两侧标注的0和1表示对应小方格内最小项为1的变量取值。同时,这些0和1组成的二进制数大小也就是对应最小项的编号。此外,为保证几何位置相邻的最小项在逻辑上也具有相邻性,这些数码不能按自然二进制数顺序排列,必然排成循环码。
在变量数大于等于五后,仅仅用几何图形在两维空间的相邻表示相邻性已经不够了,并且用卡诺图化简效果也不够好。
2. 用卡诺图表示逻辑式
既然任何一个逻辑式都能表示为标准的“与或”式,即最小项之和的形式,那么自然也就可以用卡诺图来表示逻辑式了。具体的作法是首先把逻辑式化成最小项之和的形式,然后在卡诺图上与这些最小项的位置上填1,在其余位置上填0,这样就得到了表示该逻辑式的卡诺图。因此可以说,任何一个逻辑式都等于它的卡诺图中填入1的那些最小项之和。
【例13】 用卡诺图表示逻辑式
解:逻辑式 已经是标准“与或”式,即 ,则在四变量卡诺图中对应
的小方格内填入1,其余位置填入0,就得到
的卡诺图。
利用真值表与标准“与或”式的对应关系,可以从真值表直接得到函数的卡诺图。只要将真值表中输出为1的最小项所对应的小方格填入1,其余填入0即可。
如果函数表达式是非标准的“与或”式,可先将其化成标准的“与或”式,然后在画卡诺图。
【例14】用卡诺图表示逻辑式
解: 首先把该逻辑式化成标准“与或”式。
把上述最小项填入卡诺图得到下面的卡诺图:
最后得到最简逻辑表达式L=AB+C
二、用卡诺图化简逻辑式
利用卡诺图化简逻辑式的方法称为卡诺固化简法或图形化简法。化简时依据的基本原理就是具有相邻性的最小项可以合并,并消去不同的因子。由于在卡诺图上几何位置相邻与逻辑上的相邻性是一致的,因而从卡诺图上能宣观地找出那些具有相邻性的最小项并将其合并化简。
1、合并最小项的规则
(1)若两个最小项相邻,则可合并为一项并消去一对因子。合并后的结果中只剩下公共因子。例如在例14中,ABC(m7)与ABC(m6)相邻,可合并消去因子C与C。
(2)若四个最小项相邻并排列成一个矩形组,则可合并为一项并消去两对因子,合并后的结果中只包含公共因子。
同样在例14中,四个最小项 相邻,可削去两对因子,其过程如下:
合并后消去了A 、 和B、B两对因子,只剩下公共因子C。
(3)若八个最小项相邻并且排列成一个矩形组,则可合并为一项并捎去三对因子,合并后的结果中只包含公共因子。
例如,在下图的卡诺图中,下边两行的八个最小项是相邻的,可将它们合并得到A,其他的因子都被消去;左右两边八个最小项也相邻,合并得到D(—),其他的因子都被消去。
至此,可以归纳出合并最小项的一般规则,这就是;如果有 个最小项相邻(n=1,2,…)并排列成一个矩形组,则它们可以合并为一项,并消去n对因子。合并后的结果中仅包含这些最小项的公共因子。
2、用卡诺图化简逻辑函数时可按如下步骤进行:
(1)将逻辑式化为标准“与或”式。
(2)画出表示该逻辑式的卡诺图。
(3)找出可以合并的最小项。
(4)选取化简后的乘积项。选取的原则是
a. 这些乘积项应包含逻辑式中所有的最小项(应复盖卡诺图中所有的1)。
b. 所用的乘积项数目最少。也就是可合并的最小项组成的矩形组数目最少。
c. 每个乘积项包含的因子最少。也就是每个可合并的最小项矩形组中应包含尽量多的最小项。
【例15】 用卡诺图化简法将下式化简为最简“与或”式
解:首先画出表示逻辑式的卡诺图如下,由于圈定相邻项有多种情况(本例题有两种)。所以,画出(a)、(b)两种圈定相邻项的卡诺图。
由于有两种可取的合并最小项的方案,这样所得到的得到逻辑表达式就有两种表现形式:
两个化简结果都符合“与或”式的标准。
此例再次说明,有时一个逻辑式的化简结果不是唯一的。
【例16】用卡诺图化简法将下式化为最简“与或”式
解:首先画出L的卡诺图,如下图所示。然后,找出能合并的最小项,并用线圈出。由图可见,下边八个最小项可以合并,左、右两列的八个最小项可以合并。最后选择用在化简结果中的乘积项。根据前面讲过的原则,应取:
从上图中,可以看到,A和D中重复包含了 这四个最小项。但根据A+A=A可知,在合并最小项的过程中允许重复使用逻辑式中的最小项,以利于得到更简单的化简结果。
另外,还要补充说明一个问题。在以上的两个例子中,我们都是通过合并卡诺图中的1来求得化简结果的。在实际中,也可以通过合并卡诺图中的0先求出L(—)的化简结果,然后再将L(—)求反而得到L。
因为全部最小项之和为1,所以若将全部最小项之和分成两部分,一部分(卡诺图中填入1的那些最小项)之和记作L,则根据 可知,其余一部分(卡诺图中填人0的那些最小项)之和一定为
。
在多变量逻辑式的卡诺图中,当0的数目远小于1的数目时,采用合并0的方法有时会比合并1来得简单。例如,在上面例题中,如果将0合并,则可立即写出:
与合并1得到的化简结果一致。
此外,在需要将逻辑式化为最简的“与或非”式时,采用合并0的方式最为适宜,因为得到的结果正是“与或非”形式。如果要求得到 的化简结果,则采用合并0的方式就更简便了。
前面所提到的任何逻辑式,我们都假设其中的变量是相互独立的,逻辑值在输入变量的任何组合下都是确定的0或1。即对于n个变量的逻辑式来说,其最小项共有 个,若其中m个最小项使逻辑值为1,则其余
-m个就使逻辑值为0。但在实际工程问题中,一个n变量的逻辑式并不一定与
个最小项都有关,而仅与其中一部分有关,与另一部分无关。这些与逻辑取值无关的最小项称为无关项,也称约束项。与之相关的逻辑式就称为包含无关项的逻辑式,或称为具有约束条件的逻辑式。
例如,8421BCD码的四位编码 只有0000、0001、…、1000、1001十种输入组合,其余1010、1011、…、1110、1111六种组合不可能出现,换句话说它们的输入组合不可能使逻辑取值为1,所以它们是8421BCD的无关项。
若以 表示无关项所对应的逻辑值,则
。这说明包含无关项的逻辑式,其中的无关项出不出现在表达式中,对逻辑式所表示的逻辑关系并不影响。但是,适当的利用无关项,可以使逻辑表达式得到进一步的简化。
【例17】 设计一个一位8421 码的奇数指示器,当输入组合为0001(1)、0011(3)、0101(5)、0111(7)、1001(9)时,逻辑式 取值为1;当输入组合为0000(0)、0010(2)、0010(4)、0110(6)、1000(8)时,逻辑式 取值为0;其余输入组合均为无关项。要求给出逻辑表达式 ,并用卡诺图化简。
解:根据题意列出下面的真值表,其中的“ ”代表无关项。
由真值表可得出如下逻辑表达式:
其中 表示无关项。画出下面卡诺图(a)和(b)。
(1)若不利用无关项,可以画出(a)图所示的卡诺图,经画圈合并后,得到化简的表达式:
(2)由于无关项可取任意值而不影响逻辑关系,利用无关项这一特点,在画圈时,可按需对他们取0或1。使得到的圈更大。如图(b)所示,将无关项
当作1方格,便可画出一个大圈,合并后得到化简的逻辑表达式:
由此可见,利用无关项可以得到更简化的表达式。但使用时必须恰到好处,否则会画蛇添足。如将图(b)的 也当作1方格画入圈内,则合并逻辑式非但没有得到简化,反而会变得更复杂。