Verification Engineerの戯言
ovm_testクラスの例題として、examples/xbus/examples/test_lib.svがあります。
このファイルでは、ovm_testクラスを継承するxbus_demo_base_testクラスを定義しています。
また、このxbus_demo_base_testクラスを継承した次の3つを実際のテストシナリオとしています。
変更し、親クラス(xbus_demo_base_testクラス)のbuild関数を呼んでいます。
こうすることで、テストベンチ側の変更をこのテストシナリオ側で行うことができるのです。便利ですね。
このファイルでは、ovm_testクラスを継承するxbus_demo_base_testクラスを定義しています。
class xbus_demo_base_test extends ovm_test; `ovm_component_utils(xbus_demo_base_test) xbus_demo_sve xbus_demo_sve0; ovm_table_printer printer; function new(string name = "xbus_demo_base_test", ovm_component parent=null); super.new(name,parent); printer = new(); endfunction : new virtual function void build(); super.build(); $cast(xbus_demo_sve0, create_component("xbus_demo_sve", "xbus_demo_sve0")); xbus_demo_sve0.build(); xbus_demo_sve0.xbus0.bus_monitor.set_report_verbosity_level(OVM_FULL); endfunction : build task run(); printer.knobs.depth = 3; ovm_print_topology(printer); #2000; `message(OVM_LOW,("User activated end of simulation")) global_stop_request(); endtask : run endclass : xbus_demo_base_testbuild関数でテスト環境の設定をし、runタスクで#2000後、global_stop_requestを呼んでいます。
また、このxbus_demo_base_testクラスを継承した次の3つを実際のテストシナリオとしています。
class test_read_modify_write extends xbus_demo_base_test; class test_r8_w8_r4_w4 extends xbus_demo_base_test; class test_2m_4s extends xbus_demo_base_test;テストシナリオとしてtest_read_modify_writeをシミュレーション時に指定するには、
+OVM_TESTNAME=test_read_modify_writeを引数にとして指定します。test_read_modify_writeは、次のように定義しています。
class test_read_modify_write extends xbus_demo_base_test; `ovm_component_utils(test_read_modify_write) function new(string name = "test_read_modify_write", ovm_component parent=null); super.new(name,parent); endfunction : new virtual function void build(); // Set the default sequence for the master and slave set_config_string("xbus_demo_sve0.xbus0.masters[0].sequencer", "default_sequence", "read_modify_write_seq"); set_config_string("xbus_demo_sve0.xbus0.slaves[0].sequencer", "default_sequence", "slave_memory_seq"); // Create the sve super.build(); endfunction : build endclass : test_read_modify_writebuild関数を定義しています。build関数では、xbus_demo_sve0.xbus.masters[0].sequencerとxbus_demo_sve0.xbus.slaves[0].sequencerのdefault_sequencerを
変更し、親クラス(xbus_demo_base_testクラス)のbuild関数を呼んでいます。
こうすることで、テストベンチ側の変更をこのテストシナリオ側で行うことができるのです。便利ですね。
test_2m_4sでは、sequencerのdefault_sequenceだけでなく、各クラス内のパラメータの変更をしています。
// Set up slave address map for xbus0 xbus_demo_sve0.xbus0.set_slave_address_map("slaves[0]", 16'h0000, 16'h3fff); xbus_demo_sve0.xbus0.set_slave_address_map("slaves[1]", 16'h4000, 16'h7fff); xbus_demo_sve0.xbus0.set_slave_address_map("slaves[2]", 16'h8000, 16'hBfff); xbus_demo_sve0.xbus0.set_slave_address_map("slaves[3]", 16'hC000, 16'hFfff);
検証、Verification、SystemVerilog、OVM、Open Verification Methodology