組み込みSoC検証のためのCテスト自動生成
SoC設計はますます複雑化していますが、多くのシステムレベル検証テストスイートは、依然として数千行の手書きCコードで構成されており、自動化の原則に反する時代遅れのアプローチがとられています。特に、製造前のデバイス全体を検証するために組み込みプロセッサ上で実行されるCテストは、依然として手作業に頼っています。
テスト作成の自動化は、SoC開発のあらゆる段階で生産性を向上させます。UVMテストベンチでの制約付きランダム手法は、シナリオ固有のランダムベクトルを生成し、ブロックレベルでのカバレッジを改善します。しかし、設計はブラックボックスのままであり、刺激、チェック、カバレッジコードが別々に記述されるため、大規模ブロックでは煩雑でエラーを招きやすいプロセスとなっています。
これらの手法をシステムレベルに拡張することは困難です。プロセッサテストコードとI/Oトランザクションを統合する必要があり、これらは通常エミュレータやプロトタイプで実行されます。完全なSoC検証にはプロセッサ自体を動作させる必要がありますが、UVMなどの制約付きランダム手法は一般的にプロセッサコードを含みません。実際には、プロセッサを仮想I/Oで置き換えることでUVMをSoCに適用し、プロセッサを除いたサブシステムをテスト対象としています。
制約付きランダムテストベンチの限界を認識し、エンジニアはシミュレーションとハードウェアエミュレーションの両方でプロセッサ上で実行されるCテストを手書きすることに頼っています。しかし、これらのプラットフォームはフルOSをサポートできないため、テストはベアメタルモードで実行され、作成作業が増大します。協調的なマルチコア・マルチスレッド実行は稀であり、クリティカルな振る舞いである並行性とコヒーレンシーの検証が限定的です。
Cテストの自動生成
自動Cテスト生成は、エンジニアリング時間を解放し、カバレッジを拡大します。生成されたテストケースは、手書きのものよりもSoCの機能を広くカバーし、困難なコーナーケースを発見します。マルチスレッド・マルチプロセッサテストは、すべての並列パスを実行し、並行性を検証し、メモリコヒーレンシーをストレステストし、I/Oトランザクションと同期します。その結果、システムレベルの機能カバレッジが日常的に90%を超え、従来のアプローチを大きく上回ります。
テスト生成ツール「Test Suite Synthesis」は、意図する設計振る舞いをカプセル化した明確なグラフベースのシナリオモデルを活用します。エンジニアは、Accellera Portable Stimulus Standardを用いたネイティブC++、または設計議論でホワイトボードに描かれる従来のチップデータフロー図を模倣したビジュアルモデリングで、これらのモデルを作成できます。
各モデルは刺激、チェック、カバレッジメトリクス、デバッグデータをカプセル化し、ジェネレータに設計のあらゆる側面を網羅する高品質で自己完結型のCテストを生成するために必要なすべての情報を与えます。階層的でモジュール化されたモデルにより、ブロックレベルのテストをフルSoCモデルで丸ごと再利用し、チームやプロジェクト間で共有できます。合成ツールは、単一のインテントモデルをスレッドとI/Oポートにまたがる並行テストに分解し、タイトな同期を確保します。
テストスイート合成の利点
テストスイート合成の主な利点は、インテントモデルレベルでカバレッジ目標を設定できることです。インテントを指定すると、ツールがそれを分析し、必要なテストケース数と期待される機能カバレッジを見積もります。
典型的なSoCでは、数千のテストを生成できます。インテントを制約することで、エンジニアは特定のカバレッジ目標をターゲットにし、ツールを重要領域に集中させられます。これにより、テスト設定、検証実行、カバレッジ評価、再設定という面倒な反復サイクルが排除されます。
大手半導体企業の大規模SoCに関するケーススタディでは、手書きテストと比較してテスト作成時間が80%削減されたことを実証しました。自動化によりより厳密なケースが生成され、カバレッジが84%から97%に向上しました。モデルは環境間でポータブルであることが証明されました。
単一のインテントモデルから、バーチャルプラットフォーム、RTLシミュレーション、エミュレーション、FPGAプロトタイプ、さらにはポストシリコン検証時の製造済みチップ向けのテストケースを生成できます。
デバッグはSoCレベルでの主要な時間消費要因です。テストが欠陥を発見したとき、エンジニアはその失敗を元のテストと根底にあるシナリオモデルに遡る必要があります。各テストケースをそのグラフ表現と相関付けることで、モジュール化された自己完結型テストがバグの迅速な特定と分析を可能にします。
適用シナリオ
合成されたテストケースは、現実的なユースケースシナリオを駆動できます。たとえば、図1に示すデジタルカメラSoCを考えてみましょう。

図1: 画像処理SoCの例 (出典: Breker Verification Systems)
このSoCのブロックレベルコンポーネントは、2つのプロセッサ、周辺デバイス、メモリで構成されます。ブロック図の下部にある簡略化されたグラフは、検証のためのハイレベルパスを示しています。1つのシナリオ(上部のパス)では、SDカードからJPEGを読み取り、メモリ領域を経由してフォトプロセッサにルーティングし、表示用に画像を変換し、第2のメモリブロックにロードし、最終的にディスプレイコントローラに送信します。各ハイレベルブロックは階層的で、多数のアクションと決定を含みます。
合成ツールは、それに応じてランダマイズされたテストをスケジュールします。最も単純な形では、図示のようにテストが単一スレッドで順次実行されます。真の威力は、ツールが複数のスレッドとプロセッサ間でアプリケーションをインターリーブし、設計が許す限り多くの並行インスタンスを実行し、複雑なパターンでメモリを割り当てるときに発揮されます。図の代替ビューでは、テストが3つのスレッドに分散し、多様なメモリ領域を活用しています。
この図解はハイレベルですが、合成ツールは実際には階層グラフを数千のアクションと接続にフラット化し、ソルバーアルゴリズムを通過するランダムな決定を組み込みます。グラフを探索する際、AI計画アルゴリズムが望ましい出力を分析し、最適な整合性のために入力テストを洗練させます。また、メモリ割り当て、アドレスマップアクセス、割り込み処理などのOS的サービスを提供して完全なテスト構造をサポートし、ストレージとリソースを適切に割り当てながらテストをランダムにスケジュールします。
結論
制約付きランダムテストベンチがブロック検証から手作業を排除したように、組み込みプロセッサSoC向けの合成テストコンテンツがシステムレベル検証の労力を削減することを実証しました。このアプローチは今やブロックレベル検証とポストシリコン検証にも拡張されています。自動化されたCテストは「可能な限り自動化する」という原則を体現し、劇的なカバレッジ向上と検証スケジュールの短縮をもたらします。
埋め込み
- 組み込みシステムとシステム統合:モダンアーキテクチャと接続性
- STMicroelectronics、組み込みPCM搭載28nm FD-SOI MCUをパワートレイン/ADAS/電動化向けに展示
- Analog Devices、Embedded World 2019でAI、産業ネットワーキング、電源ソリューションを展示
- GIGAIPC、Embedded World 2019でIoTイノベーションを披露
- Cervoz、超薄型M.2 NVMe SSD発表 - 産業用エッジアプリケーション向け高性能ストレージ
- Keysight、N5511A位相雑音テストシステム発表 - 航空宇宙、防衛、5G設計向け高度ソリューション
- STとYouTransactor、5万台以上のモバイル決済端末を駆動するPCIセキュアSoC発表
- UltraSoC Bus Sentinel:SoCバストランザクションを保護するリアルタイムハードウェアIP
- IBASE、AMD Ryzen Embedded V1807B搭載超コンパクトMini-ITX PC「CMI300-988」発表
- アクシオムテック、ファンレス超コンパクトエッジコンピューティング「eBOX100-51R-FL」発表-インテルCore ULT搭載、600g
- 金属識別の完全ガイド:伝統的手法から最新PMI技術まで