デバイスの記事 第2回 赤星博輝 テストベンチの作成に VMM の部品を利用する 検証ライブラリとその利用ガイドラインである“Verification データのやり取りを行う vmm_channel,ランダム・パタ Methodology Manual for System Verilog(VMM) ”の活 ー ン 生 成( 以 下 , ラ ン ダ ム 生 成 )を 行 う vmm_ato 用法を解説する連載の第2 回である.今回は実際にVMM の部品 mic_gen,処理を記述する vmm_xactor,テストベンチ を用いてテストベンチを作成する.また,v m m _ d a t a , 環境を構築する vmm_env について紹介します. vmm_channel,vmm_atomic_gen,vmm_xactor,vmm ところで,なぜ VMM にはいろいろな構成要素があるの _env の使いかたを説明する.検証のエキスパートが作成した でしょうか? それはテストベンチを効率的に設計するため VMM のエッセンスを理解することで,検証の再利用性や効率を です.前回説明した vmm_log を毎回作ると,かなりの工 引き上げることができる. 数を必要としますし,再利用しやすく作るのはさらにたい (編集部) へんです.日常の検証作業で,次の開発プロジェクトのこ 前回は,SystemVerilog のオブジェクト指向に関する部 とを考えて行動する人はどのくらいいるのでしょうか? 分と,VMM を使う際にいろいろな場面で出てくる vmm_ VMM では基本となる部品をあらかじめ定義しており, log について説明しました.今回は,簡単な設計に対して その部品をカスタマイズして使うという手法をとります. VMM を使ってテストベンチを作成してみます. ただし,カスタマイズするときにコードをカット・アン VMM でテストベンチを作成するため,今回は五つの部 ド・ペーストして変更を加えると,だんだんわけがわから 品,すなわちデータを扱う vmm_data,テストベンチ間で なくなってきます.VMM では,オブジェクト指向言語の y 新しい領域を確保し,allocateに その領域のハンドルを渡す 255 toがnullなら新し 120 ○(80,100) それ以外なら,$castを用い にtoのハンドルを渡す. $castでは異なったクラスに 代入ができない場合にはエラ 70 ×(30,20) x 0 図1 50 100 255 ターゲットの判定回路の動き 256 × 256 の中に(50,70)∼(100,120)の長方形があり,そ の領域内であれば‘1’ ,領域外であれば‘0’と判定する. KeyWord 図2 現在の変数の内容をcpにコピーする. 実際にコピーを行うのは d メソッド ターゲットの入出力とそのタイミング データを入力するときは ien を‘1’にし,出力するときは oen が‘1’になる. SystemVerilog,VMM,vmm_log,vmm_data,vmm_channel,vmm_atomic_gen,vmm_xactor,vmm_env, ランダム・パターン生成,テストベンチ Design Wave Magazine 2006 October 139 機能を使うことで,変更点だけを追加・変更できるように す.回路の入出力とデータの入力/出力タイミングを図 2 に なっており,検証の再利用を促進します(下掲のコラム 示します. この回路を検証するためにどのようなデータが必要かを 「VMM の歴史」を参照). 考えます.機能としては X 座標と Y 座標を与えて領域外/領 ● 今回の検証ターゲットは x,y 平面の判定回路 VMM は,検証するための道具とそのガイドです.検証 するものがないと説明しにくいので,検証のターゲットと 域内の判定を行うものなので,X 座標と Y 座標の二つの数 値が必要です.ほんとうは ien も必要なのですが,これは あとで考えます. してここでは単純な判定回路を使用します.その回路とは, 図 1 に示す領域に対して, 「入力された点(x,y)が四角形 ● 検証で扱うデータはすべて vmm_data から派生させ の中にあるのか,または外にあるのか」を判定するもので る VMM では,検証で扱うデータを vmm_data から派生さ リスト1 データのクラスの基本 せて作ります.今回は,二つの数値を記憶するために, メッセージ・サービス(vmm_log) ,変数,new の三つが最低限必要. データのクラスはvmm_dataを 派生させて作る メッセージ・サービスを クラスに一つ宣言する class xy_dat extends vmm_data; static vmm_log log=new("XY_dat", "class"); rand logic[7:0] mX,mY; function new( ); super.new(log); endfunction データを保存する変数mX, mYをrand属性で定義する コラム す.この vmm_data から派生したクラスを構成するうえで 最低限必要なものは,リスト1 に示すように vmm_log,必 要な変数の定義,new メソッドの三つになります. VMM のメリットはこれまでの検証の知識がその部品の 中に埋め込まれているところで,vmm_log はVMM の「Rule 4-58」にガイドとして示されているように,静的(static)な //作成したほうがよいメソッドはここに置く endclass vmm_data から派生させた xy_dat というクラスを作りま 領域が確保されたときに最初に やるべき項目を記述する メッセージ・サービスとして宣言します.これは,多くの データが処理されるときに,個別にメッセージ・サービス を作ると負荷が重いことなどが理由です. VMM の歴史 VMM の歴史は,著者のひとりである Janick Bergeron 氏の検証へ なっていました.トランザクタもコールバック・メソッドを提供する の取り組みの歴史ともいえます.Janick Bergeron 氏から VMM の歴 ようになり,ユーザによる機能の拡張や修正が可能となりました. 史について紹介していただいたので,同氏のコメントを以下に紹介し VMM で重要なランダム生成におけるファクトリ・パターンも実装さ ます. れました. 「まずは 1991 年にセルフ・チェック機構をもつ,トランザクショ 2002 年の終わりには,ほぼ今の形の vmm_env を作りました.こ ン・レベルのテストベンチを使い始めました.この段階では Verilog れは,検証環境を構築するために明確なガイドラインが欲しいという HDL でモデルを記述し,第1 世代の vmm_log,vmm_data,vmm_ ことから作成しました.ほかにも,顧客からの要求に基づいて vmm_ env 相当のものが作成されました.このときはダイレクト・テスト broadcast や vmm_scheduler などが作成されました. で物理レベルのトランザクタを使用し,バックグラウンドのノイズ 2003 年に米国 Synopsys 社に所属することになり(Qualis Design 社 にはランダム生成も使いました.1994 年に SONET(synchronous が Synopsys に買収された), Vera で RVM( Reference Verification optical network)伝送の検証でより高い抽象度のトランザクタが必要 Methodology)の実装を行い,vmm_notify,vmm_atomic_gen, となったのですが,Verilog HDL では不十分なものしか記述できませ vmm_scenario_gen などを追加していきました.2004 年にVera の んでした. RVM をSystemVerilog で実装し直し,2005 年にVMM を書籍として出 その後,Vera や e 言語の登場によりオブジェクト指向的な実装が 版しました」 . 可能となり,1998 年に第 1 世代の vmm_channel を作成しました. このように,Janick Bergeron 氏は15 年以上もの間,検証にかかわ 2001 年に(Janick 氏が Chief Technical Officer を務めていた)米国 ってきました.検証に対して積極的に環境を改善し,その活動の集大 Qualis Design 社が検証 IP を提供したときは,すべてのトランザクタ 成が VMM ということになります.とても参考になる部分が多いの が vmm_xactor をベースにしており,vmm_log もほぼ現在の形に で,みなさんもぜひ,その知識に触れていただきたいと思います. 140 Design Wave Magazine 2006 October
© Copyright 2024 ExpyDoc