1. 什么是BDD?
BDD,Boolean Decision Diagrams,是一种Directed Acyclic Graph, 它是基于Shannon展开的用来表示逻辑表达式的Binary Recursions Tree。它与传统的逻辑表达式表示方式相比,如真值表、卡诺图、sum-of-products,具有以下几个优势:
a) 表达方式唯一。它是一种Directed、Reduced和Canonical二叉树,这给比较两个逻辑表达式是否表达同一种逻辑带来极大方便。
b) 高效。很多应用在逻辑表达式上的算法,可以拥有polynomial time的事件复杂度。
2. BDD是怎样表示的?
首先,BDD是按照一定参数的顺序展开的。这个顺序一般就是x1,x2,x3,…, xn,而且在生成BDD树的过程中,这种顺序不能随便改变。但是这儿有个问题,譬如f(x1,x2,x3,x4,x5,x6)=x1x2+x3x4+x5x6和f(x1,x2,x3,x4,x5,x6) = x1x3 + x2x5 + x3x6,这两个逻辑函数唯一的不同只是输入的顺序不同,在表达的逻辑上面并没有区别。但是,展开这两个函数时,第一个BDD树的结点要比第二个BDD树的结点少的多。所以,要记住生成BDD树的时候是按照一定顺序展开的,而且输入变量的顺序不同会导致生成的树的结点数目有很大的不同。但是输入变量的顺序如何排列,才能使生成的BDD树结点最少,现在还不知道。
当我们按照顺序生成BDD时,它的叶子的值总是1或0,其余结点的值就是index(v)=i,两棵子树就是按xi的Shannon展开,i就是代表你展开的参数,譬如当按x4展开的时候,i=4。
为了使BDD的表达是Canonical的,还必须保证它是reduced的。Reduce graph的概念,请参照3和4。
3. 什么是同构?
同构,就是如果两棵逻辑表达式树G1和G2,存在一种映射,使得G1通过这种映射和G2相等,即G1的叶子通过映射后和G2相等,G1的结点和相应的左子树和右子树通过这种映射和G2的结点、左子树、右子树相等,那么就称这两棵树同构。它和数学上的同构的概念,应该说是一样的。
4. 什么是Reduced BDD?
如果一个BDD,不存在结点v,使得它的左子树和右子树相等,也不存在两个不同的结点v1、v2,使得以它们为根的子树同构,那么就称这棵树是Reduced Graph。
5. 什么是Ordered BDD?
如果一个BDD,沿着一条路径走,所经过的结点总是有序的。譬如总是从x1->x2->x3,而不是有的x1->x2->x3,有的路径x1->x3->x2。
6. 什么是ROBDD?
ROBDD就是reduced ordered BDD。任何一个逻辑表达式,都有唯一的一种ROBDD的表示。
7. 怎样从ROBDD里读出逻辑表达式?
只要把所有从根到叶子值为 1 的路径加起来,就是 ROBDD 所表达的逻辑表达式。 但是从 ROBDD 里读出的逻辑表达式并不一定就是最简的。8. BDD有什么用途?
BDD的适用范围非常广泛,在EDA领域,主要用来做验证.因为BDD的表示是Canonical 的,也就是唯一的.
Reference:
[1] Randal E. Bryant," Graph-Based Algorithms for Boolean Function Manipulation".
[2] Guoyong Shi