本发明涉及一种数字逻辑电路,尤其是涉及一种逻辑电路近似实现方法,其适用于逻辑功能可以用“与/或”形式逻辑函数描述的逻辑电路。
背景技术:
近似计算是在不影响电路正常应用的前提下,其通过适当降低计算精度来实现电路面积、功耗、延时等性能优化。目前,近似计算已成为数字集成电路设计中一个新的、重要的策略,并已应用于一些运算量大且有一定容错性的场景中,如视频处理、神经网络计算等诸多方面。
逻辑电路的逻辑功能一般可以用逻辑函数来描述,而逻辑函数的复杂程度与逻辑电路结构的复杂性紧密相关,进而潜在地影响到逻辑电路的功耗、面积、速度等性能指标。因此,可以通过简化逻辑函数的逻辑表达式形式,进而实现逻辑电路性能的提升。
图1a所示的逻辑电路的逻辑函数的逻辑表达式为
在逻辑函数表示方面,经常用“0”和“1”分别表示逻辑函数的逻辑表达式中的乘积项中取反变量形式和取原变量形式的变量,而用“2”表示对应变量在乘积项中没有出现。因此,逻辑函数的逻辑表达式
在利用近似计算技术实现逻辑电路优化时,在优化过程中一般要满足错误率的约束,即实现逻辑电路优化的同时,应该将引起逻辑电路错误输出的输入组合的个数控制在事先规定的范围内。在图1a和图1b所示的例子中将引起逻辑电路错误输出的输入组合的个数控制在1种输入组合,显然,放宽或限制引起逻辑电路错误输出的输入组合的个数将影响逻辑电路面积的优化程度。
在实际电路应用中,有些电路是允许存在部分输出错误的情况,即电路自身具有容错特性,因此可以通过降低电路的输出的准确性来实现电路面积、速度、功能等方面性能的提升。通过人为引入特定的逻辑错误实现逻辑优化称为近似逻辑优化,目前,近似逻辑优化已被用于图像处理、语音处理、物联网中传感数据处理等等应用中,在不影响逻辑电路正常应用的前提下可以实现逻辑电路功耗、速度和面积等优化。
技术实现要素:
本发明所要解决的技术问题是提供一种逻辑电路近似实现方法,其通过对逻辑函数的逻辑表达式中的乘积项的近似合并,实现逻辑函数的简化,进而达到简化逻辑电路的目的。
本发明解决上述技术问题所采用的技术方案为:一种逻辑电路近似实现方法,其特征在于包括以下步骤:
步骤1:令f表示用于表达待优化的逻辑电路的逻辑功能用的逻辑函数,f采用“与/或”逻辑形式,f的输入变量数为w、输出变量数为v,f中包含有m个乘积项;令fa表示f的近似函数,fa也采用“与/或”逻辑形式,fa的输入变量数也为w、输出变量数也为v,fa中包含有n个乘积项;规定仅属于f或fa的最小项个数不能大于h个;
规定构成f和fa各自中的每一个乘积项中的变量,其排列顺序均一样,并且对于任意一个乘积项中的一个变量,有3种形式出现在乘积项中,即反变量形式、原变量形式和不出现,用“0”表示该变量以反变量形式出现在该乘积项中,用“1”表示该变量以原变量形式出现在该乘积项中,用“2”表示该变量没有出现在该乘积项中,规定变量形式0的取反为1、1的取反为0、2的取反为它本身;规定同一变量不同形式之间的“异或”运算满足0^1=1、0^2=1、1^2=1、0^0=0、1^1=0、2^2=0,且满足交换律;规定同一变量不同形式之间的“相交”运算满足
将f中包含的所有乘积项构成的集合记为cf,将cf中的两个乘积项p'和p”之间的“异或”运算用p'^p”表示,p'^p”等于p'中的各个变量形式与p”中对应变量形式之间的“异或”运算;将cf中的两个乘积项p'和p”之间的“相交”运算用p'∩p”表示,p'∩p”等于p'中的各个变量形式与p”中对应变量形式之间的“相交”运算;
上述,w≥1,v≥1,m≥2,n≥1,h>0,符号“^”表示“异或”运算,符号“∩”表示“相交”运算,
步骤2:定义两个初始值为空集的集合,分别记为cer和ce;
步骤3:从cf中任意取出两个输出相等的乘积项,设定取出的两个乘积项分别为序号为i的乘积项和序号为j的乘积项,对应记为pi和pj;然后执行pi和pj之间的“相交”运算,若pi∩pj=pi,则在cf中删除pi,再执行步骤10;若pi∩pj=pj,则在cf中删除pj,再执行步骤10;若pi∩pj≠pi且pi∩pj≠pj,则执行步骤4;其中,0≤i<m,0≤j<m,i≠j;
步骤4:执行pi和pj之间的“异或”运算;然后统计pi^pj的结果中值为“1”的个数,若pi^pj的结果中值为“1”的个数小于或等于2个,则执行步骤5;若pi^pj的结果中值为“1”的个数大于2个,则执行步骤10;
步骤5:若pi^pj的结果中值为“1”的个数为1个,则由pi和pj生成一个新的乘积项,记为q,q为通过在pi或pj中去除导致pi^pj的结果中值为“1”的变量后得到的乘积项,然后将乘积项q存储到cf中,并在cf中删除pi和pj,再执行步骤10;若pi^pj的结果中值为“1”的个数为2个,则执行步骤6;
步骤6:分析导致pi^pj的结果中值为“1”的个数为2个的情况,若2个“1”均由0^1=1产生,则执行步骤10;若2个“1”由0^1=1和0^2=1产生或由0^1=1和1^2=1产生,则执行步骤7;若2个“1”由1^2=1和0^2=1产生,则执行步骤8;
步骤7:确定导致pi^pj的结果中值为“1”的2个变量,设定这2个变量分别为变量x和y;然后由pi和pj生成两个新的乘积项,分别记为q和e,q为通过在pi或pj中去除变量x和y后得到的乘积项,e通过以下方法获得:从pi和pj中找出变量x和y均出现的乘积项,设定变量x和y均出现在pj中;然后确定pj中与pi中对应的变量形式之间的“异或”运算为1^2=1或0^2=1的变量,设定pj中的变量x形式与pi中对应的变量x形式之间的“异或”运算为1^2=1或0^2=1,那么将pj中的变量x形式取反后得到的新的乘积项就是e;再执行步骤9;
步骤8:确定导致pi^pj的结果中值为“1”的2个变量,设定这2个变量分别为变量x和y;然后由pi和pj生成两个新的乘积项,分别记为q和e,q为通过在pi或pj中去除变量x和y后得到的乘积项,e通过以下方法获得:将在pi和pj中出现的变量x和y形式取反后替换pi或pj中原来的x和y的变量形式后得到的新的乘积项就是e;再执行步骤9;
步骤9:将乘积项e存储到ce中;然后在ce中删除与cer和cf中相同的最小项;接着统计cer中包含的最小项的个数与ce中包含的最小项的个数的和值,若和值小于或等于h,则在cf中删除pi和pj,将乘积项q存储到cf中,将ce并入到cer中,清空ce,再执行步骤10;若和值大于h,则清空ce,再执行步骤10;
步骤10:返回步骤3继续执行,直至cf中找不到两个乘积项可以通过步骤3到步骤9进行简化,此时cf中包含的所有乘积项作为fa中的乘积项。
与现有技术相比,本发明的优点在于:
1)本发明方法与精确逻辑电路优化技术相比,在错误率约束条件下,使得诸如原先无法简化的逻辑表达式,如
2)本发明方法适用于逻辑功能可以用“与/或”形式逻辑函数描述的逻辑电路,“与/或”形式也是逻辑函数一种普遍采用的表述形式,因此本发明方法可以广泛地应用到逻辑函数的近似化简化中,且本发明方法容易编程实现,可以融入到计算机辅助设计(eda)中,用于逻辑电路的综合与优化。
附图说明
图1a为逻辑表达式为
图1b为逻辑表达式为
图2为逻辑表达式为
图3为逻辑表达式为
图4为逻辑表达式为
图5为逻辑表达式为
具体实施方式
以下结合附图实施例对本发明作进一步详细描述。
本发明提出的一种逻辑电路近似实现方法,其包括以下步骤:
步骤1:令f表示用于表达待优化的逻辑电路的逻辑功能用的逻辑函数,f采用“与/或”逻辑形式,f的输入变量数为w、输出变量数为v,f中包含有m个乘积项;令fa表示f的近似函数,fa也采用“与/或”逻辑形式,fa的输入变量数也为w、输出变量数也为v,fa中包含有n个乘积项;规定仅属于f或fa的最小项个数不能大于h个。
规定构成f和fa各自中的每一个乘积项中的变量,其排列顺序均一样,并且对于任意一个乘积项中的一个变量,有3种形式出现在乘积项中,即反变量形式、原变量形式和不出现,用“0”表示该变量以反变量形式出现在该乘积项中,用“1”表示该变量以原变量形式出现在该乘积项中,用“2”表示该变量没有出现在该乘积项中,规定变量形式0的取反为1、1的取反为0、2的取反为它本身;规定同一变量不同形式之间的“异或”运算满足0^1=1、0^2=1、1^2=1、0^0=0、1^1=0、2^2=0,且满足交换律;规定同一变量不同形式之间的“相交”运算满足
将f中包含的所有乘积项构成的集合记为cf,将cf中的两个乘积项p'和p”之间的“异或”运算用p'^p”表示,p'^p”等于p'中的各个变量形式与p”中对应变量形式之间的“异或”运算;将cf中的两个乘积项p'和p”之间的“相交”运算用p'∩p”表示,p'∩p”等于p'中的各个变量形式与p”中对应变量形式之间的“相交”运算。
上述,w≥1,v≥1,m≥2,n≥1,h>0,符号“^”表示“异或”运算,符号“∩”表示“相交”运算,
步骤2:定义两个初始值为空集的集合,分别记为cer和ce。
步骤3:从cf中任意取出两个输出相等的乘积项,设定取出的两个乘积项分别为序号为i的乘积项和序号为j的乘积项,对应记为pi和pj;然后执行pi和pj之间的“相交”运算,若pi∩pj=pi,则在cf中删除pi,再执行步骤10;若pi∩pj=pj,则在cf中删除pj,再执行步骤10;若pi∩pj≠pi且pi∩pj≠pj,则执行步骤4;其中,0≤i<m,0≤j<m,i≠j。
步骤4:执行pi和pj之间的“异或”运算;然后统计pi^pj的结果中值为“1”的个数,若pi^pj的结果中值为“1”的个数小于或等于2个,则执行步骤5;若pi^pj的结果中值为“1”的个数大于2个,则执行步骤10。
步骤5:若pi^pj的结果中值为“1”的个数为1个,则由pi和pj生成一个新的乘积项,记为q,q为通过在pi或pj中去除导致pi^pj的结果中值为“1”的变量后得到的乘积项,然后将乘积项q存储到cf中,并在cf中删除pi和pj,再执行步骤10;若pi^pj的结果中值为“1”的个数为2个,则执行步骤6。
步骤6:分析导致pi^pj的结果中值为“1”的个数为2个的情况,若2个“1”均由0^1=1产生,则执行步骤10;若2个“1”由0^1=1和0^2=1产生或由0^1=1和1^2=1产生,则执行步骤7;若2个“1”由1^2=1和0^2=1产生,则执行步骤8。
步骤7:确定导致pi^pj的结果中值为“1”的2个变量,设定这2个变量分别为变量x和y;然后由pi和pj生成两个新的乘积项,分别记为q和e,q为通过在pi或pj中去除变量x和y后得到的乘积项,e通过以下方法获得:从pi和pj中找出变量x和y均出现的乘积项,设定变量x和y均出现在pj中;然后确定pj中与pi中对应的变量形式之间的“异或”运算为1^2=1或0^2=1的变量,设定pj中的变量x形式与pi中对应的变量x形式之间的“异或”运算为1^2=1或0^2=1,那么将pj中的变量x形式取反后得到的新的乘积项就是e;再执行步骤9。
步骤8:确定导致pi^pj的结果中值为“1”的2个变量,设定这2个变量分别为变量x和y;然后由pi和pj生成两个新的乘积项,分别记为q和e,q为通过在pi或pj中去除变量x和y后得到的乘积项,e通过以下方法获得:将在pi和pj中出现的变量x和y形式取反后替换pi或pj中原来的x和y的变量形式后得到的新的乘积项就是e;再执行步骤9。
步骤9:将乘积项e存储到ce中;然后在ce中删除与cer和cf中相同的最小项;接着统计cer中包含的最小项的个数与ce中包含的最小项的个数的和值,若和值小于或等于h,则在cf中删除pi和pj,将乘积项q存储到cf中,将ce并入到cer中,清空ce,再执行步骤10;若和值大于h,则清空ce,再执行步骤10。
步骤10:返回步骤3继续执行,直至cf中找不到两个乘积项可以通过步骤3到步骤9进行简化,此时cf中包含的所有乘积项作为fa中的乘积项。
为了方便说明,同时又不失一般性,本发明示例中均以单输出逻辑函数为例说明逻辑电路近似优化的过程,由于待处理的逻辑函数为单输出逻辑函数,因此每个乘积项对应的输出都是一样的,即可以省略步骤3中两个乘积项输出是否相等的比较过程。
示例1:
第一轮计算:
步骤1:假设单输出逻辑函数为
步骤2:定义两个初始值为空集的集合,分别记为cer和ce,即令
步骤3:在cf中任取两个乘积项pi和pj,假设pi=(2012)、pj=(1212),由于pi∩pj=(2012)∩(1212)=(1012),其“相交”结果不等于pi或pj,执行步骤4。
步骤4:执行两个乘积项之间的“异或”运算,pi^pj=(2012)^(1212)=(1100),pi^pj的结果中值为“1”的个数等于2个,执行步骤5。
步骤5:由于pi^pj的结果中值为“1”的个数为2个,因此执行步骤6。
步骤6:分析导致pi^pj的结果中值为“1”的个数为2个的情况,由于2个“1”由1^2=1和0^2=1产生,因此执行步骤8。
步骤8:确定导致pi^pj的结果中值为“1”的2个变量,分别为x1和x2;然后由pi和pj生成两个新的乘积项q和e,其中q就是在pi或pj中去除变量x1和x2后得到的新的乘积项,即q=(2212);乘积项e用如下方法得到:将在pi和pj中出现的变量x和y形式取反后替换pi或pj中原来的x和y的变量形式后得到的新的乘积项就是e,在本例中,pi=(2012)、pj=(1212),因此,x1在pj中以原变量形式出现,x2在pi中以反变量形式出现,因此,将x1和x2在pi和pj的出现形式取反后替换pi或pj中对应变量后得到e=(0112),执行步骤9。
步骤9:将乘积项e存储到ce中,得ce={0112},此时
步骤10:返回步骤3继续执行。
第二轮计算:
在第二轮计算中,在步骤3中发现乘积项(2212)与剩余的4项的关系,既不包含,也无法通过步骤4到步骤9进行近似合并,因此执行新一轮计算。
第三轮计算:
在第三轮计算中,执行步骤3,任取两个乘积项pi,pj,假设pi=(0101)、pj=(1101),
步骤4:执行两个乘积项之间的“异或”运算,pi^pj=(0101)^(1101)=(1000),pi^pj的结果中值为“1”的个数等于1个,执行步骤5。
步骤5:因pi^pj的结果中值为“1”的个数为1个,则由pi和pj生成一个新的乘积项q,且q就是在pi或pj中去除导致pi^pj结果取值为“1”的变量后得到的新的乘积项,因此q=(2101),将乘积项q存储到cf,并在cf中删除pi和pj,得到cf={2212,2101,1122,1120},然后经步骤10后回到步骤3继续执行。
第四轮计算:
在第四轮计算中,执行步骤3,发现乘积项(2101)与其他3项的关系,既不包含,也无法通过步骤4到步骤9进行近似合并,执行新一轮计算。
第五轮计算:
在第五轮计算中,执行步骤3,任取两个乘积项pi,pj,假设pi=(1122)、pj=(1120),由于pi∩pj=(1122)∩(1120)=(1120)=pj,因此在cf中删除pj,得到cf={2212,2101,1122},经步骤10后回到步骤3。
第六轮计算:
在第六轮计算中,在步骤3中已经找不到适合近似合并的乘积项,因此最终由cf={2212,2101,1122}得到近似函数
图2给出了逻辑表达式为