Transcript SOC検証
VLSI設計工学7 • 設計検証 – 自分の設計が正しいことを如何に確認するか? – 大規模LSIの設計では、設計期間の50~70% を設計検証に費やしている! – 今後、ますます時間がかかるようになる! – 日本での研究は少ない! • 内容 – 論理シミュレーションとエミュレーション – 形式的検証技術の基礎 – 形式的検証技術 • 組合せ回路の比較 論理シミュレーションとエミュレーション • 論理シミュレーション – 論理値(0,1、それにXやUなど)の伝播を計算機で計算 • Xは不定値であり、Xの否定もXとして扱う – 詳細遅延あり: イベントドリブン – クロックごと: コンパイル方式(サイクルベース) – 値を変数とした記号シミュレーションも使われる • 値を全て変数にすると全パターンシミュレーションと同等 • エミュレーション – 与えられた回路をFPGAとして実装し、それを動作させることでシミュ レーション – 実機と比較しても10倍~100倍程度のスピードダウンですむ – 大規模回路の場合、FPGAを動作させるのが簡単ではなく、セットアッ プに時間がかかる 形式的検証(Formal Verification) • 設計や回路の正しさを「数学的に証明する」こと • 全パターンシミュレーションと同等 等価性検証 仕様 設計 設計と仕様は一致 しているか? 全ての可能な入力値 に対し、一致して いるか? プロパティチェック 設計 プロパティ p1 , p2 , … , pn は設計によって満たされ ているか? 全ての可能な入力値に 対し、満たされているか? 知的シミュレーション 設計 プロパティ p1 , p2 , … , pn は、シミュレーション パターン v1 , v2 , … , vn が 入力された時、設計に よって満たされているか? いくつかの入力に対して、 設計はプロパティを 満たしているか? 2分決定グラフ Binary Decision Diagrams (BDD) • 2分決定木において: – 全ての場合分けパスで同じ変数順 – 同形のグラフは共有する – 論理関数に対する正規表現となる X1 0 1 X2 X3 0 1 X2 X3 0 X3 1 0 1 X1 等価ノード の共有 X3 1 1 X1 冗長ノード の削除 X2 X2 X2 X3 X3 X3 0 1 0 1 回路からBDDの生成 X1 X2 X1 0 X1 1 1 X2 0 0 1 0 X2 1 1 1 0 X1 0 0 X2 0 1 1 0 X1 1 1 X2 0 0 1 0 X1 0 1 0 1 X2 X2 0 1 0 1 1 0 1 BDDにおける場合分け変数順 X1 X2 X3 X4 X5 X6 最悪順 X1 X3 X1 最良順 X5 X2 X3 X5 X3 X5 X2 X4 X4 X5 X 2 X2 X 2 X4 X5 X6 X6 0 0 1 1 静的な変数順決定 • 多くの開発されたヒューリスティックは回路を入 力から出力に深さ優先でたどっていく • ゲートのファンイン数やファンアウト数によって優 先順位をつける X1 X2 X3 X4 X5 深さ優先探索: x1, x2, x3, x4, x5 または x3, x4, x1, x2, x5 (ファンアウトを考慮) 変数順の動的最適化: となりの変数との交換による改良 • となりの変数との交換は容易 i-1 i 0 1 i 0 i i-1 (B) (C) (A) i+1 i+1 (D) i+1 • 例: i+1 i f1 i+1 i+1 (D) i+1 i+1 i 1 0 i f2 i-1 (C) (B) (A) i-1 0 1 1 i-1 f3 f1 f2 f3 • 何らかのヒューリスティックに基づき、繰り返す BDDの拡張:MTBDD • 0,1だけでなく、任意の有限集合をターミナルと して認める: Multi-Terminal BDD (MTBDD) • BDDの基本的な性質は全て保存される • BDD用のアルゴリズムはすべて MTBDDでも動 作する X1 0 X1 1 0 X2 X2 0 1 BDD 1 X2 3 X2 5 MTBDD 6 Binary Moment Diagram (BMD) • 各ノードの関数展開として、シャノン展開ではなく、 f = f0 + x f’、ただし f’ は f1 - f0、を用いる • いくつかの重要な関数で、 MTBDD (BDD)では 指数的にノードが必要なものが、コンパクトに表 現できる Xi Xi 0 f|Xi=0 1 f|Xi=1 MTBDD(BDD) 0 1 f|Xi=0 (f|Xi=1 - f|Xi=0) BMD MTBDDとBMDの例 • 整数の2進エンコーディング X1 0 1 X2 MTBDD X2 X3 0 X3 1 2 X3 3 4 X3 5 6 X1 0 X2 BMD X3 0 1 4 2 7 BDDに関する要点 • 大きさは変数順に大きく依存する – 静的変数順決定 • 複数のヒューリスティックを利用 • 人手の場合は、制御信号を先にする – 動的変数順改良 • BDDの生成時間が10倍程度増大 • 初期変数順が重要 • 各種 BDD – 応用を考えて選ぶ • 制御部にはBDD • データパス、特に掛算器にはBMD • BDDの賢い使い方 – 関数の分割と組み合わせる SAT(充足可能性判定)手法 • 和積形論理式のための、充足可能性判定 – Fsat = (P + ~Q)(Q + R)(~P + ~R) • P=1, Q=1, R=0 は1つの解 – Fsat = (P + ~Q)(Q + R)(~P + ~R)(~P + ~Q)(P + Q) • 解なし • 検証問題は、与えられた和積形論理式が 充足不可能であることを調べる問題となる • 単純に問題を変換すると、検証のために必 要な和積形論理式は指数的に大きくなる 回路から和積形論理式の導出 A B • 単純ゲート – C = ~A + ~B – (C + A)(C + B)(~C + ~A + ~B) • 検証例 A B Fsat1=(C + A)(C + B)(~C + ~A + ~B) Fsat2=(~C1 + D)(~C1 + E)(C1 + D + E) (A + D)(~A + ~D)(B + E)(~B + ~E) – Formula to be checked Fsat=Fsat1&Fsat2&(C + C1)(~C + ~C1) C D C1 E 等価なら いつも0 SAT アルゴリズム • 完全な方法 – 推論規則の利用: (P + ~Q)(~P + ~R) -> ~Q + ~R – 場合分け: あるヒューリスティックで変数 P を選び、 それが0の場合と、1の場合を別々に調べる – だいたい、500から1000変数くらいまで解ける • 近似法 – 解を見つけようと努力する • 検証手法としては、不完全(シミュレーションと同じ) – 初期解から出発し、解を改良していく – 現在の解で見たらさない項をもっともたくさん満たすよ うに、変数の値をフリップふる – 知的なシミュレーション手法とも考えられる SAT手法のポイント • 場合分けの変数中に性能は大きく依存(場合分 けごとに、変数順が違ってもよい) • 完全な手法は500から1000変数の問題くらい まで解ける • BDDとは、得て不得手の回路が異なる • SATは解を1つ見つけようとするだけだが、BDD は全ての解を見つける • ATPG(テスト生成)もSATを利用して作られてい る • 近似法も、実用的には有意義 高位レベルの変数の扱い: 関数の意味を陽に解釈しない • RTL以上のレベルの検証をターゲット • 複雑なデータパス上の素子は、関数の意味を陽には解釈しない (SATに似た方法で検証できる) – 例: out = encode(input), ここencodeは単なる関数シンボル したがって、 input1=input2と陽に与えられない限りencode(input1)!=encode(input2) • 算術演算に関する知識は利用する – 例: a + a = 2a • 不等号に関する性質も利用する – 例: a > b と b > c ならば、 a > c • メモリへのアクセスは、公理を容易する – 例: read(write(memory, add, data), add) = data メモリアクセルのための配列演算 • 配列に関する公理 – 例: メモリa のアドレス b にデータ c を書き込んだ後、そ のメモリのアドレス b のデータを読み込むと、それは c と なる Address: b c Memory: a write(a,b,c) Address: b c write(a,b,c) read(write(a,b,c),b) = c 検証例 • 2つの設計の等価性検証: ともに x に b を転送し ている – 設計1: if a=b then x <- a else x <-b – 設計2: x<- b • 転送文を等式に変換 – 設計1: ((a=b)->(x’=a))&((~(a=b)->(x’=b)) – 設計2: x’=b • SATに似た決定手続きを適用 設計1=設計2 高位レベル検証のポイント • データパス系の検証には向いている – 例: 1ビットシフトすることで、データを2倍できる • 制御回路に対しては、場合分けが多くなる – 2値を扱うBDDやSATより性能が落ちる • 性能は、仕様の与えられ方に大きく依存 – 容易: cond1 が成立すれば、R1の次の値は、R2とR3 の現在の値の和となる – より困難: 制御信号control1 と control2 は同時には1 とならない • 研究方向としては、SATやBDDとの融合 形式的検証(Formal Verification) • 設計や回路の正しさを「数学的に証明する」こと • 全パターンシミュレーションと同等 等価性検証 仕様 設計 設計と仕様は一致 しているか? 全ての可能な入力値 に対し、一致して いるか? プロパティチェック 設計 プロパティ p1 , p2 , … , pn は設計によって満たされ ているか? 全ての可能な入力値に 対し、満たされているか? 知的シミュレーション 設計 プロパティ p1 , p2 , … , pn は、シミュレーション パターン v1 , v2 , … , vn が 入力された時、設計に よって満たされているか? いくつかの入力に対して、 設計はプロパティを 満たしているか? 論理照合(Boolean comparison) • 2つの組み合わせ回路の論理的等価性の 比較問題 • 順序回路に対しては、まずフリップフロップ の対応が与えれらなければならない Comb 1 Flipflop 1 Flipflop 2 Flipflop 3 =? フリップフロップ の対応 Comb 2 Flipflop 1 Flipflop 3 Flipflop 2 各種のアプローチ • 可能な限りの多くのパターンでシミュレーションする – 20入力以上は、実際的に不可能 • 回路からBDDを作成し、比較 – 2~3000ゲートが限界。通常メモリネック • SATで検証 – BDDと同程度の性能だが、計算時間ネック • BDDとSATの融合(切り替える) – 得意な回路の種類がことなるため、相補的 • 回路の性質を使う – 演算器のもつ性質を使うことで、問題を解きやすくできる • 例: 掛け算器 f(x,y+1) = f(x,y) + f(y) 2つの比較 • 回路を和積形に変換し、SATを適用 • 回路全体のBDDを作成し、それが0である ことをチェック Circuit 1 Circuit 2 等価なら いつも0 2つの「似た」回路の場合 • まず、内部等価点をできるだけ求める – シミュレーションで非等価点をできるだけ除去 – 内部の等価点候補に対し、論理照合を適用 • 内部等価点で、回路を分割して検証 Circuit 1 内部等価点 Circuit 2 等価なら いつも0 論理照合のための 効果的なフレームワーク 簡単がか高速なフィルタ フィルタ (検証エンジン) 個々の照合問題 高性能だが低速なフィルタ 論理照合のための 効果的なフレームワーク 簡単がか高速なフィルタ フィルタ (検証エンジン) 個々の照合問題 高性能だが低速なフィルタ 論理照合のための 効果的なフレームワーク 簡単がか高速なフィルタ フィルタ (検証エンジン) 個々の照合問題 高性能だが低速なフィルタ 論理照合技術のポイント • 似た回路の比較は、数百万ゲートでも可能 • 似ていない回路(RTLとゲートの比較など)の場合、 数万ゲートでも苦しい • 実検証での問題点 – スキャン回路などテスト回路の存在 – 非同期回路 – リタイミング – 変数名の不一致 – ... 動作記述やプログラムに対する 論理照合 • 高位レベル検証手法を利用して、動作記述やプ ログラムの論理照合も可能 Function ex1; … some computation … for (I=0; I<N; I++) D[I] = C[I] + A[I] * B[I]; … more computation … Function ex1mod; … some computation … for (I=0; I<N; I++) *p_d++ = *p_c++ + *p_a++ * *p_b++; … more computation … • 2つの比較対照の差が小さい場合には有効 – プログラムの最適化結果を検証したい場合には、最 適化の小さいステップごとに検証する