Chapter 10 Multi-Level Logic Synthesis

10.1 Introduction

一个SOP F = xz + yz的电路如下图所示是两级的。

而multi-level是从左边输入到右边输出存在多级的路径,如下图。好处是通常面积较小,功耗低。实际应用中大型的design几乎都是multi-level的。

10.1.1 Networks and Algebraic Operations

最常见的multilevel logic模型是bool网络,本质上是一个有向图,每个节点是一个bool表达式。

节点z1和z2是bool网络的primary outputs(Po),节点x1,x2,x3,x4,x5,x6是bool网络的primary inputs(PI)。内部各个节点的bool表达式为

这里我们并没有对节点表达式的形式做任何限定,是最通用的模型。在具体的建模中,我们可以限定节点表达式形式为与门,或门,BDD,AIG,SOP,......。

下面是两个multi-level circuit,可以视为一个bool网络。

左右的bool表达式分别为

从左图到右图实际上是一种结构上的restructuring,对应到表达式就是把公因子c提取出来。当让,factorization的方法不知一种,比如 f 还可以factor成

通常情况下,我们会对factoring的类型进行限制。在本章中,我们对bool表达式的factoring操作都限定为algebraic。Algebraic的定义并不是特别严密,主要是区别于Boolean,意思是我们所作的运算局限于实数多项式领域。可以这样理解

我们一定要记住上述区别,否则无法理解本章余下的内容。不严格地说,我们是对bool表达式进行多项式因式分解。 显然,f = c(a+b) + ad就符合这个约定,而 f = (a+bc)(c+d) = ac + ad + bc.c + ad = ac+2ad+bc.c就不符合这个约定,因为我们无法利用多项式领域的运算将 f = (a+bc)(c+d)转换回 f = ac + bc + ad。

在multilevel logic的领域,我们还必须要有一个观念上的改变。对于 f = ac + bc + ad,我们之前的理解为三个cube ac,bc,ad的和。在本章中,我们将 f 视为三个cube 的集合 {ac,bc,ad}。同时我们将cube ac 视为2个literals的集合{a,c},cube bc 视为......

10.2 Representation Issues and Choices

10.2.1 Alternate Node Representations

boolean网络中每个节点的表达形式可以有很多种。

1 SOP---sum of products

2 Factored forms

本章最重要的表示方式,直观上看,是用括号嵌套的表达式

Factored form有一个很好的特性-------取反之后literals的数目不变,如

左右的literals数目都是5。所以,我们认为一个factored form同时表示F和F‘(inverter的代价可忽略不计)。

3 NAND or NOR Representations-------限定节点function为NAND或NOR

10.3 Representing Switching Functions in Factored Form

10.3.1 Factored Forms

一个product可以视为terms为1的sum,factored form可以理解为sum of product的扩展,只不过product被递归定义为factored forms的乘积。并且一个single literal也是一个factored form。比如下面这些表达式都是factored form:

但是下面这个就不是,因为一个括号是一个factored form,但是定义中没有说可以对factored form取反,是不是?注意本身是一个literal,不是对literal a的取反。

10.3.2 Algebraic and Boolean Expressions

a+bc是algebraic expression的,但是a+ab不是algebraic的。Why?假设我们对a+ab提取公因子会得到a(1+b)。如果按照bool操作,1+b = 1,但是按照代数操作,没有这种优化。所以应该这样理解,如果一个表达式的优化涉及bool操作,则这个表达式就不是代数的。

可见support是忽略取反的。

10.3.3 Algebraic and Boolean Factored Forms

一条简单的判别规则,我们把factored form按照代数操作展开,如果结果是代数表达式,则factored form是代数的,否则为bool的。

10.3.4 Value of a Factorization

其实factorization value就是原始sop的literals数目减去factored form的literals数目,换句话说,就是factoring节省的literals数目。比如

如果选取G1 = a + bc + bd,G2 = e + f + g,则R=0,F = (a + bc + bd) (e + f + g)。从而FACT_VAL(F,G2) = 24 - (5 + 3) = 16。书中用了一种别扭的计算方式FACT_VAL(F,G2) = 2 * 3 + 2 * 5  = 16。我们解释以下2*5是怎么来的,2*3与之类似。我们观察(a + bc + bd)的literals数目为5,在factored form,a+bc+bd只计算了一次,而如果展开成的话,会被计算三次------(a+bc+bd)*e + (a+bc+bd)*f + (a+bc+bd)*g,所以相当于减少了5*(3-1) = 2*5个literals。

10.3.5 Equivalent, Maximal, and Optimum Factorizations

Forctored form可以表示为一棵factoring tree,如下图

看两个例子

这两个都不是maximally factored的。这两者一个为sum of products,一个为products of sums,都含有一个公因子a,所以都可以提取公因子:

需要注意的是后一个提取公因子用到了“+” distributes over “.“,这个是bool操作非代数操作。今后如果我们的factoring操作限定在代数领域,则不会考虑后面一个提取公因子操作,因为这种情况根本不会出现。比如代数领域可能出现(a+b)(c+d),但是绝不会出现(a+b)(a+c)。所以我们在判断是否为maximally factored的时候,不需要考虑product of sums的terms之间是否存在公因子,即不用考虑Definition 10.3.6的第二种情况。

这个很显然。比如我们要判断F = (ab + ac + cd)(e+f) + gh是否为maximally factored,递归步骤(实际为倒序,因为是postorder)为

1  判断sum terms (ab+ac+cd)(e+f) 和  gh之间是否有公因子

2  无需判断product terms  (ab + ac + cd) 和 (e+f)之间是否有公共因子

3   判断sum terms ab,ac,cd之间是否有公因子,如果有说明不是maximally factored的,可以进一步进行factoring

10.3.6 Size, Unateness, and Cofactors of a Factored Form

Size和Unateness的定义很简单,一看便知。

Cofactors要注意的区别。 是令,与正好相反。

10.4 Division

Division就是想法子把f表示成f=pq+r。

第三章曾经讲过canonical form的概念,f(0,0,...,0), f(0,0,...,1), ..., f(1,1,...1)被称为discriminants,对应于真值表的每一行。我们可以通过discriminants来理解上述命题。不考虑don't cares,我们把f的dricriminants分为两部分,ONSET(f)------输出为1的discriminants集合,OFFSET(f)------输出为0的discriminants集合。由于 ,由于f = g.h,,所以。为了证明,有人可能会想对f=g.h两边取反,有f'=g'+h' => h' = f'-g' = f'g => h = f + g'。为什么是等号? 原因在于,我们不可以对bool等式随便做移项操作。比如 a - b = c并不能推导出a = b+c。 正确的证法是由于f = gh,两边同时与上f',有ghf’ = ff' = 0。这意味着ONSET(h)与ONSET(gf')不相交,因此一定有,从而可以得出

证明是类似的,都是从集合的角度来处理与,或,非,差等操作,画个韦恩图就清楚了。

简单地说,能整除的就是factor,不能整除的就是divisor。

其实就是用集合的观点来理解product。对于product of tow cubes,想象一下 ab * cd = abcd 和 ab * a'c = 0就能理解了。Product of SOP与之类似。

这个很好理解。(a+b)(c+d) = ac + ad + bc +bd就是代数积,而(a+b)(a+c) = a + ab + ac + bc就是布尔积。如果factoring限制在代数领域,boolean product是不可能出现的。比如我们不会对a+ab+ac+bc做factoring,而是先变成a+bc,再进行factoring。当然a+bc没法进一步进行factoring,只是举个例子。Algebraic product保证了无论是计算因式乘积展开,还是因式分解,都不会涉及bool操作。

基本定义,无需解释。需要注意的是,对于一个表达式而言,boolean divisor的数量要远远多于algebraic divisor的数量,所以我们做factoring的时候通常选择algebraic division。Weak division是algegraic divsion的一种,基本对应于多项式的除法。

定义不重要,重要的是如何进行weak division。

本质上就是多项式除法,没什么难度。具体伪代码如下

10.5 Kernels and Co-Kernels

简单地说,cube-free就是不能被abc这种没有”+“的single cube整除。

F = abc + abd + ef = ab(c+d) + ef = a(bc+bd) + ef,则c+d和bc+bd都是primary divisors,但是只有c+d是kernel。Kernel一定是cube-free的。而用于获得kernel c+d的cube ab被称为co-kernel。举例说明

相应的kernels和co-kernels为

Kernel的level是什么呢?不严格的简单方法就是括号嵌套的层数。严格的定义为

这个定理是说如果F和G的任意一对kernel之间,最多只有一个term是相同的。 那么F和G之间没有共同的nontrivial algebraic divisors。 比如 F = (a+b+c)opq + R1, G = (a+b+d+e)xyz + R2,二者level 1 的kernels分别为F和G本身,没有公共的terms。Level 0 kernels分别为a+b+c 和 a+b+d+e,有公共的terms a和b,所以F和G用公共的divisor (a+b)。 F = (a+b)opq + copq + R1, G = (a+b)xyz + (d+e)xyz + R2。但是如果F= (a+g)opq + R1, 则F与G之间只有一个公共的trivial algebraic divisor a。

本章基本没有用这个定理。

10.5.1 Computation of Co-Kernels and Kernels

为了求出SOP F的所有kernels和co-kernels,我们先要计算一个cube的集合C*。C*中的元素是F的任意两个cube的交集。比如abc和bcd的交集是bc。任取,计算,则是一对co-kernel 和 kernel。这样求出的kernels会包含所有的level 0 kernels,也可能包含一些高阶的kernels。这个很好理解,如果一个kernel K是0 level的,则F = cK+R,其中c是single cube,并且K中包含2个或2个以上terms,并且任意两个terms不会有single cube的公因子,否则就可以进一步factoring,不是level 0。比如K = ab + de + fg,则F = c(ab + de + ef) + R, 显然c是cab和cde的交集,属于C*。因此上述方法可以求出所有的level 0 kernels。

一种系统地求出C*的方法为cube intersection table。比如

相应的cube intersection table为

表中每个非零项都是C*中的一个元素。注意C*中包含了所有level 0 co-kernel,但是未比能包含所有的co-kernel。如果我们想求出所有的co-kernels和kernels,需要对上面的cube intersectioin table进一步扩展,多加一些行和列,分别对应原表中那些不是single literals的元素,如abc,abd,abe...,并且这些元素不能与原来的行和列重复。如果原表元素代表了F中任意两个cube的交集,则扩展表代表了F中任意三个cube的交集。之所以排除single literal的元素原因很简单,如果两个cube的公因子为一个literal,它们在于其他cube的交集最多也是这个literal,不会产生新的元素。扩展的cube intersection table如下

这个扩展的过程可以一直进行下去,直到没有新的co-kernel产生。

10.6 Heuristic Factoring Algorithms

10.6.1 Generic Factoring Algorithm

上图是将表达式F写成factor form的算法框架。如果F没有factor,即提取不出公因子,则立刻返回F。否则通过DIVISOR辅助函数返回F的一个除数D,再通过辅助函数(可以理解为除法定义)DIVIDE求出商Q和余数R,使得F=QD+R。然后递归地分别求Q,D,R的factor form。最终F的factor form为F=FACTOR(Q).FACTOR(D) + FACTOR(R)。不同的DIVISOR和DIVIDE形成了不同的factor算法。其实算法中涉及的运算可以是bool的,也可以是代数的。本章采用的是代数运算,因为比bool运算更加简单,涉及的divisor和factor更少。

上图这个例子,P是算法里某步求出的部分factor form, O是算法求出的最终factor form。显然必须F=Q=O。但是显然O可以进一步化简为最优的factor form --- a(b(c+d)+e+f)+g,但是Generic Factoring算法却得不到这个最优的解。为什么呢。我们观察Q和R,发现Q是一个single cube,而这个single cube中的某个/某些literals a 同时也存在于R中。这就使得最终的O可以继续对a进行公因子的提取,进行化简,但是Generic Factoring 算法却错过了这个操作。因为该算法是对Q,D,R分别递归做Factor操作,却无法进行Q,D,R之间的因子提取。

为了解决这个问题,需要对GF算法稍作修改。如果Q是single cube,且某些literals同时出现在R中的时候。我们比较Q中的各个literal,选取一个在F的每个term中出现最多的literal Q1。令Q=Q1.Q2。我们计算F/Q1,得到一个新的Divisor D1,从而F=Q1.D1 + R1。 我们进行如下变换

可以看出,D一定是D1的一个Divisor。从而当我们对D1进行递归factoring的时候,会重新遇到D。还有,D1=Q2D + X,R1 = Y, Q1X + Y = Q1X + R1 = R。

这个引理是说上述把F=QD+R调整成F=Q1D1+R1的方法得到的factor form是maximally factored的。其实我们还要假定一个前提,就是D是cube-free的,引理才成立。令D1 = cD2, 其中c是D1中所有terms的common cube,则D2是cube-free的,并且F=Q1cD2+R1。显然,R1中没有Q1出现,否则相应的terms都应该已经被合并到D1中了。

由于cD2 = D1 = Q2D + X。D1是一些terms的和,这些terms是由Q2.D中的那些terms和X中那些terms的和。可以看出c中每个literal都一定在Q2中。否则,设此literal为t,则t是Q2D中那些terms和X中那些terms的一个公共cube。由于c不在Q2中,则c一定是D中那些terms的一个公共的cube,这与D是cube-free相矛盾,从而c一定是在Q2中,从而也在Q中。那么进一步,Q1.c 一定是Q=Q1.Q2的一个factor(factor和divisor的区别在于是否整除)。从而D2一定包含了D,即D是D2的一个divisor,D2 = mD + nb。

此外c中没有literal会在R1中,否则设该literal为t,则t在Q中。对于F中那些Q1出现的那些terms,t必然也出现在其中(Q1cD2)。同时,若t也出现在R1中,则F中包含t的terms的数目大于包含Q1的数目,所以我们当初就不应当选Q1,而应该选t,出现矛盾。因此得证。

我们在来看看c,c中没有literal在R1中,Q1同样不在R1中,所以我们可以用c中的任意一个literal替换。换句话说,如果c不为1,则Q1的选择不唯一。

现在我们来证明D2不是R1的一个divisor,更不可能是R1的一个factor。由于D2 = mD + n,如果D2是R1的divisor,即R1 = kD2 + f = kmD + kn + f, 则F = Q1cmD + Q1cn + kmD + kn + f。显然F/D的商Q = Q1cm + km 不是一个cube。这与Q为single cube的假设矛盾,从而得证。

观察F = Q1cD2 + R1,可知有两个sum term---Q1cD2 and R1。前者有三个factor,每一个东不可能是R1的factor,所以二者没有common factor。也就是说两个sum term之间没有common factor。 此外我们观察Q1cD2这个product, 有三个product term,Q1,c, D2。还记得我们的运算是代数的,不是bool的么。Porduct term之间的factor不用考虑,因为在代数领域,没有(h + i) (h + j)  = h + ij这种化简。即使(h+j) 和 (h + i)有common factor h,我们也不会把它提取出来,自然也就不将其作为maximal factored form的判定标准了。所以我们假定prodcut terms之间没有common factor。也可以这样理解,(h + i) (h + j)  = h * h + hi + hj + ij,这个表达式根本不是代数的,因此这种形式的product不会出现在对F求factor form的过程中。还记得么, 本章我们的运算都是代数的。

我们再看一个例子。

可以看出,O的两个sum terms有公共的factor (c+d),可以进一步化简为(c+d)(e(a+b)+f),所以O不是maximally factored的,当然也不可能是最优的。经过观察,可以发现问题在于Q和R有公共的factor (c+d)。类似于前面的例子,我们对Q进行调整,把Q变成一个cube-free的Q1。这样F/Q1就可以得到一个新的divisor D1。 以这个例子而言,可以令Q1=c+d, 从而D1 = ea+eb+f。

  1. 如果D1是cube-free的,像这个例子一样,令F=Q1D1 + R1为一个partial factored form,我们可以继续递归地对Q1,D1,R1进行factor操作。
  2. 如果D1不是cube-free的,则D1=cD2, c是一个cube。此时,F = Q1cD2 + R1。再令D3 = Q1.D2,Q3 = c,则F=Q3D3 + R1。这是不是正好是前面一个例子的情形。我们类似地从Q3中挑选出一个在F的terms中出现最多的一个literal作为Q4,......

对上述过程,我们有如下引理

  1. 当D1是cube-free的时候。Q1是我们对Q做cube-free得到了,所以Q1是Q的一个factor,从而Q=Q1.Q2. F= QD + R = Q1Q2D + R = Q1(Q2D + X) + R1 = Q1D1 + R1。显然Q1不可能是R1的divisior,因为R1是F除以Q1的余数。Q1不是R1的divisior,当然更不可能是R1的factor了。  D1也不可能是R1的factor。否则R1 = KD1 = K(Q2D+X)。进而F = Q1(Q2D + X) + K(Q2D + X)。那么F/D的商应该是Q1Q2 + KQ2 = Q + KQ2 != Q,矛盾。所以在第一种情况下,引理成立。
  2. 当D1不是cube-free的时候。F= cD3+R1 = Q3D3 + R1。这种情形在前一个引理中已经证明过了。

现在我们给出细化后的factor算法

首先我们看看函数GEN_FACTOR,F一定是SOP形式的代数表达式。Divisor和Divide是两个辅助函数,一个用来选择除数D,一个用来进行除法运算。如果Divisor(F)为空集,说明根本找不出一个除数,F没办法继续进行factor操作,直接返回F。否则,(Q,R) = Divide(F,D),F = QD + R。如果|Q| = 1,即Q是一个single cube,则调用LF函数。 该函数是专门处理当Q为single cube的时候,对于F的factor操作。如果Q不是single cube,我们令Q = MAKE_CUBE_FREE(Q)。如果Q本身是cube-free的,MAKE_CUBE_FREE不做任何操作,否则,MAKE_CUBE_FREE会根据Q返回一个cube-free的factor,比如如果Q = ab + ad,我们可以令MAKE_CUBE_FREE返回b+d。有了新的Q,我们计算(D,R) = Divide(F,Q),得到一个新的除数D和新的余数R。如果D是cube-free的,我们只需对Q,D,R递归调用GEN_FACTOR,返回maximal factored form即可。否则,我们提取D中terms的common factor C = COMMON_CUBE(D)。由于C一定是single cube,我们进而调用函数LF,返回maximal factored form。

现在我们来看看函数LF,C是一个single cube,即形式为abcd而不是ab+cd的表达式。首先,选取C中的一个literal ,该literal在F的terms的出现的次数最多。我们计算(Q,R) = DIVIDE(F,),则F = .Q + R。值得注意的是,对照我们前面的引理,的角色其实是商,Q的角色实际divisor。但是并不重要,商和除数可以互换的。接下来我们对Q和R递归调用GEN_FACTOR,最后返回F的maximal factored form。

该定理其实就是说如果我们将DIVIDE指定某种代数除法,则GEN_FACTOR返回的是F的maximal factored form。

有了前面两个引理,这个定理的证明很显然。唯一要说明一下的是什么叫做the factored form is maximal at this level。F = QD + R,记住在当前的level,F一定是SOP,而且我们还没有对Q,D,R递归调用factor操作。因此,Q,D,R本身应该也是SOP形式。如何判断F在当前level是不是maximally factored的呢?现在F有两个sum term QD和R。F如果是maximally factored的,QR和R不会有相同的factor。QR是product形式的,有两个factor Q和R。如果我们没有办法把R写成product的形式,使得R的某个factor是Q或R,则QD和R就不会有相同的factor。从而在当前level,F是maximally factored的。举个例子,假设F = QD + R =(a+b)(c+d) + af + bf = (a+b)(c+d) + a(f+g) ,则F在当前level就不是maximally factored。但是我们看R=af + ag,显然R本身不是maximally factored的,因为af和ag有common factor。但是我们分析F的时候不会去理会R是不是maximally factored,因为这已经是next level,我们递归调用GEN_FACTOR(R=af+ag, DIVISOR, DIVIDE)的时候才会考虑。

10.6.2  Quick Factor

不同的DIVISOR和DIVIDE的选取,可以得到不同的factor算法。本小节介绍Quick Factor算法。该算法的DIVIDE操作选取的前文所述的weak division,DIVISOR的算法为下图中的QUICK_DIVISOR。

让我们看看QUICK_DIVISOR函数,如果|F| <= 1,意味着F是single cube或者是常数。比如F = abc,是没有办法通过factoring来减少literals的个数的。因此返回空集,表示factor过程的结束。 如果F中每个literal只出现一次,也返回空集。比如F = ab + cd +ef,每个字母都只出现了一次。这个时候我们是没有办法对F进行提取公因子的操作,换言之,没法进一步进行factoring,因此只能返回空集。再比如F = ab + ac + de,a出现了两次,则F = a(b+c)+ de,可以继续factor。这个时候就要调用函数ONE_LEVEL_0_KERNEL。

顾名思义,ONE_LEVEL_0_KERNEL是返回F的一个level 0 kernel。SOP就是level 0 kernal,比如a + b。 而(a+b)(c+d) + ef就是level 1 kernel。 不严格地说,可以通过括号嵌套的数目来判断level。 如果F中每个literal只出现一次,我们同样返回空集(其实没必要,这种情况根本不会call ONE_LEVEL_0_KERNEL)。如果某个literal在F中出现多于两次,比如F = abc + abd + ef,则令F = F/a = bc + bd, 然后再令F = MAKE_CUBE_FREE(F) = c + d.  最后递归调用ONE_LEVEL_0_KERNEL( c+d )。由于c+d没有重复的literal,最终返回的divisor就是c+d。

还记得我们前面证明那两个引理的时候说过,有一个前提是要求divisor为cube-free。注意到QUICK_DIVISOR的返回值要么是某个F的某个level 0 kernel, 要么是空集。而kernel一定是cube-free的,这正好和引理的前提相契合。

10.6.3 Good Factor

QUICK_FACTOR只在0-level kernels中选一个作为divisor,所以可能错过更好的divisor。GOOD_FACTOR会在所有的kernels选取最好的一个作为divisor。但是怎么选取书中没有描述,可见就是介绍一下,无需了解。

10.6.4 Boolean Factor

Boolean Factor主要是用boolean division替换weak division,效果比good factor 和 quick factor都要好,但是耗时长。其他细节啥也没有,除了提及一篇经典论文MIS: A Multiple-Level Logic Optimization SystemMIS: A Multiple-Level Logic Optimization System。我个人推荐应该看一下。

10.7 Decomposition and Restructuring

10.7.1 Algebraic Resubstitution

啥意思,是布尔网络中的两个节点。我们希望用来替换的部分逻辑,这相当于让共享的逻辑,从而减少literals。把这部分共享逻辑从剥离出来的一种最直接的方法就是weak division,令为除数,有,可见的一部分逻辑已经被换成了。可我们很贪心,希望用替换更多的逻辑。显然,我们只能在R身上打主意,但是 R里面一定不包含 ,我们没法从R中提取出共享的逻辑,这要如何解决呢。我们同样对R进行weak divide,但是除数选择,有其实就是对取反(德摩根律)。书中说不同于对bool函数取反,其实和本节关系不大。这里可以视为完全限定的bool函数,即不包含don't care项的bool函数。举例说明一下,如果有个bool表达式为 F = ab + cd,我们将其视为一个bool函数的完全限定的部分。现在我们假设在某个应用中,该布尔函数在输入a=c=1的时候,不关心输出的值到底是什么。那么ac就是don't care项。我们认为bool函数可以用F = ab + cd表示,也可以用F=ab + cd + ac来表示。所以bool函数的取反要考虑don't care项的影响。但是这里我们认为F都是完全限定的bool函数,无需考虑don't care项。言归正传,为什么我们要用R除以 呢?这不是用替换R中的部分逻辑么,和共享 的逻辑有什么关系呢?这个就是factored form的好处了,的复杂度是一样的,或literals数目是一样的。如果我们用数据结构来表示,两者相差可能就是一个flag来指示是否取反,其他逻辑完全一样。在物理上的实现,也不过差了一个inverter。因此,共享等价于共享

让我们看个例子,了解一下Resubstitution到底是怎么回事。假设一个bool网络有两个节点i和j,相应的covers或表达式为

数一下,一共包含了17个literals。应用Resubstitution之后,有

现在只有9个literals。在中,ab+c已经替换为。由于是bool网络中已经存在,无需再重复实现这部分逻辑,因此共享之后,该部分逻辑等价于一个single cube cover,而不再是一个two cubes cover ab + c。

在了解了resubstitution之后,我们还有一个问题,那就是是否要对bool网络中所有的节点对都做这种操作。答案是否定的。比如,那么我们根本没有必要进行weak divide的尝试,因为不可能将分解为。由此可见,我们可以通过指定一系列的过滤规则,来减少不必要的尝试:

1 的fanin就是a和b。所以这条的意思就是如果的fanins没有交集,则不做resubstitution。

2 的literals必须相同,否则,对如之类的节点对,不做resubstitution。

3 显然a+b除以a+b+c没有意义。

4 如果的某个literal a出现的次数超过了,那么无法成立。

5 如果已经有,计算就没有意义,到那时可以计算

6 在有的应用中,我们不希望的商是一个single cube,即排除Q=abc,这种情况。  如果的某个literal a出现的次数等于,则的商不可能是一个multiple cubes,最多是一个single cube,我们不做resubstitution。比如,如果中a出现的次数也是1,则无论如何上述等式不能成立。

注意,resubstitution和factoring算法虽然都是用了weak division,但是是有区别的。

1 目的不同。factoring是将sop拆成factored form,减少literals。resubstitution是共享节点之间的逻辑,减少bool网络总的literals。

2 resubstituion的除数是bool网络里的某个节点的表达式,而factoring的除数是根据F本身得到的某个cube-free表达式,通常是kernels。

10.7.2 Selective Node Elimination

Node Elimination类似于resubstitution的逆操作。例如

                                                           (1)

的一个fanout,node elimination首先将代入

            (2)

如果bool网络中还有其他的fanout,也做类似的代入处理。最后,在bool网络中已经没有存在的意义,可以删除。这个过程就是node elimination。做node elimination的主要目的有

1 减少bool网络的层级,减少时间延迟

2 多级bool逻辑优化是启发式算法,不能保证一次就能达到满意的效果,通常是一个反复迭代的过程。Node elimination可以让优化过程尝试不同的factoring或者resubstitution策略。

不是所有的节点都能进行node elimination。以式(1)和(2)为例,(1)中literals的数目为9,(2)中literals的数目为11。由此可见node elimination有可能增加bool网络的literals个数(当然也可能减少,比如令)。我们假设的第i个fanout 表达式中,出现的次数(包括)为,那么对于而言,代入之后literals增加的数目为,其中的literals数目。容易得出,对进行node elimination之后,整个布尔网络的literals变化为

如果的值小于某个阈值v,则对进行node elimination。否则,说明删除会使得bool网络的literals增加过多,得不偿失。

10.7.3 Extraction

本质上就是把factoring,resubstitution,node elimination合在一起对bool网络进行操作。

QUICK_DECOMPOSITION其实就是factoring在实际bool网络中的应用。比如 QUICK_DECOMPOSITION会在bool网络中创建一个新的节点,并更新的表达式:

;    

接下来,Extraction进行resubstitution操作。然后删除那些表达式为单个literal的节点,如,因为删除该节点不会增加literals。最后还要删除那些小于某个阈值的节点。让我们看个例子

上面两个节点一共有27个literals(看等式右边)。

1 QUICK_DECOMPOSTION,应用factoring算法,得到

其中是更新后的,其他的表达式为新增的节点。可以看出,网络中一共有18个literals。

2 对做resubstitution,得到,然后对做node elimination。

3 对进行node elimination。

一共15个literals。

Logic Synthesis And Verification Algorithms Gary D. Hachtel Fabio Somenzi 第十章相关推荐

  1. Logic Synthesis And Verification Algorithms Gary D. Hachtel Fabio Somenzi 第九章

    Chapter 9 Finite Automata 9.1 Finite Automata and Regular Languages 这一小节的内容是有限状态机和正则语言.其实很多讲解编译器的书籍都 ...

  2. 微软研究院研究员Ryan Beckett 博士论文《Network Control Plane Synthesis and Verification》下载—2018ACM最佳博士论文题目奖

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 论文下载 关注微信公众号[计算机视觉联盟],回复关键词[Ryan]即可下载全文! 论文封面 论文目录 目前,Beckett 是微软研究 ...

  3. 《逻辑综合(logic synthesis)入门指南》

    Hello, 欢迎来到逻辑综合的世界,在这里我将用尽可能通俗的语言,介绍什么是逻辑综合. 技术是不断进步的,因此本文会不断更,持续更新,记得收藏哦~~ 目录 逻辑综合概述 技术概述 一.翻译 二.高阶 ...

  4. 【Logic synthesis】ABC Command

    ABC Command Combinational synthesis resyn,resyn2,resyn2rs(delay) rewrite;refactor;balance;多次迭代 balan ...

  5. 手机屏幕xy坐标软件_软件工程中的xy问题

    手机屏幕xy坐标软件 XY problem is classified as a communication problem in which the person who asks the ques ...

  6. Altera的几个常用的Synthesis attributes(转载)

    各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...

  7. (转)Altera的几个常用的Synthesis attributes

    各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...

  8. Formal equivalence verification 形式验证之等价验证 FEV 第8章

    目录 一.要检查的等价类型 1.组合等价 2.序列等价 3.基于事务的等价 二.FEV用例 1.RTL -- netlist FEV 2.RTL--RTL FEV 1)参数化 2)序列修复--逻辑再分 ...

  9. verilog synthesis

    各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方 ...

最新文章

  1. 法国电子与计算机信息学校排名,法国电气与电子工程专业大学排名(2020年上交大)_快飞留学...
  2. PHP+redis实现超迷你全文检索
  3. 独家 | 5个步骤开启你的数据科学职业生涯!(附链接)
  4. oracle crs 不能启动,oracle 10g crs 不能启动问题解决案例
  5. easybcd安装Ubuntu
  6. Android Studio安装配置、环境搭建详细步骤及基本使用
  7. [Apache]网站页面静态化与Apache调优(图)
  8. html事件机制,浅析JavaScript中的事件机制_基础知识
  9. 2019 amazingdotnet 公众号回顾
  10. mybatis 注解 占位符
  11. linux 鼠标残影,Win10系统拖动鼠标有残影怎么办
  12. 离散数学及其应用(第七版黑书)笔记
  13. oracle shutdown 很慢,oracle shutdown immediate等待时间很长之思考
  14. [效率提升]webstorm配置Prettier
  15. 建设一个SaaS平台需要知道什么,做什么(附多图)
  16. 如何使用ArcGIS将Excel数据转换为shp格式
  17. java并发编程艺术——基础篇
  18. xp系统电脑蓝屏怎么解决,解决xp电脑屏幕蓝屏
  19. 牛逼的js--就是d3.js
  20. es6中两数组按条件穿插混合------------元宵节快乐

热门文章

  1. 大型高并发高负载网站的系统架构
  2. 【Unity 粒子系统】Lifetime Speed 相关
  3. 移动云Mas发送普通短信和模板短信
  4. Mc模组开发--Java版的环境搭建
  5. 使用MS Word设计和打印自己的圣诞贺卡,第1部分
  6. Intel-8088/8086微处理器
  7. 这种公司再也呆不下去了!我要跳槽!
  8. Python爬虫入门-python之jieba库制作词云图
  9. 计算机更新配置卡住了,win10更新设置卡死怎么办|win10更新设置卡死的完美解决方法...
  10. PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘