らんらん技術日記

日々の学習メモに

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
こいつらは将来機能拡張があった時の予約用ですね。