假设现在有一个逻辑电路,我们知道所有输入对应的输出,该如何找到这个系统的最简逻辑表达式呢?
卡诺图就是方法之一,其要点在于,通过一张图表现出所有输入与输出之间的关系,然后通过画圈的方式找到最简的SOP(sum of product),其中,相邻的项可以被一个圈包裹,但是圈中项的数量必须是2的指数倍(1,2,4,8…),每个圈中至少要有一个未被其它圈包裹的项,最后,圈最少的画法就能对应最简SOP
1. 一些术语
现在,我们需要知晓一些描述卡诺图属性的专有术语
1.1 minterms
小项指的是一个系统中每一个可能的输出,在卡诺图中表现为每一个单元格,下图中有7个小项
小项在卡诺图中通常以10进制的形态存在,上图中的每一个小项的值都为1,但假如某一个组合的输出对应为111,上面就会显示为7
小项也常用来表示特定内容的布尔函数或真值表,如下图:
图中项1,2,3,4,5为真值
1.2 don’t cares
有时候,某些输入对应的输出是我们不需要去关注的,就会用一个X去表示他们,这些不需要关注的项就被称为无关项(don’t cares)
表达式里,无关项通常用一个独立的求和表示,如图:
其中第零项和第三项是无关项
1.3 implicant
蕴含项其实就是我们文章最开始提到的“圈”,每一种可能的圈就是一个蕴含项
上图中就有7个一次蕴含项,6个二次蕴含项和1个四次蕴含项,共计14个蕴含项
1.4 prime implicant
质蕴含项就是不能与其它蕴含项合并的蕴含项,在1.3中,我们发现四次蕴含项中有4个二次蕴含项,那么它们就不是质蕴含项
可以看到上图中的每一个圈都不能和其它圈合并,所以上图有共计4个质蕴含项
1.5 essential prime implicant
实质本源蕴含项中必须含有至少一个没被包含在其它蕴含项中的项,而且不能被更大的圈包裹
上图中有三个实质本源蕴含项,而我们找到最简SOP的方式就是找到所有的实质本源蕴含项
2. 五变量卡诺图
我们在1中看到的卡诺图代表的都是四个变量的布尔函数,那么该如何表现五变量的布尔函数呢?如果直接二维扩展,总共32个变量,似乎没办法很好地表现。既然二维不行,我们就给他升维,在四变量卡诺图上叠加一个四变量卡诺图,这样总共能够表现的项就变成了16+16=32,正好对应我们想要的五变量卡诺图。为了区分,我们称下面一层为0层,A=0,上面一层为1层,A=1,上层项的序号等于下层+16,其对应关系如下:
好像是跟计算机相关的东西都是从0开始算的,建议以后做什么互联网的公司都把地面那一层叫0层,别叫1层了,说不定能更好培养程序员思维
言归正传,在将所有小项都填到两层卡诺图中后,就可以开始合并了,同一层的项仍然是像之前一样合并,除此之外,上下层位于同一竖列的项也可以合并,也就是说,我们的“圈”从二维升到三维,变成“球”了,但要注意,对角线方向是不可以画球的,这就和单层时不可以画斜向的圆是一个道理
在表现时,我们会将两层卡诺图平行放置,然后用直线连接各自蕴含项的两端,表示它们在竖方向上属于一个蕴含项,如图:
在找到蕴含项之后,该如何又快又好地将他们转化成对应的布尔方程呢?
我总结地方法是,观察这个蕴含项与哪一位无关
比如这个蕴含项中的小项在D=1, D=0时都为1,则说明它与D无关,最终表达式不含D
在去掉所有无关项之后,我们观察这个蕴含项与有关项的关系,比如这个蕴含项只在B=1时成立,则最终表达式包含B
如果只在A=0时成立,则最终表达式包含
A
‾
\overline A
A
对于五变量卡诺图,处于“圆”内的蕴含项与A无关