UVM Cookbook 眺めてみた - TestBench/Build
はじめに
UVM Cookbookを眺めてみた、の続きです。今日はTestbenchのTestBench/Buildです。
TestBench/Build
- UVMテストベンチの最初のフェーズはbuildだよ。
- テストベンチを構成するuvm_componentはbuildフェーズでオブジェクトになるよ。
- buildフェーズは階層をトップダウンで作るよ(順番はちゃんと制御されるよ)。
- こういうのをdeferredにテストベンチを作るといいます(繰越の・・・日本語だと意味不明です。前がちゃんと終わったら次をやる制御に使う言葉のようです。例えばjQuery.Deferredとか) 。
The UVM Build flow in the context of the test bench
テスト実行のイメージはこんなです。
module tb_top initila begin run_test() -----> (指定されたテストを呼び出し) -----> test = new(); テストベンチクラスをトップ階層(test)からトップダウンでビルド。 env -- agent -- drivers -- monitors 等々 テスト実行 UVM phaseの制御が全て終了してUVMが$finishをコールしたら テストベンチモジュールのinitialブロックに戻る。 <---------------------------------------------- $finish end end module: tb_top
- UVMテストベンチはトップ階層module(テスト)のinitialブロックでrun_test()が呼ばれたときに活性化されるよ。
- run_test()はUVMのstaticなメソッドでstringの引数でテストを定義してfactoryを通じてテストを構成するよ。
- その後、テストクラスが持つbuildメソッドをコールしてbuild phaseを開始するよ。
- テストのbuild phase実行中に、テストベンチコンポーネントのコンフィギュレーションオブジェクトが準備されてテストベンチモジュールのinterfaceがコンフィギュレーションオブジェクトにあるvirtual interfaceにアサインされるよ。
- 次にコンフィギュレーションオブジェクトがテストのコンフィギュレーションテーブルに渡されるよ。
最後に次の階層がビルドされるよ。
次の階層ではテストで準備したコンフィギュレーションオブジェクトを取得して更なるコンフィギュレーションをするよ。
- コンフィギュレーションオブジェクトは次の階層を設定する前に、(その階層の設定によって)修正されることがあるよ。
- 条件に応じてベンチを構成することでテストベンチのトポロジーや階層構造や変更できるよ。
build phaseはトップダウンで動作するので、ビルドはは階層ツリーの一番下にいくまで繰り返されるよ。
build phaseが完了したらconnect phaseでコンポーネント間の接続をするよ。
- connect phaseはボトムアップで実行するよ。
- connect phaseが終わるよ、残りのUVMフェーズを実行して、それらが全部終わるとテストベンチのmoduleに戻るよ。