カミは死んだ

Paper Is Dead ... osz

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に戻るよ。