Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

OVM : ovm_print_topology関数(OVM 1.0/1.01版)

Verification Engineerの戯言

(OVM 1.0/1.01版)

ovm_print_topology関数は、ovm_env.svhファイルの最後で定義されています。
(ovm_envクラスの関数ではなく、ただの関数としてつぎのように実装されています。
    function void ovm_print_topology (ovm_printer printer=null);
      ovm_report_info("OVMTOP", "OVM testbench topology:", 500);
      ovm_component::print_units(printer);
    endfunction
ovm_print_topology関数は、OVMのオブジェクト階層(実際には、ovm_envクラスをトップとした階層)の
各オブジェクトの内容を表示します。

最初の行のovm_report_info関数を実行すると、つぎのようなメッセージが表示されます。
    OVM_INFO @ 0: reporter [OVMTOP] OVM testbench topology:
ovm_report_info関数の第1引数のOVMTOPが'['と']'の間に表示され、
第2引数がその後に表示されます。

次の行のovm_component::print_units(printer)でOVMのオブジェクト階層の
各オブジェクトの内容を表示します。
print_units関数は、ovm_componentクラスのクラス関数なのでこのような呼び方ができます。
(クラス関数とは、static functionになっている関数です)

ovm_print_topology関数の使用例は、examples/configuration/automatedtop.svです。
シミュレーションを実行すると、つぎのように各オブジェクトの内容を表示します。
    # OVM_INFO @ 0: reporter [OVMTOP] OVM testbench topology:
    # ----------------------------------------------------------------------
    # Name                     Type                Size                Value
    # ----------------------------------------------------------------------
    # urm_command_line_proces+ ovm_object          -    @{urm_command_line+
    # ----------------------------------------------------------------------
    # ----------------------------------------------------------------------
    # Name                     Type                Size                Value
    # ----------------------------------------------------------------------
    # topenv                   my_env              -    @{topenv} {ref to +
    #   inst1                  A                   -    @{topenv.inst1} {r+
    #     u1                   C                   -    @{topenv.inst1.u1}+
    #       v                  integral            32                   'h1e
    #       s                  integral            32                   'h10
    #       myaa               aa(string,string)   3                       -
    #         [bar]            string              3                     bye
    #         [foo]            string              3                     boo
    #         [foobar]         string              6                  boobah
    #     u2                   C                   -    @{topenv.inst1.u2}+
    #       v                  integral            32                    'h5
    #       s                  integral            32                   'h10
    #       myaa               aa(string,string)   3                       -
    #         [bar]            string              3                     bye
    #         [foo]            string              2                      hi
    #         [foobar]         string              5                   howdy
    #     debug                integral            1                     'h1
    #   inst2                  B                   -    @{topenv.inst2} {r+
    #     u1                   C                   -    @{topenv.inst2.u1}+
    #       v                  integral            32                    'ha
    #       s                  integral            32                    'h0
    #       myaa               aa(string,string)   3                       -
    #         [bar]            string              3                     bye
    #         [foo]            string              2                      hi
    #         [foobar]         string              5                   howdy
    #     debug                integral            1                     'h1
    #   debug                  integral            1                     'h0
    # ----------------------------------------------------------------------

検証、Verification、SystemVerilog、OVM、Open Verification Methodology