電子設計自動化演算法

二元決策圖(binary decision diagram, BDD)

二元決策圖是一種緊湊且具標準形式的方式,把布林函數表示成一張分支圖:每個節點都問「變數 x 的值是多少?」,然後把你沿著 0 分支或 1 分支送往兩個終端葉子之一,TRUE 或 FALSE。可以把它想成一張是非問題的流程圖,但把相同的子決策共用而非重複。n 個變數的真值表需要 2ⁿ 列,而化簡有序 BDD 卻能把它縮成寥寥幾個節點——讓擁有上百個輸入的函數變成電腦能儲存、能比較的東西。

它的超能力在於標準性:一旦固定變數順序並套用兩條化簡規則(合併相同子圖、跳過兩條分支通往同一處的節點),每個布林函數就恰好對應「唯一」一張化簡有序 BDD。於是兩個電路在邏輯上等價,若且唯若它們的 BDD 是同一張圖——一行就能完成的等價檢查,撐起了整個世代的形式驗證、組合等價檢查與符號模型檢查。代價是:變數順序影響極大,而且某些函數(尤其是乘法器)無論順序如何都會膨脹到指數大小。

f(a,b) = a·b → BDD: node a →(1) node b →(1) TRUE; all other branches → FALSE

Randal Bryant 於 1986 年提出化簡有序 BDD 的論文,是整個 EDA 領域被引用最多的著作之一;尋找最佳變數順序本身就是 NP-hard,因此工具改用動態重排(sifting)這類啟發式。

又稱
BDDROBDD二元決策圖