カミは死んだ

Paper Is Dead ... osz

UVM Cookbook 眺めてみた - The Env

はじめに

UVM Cookbookを眺めてみた、の続きです。今日はTestbenchのEnvの話です。

The Env

Env(Environment)は、サブコンポーネントのブロックを集めたコンテナコンポーネントだよ。

Block Level Env

  • ブロックレベルのUVMテストベンチでは、envはDUTのインタフェースとやりとりするagentをまとめるのに使うよ。
  • envもagentみたいにSystemVerilogのパッケージにまとめるよ。
  • envはagentの他にも以下のcomponentsを持つよ。
    • Configuration object ・・・ envが持つどのコンポーネントをビルドするかを制御するconfiguration object。 envのconfiguration objectはenvのagentが持つconfiguration objectを制御するハンドルも持つよ。 これらはset_config_objectで設定するよ。
    • Scoreboards ・・・ スコアボードはanalysis componentでDUTの動作が正しいか確認するよ。UVM scoreboardsはagentのモニタからのanalysis transactionを使うよ。たいてい2つのtransactionを比較するよ。
    • Predictors ・・・ プレディクターは入力に対する期待値を作るよ。たいていスコアボードなんかと一緒に使われるよ。
    • Functional Cverage Monitors ・・・ 機能カバレッジモニタになるanalysis componentはcovergroupsをもって機能カバレッジ(テストで何が発生したかの情報)を集めるよ。たいてい機能カバレッジモニタはDUT毎に異なる作りだよ。
  • 例えば、ブロックレベルのテストベンチはagentとanalysis componentsを持つenvをビルドするテストで構成されるよ。

Integration Level Env

  • ブロックを統合してサブシステムを作るには、垂直統合的な再利用、つまり、ブロックレベルのテストベンチで使われるenvをマージして上位レベルのenvの作成、をするよ。
  • ブロックレベルのenvは各ブロックをテストするのに必要な構成を提供するけど、envを統合するとブロックのつなぎ目のインタフェースはDUT内部になって表に出てこなくなるから、統合するとenvには無駄な部分が出てくるよ。
  • だから上位レベルで統合したenvはDUT内部の出てこないインタフェースをパッシブにしたり、そんなagenetを読み込まないようにする必要があるよ。
  • テストでこういうconfigurationをできるようにするために、下位階層の各envはひとつ上位階層のenvのconfiguration objectの内包されて上の階層から制御できる必要があるよ。
  • こんな風にenvをマルチレイヤー化して作るよ。

The UVM Testbench Build and Connection Process

  • UVMテストベンチが入力データ送信する前に、テストベンチ階層をビルドして検証コンポーネント間を接続する必要があるよ。