命题逻辑 - 减少操作次数

时间:2014-10-12 15:56:39

标签: algorithm optimization boolean logic

简而言之,我想知道,给定两个命题公式,是否有一种标准方法可以找到仍然具有与两个公式相同输出的最短操作序列。例如,如果我们有以下公式:

enter image description here

enter image description here

我们可以通过引入一个新命题来减少操作次数:

enter image description here

然后Q变为:

enter image description here

这将操作(一元和二元)的数量从19减少到14Q的新逻辑电路是:

enter image description here

理想情况下,我希望只有否定和脱节。有没有一种算法可以将任何命题转换成我理想的简化命题?是否有一种引入上述新命题的算法?

2 个答案:

答案 0 :(得分:2)

经过50多年的研究,仍然没有多级逻辑综合的标准方法。可以使用Karnaugh mapsQuine McCluskey方法正确处理两级案例。这里,最小化了最小数量。但这并不直接对应于确定函数值所需的逻辑运算次数。

加州大学伯克利分校开发了几个tools来生成启发式解决方案。其中一些工具很好地打包在Logic Friday 1

您的功能输入问:

已输入: Q:=(A&((B& C)+(B'& C')))+(A'&((B& C)+(B'& C'))') ;

最小化: 问:= A B C + A'B'C + A'B C'+ A B'C';

“映射到门”操作后的输出:

enter image description here

注意:
最近的综合套件是Clifford Wolf的Yosys

答案 1 :(得分:0)

是的,有一种标准的逻辑方程简化方法

  • 使用Karnaugh Maps
  • 这里是Karnaugh Maps for 4 inputs example
  • 背后的想法是将逻辑/电路真值表编码为矩形矩阵
  • Karnaugh Maps
  • 这是来自此answer
  • 的3张卡诺图的示例
  • 一张地图代表单一输出
  • 每个代表它自己的逻辑电路/等式
  • 你可以看到set1和set2是相同的
  • X表示输出= 1
  • 空格意味着输出= 0
  • side是所有输入组合的二进制编码

简化

  • 是通过从地图
  • 中提取方程式来完成的
  • 所以找到覆盖所有X或空格的最小区域数
  • 哪一个取决于使用的逻辑或哪个更易于选择
  • 例如,只有当 a b 处于活动状态时,set1才有效
  • 所以:set1=a.b
  • set3可以像这样提取:
  • set3=a+b选择 x
  • set3=!((!a).(!b))选择空格

[注释]

  • .
  • +
  • !
  • 选择可以重叠边框