第32卷第2期2009年6月浙江师范大学学报(自然科学版)Vol.32,No.2 JournalofZhejiangNormalUniversity(Nat.Sci.) Jun.2009
5051(2009)02-0185-04 文章编号:1001-
磁计算机辅助卡诺图化简逻辑函数的研究
石 杨
(浙江同济科技职业学院,浙江杭州 311231)
摘 要:卡诺图是数字电路中化简逻辑函数的一种常用的数学工具,但在运用过程中十分繁琐且易出错.用计
算机辅助卡诺图的方法化简逻辑函数,将克服手工算法的缺点,使化简更方便有效,并以此为基础逐步实现更
深层次的函数化简.
关键词:卡诺图;逻辑函数;计算机;化简
中图分类号:TP301 文献标识码:A
TheresearchonsimplifyinglogicfunctionbytheKarnaughMapwiththecomputerassistance
SHIYang(ZhejiangTongjiVocationalCollegeofScience&Technology,HangzhouZhejiang 311213,China)
Abstract:TheKarnaughMaphadbeenoneofthemathematictoolsinelectroniclogicdesign,butitsproce-dureswerecomplicatedandeasytodeducemistakes.However,withthecomputerassistance,itwouldbemuchmoreconvenientandeffective,andcomplishmorecomplicatedlogicfunction.Keywords:KarnaughMap;logicfunction;computer;simplify
1 卡诺图化简逻辑函数的分析
用卡诺图描述逻辑函数时一般应将函数表达式变换成为“与-或”表达式.对“与-或”表达式表示的函数,可按卡诺图上“与”的公共性、“或”的叠加性、“非”的否定性作出相应的卡诺图.在利用卡诺图对逻辑函数进行化简时,必须遵循有关规则,才能得到正确结果:
[1](1)根据逻辑变量的数目或最小项的编号画出相应的卡诺图.
(2)根据逻辑函数的表示方法,在卡诺图相应的方块上填上乘积项或最小项的值.若乘积项由卡诺图中斜线一边的同侧变量组成,则填写的方块按“相连”的规则确定;若为异侧(或含异侧)变量组成,则按“相交”的规则确定;若函数由最小项的和式给出,则可以按最小项的编号直接填入相应的方块内.
(3)用画包围圈的方法合并最小项,进行逻辑函数的化简.包围圈应尽可能大,以便消去最多的变
n量,使逻辑函数最简.但包围圈中小方块(即最小项)的个数N应为:N=2(n=0,1,2,3,4,5,6).
(4)一圈中的所有最小项均由其他的圈所包围,则此圈属多余.
磁收文日期:2008-09-24;修订日期:2009-02-20
作者简介:石 杨(1982-),男,浙江杭州人,助教.研究方向:电子信息.
(5)卡诺图中,最上与最下、最左与最右4个顶角以及轴对称的最小项应分别画在一个包围圈中.(6)若逻辑函数带有约束项,则在与约束项对应的方块内填入“X”,以示区别.根据需要,“X”的值可为“1”或“0”,以便画包围圈.
(7)根据包围圈的个数以及圈中不能消去的逻辑变量的几何关系,可得逻辑函数的最简“与-或”式.
但在使用卡诺图化简逻辑函数的过程中必须搞清以下2个问题:
n(1)合并最小项的规则:2个逻辑相邻且排成矩形的最小项方格可以合并成一项,并消去“n”个因
子,合并结果保留这些最小项的公因子.
(2)化简过程的步骤性:化简后的结果是逻辑函数的“与-或”表达式.在“与-或”表达式中所含乘积项越少,每个乘积项所含因子越少,则“与-或”表达式越简洁.
[2]如果在合并过程中把握了以上两点,则能将逻辑函数化为最简状态.
2 卡诺图化简逻辑函数的应用
对于变量不多(6个以下)的逻辑函数,利用卡诺图的所谓图形法进行化简,具有直观、简便的优点,
[3,4]因此应用非常广泛.例如,
(1)化简函数为最简逻辑式.上文中已作详细阐述,不再具体展开.
(2)检验函数化简的结果是否为最简式.在用公式法化简逻辑函数以后,有时不能确定化简的结果是否为最简式,这时便可采用卡诺图来验证.
(3)判断函数间的逻辑关系.当用不同的表示方法给出2个逻辑函数,并要判断它们的逻辑关系时,直接观察或者用公式法来判断都相当困难、复杂,而用卡诺图则非常明确.
(4)直接对逻辑函数进行逻辑运算.在用卡诺图进行复杂的逻辑函数的逻辑运算时,只需要按下述规则进行运算即可:逻辑“非”的运算即为求反函数,因此只要将函数在卡诺图中的“0”和“1”的位置对调即可得原函数的反函数;图中若有约束项则位置不变,仍为约束项.
(5)检查和消除组合电路中的竞争冒险现象.在组合电路中,由于输入信号通过不同级数的门电路,且门电路存在着不同的传输延迟时间,使得在电路的输入端可能出现一些违背稳态下逻辑关系的尖峰脉冲,这就是组合电路中的竞争冒险现象.它会使电路的负载产生误操作,造成逻辑功能上的混乱.为了保证组合电路正常工作,必须注意判断和消除竞争冒险现象,最简便的方法就是用卡诺图.
[5]综上所述,卡诺图的应用是非常广泛的,如果巧妙地应用它,就能得到意想不到的效果.
3 计算机辅助模型的建立和程序的开发与实现
3.1 语言的选择和主程序的开发
[6]本文介绍的计算机辅助卡诺图化简法,可以利用C语言的位操作将任意复杂的5变量及以下的
逻辑函数用一个表达式的形式输入计算机,输出的结果就是逻辑函数对应在卡诺图上的“0”,“1”逻辑值.
现以3变量为例说明方法要点.第1部分,3变量卡诺图共有8个方格,每5个方格对应一个逻辑值“0”或“1”.这8个值可看成是C语言的一个整型数的二进制数中的一位.
第2部分是变量的初始化:在进行逻辑化简时,对变量A,B,C进行“与”、“或”、“非”3种运算.根据A,B,C在卡诺图上所对应的方格,确定A(0011 0011),B(0110 0110),C(0000 1111).其中,A,B,C的前4位代表卡诺图上的第1行,后4位代表卡诺图上的第2行.A,B,C分别与一个二进制数中的8位相对应.因此,只要给变量A赋51,B赋102,C赋15即可.
第3部分是C语言的“位”运算:当作“与”运算,且参与运算的2个逻辑变量在同一小方格都为“1”时,其“与”运算的结果才为“1”,否则对应方格的运算结果为“0”.这种“与”运算正好和C语言中对应
的由A,B,C初值的十进制数转化成的二进制数的位的“与”运算一致.同理,逻辑“或”运算对应于C语言的“位或”运算,逻辑“非”运算对应于C语言的“取反”运算,逻辑“异-或”运算对应于C语言的“位异或”运算.可以利用C语言中的“位”运算实现逻辑函数的逻辑运算.
第4部分是运算的先后顺序:利用C语言的“位”运算能实现逻辑函数的逻辑运算,但还必须确定4种运算的先后顺序.逻辑运算的顺序由高到低为先“非”、后“与”、再“或”,而C语言的“位”运算由高到低是“取反”、“与”、“或”,逻辑运算的次序正好和对应的“位”运算的次序一致.因此,只需将逻辑函数转化成C语言的“位”运算表达式即可.
第5部分是数据的输出:C语言的“位”运算结果仍然是二进制数,但是输出的结果只能以八进制或十进制数的形式输出.笔者给出的一个子程序实现了用二进制位的形式输出,而且输出结果符合卡诺图的形式.因此,只要将输出的二进制位填入相应的卡诺图上,就能将其用卡诺图化简成最简的逻辑函数.3.2 程序的调试和实现
关于本程序的几点说明:本程序为计算机辅助卡诺图化简逻辑函数的程序.
(1)关于变量名.程序中使用的变量名为A,B,C,D,E,若逻辑函数的变量名不是它们时,可把第1个变量换成A,第2个换成B,依次类推.输出逻辑值后,再将相应的卡诺图上的A,B,C,D,E换成逻辑函数的变量名.
(2)关于变量的个数.程序中只编写了能处理5个变量及以下的计算机辅助卡诺图程序,若为3变量,则只须将程序中初值语句改为“A=51,B=102,C=15”,输出函数中循环改为“FOR(I=8;I<=1;I-->”.若为4变量,则将赋值语句改为“A=13017;B=26214;C=255;D=4080”.经在TC环境中运行后,结果证明程序调试成功(并制成可执行文件的形式),能较好地达到计算机辅助卡诺图化简逻辑函数的效果.
例如,一个3变量的逻辑函数AB+BC+AC,经过运行本计算机辅助卡诺图化简程序后,得到如下结果:Inputweishu<0<weishu<=5>:3A:51B:102C:15
0110011
01100110
01111AB+BC+ACA&B|B&C|A&C
0110111
0 0 1 1
0 1 1 1AreyouwanttocontinueY?N?下面给出部分程序:unsignedlongeval(chartag,unsignedlongleft,unsignedlongright){switch(tag)
{
case′!′:return~right;
case′+′:returnleft|right;
case′^′:returnleft^right;
case′&′:returnleft&right;
}
}unsignedlongchange(chararr[],intn){
inti,j,type;
unsignedlongoperand1,operand2,res=0;
unsignedlongdop,op;
optop=NULL;
numtop=NULL;
l_push(Lp,&optop);
i=0;
while(arr[i]){
type=gettype(arr[i],n);
if(type==0)l_push(Array[arr[i]-′A′],&numtop);
/倡 else{ 倡/
/倡 if(type==1)l_push(~Array[arr[++i]-′A′],&numtop);倡/ else{
if(osp[type-1]>isp[(int)optop->data-1])
4 结束语
笔者运用C语言编程实现了对任意5变量以下的逻辑函数的卡诺图化简,验证了其可行性.笔者所述的方法突破了传统手工画图的化简方式,结合了先进的计算机编程语言,并以此为基础,逐步实现了更深层次的函数化简.
参考文献:
[1]余孟尝.数字电子技术基础[M].北京:高等教育出版社,2006.
[2]程捷.近代数字理论与方法的研究[D].杭州:浙江大学,2001.
[3]王诗兵,黄正杰.关于卡诺图法实现逻辑函数变换的研究[J].安徽职业技术学院学报,2005,4(1):5-7;16.
[4]钟沃坚.利用微型电脑化简逻辑函数的一种方法[J].华南工学院学报,1984,12(2):83-90.
[5]达正花.卡诺图法化简异或逻辑函数[J].甘肃科学学报,2005,17(1):22-24.
[6]谭浩强.C语言程序设计[M].北京:清华大学出版社,2005.
(责任编辑 陶立方)
第32卷第2期2009年6月浙江师范大学学报(自然科学版)Vol.32,No.2 JournalofZhejiangNormalUniversity(Nat.Sci.) Jun.2009
5051(2009)02-0185-04 文章编号:1001-
磁计算机辅助卡诺图化简逻辑函数的研究
石 杨
(浙江同济科技职业学院,浙江杭州 311231)
摘 要:卡诺图是数字电路中化简逻辑函数的一种常用的数学工具,但在运用过程中十分繁琐且易出错.用计
算机辅助卡诺图的方法化简逻辑函数,将克服手工算法的缺点,使化简更方便有效,并以此为基础逐步实现更
深层次的函数化简.
关键词:卡诺图;逻辑函数;计算机;化简
中图分类号:TP301 文献标识码:A
TheresearchonsimplifyinglogicfunctionbytheKarnaughMapwiththecomputerassistance
SHIYang(ZhejiangTongjiVocationalCollegeofScience&Technology,HangzhouZhejiang 311213,China)
Abstract:TheKarnaughMaphadbeenoneofthemathematictoolsinelectroniclogicdesign,butitsproce-dureswerecomplicatedandeasytodeducemistakes.However,withthecomputerassistance,itwouldbemuchmoreconvenientandeffective,andcomplishmorecomplicatedlogicfunction.Keywords:KarnaughMap;logicfunction;computer;simplify
1 卡诺图化简逻辑函数的分析
用卡诺图描述逻辑函数时一般应将函数表达式变换成为“与-或”表达式.对“与-或”表达式表示的函数,可按卡诺图上“与”的公共性、“或”的叠加性、“非”的否定性作出相应的卡诺图.在利用卡诺图对逻辑函数进行化简时,必须遵循有关规则,才能得到正确结果:
[1](1)根据逻辑变量的数目或最小项的编号画出相应的卡诺图.
(2)根据逻辑函数的表示方法,在卡诺图相应的方块上填上乘积项或最小项的值.若乘积项由卡诺图中斜线一边的同侧变量组成,则填写的方块按“相连”的规则确定;若为异侧(或含异侧)变量组成,则按“相交”的规则确定;若函数由最小项的和式给出,则可以按最小项的编号直接填入相应的方块内.
(3)用画包围圈的方法合并最小项,进行逻辑函数的化简.包围圈应尽可能大,以便消去最多的变
n量,使逻辑函数最简.但包围圈中小方块(即最小项)的个数N应为:N=2(n=0,1,2,3,4,5,6).
(4)一圈中的所有最小项均由其他的圈所包围,则此圈属多余.
磁收文日期:2008-09-24;修订日期:2009-02-20
作者简介:石 杨(1982-),男,浙江杭州人,助教.研究方向:电子信息.
(5)卡诺图中,最上与最下、最左与最右4个顶角以及轴对称的最小项应分别画在一个包围圈中.(6)若逻辑函数带有约束项,则在与约束项对应的方块内填入“X”,以示区别.根据需要,“X”的值可为“1”或“0”,以便画包围圈.
(7)根据包围圈的个数以及圈中不能消去的逻辑变量的几何关系,可得逻辑函数的最简“与-或”式.
但在使用卡诺图化简逻辑函数的过程中必须搞清以下2个问题:
n(1)合并最小项的规则:2个逻辑相邻且排成矩形的最小项方格可以合并成一项,并消去“n”个因
子,合并结果保留这些最小项的公因子.
(2)化简过程的步骤性:化简后的结果是逻辑函数的“与-或”表达式.在“与-或”表达式中所含乘积项越少,每个乘积项所含因子越少,则“与-或”表达式越简洁.
[2]如果在合并过程中把握了以上两点,则能将逻辑函数化为最简状态.
2 卡诺图化简逻辑函数的应用
对于变量不多(6个以下)的逻辑函数,利用卡诺图的所谓图形法进行化简,具有直观、简便的优点,
[3,4]因此应用非常广泛.例如,
(1)化简函数为最简逻辑式.上文中已作详细阐述,不再具体展开.
(2)检验函数化简的结果是否为最简式.在用公式法化简逻辑函数以后,有时不能确定化简的结果是否为最简式,这时便可采用卡诺图来验证.
(3)判断函数间的逻辑关系.当用不同的表示方法给出2个逻辑函数,并要判断它们的逻辑关系时,直接观察或者用公式法来判断都相当困难、复杂,而用卡诺图则非常明确.
(4)直接对逻辑函数进行逻辑运算.在用卡诺图进行复杂的逻辑函数的逻辑运算时,只需要按下述规则进行运算即可:逻辑“非”的运算即为求反函数,因此只要将函数在卡诺图中的“0”和“1”的位置对调即可得原函数的反函数;图中若有约束项则位置不变,仍为约束项.
(5)检查和消除组合电路中的竞争冒险现象.在组合电路中,由于输入信号通过不同级数的门电路,且门电路存在着不同的传输延迟时间,使得在电路的输入端可能出现一些违背稳态下逻辑关系的尖峰脉冲,这就是组合电路中的竞争冒险现象.它会使电路的负载产生误操作,造成逻辑功能上的混乱.为了保证组合电路正常工作,必须注意判断和消除竞争冒险现象,最简便的方法就是用卡诺图.
[5]综上所述,卡诺图的应用是非常广泛的,如果巧妙地应用它,就能得到意想不到的效果.
3 计算机辅助模型的建立和程序的开发与实现
3.1 语言的选择和主程序的开发
[6]本文介绍的计算机辅助卡诺图化简法,可以利用C语言的位操作将任意复杂的5变量及以下的
逻辑函数用一个表达式的形式输入计算机,输出的结果就是逻辑函数对应在卡诺图上的“0”,“1”逻辑值.
现以3变量为例说明方法要点.第1部分,3变量卡诺图共有8个方格,每5个方格对应一个逻辑值“0”或“1”.这8个值可看成是C语言的一个整型数的二进制数中的一位.
第2部分是变量的初始化:在进行逻辑化简时,对变量A,B,C进行“与”、“或”、“非”3种运算.根据A,B,C在卡诺图上所对应的方格,确定A(0011 0011),B(0110 0110),C(0000 1111).其中,A,B,C的前4位代表卡诺图上的第1行,后4位代表卡诺图上的第2行.A,B,C分别与一个二进制数中的8位相对应.因此,只要给变量A赋51,B赋102,C赋15即可.
第3部分是C语言的“位”运算:当作“与”运算,且参与运算的2个逻辑变量在同一小方格都为“1”时,其“与”运算的结果才为“1”,否则对应方格的运算结果为“0”.这种“与”运算正好和C语言中对应
的由A,B,C初值的十进制数转化成的二进制数的位的“与”运算一致.同理,逻辑“或”运算对应于C语言的“位或”运算,逻辑“非”运算对应于C语言的“取反”运算,逻辑“异-或”运算对应于C语言的“位异或”运算.可以利用C语言中的“位”运算实现逻辑函数的逻辑运算.
第4部分是运算的先后顺序:利用C语言的“位”运算能实现逻辑函数的逻辑运算,但还必须确定4种运算的先后顺序.逻辑运算的顺序由高到低为先“非”、后“与”、再“或”,而C语言的“位”运算由高到低是“取反”、“与”、“或”,逻辑运算的次序正好和对应的“位”运算的次序一致.因此,只需将逻辑函数转化成C语言的“位”运算表达式即可.
第5部分是数据的输出:C语言的“位”运算结果仍然是二进制数,但是输出的结果只能以八进制或十进制数的形式输出.笔者给出的一个子程序实现了用二进制位的形式输出,而且输出结果符合卡诺图的形式.因此,只要将输出的二进制位填入相应的卡诺图上,就能将其用卡诺图化简成最简的逻辑函数.3.2 程序的调试和实现
关于本程序的几点说明:本程序为计算机辅助卡诺图化简逻辑函数的程序.
(1)关于变量名.程序中使用的变量名为A,B,C,D,E,若逻辑函数的变量名不是它们时,可把第1个变量换成A,第2个换成B,依次类推.输出逻辑值后,再将相应的卡诺图上的A,B,C,D,E换成逻辑函数的变量名.
(2)关于变量的个数.程序中只编写了能处理5个变量及以下的计算机辅助卡诺图程序,若为3变量,则只须将程序中初值语句改为“A=51,B=102,C=15”,输出函数中循环改为“FOR(I=8;I<=1;I-->”.若为4变量,则将赋值语句改为“A=13017;B=26214;C=255;D=4080”.经在TC环境中运行后,结果证明程序调试成功(并制成可执行文件的形式),能较好地达到计算机辅助卡诺图化简逻辑函数的效果.
例如,一个3变量的逻辑函数AB+BC+AC,经过运行本计算机辅助卡诺图化简程序后,得到如下结果:Inputweishu<0<weishu<=5>:3A:51B:102C:15
0110011
01100110
01111AB+BC+ACA&B|B&C|A&C
0110111
0 0 1 1
0 1 1 1AreyouwanttocontinueY?N?下面给出部分程序:unsignedlongeval(chartag,unsignedlongleft,unsignedlongright){switch(tag)
{
case′!′:return~right;
case′+′:returnleft|right;
case′^′:returnleft^right;
case′&′:returnleft&right;
}
}unsignedlongchange(chararr[],intn){
inti,j,type;
unsignedlongoperand1,operand2,res=0;
unsignedlongdop,op;
optop=NULL;
numtop=NULL;
l_push(Lp,&optop);
i=0;
while(arr[i]){
type=gettype(arr[i],n);
if(type==0)l_push(Array[arr[i]-′A′],&numtop);
/倡 else{ 倡/
/倡 if(type==1)l_push(~Array[arr[++i]-′A′],&numtop);倡/ else{
if(osp[type-1]>isp[(int)optop->data-1])
4 结束语
笔者运用C语言编程实现了对任意5变量以下的逻辑函数的卡诺图化简,验证了其可行性.笔者所述的方法突破了传统手工画图的化简方式,结合了先进的计算机编程语言,并以此为基础,逐步实现了更深层次的函数化简.
参考文献:
[1]余孟尝.数字电子技术基础[M].北京:高等教育出版社,2006.
[2]程捷.近代数字理论与方法的研究[D].杭州:浙江大学,2001.
[3]王诗兵,黄正杰.关于卡诺图法实现逻辑函数变换的研究[J].安徽职业技术学院学报,2005,4(1):5-7;16.
[4]钟沃坚.利用微型电脑化简逻辑函数的一种方法[J].华南工学院学报,1984,12(2):83-90.
[5]达正花.卡诺图法化简异或逻辑函数[J].甘肃科学学报,2005,17(1):22-24.
[6]谭浩强.C语言程序设计[M].北京:清华大学出版社,2005.
(责任编辑 陶立方)