VLSI設計工学 2 • 2分決定グラフ(Binary Decision Diagram, BDD) – 論理関数の計算機上でのコンパクトな表現と 効率的な処理を実現するデータ構造 – VLSI用CADのうち、論理関数処理を行うもの には広く利用されている – CAD以外への応用も進んでいる 論理式の記法 • 論理変数は、基本的にアルファベット1文 字か、アルファベット1文字に数字を付加し たもの • 論理積は、省略する • 論理和は「+」 • 否定は、否定を取るべき式の最後に「‘」を 付けるか、アッパーラインを引く • 排他的論理和は「@」であらわす 2分決定グラフ (Binary Decision Diagram, BDD)と は? • 真理値表は、2分決定木で表現できる • 2分決定木で、根から葉に至るすべてのパスで 同じ変数順を使用する • 同型のサブ木を共有できる(グラフになる) • 論理関数の正規表現(Canonical form) – 論理関数が等価であれば、同型のグラフになる • 多くの実用的な論理関数をコンパクトに表現でき る 2分決定グラフ (Binary Decision Diagram, BDD)と は? Removal of equivalent nodes X1 X2 X2 X3 0 X3 1 0 X3 1 0 X3 1 1 1 Removal of redundant nodes X1 0 X2 X2 X3 X3 1 X1 X2 X3 0 1 順序付BDDとFree BDD • 根から葉へのすべてのパスで同じ変数順ではな く、パスごとに異なる変数順→Free BDD • どのパスでどういう変数順を使うかを前もってき めていれば、論理関数の正規形という性質は保 存される X1 X1 0 1 0 X2 X2 1 0 0 1 1 1 0 X5 0 0 1 OBDD X3 1 1 0 X4 0 1 X4 0 0 X5 0 X3 0 X4 1 0 1 X4 0 0 X3 1 X2 1 1 X4 0 1 X3 0 0 X2 0 X3 1 1 1 FBDD 1 1 BDDの例 x1 x2 x3 4x x1 + x2 + 3x + 4x x1 x1 x2 x1 x2 x3 x3 x4 x4 1 0 0 (a) And 1 (b) Or x1 + x2 + 3x + 4x x2 x2 x3 x3 x4 x4 0 1 (c) Ex-Or セレクタ関数に対応するBDD s2 s1 s0 s1 s0 s0 s0 d0 d1 d0 d1 d2 d3 Out d4 d7 d5 d6 d7 s0 s1 s2 0 1 BDD間の論理演算(apply演算) • h = f ◇ g = v’(fv=0 ◇ gv=0) + v(fv=1 ◇ gv=1) 1. fかgが定数の時やf=g, f=g’の時は、対応 する演算を実行する 例: f・0 = 0, f + f = f, f @ 1 = f’, … 2. fの変数とgの変数が同じならば、新しい ノードを生成し、 h0←f0◇g0, h1←f1◇g1 とする 3. Fの変数がgの変数よりも順序が先ならば、 新しいノードを生成し、 h0←f0◇g, h1←f1◇g とする Apply演算の例 x1 x1 x 2 + x3 x1 x1 x2 x3 x1 x 2 1 0 AND OR 0 x1 x2 x2 x3 0 1 x2 x3 0 1 0 1 1 複数の論理関数でBDDを共有: 共有2分決定グラフ(Shared BDD) X2 1 0 x1’+x2 x1’ x1@x2 x1x2 X2 0 X2 0 1 1 X1 1 0 0 1 X1 0 1 否定エッジ x2 x1 x2 x2 0 x1 1 x1 x2 x2 0 0 1 0 0 x2 x2 1 1 x1 1 x1 x1 0 0 1 1 0 x1 BDDの大きさは、使用する変数順に 大きく依存 X1 X2 X3 X4 X5 X6 Worst 1 0 Best 3 0 1 1 3 1 0 0 5 2 0 0 5 1 0 5 0 1 3 1 2 4 0 0 1 4 1 4 1 2 0 1 1 0 0 1 1 6 0 0 0 5 0 5 1 2 0 0 1 1 6 1 1 0 0 1 0 1 2 1 BDDの変数順決定 最適変数順決定は、NP完全問題 • ヒューリスティックにおける基本的な考え方 – 互いに関連する変数は近づける – 制御系の変数は前にもってくる s2 s1 s0 s1 s0 s0 s0 d0 d1 d0 d1 d2 d3 Out d4 d7 d5 d6 s0, s1, s2は制御変数 d7 s0 s1 s2 0 1 BDDの変数順決定 • 回路から変数順の決定のためのヒューリ スティックの考え方 – 回路を深さ優先で出力から入力へ辿る – 入力数の多いゲートを優先する – ファンアウト数の多いゲートを優先する x0 x1 x2 x3 x4 Depth first traversal: x0, x1, x2, x3, x4 or x2, x3, x0, x1, x4 (with fanout consideration) 変数順の改良 • 隣り同士の変数の交換はそこだけつなぎかえれば よい i-1 (A) i+1 (B) i+1 i f1 i-1 i-1 (C) i+1 i f3 i f2 i-1 (D) i+1 (A) i i i+1 f4 f1 (B) i-1 i i-1 i i+1 f2 (E) i+1 (D) f3 f4 • これを繰り返せば、任意の変数順へ変更できる • よく使われるヒューリスティック – 隣同士の2,3,4変数間での交換 – 各変数を最初から最後まですべて移動し、最適なところ に置く(siftヒューリスティック) 回路からBDDの生成 X1 X2 X2 0 X2 1 1 X1 0 0 X2 X1 1 1 1 0 1 1 1 X1 0 0 0 0 X2 1 1 0 X2 0 0 X1 0 0 1 X1 1 0 0 1 0 1 1 1 X1 0 1 BDDの計算機上での表現 変数 0エッジ 1エッジ 0 1 2 3 4 5 6 ー ー ー ー ー ー 1 0 1 1 1 0 2 0 3 2 2 3 2 2 1 ← ← ← ← ← ← ← 0 1 x1 x1’ x2x1’ x1 @ x2 x1’ + x2 回路からBDDを生成するもう1つの方法 • BDDを入力から出力へ順に作っていくと、途中で BDDが大きくなりすぎることがある • そこで、ある程度大きくなったら、そこで回路を仮 に切断し、そこから先は新たな変数を導入して、 BDDを作っていく • 回路の出力のBDDが作れたら、先ほど導入した 変数をcompose演算で取り除く • Applyでうまくいかない時でも、BDDを作成できる ことも多い 回路から、applyに基づくBDDの生成 X1 X3 X4 X5 X2 X3 X4 0 X3 X1 X1 X4 1 X2 X5 0 X1 X3 1 X3 X4 X3 X4 X5 1 X2 X4 X5 0 0 X5 1 1 0 新規中間変数の導入 Cut here and introduce an intermidiate var: t X1 X3 X X4 X5 X2 X2 0 X2 1 1 X1 0 0 X2 X1 1 1 1 0 1 1 1 X1 0 0 0 0 X2 1 1 0 X2 0 0 X1 0 0 1 X1 1 0 0 1 0 1 1 1 X1 0 1 Compose 演算の実行 t X1 X1 X3 X2 X2 X4 = composed with t X3 X5 X4 1 0 0 1 X5 1 0 宿題 • 次の関数の2分決定グラフ(BDD)を作成して、 図示せよ。ただし、変数順はx1, x2とする – F1 = x1・x2’ + x1’・x2 – F1 = x1’・x2’ + x1・x2 • 次の関数を2分決定グラフで表現したときに、 ノード数が最大となる変数順と、最少となる変 数順の例を示せ。 – F3 = x1・x2・x3・x4 + x5’・x6’・x7’・x8’
© Copyright 2024 ExpyDoc