UVM 雑多メモ
UVM1.2 に関する雑多メモです。
気づいた時に適宜更新していきます。
uvm_config_db、uvm_resouce_db、他
UVMには上位コンポーネントが下位コンポーネントへの設定を行うため、データベースのような仕組みがあります。uvm_conifg_dbやuvm_resouce_db、set_config_*など、様々な記述があるようです。で、お前らはどう使い分けたらいいの?
結論:uvm_config_dbを使いましょう
根拠としては、Verification Academyの資料や質問フォーラムを参照しました。
記述の違いについて、簡潔に説明します。
①uvm_config_db #([type])::set(...)、uvm_config_db #([type])::get(...)
基本的にはこれを使いましょう!
②set_config_*とget_config_*
OVMやUVM初期の名残なので、移行を推奨。
③uvm_config_[type]::set(...)、uvm_config_[type]::get(...)
①と等価です。①の方が汎用的なので、あえて③を使う意味なし。
経緯としては、②からの移行を想定して追加されたみたいです。
④uvm_resouce_db #([type])::set(...)、uvm_recouce_db #([type])::get(...)
技術的には、④を使いやすくしたのが①です。UVMのデータベースは3層構造になっていて、下位:uvm_resouce_pool、中位:uvm_resouce_db、上位:uvm_config_dbになります。データベースのデータの"タグ"管理を、uvm_resouce_dbはフラット構造で行うのに対し、uvm_config_dbは階層構造で行います。一見、uvm_resouce_dbを使っても問題ないように見えますが・・・質問フォーラムでは「Never use uvm_resouce_db」と一蹴されていますw 検証環境が複雑になってくると、どこかで"タグ"の衝突が発生する、というのが理由のようです。
uvm_monitor、uvm_scoreboard
UVMのチュートリアルを読んでいると、初めの方にUVMのクラス一覧の図があります。そしてuvm_componentからの派生先に、uvm_moniorやuvm_scoreboardがあるのですが、何に使うのかという話。
結論:現状は不要です。(2020/4/4時点)
一応、uvm_monitorは信号線のモニタのために、uvm_scoreboardはトランザクションの確認のために用意されているクラスです。しかしベンダが公開しているサンプルコードを見ると、派生元のuvm_componentをそのまま使っているケースが多いのです。
何でかなーと思ってソースコードを見ると・・・中身が何も書かれていないじゃないか! そりゃあ使う意味が全然ないわw
こいつらは将来機能拡張があった時の予約用ですね。