Vengineerの妄想(準備期間)

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

VMM 1.1:vmm_ms_scenarioクラスの例題(その1)

Verification Engineerの戯言

vmm_testクラスの例題は、examples/std_lib/mss_simpleです。
このディレクトリにあるmsgen_example.svを見てみましょう!
実際のテストプログラムは、program test; ... endprogramの部分です。
program test;
    vmm_log log = new("Multistream Scenario Simple Example", "Program");
    vmm_ms_scenario_gen gen = new("Multistream Scenario Gen", 7);

    my_scenario sc0 = new(0);

    atm_cell_channel atm_chan = new("ATM CELL CHANNEL", "TEST");
    cpu_channel      cpu_chan = new("CPU CELL CHANNEL", "TEST");

    bit [7:0] last_hec = 8'hFF;
    bit [4095:0] cpu_tr;

ここまでは、使用する各クラスのインスタンスを生成しています。

logは、vmm_logクラス
genは、vmm_ms_scenario_genクラス
sc0は、my_scenarioクラス
atm_chanは、atm_cell_chanellクラス
cpu_chanは、cpu_chanellクラス

です。

genのチャネルとして、atm_chancpu_chan
genのシナリオとして、sc0を次のinitial文の最初で登録します。
initial
  begin
     gen.register_channel("ATM_SCENARIO_CHANNEL", atm_chan);
     gen.register_channel("CPU_SCENARIO_CHANNEL", cpu_chan);
     gen.register_ms_scenario("SCENARIO_0", sc0);
     
     `vmm_note(log, "Checking ms_gen with 2 streams (ATM, CPU)");
     
     gen.stop_after_n_scenarios = 10;
gen.stop_after_n_scenarios = 10;sc0で生成するシナリオの
数を10に設定しています。

次は、2つのチャネル(atm_chancpu_chan)から平行してデータを獲得します。
     fork
        forever begin
           atm_cell ac;
	   atm_chan.get(ac);
	   ac.display("AtmCell: ");
        end
        forever begin
           cpu cc;
           cpu_chan.get(cc);
	   cc.display("Cpu: ");
        end
     join_none
join_none なので、次の2行も直ちに実行されます。
gen.start_xactor()で起動し、vmm_ms_scenario_gen::DONEイベント
発生するまで待ちます。
     gen.start_xactor();
     gen.notify.wait_for(vmm_ms_scenario_gen::DONE);
ちょっと待って(#100)、レポートします。
     #100;

     log.report();
  end

endprogram

今日は、ここまでです。次回は、my_scenarioクラスを見ていきます。

検証、Verification、SystemVerilog、VMM、Verification Methodology Manual