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

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

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

奎因-麦克拉斯基算法(Quinine-McCluskey Algorithm):这种方法实际上是与卡诺图法是功能等价的,但是这种方法是表格形式的,这就方便了计算编程,并且对于是否达到了布尔函数的最简形式给出了确定性验证方法。

这个方法分为两步:

1)找到这个函数的所有质蕴涵项(prime implicant)。这里对于蕴含项,质蕴涵项的概念做出解释。

蕴含项:在函数的“与-或”表达式中,每个“与”项被称为该函数的蕴涵项,这里说的可能有些笼统,其实还是有一种抽象一点点但是准确的描述即为:乘积项P是布尔函数F(包含有n个变量)的蕴含项意味着,对于n个变量的使P值为1的所有组合,F也等于1。称为P蕴含F。举例而言:f(x,y,z,w)=xy+yz+w,那么xy这个乘积项就是f(x,y,z,w)的蕴含项,因为让xy=1的四个变量x,y,z,w的组合共4个:1100,1101,1110,1111。这四个组合都可以让f(x,y,z,w)=1,所以xy这个乘积项是f的蕴含项,同理,xyz,xyzw,w等等都是f的蕴含项。

质蕴涵项:若函数的一个蕴含项不是该函数中其他蕴含项的子集,则称这个蕴含项为质蕴涵项。在函数卡诺图中,按照最小项合并规律,如果某个卡诺圈不可能被其他更大的卡诺圈包含,那么该卡诺圈所对应的项为质蕴涵项。

 

2) 用这些表中的质蕴涵项来找到函数的必要质蕴涵项(essential prime implicant),对覆盖这个函数是必须的其他素蕴涵项也同样要使用。

文章目录

    1. 找到所有的一次蕴含项
    2. 一次合并
    3. 二次合并
    4. 素项表

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

假设我们现在有一个系统:

根据蕴含项中“1”的数量将其分组,这样可以避免不必要的比较,它的所有一次蕴含项就可以表示为:

2. 一次合并

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

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

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

将所有可能的合并完成后,把得到的合并项仍旧按照“1”的数量分组并列出来,结果如下:

如果有无法与任何其它项合并的项,它就是质蕴含项,会出现在最终表达式中
3. 二次合并

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

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

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

完成所有可能的合并后,将内容重复的项删掉,按照“1”的数量分组,得到结果如下:

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

最后,我们将所有得到的质蕴含项写成表达式:

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

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

首先,将之前得到的所有质蕴含项列成一列,然后将项中包含的所有可能的值写在上方
接着,在质蕴含项和值的对应处画X,画完后,如果某个X是一列中唯一的X,则圈出来,

找到没被连线的项最多的那一行,优先把这一行画上横线,以此类推,直到所有项都连上线。

这个被圈出来的X就是实质本源蕴含项(essential prime implicant),它必须被包含在最终的SOP中

下面,可以试着在被圈出来的X处画一条横线,将其所在行的X都串上,再以每个被串上的X为出发点,连接同一列内的X,成果如下:

最后,尽量用最少的线连接剩下的几个X,最终成品如下:

将横线代表的表达式写出来,就是最小SOP了,图中所代表的最小SOP为

针无关项,可以直接将其作为普通的项来对待,即

对应的算法为:

但要注意的是,最后画线的时候,不要将无关项对应的数字写在上方,如下图:

可以看到,上方并没有列出1,10,15
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值