Software Driven Verification テストプログラムは C 言語で! SystemVerilog DPI-C を使えば こんなに便利に! 2011 年 9 月 30 日 コントローラ開発本部コントローラプラットフォーム第五開発部 宮下晴信
この資料で使用するシステム名 製品名等は一般にメーカーや 団体の登録商標などになっているものもあります なお この資料の中では トレードマーク コピーライト等の表示は 明記しておりません 2
目次 検証という仕事 Software Driven Verification SystemVerilog DPI-C を利用してみる 開発事例 3
検証という仕事
検証という仕事 ハードウェア ソフトウェア 検証検証 システム ツール 5
仕事の詳細は? ハードウェア モデル作成 ( モデリング ) ソフトウェア システム ツール シナリオ作成 ( テストプログラム ) プログラム ( C C++ Java HVL HDL ) スクリプト ( 簡易言語 汎用言語 : Perl/Ruby/Python ) 検証仕様書検証項目リスト作成 テストベンチ作成 データ / 期待値作成 ツール作成自動化 ( 期待値生成 シミュレーション 期待値チェック ) 6
3 つの要素 トップテストベンチ モデル テストプログラム DUT チェッカ / モニタ 7
言語 : 1990 年代 設計 検証 実装 アサーション モデリング テストフ ロク ラム HDL 前半 VHDL VHDL VHDL VHDL 90 94 Verilog-HDL Verilog-HDL Verilog-HDL Verilog-HDL HVL 後半 VHDL e e e 95 99 Verilog-HDL Vera Vera Vera 8
言語 : 2000 年代 設計 検証 実装 アサーション モデリング テストフ ロク ラム C SystemC PSL SystemC SystemC 前半 + + + 00 04 VHDL Verilog-HDL e OVA e OpenVera e OpenVera SV SystemC SystemC SystemC 後半 + + + 05 09 SystemVerilog SVA SystemVerilog SystemVerilog DPI-C 9
Software Driven Verification
Software Driven Verification DUT にソフトウェア ( テストプログラム ) を使って 検証する そこで テストプログラムを何で書いている? トップテストベンチ モデル テストプログラム DUT チェッカ / モニタ 11
BFM によるテストプログラムの実行 HDL / HVL が利用できる Logic Simulator のみで実行可能である HDL / HVL / SystemC / SystemVerilog テストプログラム BFM DUT モデル チェッカー 12
ISS によるテストプログラムの実行 実機と同じプログラムが利用できる ISS が重いと 全体のシミュレーション速度が低下する テストプログラム ISS Assembler / C / C++ モデル BFM DUT チェッカー 13
Co-Simulation によるテストプログラムの実行 C/C++ などのソフトウェアでの言語が利用できるテストプログラムを別の CPU で実行すれば シミュレーション速度の低下は少ない テストプログラム API Assembler / C / C++ モデル API BFM DUT チェッカー 14
テストプログラムの再利用 BFM ISS Co-Simulation テストフ ロク ラム BFM フ ロック検証 再利用 テストフ ロク ラム BFM チッフ 検証 再利用 テストフ ロク ラム BFM 結合検証 15
SystemVerilog DPI-C を利用してみる
SystemVerilog のいろいろな機能 インターフェース 機能カバレッジ 同期機能 ( セマフォ / メイルホ ックス ) 制約付きランダム生成 SystemVerilog アサーション (SVA) DPI-C クラス 記述量の削減 (.* によるホ ートハ イント ) 17
SystemVerilog DPI-C を利用すると 基本的には Co-Simulation によるテストプログラムの実行と同じ特別な仕組み ( 道具は必要なし ) C / C++ テストプログラム DPI-C SystemVerilog BFM BFM + DPI-C DUT モデル チェッカー 18
BFM と BFM+DPI-C の違い ( その 1) 各テストプログラムを使って シミュレーションを実行するとき BFM の場合 テストベンチのコンパイル / エラボレーションが必要 BFM+DPI-Cの場合テストプログラムはCコンパイラでコンパイルし シミュレーション時にオブジェクトファイルを -sv_libオプションで指定するだけ (HDL 側のコンパイル / エラボレーションは必要ない ) 19
BFM と BFM+DPI-C の違い ( その 2) テストプログラムのライブラリ化 BFM の場合 HDL コードでライブラリを構築し include ディレクティブでの取り込みになる BFM+DPI-C の場合 C/C++ でライブラリを構築し 既存ライブラリなどのリンク可能 20
DPI-C によるテストプログラム SystemVerilog 側 C プログラム側 TB コード DUT コード テストプログラム ユーザライブラリ コンパイル シミュレーション環境とテストプログラムの分離 コンパイル 既存ライブラリ エラボレーション リンク シミュレーション -sv_lib オプション 共有ライブラリ 21
開発事例
開発事例 : 画像処理部の検証 IRQ CPU 検証対象 Register I/F DMA Func - F Func - E Func - D Func - C Func - B Func - A DMA Image Data I/F Memory 23
SystemVerilog DPI-C を使った検証環境 IRQ テストプログラム ユーティリティ BFM + DPI-C 検証対象 Register I/F DMA Func - F Func - E Func - D Func - C Func - B Func - A DMA Image Data I/F Memory Model 24
プログラムと検証環境の関係 入力 C テストプログラム 出力 入力データは テストプログラムが読み込む SV+DPI-C BFM 期待値 出力データは テストプログラムが書き込む SV+DPI-C Model DUV SV+DPI-C Model 期待値ファイルは テストプログラムが読み込む 25
DPI-C によるテストプログラム ( その 1) Bus Functional Model module BFM(... ); DPI-C で C 言語とのインターフェースを定義する import DPI-C context task c_main(); export DPI-C task Bus_Load, Bus_Store, Bus_Wait; initial begin c_main(); // C 言語部 end task Bus_Store(.. ); endtask : Bus_Store task Bus_Wait(.. ); endtask : Bus_Wait test_prog.c int c_main(void) { // ここに // テストプログラムを // 書く task Bus_Load(.. ); endtask : Bus_Load endmodule : test_prog } return 0; 26
DPI-C によるテストプログラム ( その 2) SystemVerilog 側 C プログラム側 initial begin c_main(); end task Bus_Store(.. ); endtask : Bus_Store task Bus_Wait(.. ); endtask : Bus_Wait task Bus_Load(.. ); endtask : Bus_Load SV から C を Call C から SV を Call int c_main() { u_int32 addr, data; addr = 0x00000004; } data = 0x12345678; Bus_Store( addr, data ); Bus_Wait( 10 ); Bus_Load( addr, &data ); if( data!= 0x12345678 ) printf( Error n ); return 0; 27
シミュレータでの利用 テストプログラムユーティリティ C 社 HDL シミュレータ テストベンチ各種モデル検証対象 (HDL) M 社 HDL シミュレータ 使用した 2 社のシミュレータ間では テストプログラム / ユーティリティの変更無しで動作確認できた 28
アクセラレータでの利用 : Aldec 社 Riviera-PRO + HES Riviera-PRO C++ ソース ccomp -dpi *.c *.h SystemVerilog ソース VHDL/Verilog RTL alog *.sv -dpiheader *.h 同一の検証環境でデバッグ C++ オブジェクト Import Task Export Task SV オブジェクト RTL シミュレーション カーネルから直接ハードウェアにアクセス 全自動のコンパイラ ソフトウェアクロック変換 /FPGA 分割 FPGA-2 HES5LX660EX Board FPGA-4 FPGA-5 HES Elite FPGA-0 FPGA-1 FPGA-3 アルデック ジャパン株式会社様から掲載許可済 29
エミュレータでの利用 : EVE 社 Zebu-Server ZeBu-Server C テストベンチ PC DPI C ZeBu DPI C DPI C 信号モニタ 波形ビューア SVA ~ 100KHz HDL アクセラレーション ~ 30,000KHz ZEMI-3 メモリエディタ フルアクセス TB C++ DUT In ZeBu 日本イヴ株式会社様から掲載許可済 ハードウェア デバッガ 30
テストプログラムの再利用 テストフ ロク ラム BFM Simulator 再利用 テストフ ロク ラム BFM Accelerator 再利用 テストフ ロク ラム BFM Emulator 31
32