Verification Engineerの戯言
OVMは、URMの上位互換であるため、ところどころURM依存のクラスがある。その一つがurm_messageクラス(compatibility/urm_message.sv[h])です。
実はこのコードはovm.svhを`includeするかovm_pkgをimportすると読み込まれます。
一般的には、コードを読み込んでもnewでインスタンスを生成しなければよばれません。でも、このコードの中でnewを呼んでいるのです。
これは、ovm_print_topology関数を実行したときに、次のような内容を表示することでわかります。
たぶん、OVMをURMとして使う場合に必要なんでしょうね!
実はこのコードはovm.svhを`includeするかovm_pkgをimportすると読み込まれます。
一般的には、コードを読み込んでもnewでインスタンスを生成しなければよばれません。でも、このコードの中でnewを呼んでいるのです。
typedef class urm_command_line_processor_c; urm_command_line_processor_c urm_command_line_processor = new("urm_command_line_processor",null);この部分はトップ階層(どのクラスにも依存しない)なので、urm_command_line_processorはトップ階層のインスタンスになります。
これは、ovm_print_topology関数を実行したときに、次のような内容を表示することでわかります。
# OVM_INFO @ 0: reporter [OVMTOP] OVM testbench topology: # ---------------------------------------------------------------------- # Name Type Size Value # ---------------------------------------------------------------------- # urm_command_line_proces+ ovm_object - @{urm_command_line+ # ----------------------------------------------------------------------このトップ階層があることで、シミュレーション実行ときに次のようなオプションが指定できます。
+OVM_VERBOSE +USE_URM_MSG +MSG_DETAIL=... +msg_detail=... +OVM_MSG_DETAIL= +ovm_msg_detail=... +VERBOSITY=... +verbosity=... +OVM_VERBOSITY=... +ovm_verbosity=... +SEVERITY=... +severity=... +OVM_URM_SEVERITY=... +urm_severity=これらオプションは、OVM Class Referenceには記述はありません。
たぶん、OVMをURMとして使う場合に必要なんでしょうね!
検証、Verification、SystemVerilog、OVM、Open Verification Methodology