数字电路:奎因-麦克拉斯基算法

在之前,我们使用卡诺图来找到一个系统的布尔表达式,但这只适用于变量较少的情况,如果遇见大量的变量,使用卡诺图化简的方式就会变得非常复杂,之前从四个变量升到五个变量就使得卡诺图多了整整一层,难以想象继续下去会是多么庞大的工作量

奎因麦克劳斯基法(Quine-McCluskey method)就是用于简化大量变量的一种手段,因为用的并非图表,这也是相对来说比较适合计算机编程的方式,接下来,我们将逐步介绍这种方法的应用流程

1. 找到所有的一次蕴含项

假设我们现在有一个系统:
在这里插入图片描述
根据蕴含项中“1”的数量将其分组,这样可以避免不必要的比较,它的所有一次蕴含项就可以表示为:
在这里插入图片描述

2. 一次合并

得到一次蕴含项后,我们需要尽可能将他们合并,如果两个项有三个位置是相同的,就可以合并成一个项,不同的位置用“-”代替
举个例子,group 0 中的 0000 与 group 1 中的 0001 只有最后一个位置不一样,那么他们就可以合并为 000-
这种合并理论的表达式为: X Y + X Y ′ = X XY+XY'=X XY+XY=X

在合并时,我们可以通过一些技巧来减少不必要的比较,方法如下:

  1. 只有相邻的两个组需要比较,如果组不相邻,那么他们一定不可能合并,比如组0就只需要和组1比较,组1只需要和组0和组2比较
  2. 同一个组内的项不用比较,他们也一定不可能合并

将所有可能的合并完成后,把得到的合并项仍旧按照“1”的数量分组并列出来,结果如下:
在这里插入图片描述
如果有无法与任何其它项合并的项,它就是质蕴含项,会出现在最终表达式中

3. 二次合并

接着,我们需要进一步合并刚才得到的含一个“-”的项

如果某两个项“-”的位置一样,且只有一个变量不同,就可以合并成一个项,不同的变量用"-"代替,最终结果含有两个“-”
举个例子,000- 与 100- 中“-”的位置一样,且只有第一个变量不同,他们就可以合并为 -00-

合并的技巧与一次合并相同

完成所有可能的合并后,将内容重复的项删掉,按照“1”的数量分组,得到结果如下:
在这里插入图片描述

这种合并可以一直持续下去,直到没有任何项可以被合并为止,这时我们就得到了所有质蕴含项
对于四个变量的系统,目前的结果就无法继续合并了,但变量越多,合并的步骤就可能越多
这对于人来说可能仍然繁琐,但对于计算机编程来说,实现奎因麦克劳斯基算法比卡诺图要简单得多

最后,我们将所有得到的质蕴含项写成表达式:
在这里插入图片描述

现在,我们可以试着将奎因算法与卡诺图联系起来
奎因算法实质上就是先找出卡诺图中所有一次蕴含项,然后将所有相邻的一次蕴含项合并成二次蕴含项,再将相邻的二次蕴含项合并成四次蕴含项,以此类推

这种方法其实有一个问题,那就是最终得出的项的数量不一定是最小的,对应成卡诺图,就是说画出的圈的数量不一定最小
这个问题就要交给素项表解决

4. 素项表

首先,将之前得到的所有质蕴含项列成一列,然后将项中包含的所有可能的值写在上方
接着,在质蕴含项和值的对应处画X,画完后,如果某个X是一列中唯一的X,则圈出来,如图:
在这里插入图片描述
这个被圈出来的X就是实质本源蕴含项(essential prime implicant),它必须被包含在最终的SOP中

下面,可以试着在被圈出来的X处画一条横线,将其所在行的X都串上,再以每个被串上的X为出发点,连接同一列内的X,成果如下:
在这里插入图片描述
最后,尽量用最少的线连接剩下的几个X,最终成品如下:
在这里插入图片描述
将横线代表的表达式写出来,就是最小SOP了,图中所代表的最小SOP为
在这里插入图片描述

针对don’t cares,可以直接将其作为普通的项来对待,即
在这里插入图片描述
对应的算法为:
在这里插入图片描述

但要注意的是,最后画线的时候,不要将don’t cares对应的数字写在上方,如下图:
在这里插入图片描述
可以看到,上方并没有列出1,10,15

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值