Functional Verification
機能検証は、設計が仕様を満たし、広い動作条件のもとで正しく機能することを確認する工程である。「この設計は意図したとおりに動くか」という問いに答える作業であり、製造前に不具合を摘出できなければ、後段のマスク製造や試作にかかる費用と時間が無駄になる。半導体開発では、設計そのものより検証に多くの工数が割かれる。
中心となるのはテストベンチで、検証対象(DUT)にさまざまな入力を与え、その振る舞いを監視して期待どおりかを判定する環境である。刺激の与え方として、想定シナリオを人手で書き下ろす方向的テストに加え、入力の要件をあえて緩く記述し、制約を満たす範囲で乱数生成する制約付きランダム手法が使われる。人が想定しなかった条件の組合せを踏むため、予期しない不具合を見つけやすい。ただし乱数生成だけでは何を試したかが分からないため、検証計画で定めたシナリオやデータ値が実際に実行されたかを測る機能カバレッジと組み合わせる。これが制約付きランダム・カバレッジ駆動と呼ばれる方式で、SystemVerilogとUVM(Universal Verification Methodology)が広く用いられる。UVMは、再利用可能で規模拡張に耐える検証環境を作るためのガイドライン、ライブラリ、手法の集合として標準化されている。テストベクタを使わず数学的に性質を証明する形式検証、設計を再構成可能なハードウェアへ写して高速に実行するエミュレーションも併用される。
検証環境の構築、刺激の設計、カバレッジの収束、不具合の原因究明はいずれも人手の負担が大きく、開発期間を左右する。この工程の自動化は、設計フロー全体の短縮に対する寄与が大きい領域とされている。