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つの比較対照の差が小さい場合には有効
– プログラムの最適化結果を検証したい場合には、最
適化の小さいステップごとに検証する