之前从未听说过启发式逻辑压缩器(Espresso heuristic logic minimizer)这种东西,今天在寻找测试使用的Benchmark的时候突然遇到了这方面的东西,所以记录一下学习过程。
维基百科上对于启发式逻辑压缩器的定义为:这是一种用启发式和特定算法来高效缩减数字门电路复杂性的程序,是在1986年由IBM公司的Robert Brayton先生创造的,并且写了篇论文名为“Multiple-Valued Logic Minimization for PLA Synthesis”(针对PLA综合的多值逻辑压缩)。(这里的PLA目前我还不知道是什么意思,是否是可编程逻辑阵列PLA?)
几种经典的逻辑化简方法
卡诺图:这种方法应该是最经典的方法,每个学过数电的小伙伴应该都是牢牢掌握的,但是最大的缺点在于当输入数目大于4时,卡诺图法就会变得十分繁琐。要是输入数目更多,手工操作的难度以及算错的风险可以说是超级大,并且用计算机程序实现起来并不方便。
奎因-麦克拉斯基算法(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),对覆盖这个函数是必须的其他素蕴涵项也同样要使用。