bi-decomposing large boolean functions via interpolation and satisfiability solving
Boolean function bi-decomposition is a fundamental operation in logic synthesis. A function f(X) is bi-decomposable under a variable partition X A , X B , X C on X if it can be written as h(f A (X A ,X C ),f B (X B , X C )) for some functions h, f A , and f B . The quality of a bi-decomposition is mainly determined by its variable partition. A preferred decomposition is disjoint, i.e. X C = , and balanced, i.e. | X A |  | X B |. Finding such a good decomposition reduces communication and circuit complexity, and yields simple physical design solutions. Prior BDD-based methods may not be scalable to decompose large functions due to the memory explosion problem. Also as decomposability is checked under a fixed variable partition, searching a good or feasible partition may run through costly enumeration that requires separate and independent decomposability checkings. This paper proposes a solution to these difficulties using interpolation and incremental SAT solving. Preliminary experimental results show that the capacity of bi-decomposition can be scaled up substantially to handle large designs.
satisfiability bi-decomposition logic synthesis craig interpolation