階層構造を理解する

OVMは、定義済みclassを継承してコードを書いていきますが、ビヘイビアモデルを記述するには

基本構造を理解しておく必要があります。

Hello Worldのページでovm_testというclassを継承したのですが、このovm_testというclassが

基本構造の最上位になります。構成を以下に説明します。

ovm_test

|- ovm_env (TB environment)

|- ovm_env (BFM environment)

|- ovm_agent

|- ovm_driver

|- ovm_sequencer

|- ovm_monitor

ovm_sequence

ovm_sequence_item

これらは、すべてclass名として存在するもので、ユーザが継承して使います。

黄色で塗られた階層は、例えばUSBモデルであったりSATAモデルであったり、そういう1つ1つの

モデルがovm_env単位で定義されて、上位のovm_envにぶら下がるイメージです。

個々の階層を説明していくと

  1. ovm_testは、各モデル (下位のovm_envとそれ以下の固まり) をどのように動かすかを決める階層です。
  2. ovm_env (TB environment) は、テストベンチを定義する階層です。
  3. ovm_env (BFM environment) は、モデルの設定をしたりする階層です。
  4. ovm_agentは、1種類の機能を統括する階層です。例えばPCIならmaster agent, slave agentという
    1. 具合に1まとまりの機能毎に定義します。
  5. ovm_driverは、インターフェースと接続して信号をドライブする階層です。このclassに動作を定義します。
  6. ovm_sequencerは、ovm_sequenceからパラメータを受け取ってovm_driverに渡す役割をする階層です。
  7. ovm_monitorは、信号を参照してバスの動きをログとして表示する階層です。
  8. ovm_sequenceは、いわゆるテストベクタに相当しますが、実際にはより高度な実装が可能です。
  9. ovm_sequence_itemは、ovm_sequenceからovm_sequencerを介してovm_driver
    1. と情報のやり取りをするのに使います。

8と9は機能階層ではありません。