Technology Reports 2008

機能検証の新しい波: インテリジェント・テストベンチ・オートメーション

インテリジェント・テストベンチ・オートメーション

設計の複雑性が高まるにつれ、機能検証はますます複雑になってきました。実際のデザインを作成する時間より、そのデザインが動作することを検証するために費やす時間が長いことは、多くのプロジェクト・チームにとって珍しいことではありません。この検証効率を向上させるため、フォーマル検証と機能シミュレーションの両方を含む様々なツールに投資が行われています。フォーマル解析はデザインのプロパティを静的に、場合によっては動的に検証する有益なチェックを行います。機能シミュレーションはデザインを活性化させ、外部の、時には内部のスティミュラスおよびデータに対する応答を検証するものです。しかし、シミュレーションを使った検証にはテストベンチが必要であり、複雑なデザインに対して良いテストベンチを作成することは難しい作業です。チップの複雑性の拡大、HW/SW統合、モジュールとシステムレベル間の設計要件などの問題により、高い機能カバレッジを達成するテストベンチを手作業で作成することはいっそう難しくなりました。

図1:今日のピンレベル・シミュレーション・アクティビティ記述方法(スティミュラス、データ、チェックなど)を変更することなく、ルールベース記述では従来の手法と比較して全体でテストベンチ・コードを75%削図1:今日のピンレベル・シミュレーション・アクティビティ記述方法(スティミュラス、データ、チェックなど)を変更することなく、ルールベース記述では従来の手法と比較して全体でテストベンチ・コードを75%削

より効率的なテストベンチ開発の必要性を受け、EDA産業では多大な投資が行われ、特にエンジニアが使用する言語の改良に大きな重点が置かれました。テストベンチ開発により、多くのプログラミング機能を提供するためのカスタム言語が開発され、一方ではSystemVerilogやSystemCといった共通のテストベンチ言語の普及を推進するために標準化の取り組みが行われてきました。これらの言語はテストベンチ・プログラマにより多くの機能と柔軟性を与えることは確かですが、テストベンチの複雑性やプログラミングに要する時間を削減するものではありません。

このため、これらの新しいテストベンチの利点を活用するだけでなく、新しいテクノロジを適用することにより生産性とカバレッジを大幅に向上するアプローチが必要となります。インテリジェント・テストベンチ・オートメーション技術は、標準テストベンチ言語の利点を生かすと同時に、機能カバレッジを向上する次世代の自動化技術を提供することにより、テストベンチ・プログラミングの作業量を劇的に軽減します。inFactと呼ばれるこの新技術は、設計の仕様に対応した簡潔な動作記述から、自動的にシミュレーション・シーケンスを生成します。インテリジェントなテスト・シーケンス生成により、モジュール、サブモジュールおよびシステムレベルのすべてにおいてより高いレベルの機能カバレッジを達成し、従来の手法よりも短時間で多くのバグを発見します。インテリジェント・テストベンチ技術を使用することにより、プロジェクト・チームはより信頼性の高い設計を進めることができ、短時間で設計品質が改善され、リスピンは劇的に削減されます。

さて、inFactはどのような仕組みでこれを実現するのでしょうか?この技術はルールセットをベースにしています。ルールセットでは、上位のテスト・シナリオが、より下位のテスト・アクティビティをどのように組み合わせることで実現できるかを、階層的に定義します。例えば、ルータのテストベンチに含まれる1つのルールセットが、"Packet-> Preamble-> MainHeader-> ExtentionHeader-> DataPayload-> Checksum"といシーケンスを定義しているとします。これに対して別のルールセットでは、"Preamble"、"MainHeader"および"Packet"の各要素が、より下位のテスト・アクティビティをどのように組み合わせて実現できるかを定義します。

この方法により、記述しやすく、理解が簡単で、再利用性が高く、高度にレイヤ化されたテストベンチ・アーキテクチャを構築します。ルール階層の最下位は、個別の「アクション」であり、これらはルールによっては定義されません。各アクションは、テスト内のアクションを実装するための標準テストベンチ言語(SystemVerilogなど)で記述されるタスクに対応します。

これらを組み合わせることで、少ない数のルールセットから、非常に大規模なテスト・シーケンスを記述することができます。事実、設計が大規模、複雑になっても、注意深く選択されたルールセットを基に、シミュレーションしたいあらゆるテスト・シナリオをコンパクトに記述することが可能です。ルールセットの適用、すなわちルールベースの検証は、ハードウェア検証においては新しい考え方ですが、実際には長年の実績がある技術です。IBMは1970年代後半にコンパイラの設計および検証にルールベース検証を初めて適用しました。この検証技術に対してコンパイラは最適なアプリケーションです。コンパイラはBackus Naur Form(BNF)を使って簡潔に記述できるからですが、このBNFが今日ルールセットとして知られているものです。まずIBMが、そしてその後多くの企業が、ルールセットを使ってコンパイラやある種のソフトウェア・プログラムの検証に成功しました。

しかし、ルールベース検証の持ついくつかの側面が、ハードウェア・テストへの本格的適用の検討を妨げてきました。何よりもまず、ルールセットからテスト・シーケンスを生成するための技術は決定論的システムおよび記述に限定されていたことがあります。このためコンパイラの検証に適していたのです。しかし複雑なハードウェアは非決定性的な性質を持っており、決定性記述を使ってモデル化や予測が行えない動作を伴います。さらに、ルールベース検証はハードウェア設計者に馴染みのある言語ではサポートされていませんでした。

図2: 大手コンシューマ・エレクトロニクス企業での評価結果図2: 大手コンシューマ・エレクトロニクス企業での評価結果

しかし今日、この技術に対する20年以上の研究開発の結果、インテリジェント・テストベンチ・オートメーションが広く一般に適用可能になりました。この新技術は、簡潔なルールセットを複雑なハードウェアの非決定性的な動作にも適用可能とするものであり、SystemVerilogなどの標準的なテストベンチ言語をサポートしています。

インテリジェント・テストベンチ・オートメーションの基礎は、すべてのシミュレーション実行には目的があり、それらの目的は検証ゴールとして定義されるということです。エンジニアは、ルールセットの該当する箇所を参照することにより、特定の検証ゴールを指定します。シミュレーションが開始されると、シミュレータと共にinFactランタイム・エンジンが起動され、検証ゴールに向かってテスト・シーケンスの生成を始めます。シミュレーションの進行につれ、アルゴリズムは検証ゴールに対する進捗を監視し、所望のカバレッジを達成できるようテストをインテリジェントに適応させていきます。不正なテストの発生を防ぐための制約や、重複したテストを防ぐための制約をエンジニアが記述する必要はありません。inFactによって作成されたテストベンチ・モジュールは、ルールセットに違反しないシーケンスのみを生成することを保証し、inFactのアルゴリズム・エンジンは、(ユーザが望まない限り)同じテスト・シーケンスを繰り返すことなく検証の完了に向けて処理を進めていきます。