Verification Engineerの戯言
OVM 1.0/1.0.1対応
OVMにおいて、テストを開始するためにはrun_testタスクを呼ぶことになります。
このrun_testタスクは、トップテストベンチのinitial文内で呼びます。
このrun_testタスクは、トップテストベンチのinitial文内で呼びます。
examples/sequence/test.sv を見てみると、
module test; `include "ovm.svh" // かなり、省略 initial begin set_config_string("sequencer", "default_sequence", "simple_seq_sub_seqs"); sequencer = new("sequencer", null); sequencer.build(); driver = new("driver", null); driver.build(); driver.seq_item_prod_if.connect_if(sequencer.seq_item_cons_if); run_test(); end endmoduleのように、initial文の最後で呼んでいます。
では、run_testタスクはどこでどのように実装されているのでしょうか?
実装されている場所は、src/base/ovm_env.svh で、次のように定義されています。
トップテストベンチであるモジュール内でovm.svhをインクルードすることで、run_testタスクの定義を取り込み、initial文内で使えることになります。
task run_test (string test_name=""); ovm_env::run_test(test_name); endtaskrun_testタスクは、あるクラスに属するのではなく、ただのタスクとして実装されています。
トップテストベンチであるモジュール内でovm.svhをインクルードすることで、run_testタスクの定義を取り込み、initial文内で使えることになります。