文章目录

  • Cube notation
  • Exact algorithm
    • Petrick method
    • Quine McClusky algorithm
  • Heuristic optimization

在刚接触数字电子技术的时候我们就学过karnaugh-map用于化简复杂的组合逻辑电路,作为EDA工具处理大型组合逻辑电路自然需要告诉计算机到底要怎么去处理这种组合逻辑的化简。通常而言,除了使用karnaugh-map以外还可以使用cube notation和truth table来表示同样的组合逻辑电路,当然化简的方法和思路也会不一样。但是化简最终达成的目标是一样的:

  • 减少表达式中implicant(蕴含项)的个数
  • 减少literal(变量)的个数

Cube notation

如图所示即为一个组合逻辑表达式的cube notation。一个三维逻辑表达式的implecant就可以使用这个立方体中的顶点,边或者面来表示。例如图Fig1所示,其中的希腊字母就表示了三个不同的implecant。整个逻辑表达式在cube上称为cover。

Fig1 cube notation example

Exact algorithm

要理解2level optimization的思想,首先要介绍的是Quine’s theorem. i.e. There is a minimum cover that is prime。这里的prime cover指的是由prime implicants组成的cover。其中的prime implicant是指不被其他implicant 包含的implicant例如Fig 2 中的例子

Fig2 prime implicant

从而Minimum cover的寻找范围首先就缩小到了prime cover的这个集合中。基于这个理论,我们可以很自然地想到首先第一步肯定是建立一个Prime impliment的表格然后再想如何去搞定。显然再这个cube上是很容易一眼看出来的,但是计算机不一定能一眼看出来,后面我将会提到解决这个问题的方法。
另一个重要的问题就是covering 问题的表述,i.e.我们需要达成的目标是什么。就此我们可以用如下文所示来进行描述:
寻找一个x,使得Ax>=1, 且x中所有元素值之和最小
x向量中包括的是一个boolean value,当x中元素表示的prime implicant处于cover中时为1
A为prime implicant table表示的数组
1为一个全为1的列向量,表示每一个minterm都必须要至少出现一次,即包括在这个cover中。

Petrick method

(这个方法仅用于手算)

  1. 建立Prime implicant Table
  2. 横着看每一个minterm,用表中的implicant来表示,所有乘起来的结果为1(因为出现在逻辑表达式里的implicant,将他们拆开成minterm肯定也是恒为1的)
  3. 化简这个等于1的式子即可得到一个由prime implicant表示的式子这些式子便是要求的满足条件的prime cover。
    图Fig3 为一个例子

Fig3 Petrick algorithm example

Quine McClusky algorithm

首先,我们已知的东西是这个逻辑电路的表达式f(a,b,c,…),根据这个表达式即可写出其真值表。根据真值表则可以求出Prime Table.求的方法如下;

  1. 根据f列出所有包含的vertex
  2. 合并在表中所有hanmming distance为1的vertex对,并写入下一阶段的表中
  3. 在下一阶段表中同样合并hanmming distance为1的implicant对,循环到不能表中所有的implicant都不能再合并为止。
  4. 表中不能合并的vertex和implicant拿出来即可以作为我们的essential prime implicant.
  5. 用这些essectial prime implicant即可作为创建Prime table的依据
    举个例子如下图: f(x,y,w,z)=x’y’w’z’+x’yw’z+x’ywz+xy’w’z’+xy’w’z+xy’wz’+xy’wz+xywz’+xywz

在创建好prime table后即可开始根据这个表求出需要的最优解:
例如下表:

找表中整个行只有一个1对应的那个implicant就是一个essetial prime implicant。这个表中有 α \alpha α和 δ \delta δ两个。然后检查是否cover到了所有的minterm,我们将 α \alpha α和 δ \delta δ对应的两列中所有的1找出来并在表中删掉1存在的行,即最后保留了第三行,保留下来的表由于没有整行只有一个1的行所以在剩下的行中随便选一个包含minterm(vertex)数量最多的列(只有 β \beta β和 γ \gamma γ可以选了,这里选 β \beta β)此时再往下就没得选了,所以可得到最优解就是 α + β + δ \alpha+\beta+\delta α+β+δ。当然如果选的是 γ \gamma γ的话那么最优解就是 α + γ + δ \alpha+\gamma+\delta α+γ+δ,这两者都可以。

Heuristic optimization

这个方法的主要思想和在前一章中讲的是一样的:

  1. 按照题设要求选择一个起始的cover
  2. 在相邻的部分内找到更优的点作为下一次的循环起点,直到找到可能的全局最小点为止

实际逻辑优化应用中包含了3个不同的operator:

  • expand:找到所有的prime implicant组成prime cover
  • irredundant:prime cover中不包含同时被两个prime implicant包含的
  • reduce:在保证所有minterm都包括在这个cover的情况下尽可能地缩小每一个implicant的大小

其中,expand和irredundant两个operators的迭代是为了找到局部最优点,而reduce的使用则是为了跳出局部最优点获得全局最优解。

下图Fig4举一个计算的例子

Fig4 cube notation of f(a,b,c,d)

step 1 expand:
存在于cover中的minterm为各个标有灰色圆圈的顶点,如上所示计算机处理的第一步便是讲各个minterm泛化为互相不包含的prime implicant,从而我们即可得到(结果并不唯一,目标仅仅是将多个minterm合并为implicant):
由0000可以泛化为A=0xx0(这里就包括了除0000意外0100,0010,0110三个minterm,因此这三个可以从cover表达式中去掉,用a’d’来表达这四个顶点。)
同理,
1000 --> B=x0x0;
0101 --> C=01xx;
1001 --> D=10xx;
1101 --> E=1x01;
在实际应用中,想要让计算机知道应该往哪边扩展就得提前先给计算机一个 off-set。这个集合是这个cover中没有的项,i.e. karnaugh map中为零的格子。如果说扩展的时候发现扩展出来的Implicant中有包含off-set中的项那么这个扩展就是不合理的。

step 2 irredundant:
在这一步之前,虽然说这个cover都是由prime implicant组成的,但是这些prime Implicant其中会有冗余,i.e 会有implecant包含的所有minterm都被其他的implicant包含,但是这个implicant并不处于任何一个其他的implicant之中。在本例中我们可以找到:
00x0 同时被A和B包含
10x0 同时被D和A包含
01x0 同时被C和A包含
可以推理得出这里的A和B其中有一个是多余的,在cube中也可以看出紫色的面包含的4个点都是被别的implicant包含的(或者说黄色的面报刊的4个点都是被别的面包含过的)这里就把A丢掉就好了

step 3 reduce:
在这一步中,我们需要去掉那些重复包含的minterms,所以在这里我们需要将某一些implicant的包含范围适当减小,在此例中:
B=x0x0 --> B=00x0
E=1x01 --> E=1101
自此cube中黄色的面就缩小成了0000,0010这条边,而1x01这条边就缩小成了一个顶点。所有在cube中的minterm仍旧包含但是没有重复包含的minterm。
在这一步中最需要计算机执行的最重要的步骤就是检查是否在reduce之后依旧可行。我们的做法是向implicant中添加一个literal(这就是变量和变量’的合集)看是否在新的implicant中包含有off-set中的东西。

espresso huristic算法如图Fig5所示

Fig5 Petrick algorithm example

在heuristic算法处理的过程中我们需要对一些事件的发生与否进行判断:

  • 检查是否这个cube能被cover所表示
  • 求一个函数的补
    这些判断都可以用tautology来判断。那么我们应当如何判断一个函数是否为tautology呢?tautology表示的是一个函数是否恒为1,也就是说这个函数中所有的项一定是全为1的,那么遵循这个思路我们可以想到把原本的函数分解开然后对立面的子项分别进行判断。这里需要用到的是Boole’s expansion theorem。这个理论可以将需要判定的函数表示为其某一个literal相关的cofactor的形式:
    f ( x 1 , x 2 , . . . , x i , . . . , x n ) = x i ⋅ f x i + x i ′ ⋅ f x i ′ f x i = f ( x 1 , x 2 , . . . , 1 , . . . , x n ) f x i ′ = f ( x 1 , x 2 , . . . , 0 , . . . , x n ) f(x_{1},x_{2},...,x_{i},...,x_{n})=x_{i} \cdot f_{x_{i}} + {x_{i}}' \cdot f_{{x_{i}}'}\\ f_{x_{i}}=f(x_{1},x_{2},...,1,...,x_{n})\\ f_{{x_{i}}'}=f(x_{1},x_{2},...,0,...,x_{n})\\ f(x1​,x2​,...,xi​,...,xn​)=xi​⋅fxi​​+xi​′⋅fxi​′​fxi​​=f(x1​,x2​,...,1,...,xn​)fxi​′​=f(x1​,x2​,...,0,...,xn​)
    当做完一次分解之后可能其所有的项依旧是不明朗的状态,i.e 无法判断是否为1或者0。那么此时就应该继续将分解后的结果再继续分解,直到所有的cofactor都判断为真 i.e为tautology, 或者其中有一个零能确定其不为tautology为止。
    要判断是否为tautology,首先得用合适的形式表述logic cover如图Fig6所示

Fig5 Petrick algorithm example

其中

  • 00表示这个implicant中不存在这个变量
  • 10表示在这个implicant中的变量为负值
  • 01表示为正值
  • 11表示不关心这个变量的正负
    下一步则是求取cofactor。首先将相关的变量用同样的matrix的方式表达出来,然后用f 的每一行和这个变量的metrix作交集运算 i.e 两行按位与。如果得出的结果中没有00,那么就将这一行拿出来与cofactor matrix的按位反码作并集运算,i.e 按位或。从而将所有的最终结果表示的implicant加起来就可以得到需要的cofactor,图Fig7为例子。

Fig7 cofactor example

要判断一个表达式是否为tautology需要判断其matrix,判据如下:

  • 有一整行为1的=>Tautology
  • 有一整列为0的=>Not tautology
  • 只有一个变量相关且没有任何一列为0=>Tautology
    如果判据判断不了那就继续分解。

2 level optimization相关推荐

  1. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. • MindSpore前端表示层(Mi ...

  2. link library 、target library、symbol library、synthetic library对照分析-基础小知识(九)

    文章目录 1.1 概念介绍 1.2 疑问解析 参考文档 DC 应用过程中涉及link library .target library.symbol library.synthetic library, ...

  3. 每日学术速递1.29

    CV - 计算机视觉 |  ML - 机器学习 |  RL - 强化学习 | NLP 自然语言处理 更多Ai资讯: Subjects:cs.CV 1. Compact Transformer Trac ...

  4. 新一代深度学习框架研究

    点击上方蓝字关注我们 新一代深度学习框架研究 于璠 华为技术有限公司,广东 深圳 518000    摘要:从人工智能的历史出发,简述深度学习发展历程以及目前的挑战,通过介绍新一代深度学习框架的特点, ...

  5. 2021年 软件工程 顶级会议 截稿时间

    更多会议截稿信息,期刊Special Issue,以及盛会的讨论qun,请移步gzh(CS Conferences)查看. ​以上为未来三个月已公布截稿日期的CCF推荐,软件工程领域会议,按照时间排序 ...

  6. ART世界探险(18) InlineMethod

    ART世界探险(18) InlineMethod 好,我们还是先复习一下上上节学到的图: 在开始InlineMethod之前,我们再继续补充一点BasicBlock的知识. BasicBlock中针对 ...

  7. 2021年 ICCV / NeurIPS / AAAI 中Neural Architecture Search (NAS) 神经网络结构搜索相关论文汇总

    这里写自定义目录标题 ICCV (35篇) NeurIPS / NIPS (28篇) AAAI (31篇) ICCV (35篇) Learning Latent Architectural Distr ...

  8. 学习方向: Learning direction:

    学习方向:     Learning direction: 01.maven的使用     01. Use of maven       Getting started with maven mave ...

  9. springmvc atomikos mysql数据源_Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis...

    项目进行读写分离及分库分表,在一个业务中,在一个事务中处理时候将切换多个数据源,需要保证同一事务多个数据源数据的一致性.此处使用atomikos来实现:最后附源码: 1:spring3.0之后不再支持 ...

最新文章

  1. ORB + OPENCV
  2. promise的大白话讲解
  3. SAP Spartacus RouteGuard路由守卫之CmsPageGuard
  4. Android 多线程断点下载(非原创)
  5. 课节5:图神经网络算法(二)
  6. CSS选择器、优先级与匹配原理
  7. Linux基本信息查看命令
  8. 简单两步实现安卓软件自动升级(自动升级工具类)
  9. 一元线性拟合的matlab,基于MATLAB的一元线性回归分析
  10. 进阶版--Mongodb命令汇总
  11. 通过使用ZooKeeper解决单点故障理论
  12. SurfaceView显示透明色
  13. 华为p50鸿蒙系统手机价格,华为P50系列屏幕、镜头、芯片、价格全曝光,预装鸿蒙系统?...
  14. 优质嵌入式C程序总结
  15. 师古创今匠心品质,打造红木中式整装
  16. sql优化之in与exists
  17. crypto++(cryptopp)加密库aes算法的使用
  18. 2023苹果电脑专用下载工具Folx5.27.13991
  19. python+Appnium微信公众号测试实战(坑已填平)
  20. 胎压计气压表解决方案

热门文章

  1. pyqt实现简单的图像数据标注
  2. 技术-经济范式视角下的开源软件演进剖析(一)
  3. 小白如何在嘉立创快速进行5元PCB打样
  4. Duilib窗体阴影改进
  5. 研究生毕业一年,大家给点建议
  6. 手机游戏开发综述(转)
  7. [FROM WOJ]#1935 魔法树
  8. first season eighth episode,nana dies twice?Chandler is a gay???
  9. ArcGIS分析城市在大暴雨中有洪涝隐患的区域(上)
  10. 计算机课程制作月历,【信息技术】《制作月历》教学反思