160 likes | 348 Views
VLSI 設計支援工学 5. 論理式の多段化 積和形論理式と多段論理式 論理式の多段化 論理関数を考慮する割り算 代数的に行う割り算 キューブ数、リテラル数を2に制限した処理. 積和形論理式と多段論理式. 積和形論理式 = AND-OR の2段 多段論理式 = 3段以上の任意の形 一般的には、多段論理式の方がコンパクトな表現になる ace + ade + bce + bde + cf + df = (c + d)(e(a + b) + f) 回路面積の目安 = リテラル数 16 → 6 回路遅延の目安 = 2入力基本ゲートで表現した時の段数 5段 → 4段.
E N D
VLSI設計支援工学 5 • 論理式の多段化 • 積和形論理式と多段論理式 • 論理式の多段化 • 論理関数を考慮する割り算 • 代数的に行う割り算 • キューブ数、リテラル数を2に制限した処理
積和形論理式と多段論理式 • 積和形論理式 = AND-ORの2段 • 多段論理式 = 3段以上の任意の形 • 一般的には、多段論理式の方がコンパクトな表現になる • ace + ade + bce + bde + cf + df = (c + d)(e(a + b) + f) • 回路面積の目安 = リテラル数 • 16 → 6 • 回路遅延の目安 = 2入力基本ゲートで表現した時の段数 • 5段 → 4段
論理式の割り算 • f = gh + r • fをgで割った商がhで、あまりがr • 一般的には、hとrはユニークには決まらない • hとrに制限をつけない=論理的割り算 • 無限通りの割り方がある • 1回の割り算に積和形論理式の簡単化と同じ手間がかかる • ghを代数的積に制限する=代数的割り算 • 結果がユニークにできる • O(n log n)の手間で計算できる • そんなに悪くないことが多い
論理式の代数的処理 • 代数的論理式とは、論理関数の積和形論理式表現で、他の1つのキューブに含まれるキューブ(single cube containmentと呼ぶ)のないもの • ab + abc + cdは代数的論理式ではない • ab + cdは代数的論理式 • 代数式fとgの代数的積fgとは、fgを展開し、single cube containmentについて冗長性を取ったもの • fとgに共通な変数がないとfgは必ず代数的積 • (a + b)(c + d) = ac + ad + bc + bdは代数的積 • (a + b)(a + c) = aa + ac + ab + bc = a + bcは代数的積ではない
論理式の割り算の例 f= ad + ae + bcd + j g1 = a + bc g2 = a + b • fをg1で代数的に割ると、商はd、あまりはae + j • fをg2で代数的に割ると、商は(a + b)d、あまりはae + j (代数的には割れない)
Weak division • 代数的割り算であまりのキューブ数最小のもの • 定理: weak divisionの結果はユニーク • 割り算の手間はO(n log n)nは積項数
Weak divisionのアルゴリズム Weak_div(F,G): U = {uj}/* Fの全てのキューブだが、Gに現れるリテ ラルだけに制限したもの*/ V = {vj}/* Fの全てのキューブだが、Gに現れるリテ ラル以外のリテラルに制限したもの */ /* uj vjがFのj番目のキューブとなっている */ Vi = {vj ∈ V| uj = Gi} H = ∩ Vi R = F – GH return (H, R) • 上のアルゴリズムはO(n log n)です。どこがそうでしょうか? • O(n)にできますか?
Weak divisionのアルゴリズム:例題 F = ace + ade + bc + bd + be + a’b + ab G = ae + b U = ae + ae + b + b + b + b + ab V = c + d + c + d + 1 + a’ + 1 Vae = c + d Vb = c + d + 1 + a’ H = c + d R = be + a’b + ab F = (ae + b)(c + d) +be +a’b + ab
Gをどうやって選ぶか?カーネル、コカーネルGをどうやって選ぶか?カーネル、コカーネル • 効果的に割れるGを探す必要 • Gは無限にある • 問題: 論理式の集合{Fi}が与えられた時、出切れだけ多く共通に割れる代数的項を探す • 探索対象=カーネルに制限 • 定義 • 積和形論理式がキューブフリーとは、すべての積項に共通なリテラルがないことを言う • 積和形論理式のカーネルとは、その論理式に含まれる複数の積項からリテラルをとってキューブフリーにしたもの • 積和形論理式のコカーネルとは、カーネルを作るときにとったリテラルの積
カーネル、コカーネルの例 x = adf + aef + bdf + bef + cdf + cef + g = (a + b + c)(d + e)f + g カーネル コカーネル a + b + c df, ef d + e af, bf, cf (a + b + c)(d + e)f + g 1
カーネルに関する基本定理 • 論理式F、Gについて、Fの任意のカーネルkFとGの任意のカーネルkGが共通に持つ積項がたかだか1の場合、FとGは積項数2以上の積和形論理式で代数的には割れない • つまり、論理式をカーネルで割ったしまえば、複数の論理式を共通に割れるのは、キューブに限定される
カーネルの計算アルゴリズム R ← Kernel(j, G) R ← 0 If (Gがキューブフリー)R ← {G} For i = j+1, …, n { If (liが1つの積項のみで現れる) then continue c ← G/liを割り切る最大キューブ If (あるk<i に対し、lk ∈ c) then continue else R ← R ∪ Kernel(I, G/(li・c)) } Return R • Kernel(0, F)がすべのカーネルを計算 • lk ∈ cが高速化のポイント(同じカーネルを求めない)
abcd+abce+adfg+aefg+adbe+acdef+beg b c a (a) e c d e f b d c (a) (a) ac+d+g e d g f d c e e f d+e b+df b+ef b+cf cd+g c+d ce+g d+e c+e k co-k ernel ernel + + + + + 1 a f g d e de (( bc )( ) ( b cf ))) beg + + + + a f g d e de ( bc )( ) ( b cf ) + + ab d e de c ( ) + abc d e + abd e c + abe d c + + ac d e def b ( ) + acd ef b = + = + a 注意: f ad ae d e =bc ( ).
多段化の例 f1 = ab(c(d + e) + f + g) + h f2 = ai(c(d+e) + f + j) + k カーネルd + eで割ると l = d + e f1 = ab(cl + f + g) + h f2 = ai(cl + f + j) + k さらにカーネルcl + fで割ると m = cl + f f1 = ab(m + g) + h f2 = ai(m + j) + k 共通に割れるカーネルはないので、キューブで割る n = am f1 = b(n + ag) + h f2 = I(n + aj) + k
より効率的に: キューブ数、リテラル数を2に制限した処理より効率的に: キューブ数、リテラル数を2に制限した処理 • 割るごとにカーネルを再計算するのはたいへん • 論理式によってはカーネルが多数ある • キューブ2のカーネルに制限 • リテラス数2のキューブに制限 • F = abd + a’b’d + a’cd に対しては • ab + a’b’, b’ + c, ab + a’cはキューブ2のカーネル • a’d はリテラル数2のキューブ • O(m2)個のキューブ数2カーネル(mはキューブ数) • 同時に複数の除算が可能 • 否定も同時に考慮可能
キューブ数2カーネルによる割り算 • すべてのキューブ数2カーネルを生成し、互いに否定の関係になっているものを把握する • キューブ数2のカーネルとリテラル数2のキューブで割り算を実行する • 割り算後、キューブ数2カーネルをアップデートする • リテラル数が減少しなくなるまで、上を繰り返す • 高速(20倍程度) • 通常のカーネルを使うものと同等の品質