赤星博輝 - CQ出版社

デバイスの記事
第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