Verification Engineerの戯言
テストプログラムのexamples/std_lib/vmm_test/alu_test.svを見てみましょう。
vmm_test_register::run(env)は、vmm_test.svファイルで次のように定義されています。
結構長いですが、順番に見ていきましょう。
登録されているテストが1つのときは、それをone_tstに代入します。
表示し、シミュレーションを終了します($finish)。
"Default"テストをテスト名にします。
登録されていないときは、エラーメッセージを表示し、登録されているテスト名の一覧を表示します。
`include "alu_if.sv" program alu_test(alu_if.drvprt alu_drv_port, alu_if.monprt alu_mon_port); `include "alu_env.sv" `include "tests.incl" alu_env env; initial begin env = new(alu_drv_port, alu_mon_port); vmm_test_registry::run(env); end endprogramvmm_test_register::run(env)を実行してます。
vmm_test_register::run(env)は、vmm_test.svファイルで次のように定義されています。
結構長いですが、順番に見ていきましょう。
task vmm_test_registry::run(vmm_env env); string testname; vmm_test tst = null; vmm_test one_tst = null; if (registry.num() == 1) begin void'(registry.first(testname)); one_tst = registry[testname]; endregistryには、vmm_testを継承して定義したテストが登録されています。
登録されているテストが1つのときは、それをone_tstに代入します。
if (!registry.exists("Default")) begin // Create a default testcase and run it tst = new("Default", "Default testcase that simply calls env::run()"); endregistryに"Default"というテストが登録されていたtstに代入します。
if (vmm_opts::get_bit("test_help", "List available testcases")) begin list(); $finish(); endシミュレーション実行時に、+vmm_test_helpが指定されていたら、登録されているテストをlistで
表示し、シミュレーションを終了します($finish)。
testname = vmm_opts::get_string("test", ,"Name of testcase to run");+vmm_test=テスト名が指定されているかどうかをチェックします。
// If no tests were specified but only one test is known, run it if (testname == "") begin string str; // If there was only one user-defined tests, use it if (one_tst != null) begin tst = one_tst; testname = tst.get_name(); end // If there is only the default test, use it else if (registry.num() == 1) begin void'(registry.first(testname)); tst = registry[testname]; end+vmm_test=テスト名でテスト名が指定されていない時は、"Default"テストがあれば、
"Default"テストをテスト名にします。
// Don't known which test to use! else begin string msg[$]; msg = '{"No test was selected at runtime using +vmm_test=<test>.", "Available tests are:"}; display_known_tests(msg, 1); return; end end"Default"テストがなければ、メッセージを表示し、登録されているテスト名の一覧を表示します。
else begin if (!registry.exists(testname)) begin string msg[$]; string str; $sformat(str, "Unknown test name \"%s\" specified.", testname); msg.push_back(str); display_known_tests(msg, 1); return; end tst = registry[testname]; end+vmm_test=テスト名でテスト名が指定されている場合は、登録されているをチェックします。
登録されていないときは、エラーメッセージを表示し、登録されているテスト名の一覧を表示します。
この時点でテスト名は、tstに設定されています。
そう、ここで前回のVMM 1.1:vmm_testクラスの例題(その1)でみたテストのrunタスクが実行されます。
`vmm_note(log, `vmm_sformatf("Running test \"%s\"...", testname)); tst.run(env); endtask最後にやっと、テスト名を表示し、tst.run(env)を実行します。
そう、ここで前回のVMM 1.1:vmm_testクラスの例題(その1)でみたテストのrunタスクが実行されます。
P.S
本日、27000訪問者を達成できました。
来年の2周年(2009年3月3日)には、30000訪問者達成できればいいなーーー。
本日、27000訪問者を達成できました。
来年の2周年(2009年3月3日)には、30000訪問者達成できればいいなーーー。
検証、Verification、SystemVerilog、VMM、Verification Methodology Manual