Verification Engineerの戯言
vmm_testクラスの例題は、examples/std_lib/mss_simpleです。
このディレクトリにあるmsgen_example.svを見てみましょう!
実際のテストプログラムは、program test; ... endprogramの部分です。
このディレクトリにある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は、vmm_ms_scenario_genクラス
sc0は、my_scenarioクラス
atm_chanは、atm_cell_chanellクラス
cpu_chanは、cpu_chanellクラス
です。
genのチャネルとして、atm_chanとcpu_chanを
genのシナリオとして、sc0を次のinitial文の最初で登録します。
数を10に設定しています。
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_chanとcpu_chan)から平行してデータを獲得します。
gen.start_xactor()で起動し、vmm_ms_scenario_gen::DONEイベントが
発生するまで待ちます。
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_nonejoin_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